Flutter SoundPool播放声音问题



我很难在Flutter上用SoundPool播放声音。我已经阅读/在谷歌上搜索了可怕的消息"AUDIO_OUTPUT_FLAG_FAST被服务器拒绝;frameCount 0->48000">

到目前为止,我已经采取了以下步骤:

  • 模拟器中运行的图像是Pixel 3A
  • 文件是wav,大小为90K,每个文件持续1秒,采样48K(ffmprobe说:持续时间:00:00:01.00,比特率:768 kb/s流#0:0:音频:pcm_s16le([1][0][0][0]/0x0001(,48000 Hz,1个通道,s16678kb/s(

  • 我已经预先加载,然后在应用程序启动期间使用Asset,下面的代码(在foreach中(:

var content = await _bundle.load(notePath);
sounds[notePath] = content;
newNote.soundId = await _pool.load(content);
new Timer(const Duration(milliseconds: (2000)), () => print("loaded $notePath"));

我放了一个持续时间,否则一些(随机(声音没有加载(我有72个声音要加载(。当我需要播放声音时(点击屏幕(,我只需进行

_pool.stop(1);
_pool.play(noteToPlay.soundId);

这会产生一些噼啪声(一个人提议总是播放0音量的声音来避免这种情况,但这会耗尽电池电量(。

现在的问题是:该消息显示在控制台中,但如果没有以下问题,我可以接受它:随机地,一些声音不被播放,敲击被简单地忽略。该应用程序从未崩溃。如果我删除了soundPool.play调用,那么一切都很好(找到了相应的文件,处理了点击…(,所以我认为soundPool在Future的一次播放中丢失了。玩家可以很快点击,但即使我速度很慢,它仍然会失败。

SoundPool是这样安装的:

class NoteService {
final Soundpool _pool = Soundpool(streamType: StreamType.notification);
[snip class definition]

感谢您的真知灼见。

通过将SoundPool构造函数中的streamType更改为streamType.alarm 来解决此问题

pool = Soundpool(streamType: StreamType.alarm);

最新更新