Не в состоянии прочитать данные из микрофона - PullRequest
0 голосов
/ 29 августа 2011

Я пытаюсь прочитать данные из 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 голосов
/ 30 августа 2011

print (pcm_in) покажет вам фактические данные. вам нужно получить данные pcm_in в pcm в цикле, пока вы не остановите запись.

Это означает, что ваша переменная запись является логическим правом. и вы сделаете это ложным в другом методе. поэтому, пока вы не установите его в ложное состояние, операция Recorder.read (pcm_in, 0, pcm_in.length) будет получать данные с вашего микрофона и помещать их в pcm_in (поэтому вы должны быть уверены, что размер pcm_in равен pcm). bytes_read будет размером байтов, прочитанных в этой операции. так что вы можете скопировать байты pcm_in в pcm в цикле, который может считывать все данные pcm_in.

например:

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 к нему, а не переопределяете. Я думаю, что это то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...