应用程序加载几个短(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()用于停止空源。
这很简单,对我来说很有效。