只是音频:如何避免跳过样本在Android上的第一次播放?



应用程序加载几个短(4-5秒长)的音频文件在启动和播放它们在某些事件。除了在Android上有一个小细节之外,它基本上可以工作了:

第一次播放音频文件时,听起来好像在文件的几秒钟后开始播放,而不是在开始时。以下任何播放文件的尝试都能正常工作。这只是第一次播放,在文件中开始得有点晚。

现在的问题是,如何才能解决这个问题?

这是在应用程序初始化期间加载文件的方式:

late AudioPlayer _someAudio;
init() async {
AudioLoadConfiguration loadCfg = AudioLoadConfiguration(
androidLoadControl: AndroidLoadControl(
prioritizeTimeOverSizeThresholds: true,
minBufferDuration: const Duration(seconds: 10),
maxBufferDuration: const Duration(seconds: 20),
bufferForPlaybackDuration: const Duration(seconds: 10),
),
);
_someAudio = AudioPlayer(audioLoadConfiguration: loadCfg);
await _someAudio.setAsset('assets/audio/someeffect.mp3');
}

注1:AudioLoadConfiguration在这里似乎没有任何影响。为了解决这个问题,我们刚刚添加了它。

文件是这样播放的:

void playSomeEffect() async {
await _someAudio.seek(Duration.zero);
await _someAudio.play();
}

注2:这似乎是一个Android问题(iOS工作如预期)。这在三星和摩托罗拉手机上都有,其他设备还没有测试过。

你有任何想法如何确保第一次播放开始在开始?任何建议都很感激。谢谢你。

我有一个90ms长的音频文件,这个问题非常令人恼火。我发现每个AudioPlayer只发生一次类。第一次播放后,播放正常。

这就是解决方案。

// before your playing !
Future<void> _initPlayers() async {
await _yourAudioPlayer.setAsset('assets/empty.wav');
await _yourAudioPlayer.load();
await _yourAudioPlayer.play();
await _yourAudioPlayer.stop();
// do for your every player.
}

从任何网站下载空的wav文件,并播放空的wav文件之前,你的球员进入行动。Stop()用于停止空源。

这很简单,对我来说很有效。

相关内容

  • 没有找到相关文章

最新更新