Java Metronome android应用程序AudioTrack releaseBuffer()错误

Java Metronome android应用程序AudioTrack releaseBuffer()错误,java,android,audio,soundpool,audiotrack,Java,Android,Audio,Soundpool,Audiotrack,我正在尝试为Android创建一个听起来像节拍器的应用程序。现在我有一个我创建的音轨,并按play进行初始化。然后我将PCM字节写入缓冲区,并使用AudioTrack.writeSound()写入缓冲区。 首先,我写入缓冲区 for(int i=0;i<this.tick;i++) { soundTickArray[i] = tick[i]; } for(int i=0;i<silence;i++)

我正在尝试为Android创建一个听起来像节拍器的应用程序。现在我有一个我创建的音轨,并按play进行初始化。然后我将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;
    }
在while循环中,直到它在另一个线程中终止

问题是我一直在犯这个错误

releaseBuffer()磁道0xb491b280因先前运行不足而禁用,正在重新启动

节拍器不会停止

有人对为什么会发生这种情况或如何解决它有什么建议吗

或者有没有其他建议可以让节拍器的节拍保持一致,既不滞后又准确?我试图使用SoundPool,但遇到了延迟


谢谢

这是指节拍器的准确性

当你做这类事情时,你通常必须确保你的心跳是由一个与你的采样率相匹配的一致的脉冲控制的。也就是说,要获得真正准确的节奏计时,您需要使用与采样率匹配的控制率来控制节拍器的点击

这个问题的一个常见解决方案是创建一个以音频采样率运行的方波。该方波的频率然后由用户调整,以匹配节拍器的BPM。然后,每当这个方波产生1或-1时,你就用它来触发你的音频样本


不过,最好的解决办法是访问计算机声卡上的音频时钟。看看这个网页,它更详细地解释了这一点


谢谢您提供的信息,但我仍然不能确定releaseBuffer()错误。这导致我的应用程序冻结。“电脑声卡上的音频时钟”伙计,他要求安卓:/
        do {
            audioGenerator.writeSound(soundTickArray);
            audioGenerator.writeSound(silenceSoundArray);
        } while(running);