Poi ho due metodi: startRecording, che istanzia un audioRecorder e lo avvia sul thread suo leggendo i dati che arrivano dal microfono (o altra fonte) nel buffer; e stopRecording che stoppa il loop della registrazione, ferma l'audioRecorder e me lo distrugge.
Ecco le dichiarazioni:
private Thread recordingThread=null; boolean isRecording; Button button1; int audioSource=AudioSource.MIC; int sampleRate=8000; int channelConfig=AudioFormat.CHANNEL_IN_MONO; int audioFormat=AudioFormat.ENCODING_PCM_16BIT; int bufferSizeInBytes=AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat); AudioRecord audioRecord; byte[] buffer=new byte[bufferSizeInBytes];E il codice che attribuisce il listener al bottone che avvia e stoppa la registrazione:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isRecording){
((Button)v).setText("Stop recording");
stopRecording();
}
else{
((Button)v).setText("Start recording");
startRecording();
}
}
});
Poi il codice che crea e quello che distrugge l'audioRecorder:
La prima funzione è startRecording:
public void startRecording(){
isRecording=true;
audioRecord=new AudioRecord(audioSource,sampleRate,channelConfig,audioFormat,bufferSizeInBytes);
recordingThread=new Thread(new Runnable(){
@Override
public void run() {
while(isRecording){
audioRecord.read(buffer,0,bufferSizeInBytes);
}
}
});
}
E l'altra è stopRecording:
public void stopRecording(){
isRecording=false;
audioRecord.stop();
audioRecord.release();
audioRecord=null;
}
E pare che funzioni.Ovviamente non lo posso testare perché mi manca ancora uno strumento con funzioni di player...
Comunque perlomeno non si blocca, ed è già qualcosa.
Nessun commento:
Posta un commento