【问题标题】:Flutter SoundPool play sound issueFlutter SoundPool 播放声音问题
【发布时间】: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]

感谢您的洞察力。

【问题讨论】:

    标签: android flutter soundpool


    【解决方案1】:

    通过将 SoundPool 的构造函数中的 streamType 更改为 StreamType.alarm 解决了这个问题

    pool = Soundpool(streamType: StreamType.alarm);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      • 2018-11-11
      相关资源
      最近更新 更多