2015-09-21 3 views
3

Как уже упоминалось, обновление Android 5.0L (http://geeknizer.com/audio-improvements-in-android-5-0-l-audiophile/), Android начинает поддерживать частоту дискретизации 96000 Гц. Однако, когда я пытаюсь сделать это на моем Galaxy S6:Android 5.0 не способен записывать звук 96000Hz?

void checkAvailableSampleRate(){ 
    for (int rate : new int[] {44100, 48000, 96000}) { // add the rates you wish to check against 
     int bufferSize = AudioRecord.getMinBufferSize(rate, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT); 
     if (bufferSize > 0) { 
      // buffer size is valid, Sample rate supported 
      Log.d(C.LOG_TAG,"Sample rate "+rate+" is supportted"); 
      // just used for debugging 
      AudioRecord temp = new AudioRecord(MediaRecorder.AudioSource.MIC, rate, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, bufferSize); 
      Log.d(C.LOG_TAG,"make audioRecord successfully "); 
     } 
    } 
} 

Я не могу сделать 96000Hz работу ....

Вот результат я получил:

Sample rate 44100 is supportted 
Make audioRecord successfully 
Sample rate 48000 is supportted 
Make audioRecord successfully 
Sample rate 96000 is supportted 

Мое приложение сбой здесь, поэтому я могу получить minBuffer, если частота дискретизации установлена ​​на 96000 Гц, но неспособна создать экземпляр AudioRecord.

и вот ошибка:

java.lang.IllegalArgumentException: 96000Hz is not a supported sample rate.

Это странно для меня, что AudioRecord.getMinBufferSize() отлично работает с 96000Hz, но приложение падает, когда я пытаюсь создать 96000Hz AudioRecord.

Кто-нибудь пытался записать звук 96000Hz в Android?

-------------------------------------

Вот обновление моя установка градиента:

android { 
    compileSdkVersion 21 
    buildToolsVersion "23.0.1" 
    defaultConfig { 
     applicationId "edu.umich.cse.echotag" 
     minSdkVersion 21 
     targetSdkVersion 21 
     ndk { 
      moduleName "detection" 
     } 
    } .... 
+0

Скомпилировали ли вы свой код для последней версии API? –

+0

Hi Shotgun Ninja, я использую версию sdk = 21. Я также обновляю настройку градиента в своем вопросе. –

ответ

0

ОС может поддерживать 96k, но аппаратное обеспечение также должно поддерживать 96k, чтобы сделать эту работу.

getMinBufferSize не может быть надежным способом проверить поддерживаемые аппаратным обеспечением частоты дискретизации. см. Здесь How can I find out what Sampling rates are supported on my tablet?

AudioManager может запрашивать собственные параметры устройства. Если вы хотите проверить, поддерживается ли 96k, это может быть полезно.

 AudioManager am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 
     Log.d(TAG, "onCreate: "+am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER)); 
     Log.d(TAG, "onCreate: "+am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE)); 
     Log.d(TAG, "onCreate: "+am.getProperty(AudioManager.PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND)); 
     Log.d(TAG, "onCreate: "+am.getProperty(AudioManager.PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND)); 

более чтение http://geeknizer.com/audio-improvements-in-android-5-0-l-audiophile/

Надеется, что это может помочь вам.