节拍器android应用AudioTrack releaseBuffer()错误
Posted
技术标签:
【中文标题】节拍器android应用AudioTrack releaseBuffer()错误【英文标题】:Metronome android app AudioTrack releaseBuffer() error 【发布时间】:2015-05-15 01:24:11 【问题描述】:我正在尝试为 android 创建一个发声节拍器应用程序。现在,我创建了一个 AudioTrack,然后按播放进行初始化。然后我将 PCM 字节写入缓冲区并使用 AudioTrack.writeSound() 写入缓冲区。 首先我写入缓冲区
for(int i=0;i<this.tick;i++)
soundTickArray[i] = tick[i];
for(int i=0;i<silence;i++)
silenceSoundArray[i] = 0;
然后,像这样在循环中按顺序转换为 PCM 后,我写入 audioTrack。
do
audioGenerator.writeSound(soundTickArray);
audioGenerator.writeSound(silenceSoundArray);
while(running);
在一个while循环中,直到它在另一个线程中终止。
问题是我不断收到此错误。
releaseBuffer() track 0xb491b280 由于先前的欠载而被禁用,正在重新启动
节拍器不会停止。
有没有人对为什么会发生这种情况或如何解决它有任何建议。
或者有任何其他建议可以运行一致的节拍器节拍,不会滞后且精确?我尝试使用 SoundPool,但遇到了延迟。
谢谢!
【问题讨论】:
【参考方案1】:这是指节拍器的准确度。
当您执行此类操作时,通常必须确保您的节拍由与您的采样率相匹配的一致脉冲控制。也就是说,要获得真正准确的节奏计时,您需要使用与您的采样率相匹配的控制率来控制节拍器的咔嗒声。
此问题的常见解决方案是创建一个以音频采样率运行的方波。然后,用户会调整此方波的频率以匹配节拍器的 BPM。然后,只要这个方波产生 1 或 -1,您就可以使用它来触发您的音频样本。
不过,最好的解决方案是访问计算机声卡上的音频时钟。看看这个网页,它更详细地解释了它;
http://www.javaperformancetuning.com/articles/soundtimer.shtml
【讨论】:
感谢您的信息,但我仍然不确定 releaseBuffer() 错误。它导致我的应用程序冻结。 “电脑声卡上的音频时钟”男人,他要求安卓:/以上是关于节拍器android应用AudioTrack releaseBuffer()错误的主要内容,如果未能解决你的问题,请参考以下文章
Android 音频系统:从 AudioTrack 到 AudioFlinger
Android 音频系统:从 AudioTrack 到 AudioFlinger
Android 音频系统:从 AudioTrack 到 AudioFlinger