在实时音频应用程序中使用Java Queues

时间:2016-02-03 12:26:15

标签: android audio real-time mediacodec audiorecord

我在android中编写音频应用程序,使用AudioRecord录制音频,目前我将录制的音频保存为wav文件。现在,我想对此音频数据进行编码,以便以压缩格式保存。对于压缩,我使用MediaCodec将原始位压缩为AAC(使用ADST容器)。现在,我首先将记录的数据保存到.wav文件中,然后将整个文件读入已实现的编码器类并对其进行编码。我想跳过第一步将文件保存为.wav的步骤。所以,我想要做的是实现某种队列,用于在我的类中存储记录的样本,记录音频并继续从我的编码器类轮询该队列。问题是我应该使用SDK提供的Queue还是应该使用数组实现自己的队列?我在这里可能遇到的问题是使用SDK提供的Queue可能会导致可能的开销,并且可能导致在录制过程中丢失一些样本作为我正在读取音频数据并保存以供日后使用的方法use位于synchronized块中:

synchronized (lock) {
        while (mIsRecording) {
            // reading the audio buffer from the audio recording object
            mAudioRecord.read(mBuffer, 0, mBufferSize / SHORT_SIZE);

            // adding the audio buffer to the recording data ...
            System.arraycopy(mBuffer, 0, mRecAudioData, mRecAudioDataIndex, mBuffer.length);

            // increment the starting index for next copy..
            mRecAudioDataIndex += mBuffer.length;

            processBuffer(mBuffer);
        }
    }

现在,我将音频数据保存为数组,以便稍后将其保存到wav文件中。如上所述,我现在想要将读取数据(mBuffer)排入队列并在编码器中使用它。我该如何实现队列?有什么建议吗?

0 个答案:

没有答案