如何使颤振音频播放器更加一致

时间:2021-06-18 15:13:02

标签: android flutter dart

我有一个应用程序,它使用节拍器对象来触发音频播放器播放声音。不幸的是,每次播放声音时都会有一些随机延迟,大约 0-100 毫秒。节拍器回调还改变了应用程序上一个图标的颜色,这看起来很稳定,所以我不认为是节拍器不一致(我还使用了节拍器回调中保存的一些日志来查看确定性它是,而且似乎在 几毫秒)。所以我宁愿认为音频抖动来自音频播放器。

我将音频播放器包装在这样的单例类中:

import 'package:audioplayers/audioplayers.dart';

class Audio {
  static final AudioCache playerCache = AudioCache();
  static AudioPlayer audioPlayer = AudioPlayer(mode: PlayerMode.LOW_LATENCY);

  static void init(String file) async {
    playerCache.load(
      file,
    );
  }

  static void play(String file) async {
    audioPlayer = await playerCache.play(
      file,
    );
  }
}

在代码中,我的应用运行 Audio.init('click.mp3');,节拍器回调触发 Audio.play('click.mp3');(这也是我在启用调试时更改图标颜色和保存日志的地方)。

到目前为止,我已经尝试将 mode: PlayerMode.LOW_LATENCY 添加到 playerCache.play,但是这导致根本没有声音播放。我也试过同时使用 Metronome.epoch 和 Metronome.periodic,但这没有区别,就像我说的,节拍器触发器似乎非常一致(如果日志和视觉反馈是可信的,则在 +/- 5ms 内) ).

还需要注意的是,Android 模拟器上的抖动更严重,但在真实设备(使用 --release 选项构建)上仍然非常明显。

我是否对这个 AudioPlayers 包有太多的确定性? 100ms 抖动是它所能做到的最好的吗?有没有其他方法来构建代码以获得更一致的播放?还是我需要找出一个“较低级别”(即 Java/Kotlin/Swift)的实现?

非常感谢您的任何输入:)

0 个答案:

没有答案