android - 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 通道, 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]
感谢您的见解。
解决方案
通过将 SoundPool 的构造函数中的 streamType 更改为 StreamType.alarm 来解决它
pool = Soundpool(streamType: StreamType.alarm);
推荐阅读
- r - 如何更改axis.line.y的限制
- c++ - 在将数字转换为三进制基数时收集余数(C++)
- c++ - 如何使用 boost::spirit 解析两个字符串?
- kubernetes - K8S:使用 Istio 路由返回 404
- php - FOSUserBundle 不断将密码保存为明文
- python-3.x - Python 3 脚本占用过多内存
- ios - 无法将图像从 Firebase 检索到 TableViewCell
- events - AWS SNS — 主题应该有多通用,我们应该何时重用/创建主题?
- amazon-web-services - Aws 数据传输成本命令行(或 Web)
- sql - 在 SQL Server 中获取重叠时间戳的不同行