检查设备支持的PCM采样率

问题描述:

我想检查设备是否支持特定的采样率。检查设备支持的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"); 
    } 

(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