android 内部mic和外部mic切换

packages/apps/SoundRecorder/src/com/android/soundrecorder/SoundRecorder.java
 	                    if (AUDIO_AMR.equals(mRequestedType)) {
 	                        mRemainingTimeCalculator.setBitRate(BITRATE_AMR);
 	                        mRecorder.setChannels(1);
 	                        mRecorder.setSamplingRate(SAMPLERATE_8000);
	                        mRecorder.startRecording(MediaRecorder.OutputFormat.RAW_AMR, ".amr", this, audioSourceType, MediaRecorder.AudioEncoder.AMR_NB);
};

从上述代码段API中找到以下几个区分点

1. 采样率

2.码率

3. 声道数量

4. AudioSourceType

实测下来,只有通过AudioSourceType具有实操性。

以下是完整的验证代码diff文件,自测实现内部外部Codec上麦克风切换设计。

不过mixer_path.xml文件,只是调试时使用的开发板,是不带外部Codec的,这个并不影响该功能开发。

重点关注usecase的切换即可。
 

From 7ca1f038a41ac01746553504a433f03d9543a00f Mon Sep 17 00:00:00 2001
From: wumanyuan <wumanyuan@me
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android 上,要切换使用主克风(Primary Mic)或副克风(Secondary Mic)进行录音,你需要使用 AudioRecord 类和 AudioManager 类来实现。下面是一些示例代码片段,展示如何切换使用不同的克风进行录音: 1. 使用主克风录音: ```java int audioSource = MediaRecorder.AudioSource.MIC; // 使用主克风 int sampleRate = 44100; // 采样率(可以根据需要进行调整) int channelConfig = AudioFormat.CHANNEL_IN_MONO; // 单声道录音 int audioFormat = AudioFormat.ENCODING_PCM_16BIT; // 16位PCM编码 int bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat); AudioRecord audioRecord = new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, bufferSize); ``` 2. 使用副克风录音: ```java AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setMicrophoneDirection(AudioDeviceInfo.MIC_DIRECTION_SECONDARY); // 设置录音为副克风 int audioSource = MediaRecorder.AudioSource.UNPROCESSED; // 使用未处理的音频源,以便支持副克风 int sampleRate = 44100; // 采样率(可以根据需要进行调整) int channelConfig = AudioFormat.CHANNEL_IN_MONO; // 单声道录音 int audioFormat = AudioFormat.ENCODING_PCM_16BIT; // 16位PCM编码 int bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat); AudioRecord audioRecord = new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, bufferSize); ``` 在上述示例中,我们使用 `MediaRecorder.AudioSource.MIC` 和 `MediaRecorder.AudioSource.UNPROCESSED` 来分别选择主克风和副克风作为音频源。同时,我们还使用了 `AudioManager` 类的 `setMicrophoneDirection()` 方法来设置录音为副克风。 请注意,具体可用的克风和设置可能因设备的硬件和驱动程序而有所不同。因此,在实际应用中,你可能需要进行适配和测试以确保兼容性和正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

带你牛起来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值