JavascriptProva

lunedì 14 marzo 2016

audioRecorder, primi rudimenti.

Mi preparo tutte le impostazioni relative al tipo di segnale digitale, e dichiaro la variabile per l'audioRecorder e per il Thread (è ovvio che la registrazione va su un thread separato altrimenti si impappa tutto),
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