小编Fab*_* B.的帖子

在JVM中长时间记录音频时出现突然的延迟

我正在实现一个使用JDK Version 8 Update 201实时(或至少尽可能接近实时)记录和分析音频的应用程序。在执行模拟该应用程序典型用例的测试时,我注意到在连续录制了几个小时的音频后,突然延迟了一到两秒钟。到目前为止,还没有明显的延迟。只是在这个关键的记录点持续了几个小时之后才开始出现这种延迟。

到目前为止我尝试过的

为了检查我用于计时音频样本的代码是否错误,我注释掉了与计时有关的所有内容。这基本上使我离开了这个更新循环,该循环会在音频样本准备好后立即获取它们(请注意:Kotlin代码):

while (!isInterrupted) {
    val audioData = read(sampleSize, false)
    listener.audioFrameCaptured(audioData)
}
Run Code Online (Sandbox Code Playgroud)

这是我的读取方法:

fun read(samples: Int, buffered: Boolean = true): AudioData {
    //Allocate a byte array in which the read audio samples will be stored.
    val bytesToRead = samples * format.frameSize
    val data = ByteArray(bytesToRead)

    //Calculate the maximum amount of bytes to read during each iteration.
    val bufferSize = (line.bufferSize / BUFFER_SIZE_DIVIDEND / format.frameSize).roundToInt() * format.frameSize
    val maxBytesPerCycle = if (buffered) bufferSize else bytesToRead

    //Read …
Run Code Online (Sandbox Code Playgroud)

java audio-recording kotlin javax.sound.sampled

16
推荐指数
1
解决办法
773
查看次数