【问题标题】:Metronome android app AudioTrack releaseBuffer() error节拍器android应用AudioTrack releaseBuffer()错误
【发布时间】: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,但遇到了延迟。

谢谢!

【问题讨论】:

    标签: java android audio soundpool audiotrack


    【解决方案1】:

    这是指节拍器的准确度。

    当您执行此类操作时,通常必须确保您的节拍由与您的采样率相匹配的一致脉冲控制。也就是说,要获得真正准确的节奏计时,您需要使用与您的采样率相匹配的控制率来控制节拍器的咔嗒声。

    此问题的常见解决方案是创建一个以音频采样率运行的方波。然后,用户会调整此方波的频率以匹配节拍器的 BPM。然后,只要这个方波产生 1 或 -1,您就可以使用它来触发您的音频样本。

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

    http://www.javaperformancetuning.com/articles/soundtimer.shtml

    【讨论】:

    • 感谢您的信息,但我仍然不确定 releaseBuffer() 错误。它导致我的应用程序冻结。
    • “电脑声卡上的音频时钟”男人,他要求安卓:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多