在我的应用程序中,用户录制自己在背景音乐中唱歌的声音,然后同时播放录制的音频和该背景音乐。我的音频系统使用 expo-av。问题在于,在播放阶段,音频经常不同步,因为 expo 仅真正支持异步音频。有人对如何从高层次解决这个问题有什么建议吗?
我的一些想法:
可能为时已晚,但我对这个问题有一些建议。尽管我的解决方案并不完美,并且我仍在寻找答案,但这是我尝试过的:
通常,你可以写:
await sound1.playAsync();
await sound2.playAsync();
但是,await 语句可能会导致这些调用按顺序运行,这可能会导致它们不同步。相反,您可以删除await 语句以允许两行几乎同时执行:
sound1.playAsync();
sound2.playAsync();
这种方法确保两种声音同时开始播放过程,尽管它们仍然需要一些时间才能开始。
此外,您应该在播放声音之前预加载它们:
const sound = new Audio.Sound();
await sound.loadAsync(require("path/to/sound/.mp3"));
确保声音已加载,然后无需等待即可播放:
sound1.playAsync();
sound2.playAsync();
另一种尝试方法是使用 Promise.all:
Promise.all([sound1.playAsync(), sound2.playAsync()]);
这有助于确保两种声音尽可能同时播放。
我仍在寻找更好的解决方案,但这些提示可能会有所帮助:播放声音时避免等待并确保它们已预加载。希望这有帮助!