gpt4 book ai didi

android - 如何在各种Android设备和OS版本之间提供一致的音频排序时序?

转载 作者:行者123 更新时间:2023-12-03 00:53:41 30 4
gpt4 key购买 nike

我创建了一个节拍器类型的应用程序,在摆锤上指定了750毫秒的摆幅间隔,并在最大摆幅弧上播放单个音频文件...重复摆锤的摆动并无限期地播放声音。但是,我发现代码的实际执行时间因设备而异,甚至在单个设备上也有所不同。我的意图是使摆锤以每分钟80个节拍的速度摆动,并以每个“节拍”播放音频文件。我调整了750毫秒设置,以适应播放音频文件所需的时间。这将毫秒设置从750降低到了大约680。我使用各种设备进行了测试,发现在我使用各种Android设备进行测试时,一分钟运行节拍器的结果在计时上的表现截然不同。元素(以毫秒为单位)。

我正在使用Android SoundPool访问.wav文件来播放声音。

我发现了很多有关Soundpool时序问题和担忧的引用资料,但还没有找到一种可行且可靠的解决方案来为此类应用程序提供一致的时序。

根据指定的延迟,摆的摆幅似乎是相当一致的,因此我相信这种变化是由于在执行播放音频的SoundPool代码执行过程中时序的变化引起的。是否存在可靠的方法来执行代码以在Android上以一致且“精确”的时间间隔播放声音?

最佳答案

一种实现方法是处理程序。这样,无论剪辑实际播放多长时间,您都可以在同一时间启动音频剪辑。您不需要SoundPool,只需SoundPlayer。

处理程序使您可以计划在将来的某个时间将消息传递到代码中。由于使用SoundPlayer播放声音是异步的,因此您可以使用这种简单的机制定期播放声音。

这是一些代码,说明它如何工作。

    handler = new Handler() {

/* (non-Javadoc)
* @see android.os.Handler#handleMessage(android.os.Message)
*/
@Override
public void handleMessage(Message msg) {
if (msg.what == NEXT_SOUND_MSG) {
playNextSound()
}
}
};

// Set up media player for sounds
player = new SoundPlayer(context);
player.start();

private void playNextSound() {
if (mRunning) {

// Play the sound
int iSoundResId = item.getSoundResId();
if (iSoundResId != -1) {
playSound(iSoundResId);
}

// schedule a message to advance to next item after duration
Message msg = handler.obtainMessage(NEXT_SOUND_MSG);
handler.sendMessageDelayed(msg, interval);
}
}

关于android - 如何在各种Android设备和OS版本之间提供一致的音频排序时序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17964378/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com