Я инициализировать мой AudioRecord экземпляр следующим образом:AudioRecord размер буфера
// TODO: remember to add RECORD_AUDIO permission
int audioSource = MediaRecorder.AudioSource.MIC;
// TODO: I should consider Nyquist frequency and tell the user if her device can correctly detect frequencies in the range of her instrument
int sampleRateInHz = getDeviceSampleRate(context);
int channelConfig = AudioFormat.CHANNEL_IN_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
// TODO: bufferSizeInBytes should be set according to minimum detectable frequency in order to have at least three periods
int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat);
AudioRecord audioRecord = new AudioRecord(audioSource, sampleRateInHz, channelConfig, audioFormat, bufferSizeInBytes);
Вот мои вопросы:
- Я должен прочитать шорты из буфера, потому что я указал
ENCODING_PCM_16BIT
. Правильно ли это? - Если минимальный размер буфера в байтах составляет 1000, у меня будет 500 шорт. Поэтому, если мне нужно 4096 выборок, я должен установить bufferSizeInBytes на 8192. Правильно ли это?
Спасибо.
Спасибо вам за ответ. «Данные должны считываться с аудиооборудования в кусках размеров, меньших общего размера буфера записи». ([AudioRecord] (https://developer.android.com/reference/android/media/AudioRecord.html)). Итак, если мне нужно проанализировать 4096 выборок, и я знаю, что я буду читать шорты, мне нужно инициализировать экземпляр AudioRecord, используя 'bufferSizeInBytes' из 8192 единиц. Правильно ли это? –
Почему я должен реализовать опубликованное вами сообщение? Если я назову 'AudioRecord # read', операция будет заблокирована до тех пор, пока все образцы не будут прочитаны. Правильно ли это? –
@AdrianoDiGiovanni Я думаю, что 8192 слишком велик для 'bufferSizeInBytes'. Я бы создал 'AudioRecord' с' getMinBufferSize() 'или несколько его кратных – nandsito