跳转至正文

使用 flutter_soloud 播放或流式传输声音与音乐

了解如何在你的 Flutter 应用中使用 flutter_soloud package 播放或流式传输音频。

本实用教程演示如何将 flutter_soloud package 集成到你的 Flutter 应用中,以低延迟播放音效和背景音乐。要开始使用该 package,请按以下步骤操作:

1. 添加 package 依赖

#

要将 package:flutter_soloud 添加为依赖,请使用 flutter pub add

flutter pub add flutter_soloud

2. 初始化 SoLoud

#

在播放任何音频之前,你需要初始化 SoLoud 实例。你还可以配置采样率、缓冲区大小和声道数等播放设置。

dart
import 'package:flutter_soloud/flutter_soloud.dart';

// Initialize with default settings.
await SoLoud.instance.init();

// Or configure with custom settings.
await SoLoud.instance.init(
  sampleRate: 44100,
  bufferSize: 2048,
  channels: Channels.stereo,
);

3. 加载音频

#

flutter_soloud package 支持 MP3、WAV、OGG、FLAC 等多种音频格式。你可以从不同来源加载音频。

从本地文件:

dart
final sound = await SoLoud.instance.loadFile('path/to/sound.mp3');

从应用资源:

dart
final sound = await SoLoud.instance.loadAsset('assets/sound.mp3');

从网络 URL:

dart
final sound = await SoLoud.instance.loadUrl(
  'https://example.com/sound.mp3',
  mode: LoadMode.memory,
);

从内存中的字节:

dart
// TODO: Replace with your actual audio data.
final soundBytes = Uint8List.fromList([]);

final sound = await SoLoud.instance.loadMem(
  'reference_name.mp3',
  soundBytes,
  mode: LoadMode.memory,
);

4. 播放音频

#

音频加载完成后,你可以使用 SoLoud.instance.play 播放。你还可以配置无缝循环。

dart
// Play the sound.
var handle = await SoLoud.instance.play(sound);

// Play with gapless looping.
handle = await SoLoud.instance.play(
  sound,
  looping: true,
  loopingStartAt: Duration(seconds: 1),
);

play 方法返回一个 handle,用于引用正在播放的该声音实例。你可以使用此 handle 控制播放。

5. 控制播放

#

使用 play 返回的 handle,你可以执行暂停或恢复播放等多种操作:

dart
// Toggle pause state.
SoLoud.instance.pauseSwitch(handle);

跳转到指定时间戳:

dart
SoLoud.instance.seek(handle, Duration(seconds: 5));

设置播放速度:

dart
// Play twice as fast.
SoLoud.instance.setRelativePlaySpeed(handle, 2.0);

调整播放音量:

dart
// Set playback to 50% volume.
SoLoud.instance.setVolume(handle, 0.5);

淡入淡出音量:

dart
SoLoud.instance.fadeVolume(
  handle,
  0.0, // The volume to fade to.
  Duration(seconds: 2), // The duration of the fade.
);

停止播放:

dart
await SoLoud.instance.stop(handle);

6. 释放声音源

#

当你不再使用某个声音源时,记得释放它以释放资源。

dart
await SoLoud.instance.disposeSource(sound);

7. [可选] 流式传输音频

#

flutter_soloud package 还支持实时流式传输音频数据。

初始化并配置缓冲区流:

dart
final stream = SoLoud.instance.setBufferStream(
  bufferingType: BufferingType.released,
  sampleRate: 24000,
  channels: Channels.mono,
  format: BufferType.s16le, // pcm16bits
);

播放流:

dart
final handle = await SoLoud.instance.play(stream);

当你的应用收到音频数据时,将其添加到流中:

dart
// TODO: Replace with your actual audio data.
final audioChunk = Uint8List.fromList([]);

SoLoud.instance.addAudioDataStream(
  stream,
  audioChunk,
);

当你完成音频流时,将其标记为已完成:

dart
SoLoud.instance.setDataIsEnded(stream);

更多信息

#

更多详细信息和示例,请访问 pub.dev 上的 flutter_soloud package,或观看 flutter_soloud Package of the Week 视频。