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