Devo creare un audioRecord.
Per farlo, riprendo il codice che avevo messo sul blog...
Per creare un audioRecord dovevo definire alcuni parametri:
- Source (microfono);
- Sample Rate;
- Channel configuration (sarebbe STEREO o MONO);
- AudioFormat (sarebbe la quantità di bit di cui è fatto il segnale)
- la lunghezza del buffer, che si ricava dai tre parametri precedenti.
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...
Nessun commento:
Posta un commento