Android 如何将音频存储到缓冲区,然后逐字节读取

Android 如何将音频存储到缓冲区,然后逐字节读取,android,Android,我可以通过android的MediaRecord制作wav文件…但我有兴趣将音频数据放入缓冲区并逐字节读取…我必须通过TCP通道逐字节发送音频块…有人能帮我吗…提前谢谢 奥地利的szaman您可以使用音频记录逐字节读取音频数据,下面是一些示例代码 // calculate the minimum buffer int minBuffer = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT); // i

我可以通过android的MediaRecord制作wav文件…但我有兴趣将音频数据放入缓冲区并逐字节读取…我必须通过TCP通道逐字节发送音频块…有人能帮我吗…提前谢谢


奥地利的szaman

您可以使用
音频记录
逐字节读取音频数据,下面是一些示例代码

// calculate the minimum buffer
int minBuffer = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT);

// initialise audio recorder and start recording
AudioRecord mRec = new AudioRecord(AUDIO_SOURCE, SAMPLE_RATE, 
                CHANNEL_CONFIG, AUDIO_FORMAT, 
                minBuffer);
mRec.startRecording();
byte[] pktBuf = new byte[pktSizeByte];
boolean ok;
// now you can start reading the bytes from the AudioRecord
while (!finished) {
    // fill the pktBuf
    readFully(pktBuf, 0, pktBuf.length);
    // make a copy
    byte[] pkt = Arrays.copyOf(pktBuf, pktBuf.length);
    // do anything with the byte[] ...
}
由于对
read()
的单个调用可能无法获得足够的数据来填充
字节[]pktBuf
,因此我们可能需要多次读取以填充缓冲区。在本例中,我使用了一个辅助函数“readfull”来确保缓冲区被填满。根据您希望对代码执行的操作,可以使用不同的策略

/* fill the byte[] with recorded audio data */
private void readFully(byte[] data, int off, int length) {
    int read;
    while (length > 0) {
        read = mRec.read(data, off, length);
        length -= read;
        off += read;
    }
}
完成后,记得调用
mRec.stop()
停止录音机。希望有帮助