Класс AudioRecord позволит вам записывать в буфер. Затем вы можете выбрать обработку буфера или сохранение его на SD-карту, в зависимости от ваших потребностей. То, что вы хотите сделать, полностью зависит от вашего приложения. Вам нужны данные после обработки? Или обработанный результат - все, что вам нужно? Вы собираетесь воспроизводить записи?
Ниже приведен упрощенный пример использования класса AudioRecord:
AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
sampleRate, AudioFormat.CHANNEL_IN_STEREO,
AudioFormat.ENCODING_PCM_16BIT, bufferSize);
recorder.startRecording();
short buf[] = new short[buffersize];
int n = 0;
while(<some condition>) {
n = recorder.read(buf, 0, bufferSize);
process(buf);
}
recorder.stop();
recorder.release();
Вы, очевидно, захотите поместить вышеуказанный код в поток вне основного потока пользовательского интерфейса.
Вы должны убедиться, что все, что вы делаете в процессе, достаточно быстро, чтобы вы могли вернуться к чтению данных до того, как буфер заполнится, или вы потеряете данные. Частота дискретизации и размер буфера будут зависеть от того, как вы обрабатываете данные, и каковы ваши требования к задержке.
После того, как вы все это заработаете, вы можете решить, что вы хотите поместить телефон в 'Speaker Phone', чтобы получить лучший эффект через микрофон:
AudioManager amAudioManager;
amAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
amAudioManager.setMode(AudioManager.MODE_IN_CALL);
amAudioManager.setSpeakerphoneOn(true);
Да, вы должны поместить телефон в IN_CALL, чтобы включить громкую связь. Да, некоторые телефоны, по-видимому, отключают возможность записи при IN_CALL.