无法从MIC读取数据

时间:2011-08-29 15:08:51

标签: android audio

我正在尝试从MIC读取数据并处理它并将其存储在文件中。但是我没有从MIC获得任何数据,缓冲区全是零。

int MIN_BUF = AudioRecord.getMinBufferSize(8000,
        AudioFormat.CHANNEL_CONFIGURATION_MONO,
        AudioFormat.ENCODING_PCM_16BIT);
AudioRecord recorder = new AudioRecord(
        MediaRecorder.AudioSource.MIC, 8000,
        AudioFormat.CHANNEL_CONFIGURATION_MONO,
        AudioFormat.ENCODING_PCM_16BIT, MIN_BUF);
byte[] pcm_in = new byte[320];

recorder.startRecording();

while(record)
{
    int bytes_read = recorder.read(pcm_in, 0, pcm_in.length);

    switch(bytes_read)
    {
    case AudioRecord.ERROR_INVALID_OPERATION:
    case AudioRecord.ERROR_BAD_VALUE:                   
        Log.i("Microphone", "Error in reading the data");
        break;
    default:
        print(pcm_in);
        break;
    }
}

recorder.stop();
recorder.release();

但是在打印(pcm)中,当我逐字节打印时,我得到全零。有些帖子在stackoverflow中有类似的问题,但我的问题没有解决。

请帮我解决这个问题。

谢谢&问候,
SSuman185

1 个答案:

答案 0 :(得分:0)

print(pcm_in)将显示实际数据。你需要将pcm_in数据循环到pcm直到你停止录制。

意味着您的变量记录是一个布尔权限。你会用另一种方法把它弄错。所以直到你做错了记录.read(pcm_in,0,pcm_in.length)操作将从你的麦克风获取数据并将其放入pcm_in(所以你需要确保pcm_in的大小等于pcm)。 bytes_read将是此操作中读取的字节大小。所以你可以在一个可以读取整个pcm_in数据的循环中将pcm_in字节复制到pcm。

例如:

bytes_read = recorder.read(pcm_in, 0, pcm_in.length);

for(int i=0; i<bytes_read ;i++){
        pcm[i] = pcm_in[i];
 }

但这是一种奇怪的用法。我认为你的pcm应该与你需要加载的文件一样大。并确保你将pcm_in添加到它,而不是覆盖。我想这就是你想要的。