节拍器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

调节 Android AudioTrack 播放速度

Android:使用 AudioTrack 和 Socket 手动有效地流式传输音频

Android:AudioTrack 在开始时会发出咔哒声