出于学习目的,我正在尝试使用 React Native 创建一个节拍器应用程序。我以预定的间隔一遍又一遍地播放一个简短的声音片段(20ms)。我计划让我的节拍器达到 300 bpm,这意味着我想以最快的速度每 200 毫秒播放一次声音。计时器按预期工作,声音播放:
import {Audio} from 'expo-av';
const sound = new Audio.Sound();
sound.loadAsync(require('./assets/sound.wav'));
async function play() {
await sound.replayAsync().then(r => {
console.log(r.durationMillis);
});
}
使用来自计时器的回调调用 Play。
声音在网络浏览器中完美播放,但是当我在 Android 和 iPhone 上尝试 Expo 应用程序时,它会滞后,跳过节拍,并且有些节拍声音低沉。首先,我认为 Expo 应用程序可能会导致这种情况,所以我尝试为我的 Android 应用程序构建它,但它仍然表现不佳。
console.log 打印 20.25 并且我有一个计时器来计算偏移量。就像我说过的,它在 PC 网络浏览器上完美运行,但手机无法处理 300BPM。我开始在手机上以大约 200+ BPM 的速度获得奇怪的声音伪影。
我对这样的应用程序使用了错误的方法吗?有谁知道为什么手机会这样?