AudioRecord – archivo PCM de escritura

Estoy tratando de grabar algo de voz utilizando la clase AudioRecord y luego escribirla para que salga al archivo .pcm. Quiero que mi programa continúe grabando hasta que se presione el botón de parada. Desafortunadamente, no importa cuánto tiempo estoy grabando, el tamaño del archivo de salida es siempre de 3528 bytes y dura unos 20 ms. También según Toolsoft Audio Tools, las propiedades de ese archivo son: 44100Hz, 16 bits, estéreo, incluso si estoy usando mono con frecuencia de muestreo completamente diferente.

Thread recordingThread; boolean isRecording = false; int audioSource = AudioSource.MIC; int sampleRateInHz = 44100; int channelConfig = AudioFormat.CHANNEL_IN_MONO; int audioFormat = AudioFormat.ENCODING_PCM_16BIT; int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat); byte Data[] = new byte[bufferSizeInBytes]; AudioRecord audioRecorder = new AudioRecord(audioSource, sampleRateInHz, channelConfig, audioFormat, bufferSizeInBytes); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public void startRecording(View arg0) { audioRecorder.startRecording(); isRecording = true; recordingThread = new Thread(new Runnable() { public void run() { String filepath = Environment.getExternalStorageDirectory().getPath(); FileOutputStream os = null; try { os = new FileOutputStream(filepath+"/record.pcm"); } catch (FileNotFoundException e) { e.printStackTrace(); } while(isRecording) { audioRecorder.read(Data, 0, Data.length); try { os.write(Data, 0, bufferSizeInBytes); } catch (IOException e) { e.printStackTrace(); } try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } }); recordingThread.start(); } public void stopRecording(View arg0) { if (null != audioRecorder) { isRecording = false; audioRecorder.stop(); audioRecorder.release(); audioRecorder = null; recordingThread = null; } } 

¿Puedo pedirle que me diga lo que está mal? Espero que la respuesta no sea 'todo' 🙂

Change your sample rate to 8000 , porque en el emulador no cant test with 44100 sample rate.

Utilice la fuente AudioRecord como se muestra para jugar en el emulador

 private static final int RECORDER_SAMPLERATE = 8000; private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO; private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT; AudioRecord audio_record = new AudioRecord(MediaRecorder.AudioSource.MIC, RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, BufferElements2Rec * BytesPerElement); int BufferElements2Play = 1024; // want to play 2048 (2K) since 2 bytes we use only 1024 int BytesPerElement = 2; // 2 bytes in 16bit format 

Si no se trabaja, entonces ve a este blog. Funcionará bien para grabar y almacenar los datos en el archivo .pcm .

 try { os.write(Data, 0, bufferSizeInBytes); } catch (IOException e) { e.printStackTrace(); } try { os.close(); } catch (IOException e) { e.printStackTrace(); } 

Este es el problema. Usted está cerrando el FileOutputStream (os.close ()) después de sólo una sola escritura. Moverlo fuera del bucle while:

 while(isRecording) { audioRecorder.read(Data, 0, Data.length); try { os.write(Data, 0, bufferSizeInBytes); } catch (IOException e) { e.printStackTrace(); } } try { os.close(); } catch (IOException e) { e.printStackTrace(); } } 
  • AudioRecord: ¿Desbordamiento del búfer?
  • Codificador AAC de Android MediaCodec
  • Grabación de AudioRecorder mientras otro MediaRecorder está grabando
  • Escritura de datos grabados PCM en un archivo .wav (java android)
  • Android: valor recomendado de bufferSizeInBytes en AudioRecord
  • ¿Puede Android Emulator recoger audio?
  • ¿Cómo ajustar la frecuencia de muestreo de audio superior a 44.1kHz en la plataforma linux / android?
  • Android AudioRecord y MediaRecorder
  • Grabación .Wav con Android AudioRecorder
  • PCM -> AAC (Encoder) -> PCM (Decodificador) en tiempo real con optimización correcta
  • Emitir codificación y decodificación de una grabación de audio al formato G711 (PCMU - uLaw)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.