Quiero grabar la voz siempre que mantenga presionado el botón de grabación y guarde esa voz en la carpeta sin editar de mi proyecto. Usé el código a continuación. A pesar de que no aparece ningún error, no pude obtener ningún resultado. Cual puede ser el problema ? ¿Tienes alguna sugerencia? Gracias,¿Cómo puedo grabar voz en Android siempre que mantenga presionado un botón?
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Runnable mAction = new Runnable() {
public void run() {
System.out.println("Performing action...");
int frequency=11025;
int channelConfiguration=AudioFormat.CHANNEL_CONFIGURATION_MONO;
int audioEncoding= AudioFormat.ENCODING_PCM_16BIT;
File file=new File(Environment.getExternalStorageDirectory(),"raw.pcm");
try{
file.createNewFile();
}catch(IOException e){}
try{
OutputStream os=new FileOutputStream(file);
BufferedOutputStream bos=new BufferedOutputStream(os);
DataOutputStream dos=new DataOutputStream(bos);
int bufferSize=AudioRecord.getMinBufferSize(frequency, channelConfiguration,
audioEncoding);
short[] buffer=new short[bufferSize];
audioRecorder=new AudioRecord(MediaRecorder.AudioSource.MIC,
frequency, channelConfiguration, audioEncoding, bufferSize);
audioRecorder.startRecording();
isRecording=true;
while(isRecording){
int bufferReadResult=audioRecorder.read(buffer, 0,bufferSize);
for(int i=0;i<bufferReadResult;i++){
dos.writeShort(buffer[i]);
}
}
audioRecorder.stop();
dos.close();
}catch(Throwable t){}
}
};
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (myHandler != null) return true;
myHandler = new Handler();
myHandler.postDelayed(mAction, 500);
break;
case MotionEvent.ACTION_UP:
if (myHandler == null) return true;
isRecording=false;
myHandler.removeCallbacks(mAction);
myHandler = null;
break;
}
return false;
}
Gracias por su ayuda – selenk
Habría sido mejor vincular a la fuente y explicar las partes relevantes del código en lugar de copiar pegar: https://github.com/krvarma/krvarma-android-samples/tree/master/AudioRecorder. 1 –