Я разработал игру для Android, использующую Audio Record для ввода микрофона.Android - Аудиозапись - Частота выборки
Вы можете иметь взгляд на https://play.google.com/store/apps/details?id=fixappmedia.micro
Дело в том, что я использую следующую функцию, чтобы получить частоту дискретизации, доступные по телефону:
public int getValidSampleRates() {
int r=8000;
for (int rate : new int[] {8000,11025,16000,22050,44100}) { // add the rates you wish to check against
int bufferSize = AudioRecord.getMinBufferSize(rate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
if (bufferSize > 0) {
r= rate;
}
}
return r;
}
Я проверил его первоначально на моем телефоне (Samsung Galaxy Vibrant), и он работал очень хорошо ... но сегодня я тестировал его на Samsung Galaxy Ace, и частота дискретизации не работала ...
Любые идеи о том, почему?
Определить «не работает» –
когда я звоню recorder = новый AudioRecord (MediaRecorder.AudioSource.MIC, rate , AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, BufferSize); используя скорость, заданную предыдущей функцией, она выдает ошибку ... У меня нет именно такой ошибки здесь ... но дело в том, что она ничего не записывает ... – progjose
@progjose вы должны посмотреть на Logcat для получения дополнительной информации о вашей ошибке. Важно знать, является ли экземпляр рекордера «нулевым» (это означает, что вы используете неподдерживаемую частоту дискретизации или канал), или если экземпляр рекордера внутренне униализирован (и вы должны вызывать исключение IllegalStateException при вызове startRecording() ..) , Как только вы узнаете об исключении, которое приведет к сбою вашего приложения, у вас будут разные решения. принять. –