2013-03-26 74 views
0

我想檢查設備是否支持特定的採樣率。檢查設備支持的PCM採樣率

我試過以下(根據這應該工作http://developer.android.com/reference/android/media/AudioRecord.html#getMinBufferSize(int,INT,INT)),但不(它從來沒有得到AudioRecord.ERROR_BAD_VALUE):

int bufferSize8000 = AudioRecord.getMinBufferSize(90000000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT); 

    if(bufferSize8000 != (AudioRecord.ERROR_BAD_VALUE | AudioRecord.ERROR)) { 
     Log.v("samplerate", String.valueOf(bufferSize8000)); 
    } else { 

     Log.v("samplerate", "NOTsupported"); 
    } 

回答

0
(AudioRecord.ERROR_BAD_VALUE | AudioRecord.ERROR) 

手段-2 | -1,等於-1,這等於AudioRecord.ERROR,這就是爲什麼你永遠不會得到你期望的結果。

所以這

if(bufferSize8000 != (AudioRecord.ERROR_BAD_VALUE | AudioRecord.ERROR)) { 

應該

if (bufferSize8000 != Audiorecord.ERROR_BAD_VALUE && bufferSize8000 != AudioRecord.ERROR) { 
+0

還是一樣。對於抽樣率0Hz,返回緩衝區大小爲4096. – Kristopher 2013-03-26 15:22:53

+0

並非所有供應商在計算最小緩衝區大小時都會關心採樣率。有些具有默認緩衝區大小,它們可能會乘以您指定的通道數。例如,請參閱[此實施](https://www.codeaurora.org/gitweb/quic/la/?p=platform/hardware/qcom/audio.git;a=blob;f=alsa_sound/AudioHardwareALSA.cpp; H = b68e25b6ed3f2b830393cb0e850397e44352e9e7; HB =參/頭/ jb_rel_rb1.1#l1322) – Michael 2013-03-26 15:30:07