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