【发布时间】:2020-04-04 09:57:03
【问题描述】:
我在 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 个通道, s16, 768 kb/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 在未来播放之一期间丢失。玩家可以快速点击,但即使我走慢,它仍然失败。
SoundPool 是这样实例化的:
class NoteService {
final Soundpool _pool = Soundpool(streamType: StreamType.notification);
[snip class definition]
感谢您的洞察力。
【问题讨论】: