JavascriptProva

Visualizzazione post con etichetta audiorecorder. Mostra tutti i post
Visualizzazione post con etichetta audiorecorder. Mostra tutti i post

domenica 13 marzo 2016

AudioRecorder: primi passi.

Apro Eclipse.
Devo creare un audioRecord.
Per farlo, riprendo il codice che avevo messo sul blog...

Per creare un audioRecord dovevo definire alcuni parametri:
  1. Source (microfono);
  2. Sample Rate;
  3. Channel configuration (sarebbe STEREO o MONO);
  4. AudioFormat (sarebbe la quantità di bit di cui è fatto il segnale)
  5. la lunghezza del buffer, che si ricava dai tre parametri precedenti.
Ci provo: inizio scrivendo solo i nomi delle variabili, di tipo int:
public class MainActivity extends Activity{

 int audioSource;
 int sampleRate;
 int channelConfig;
 int audioFormat;
 int bufferSizeInBytes;
 
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  
 }
  
}
Adesso calcolo queste variabili con le rispettive funzioni.
 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);
Bene.
Adesso cancello tutto e ci vado a memoria, senza sbirciare...

 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);
Perfetto!!!
Ora dovrei creare l'audioRecorder...

La sintassi sembra la solita, con tutti questi valori come parametri.
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  AudioRecord audioRecord = new AudioRecord(audioSource,sampleRate, channelConfig, audioFormat, bufferSizeInBytes);
Adesso cosa fare?

ho visto che bisognava anche definire un buffer, di tipo short.
La sintassi che ho trovato su un sito era questa:
short[] buffer = new short[bufferSizeInBytes];
Su un altro sito trovo questa sintassi:
buffer = new short[buffersizebytes]; 
buflen=buffersizebytes/2; 
Quel buflen sarebbe la lunghezza in short, essendo il tipo short di 16 bytes...
Quindi una volta creato il recorder bisogna vedere come scrive sul buffer.
Confronto le sintassi:
audioRecord.startRecording(); 
mSamplesRead = audioRecord.read(buffer, 0, buffersizebytes); 
audioRecord.stop(); 
Ecco, la funzione sarebbe read.

Perché sia racchiusa fra startRecording e stop, lo ignoro...
Vediamo...

Niente, la sintassi è questa.
Provo a metterla in atto.
public class MainActivity extends Activity{

 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);
 
 short[] buffer=new short[bufferSizeInBytes];
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  AudioRecord audioRecord = new AudioRecord(audioSource,sampleRate, channelConfig, audioFormat, bufferSizeInBytes);
  audioRecord.startRecording();
  audioRecord.read(buffer, 0, bufferSizeInBytes);
    
    
 }
}
E fin qua dovremmo esserci... Non so che farci, con questo buffer, ammesso che si riempia, ma comunque dovremmo esserci.
Mi aspetto che se avvio il codice succederà una catastrofe...