最近有个需求,FM需要做听歌识曲,然后我就发现,Andoid原生就提供了一个这个:
//MediaRecorder.java
/**
* Audio source for capturing broadcast radio tuner output.
* @hide
*/
@SystemApi
public static final int RADIO_TUNER = 1998;
那我就要试试,这么操作,会怎么样:
int channelConfiguration = AudioFormat.CHANNEL_IN_STEREO;
int audioEncodingBits = AudioFormat.ENCODING_PCM_16BIT;
int sampleRateInHz = 8000;
int audioSource = MediaRecorder.AudioSource.RADIO_TUNER;
int recordBufferSize = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfiguration, audioEncodingBits);
mAudioRecord = new AudioRecord(audioSource, sampleRateInHz, channelConfiguration, audioEncodingBits,
recordBufferSize);
结果,我发现报错了:
//1998就是RADIO_TUNER
AudioRecord: set(): inputSource 1998, sampleRate 8000, format 0x1, channelMask 0xc, frameCount 320, notificationFrames 0, sessionId 0, transferType 0, flags 0, opPackageName com.chj.voicerecognize.captureservice uid -1, pid -1
10-19 09:05:27.160 2162 2162 V AudioRecord: Building AudioRecord with attributes: source=1998 flags=0x0 tags=[]
10-19 09:05:27.160 2162 2162 V AudioRecord: set(): mSessionId 33
10-19 09:05:27.163 779 1008 V APM_AudioPolicyManager: getInputForAttr() source 1998, samplingRate 8000, format 1, channelMask c,session 33, flags 0
10-19 09:05:27.163 779 1008 V APM::AudioPolicyEngine: getDeviceForInputSource() no device found for source 1998
10-19 09:05:27.163 779 1008 E APM::AudioPolicyEngine: getDeviceForInputSource() no default device defined
10-19 09:05:27.163 779 1008 V APM::AudioPolicyEngine: getDeviceForInputSource()input source 1998, device 00000000
10-19 09:05:27.163 779 1008 W APM_AudioPolicyManager: getInputForAttr() could not find device for source 1998
报错的地方在这里:
Engine.cpp
audio_devices_t Engine::getDeviceForInputSource(audio_source_t inputSource) const
{
...
case AUDIO_SOURCE_FM_TUNER:
if (availableDeviceTypes & AUDIO_DEVICE_IN_FM_TUNER) {
//没走到这里
device = AUDIO_DEVICE_IN_FM_TUNER;
}
break;
...
}
也就是说availableDeviceTypes里没有包含AUDIO_DEVICE_IN_FM_TUNER。
于是,我查看了配置:
//audio_policy_configuration.xml
...
<attachedDevices>
...
<item>Built-In Mic</item>
<item