Necesito una grabación de audio simple y un ejemplo de reproducción usando AudioRecorder en android. Intenté con MediaRecorder, funciona bien.Necesito un ejemplo simple para la grabación de audio
11
A
Respuesta
4
¿Quiere decir AudioRecord
? Buscar p. "AudioRecord.OnRecordPositionUpdateListener" utilizando Google Code Search. Por cierto, AudioRecord
hace la grabación, no se reproduce.
Consulte también:
2
aquí es el código de ejemplo para grabar audio.
private Runnable recordRunnable = new Runnable() {
@Override
public void run() {
byte[] audiodata = new byte[mBufferSizeInBytes];
int readsize = 0;
Log.d(TAG, "start to record");
// start the audio recording
try {
mAudioRecord.startRecording();
} catch (IllegalStateException ex) {
ex.printStackTrace();
}
// in the loop to read data from audio and save it to file.
while (mInRecording == true) {
readsize = mAudioRecord.read(audiodata, 0, mBufferSizeInBytes);
if (AudioRecord.ERROR_INVALID_OPERATION != readsize
&& mFos != null) {
try {
mFos.write(audiodata);
} catch (IOException e) {
e.printStackTrace();
}
}
}
// stop recording
try {
mAudioRecord.stop();
} catch (IllegalStateException ex) {
ex.printStackTrace();
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mRecordLogTextView.append("\n Audio finishes recording");
}
});
// close the file
try {
if (mFos != null)
mFos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
};
luego necesita dos botones (o uno actúa como función diferente en el tiempo diferente) para iniciar y detener el hilo de grabación.
mRecordStartButton = (Button) rootView
.findViewById(R.id.audio_record_start);
mRecordStartButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// initialize the audio source
int recordChannel = getChoosedSampleChannelForRecord();
int recordFrequency = getChoosedSampleFrequencyForRecord();
int recordBits = getChoosedSampleBitsForRecord();
Log.d(TAG, "recordBits = " + recordBits);
mRecordChannel = getChoosedSampleChannelForSave();
mRecordBits = getChoosedSampleBitsForSave();
mRecordFrequency = recordFrequency;
// set up the audio source : get the buffer size for audio
// record.
int minBufferSizeInBytes = AudioRecord.getMinBufferSize(
recordFrequency, recordChannel, recordBits);
if(AudioRecord.ERROR_BAD_VALUE == minBufferSizeInBytes){
mRecordLogTextView.setText("Configuration Error");
return;
}
int bufferSizeInBytes = minBufferSizeInBytes * 4;
// create AudioRecord object
mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
recordFrequency, recordChannel, recordBits,
bufferSizeInBytes);
// calculate the buffer size used in the file operation.
mBufferSizeInBytes = minBufferSizeInBytes * 2;
// reset the save file setup
String rawFilePath = WaveFileWrapper
.getRawFilePath(RAW_PCM_FILE_NAME);
try {
File file = new File(rawFilePath);
if (file.exists()) {
file.delete();
}
mFos = new FileOutputStream(file);
} catch (Exception e) {
e.printStackTrace();
}
if (mInRecording == false) {
mRecordThread = new Thread(recordRunnable);
mRecordThread.setName("Demo.AudioRecord");
mRecordThread.start();
mRecordLogTextView.setText(" Audio starts recording");
mInRecording = true;
// enable the stop button
mRecordStopButton.setEnabled(true);
// disable the start button
mRecordStartButton.setEnabled(false);
}
// show the log info
String audioInfo = " Audio Information : \n"
+ " sample rate = " + mRecordFrequency + "\n"
+ " channel = " + mRecordChannel + "\n"
+ " sample byte = " + mRecordBits;
mRecordLogTextView.setText(audioInfo);
}
});
mRecordStopButton = (Button) rootView
.findViewById(R.id.audio_record_stop);
mRecordStopButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mInRecording == false) {
Log.d(TAG, "current NOT in Record");
} else {
// stop recording
if (mRecordThread != null) {
Log.d(TAG, "mRecordThread is not null");
mInRecording = false;
Log.d(TAG, "set mInRecording to false");
try {
mRecordThread.join(TIMEOUT_FOR_RECORD_THREAD_JOIN);
Log.d(TAG, "record thread joins here");
} catch (InterruptedException e) {
e.printStackTrace();
}
mRecordThread = null;
// re-enable the start button
mRecordStartButton.setEnabled(true);
// disable the start button
mRecordStopButton.setEnabled(false);
} else {
Log.d(TAG, "mRecordThread is null");
}
}
}
});
luego puede guardar los datos pcm en un archivo WAV.
Cuestiones relacionadas
- 1. Grabación de audio html5
- 2. Grabación de audio desde la página web
- 3. Grabación de audio con OpenAL
- 4. Frecuencia de muestreo para la grabación de audio del iPhone
- 5. ¿Funciona ahora la getUserMedia de HTML5 para grabación de audio?
- 6. Grabación de audio en el navegador
- 7. Grabación y reproducción de audio en Silverlight
- 8. Grabación de audio con HTML5 y Javascript
- 9. Qt: Ejemplo simple para Quazip
- 10. Android La grabación y la reproducción de audio están corruptas
- 11. ios unidad de audio remoteIO reproducción durante la grabación
- 12. Pausa y reanuda la grabación de audio en Android
- 13. Mobile Safari Grabación de audio desde el micrófono
- 14. Aplicación para iPhone: grabación de audio en mp3
- 15. Un ejemplo simple para implementar OAuth2.0
- 16. Ejemplo para un simple glosario LaTeX
- 17. Encontrar la longitud de una grabación de audio en iPhone
- 18. Mejore la calidad de grabación de audio Android?
- 19. ¿Cómo verificar la intensidad (intensidad) del audio durante la grabación?
- 20. Necesito un motor de reglas simple, creo?
- 21. Necesito un ejemplo para usar Junit en Intellij Idea
- 22. ejemplo simple para Erlang memoization
- 23. Buscando un ejemplo de seguridad simple muelle
- 24. WPF - animación simple ejemplo simple
- 25. php curl: Necesito una simple solicitud de entrada y recuperación de la página de ejemplo
- 26. Necesito un ejemplo C# de consecuencias no deseadas
- 27. Ejemplo simple de DispatcherHelper
- 28. Actores Akka: necesito un ejemplo para comprender algunos conceptos básicos
- 29. Ejemplo super simple para un evento delegado en C# .net?
- 30. iOS: código de muestra para grabación y reproducción simultánea
¿Deseas compartir el código completo? –