2014-01-29 4 views
2

Я разработал игру для 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, и частота дискретизации не работала ...

Любые идеи о том, почему?

+3

Определить «не работает» –

+0

когда я звоню recorder = новый AudioRecord (MediaRecorder.AudioSource.MIC, rate , AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, BufferSize); используя скорость, заданную предыдущей функцией, она выдает ошибку ... У меня нет именно такой ошибки здесь ... но дело в том, что она ничего не записывает ... – progjose

+0

@progjose вы должны посмотреть на Logcat для получения дополнительной информации о вашей ошибке. Важно знать, является ли экземпляр рекордера «нулевым» (это означает, что вы используете неподдерживаемую частоту дискретизации или канал), или если экземпляр рекордера внутренне униализирован (и вы должны вызывать исключение IllegalStateException при вызове startRecording() ..) , Как только вы узнаете об исключении, которое приведет к сбою вашего приложения, у вас будут разные решения. принять. –

ответ

1

Я разработчик приложения для записи голоса (Hi-Q MP3 Voice Recorder), и я узнал, что все телефоны поддерживают либо 44100 Гц, либо 48000 Гц, либо и то, и другое.

Глядя на ваш код, вы пропустили 48000.

+0

спасибо, я постараюсь с такой частотой дискретизации. Надеюсь, он это решит. Ура! – progjose

+0

Привет @yuku. Я пытаюсь заставить AudioRecord работать с Nexus 5, и у меня есть проблема: AudioRecord получает экземпляр, но он находится в неправильном внутреннем состоянии, на самом деле исключение IllegalStateException, когда я вызываю startRecording() на нем. Любое предложение? –

1

из документации http://developer.android.com/reference/android/media/AudioRecord.html

частота дискретизации в герцах. В настоящее время 44100Hz является единственным стандартом, который гарантированно работает на всех устройствах, но другие скорости, такие как 22050, 16000 и 11025, могут работать на некоторых устройствах.

заметил Также вы используете AudioFormat.CHANNEL_CONFIGURATION_MONO, который осуждается в соответствии с Документами http://developer.android.com/reference/android/media/AudioFormat.html

Эта константа была осуждаемых в уровне API 5. Использование CHANNEL_OUT_MONO или CHANNEL_IN_MONO вместо

Удачи

Смежные вопросы