android设置主mic/副mic录音

//添加MIC设置参数

/hal/audio_extn/audio_extn.c
@@ -75,6 +75,7 @@ struct audio_extn_module {
     bool ras_enabled;
     struct aptx_dec_bt_addr addr;
     struct audio_device *adev;
+    int mic_choose;
 };

 static struct audio_extn_module aextnmod;
@@ -838,6 +839,7 @@ void audio_extn_set_parameters(struct audio_device *adev,
    if (adev->offload_effects_set_parameters != NULL)
        adev->offload_effects_set_parameters(parms);
    audio_extn_set_aptx_dec_bt_addr(adev, parms);
+   audio_extn_set_mic_choose_parameters(parms);
 }

 void audio_extn_get_parameters(const struct audio_device *adev,
@@ -1478,3 +1480,29 @@ int audio_extn_set_device_cfg_params(struct audio_device *adev,

     return 0;
 }
// 获取mic参数
int audio_extn_get_mic_choose_parameters(void)
{
    ALOGD("%s: mic_choose:%d", __func__, aextnmod.mic_choose);
    return aextnmod.mic_choose;
}
// 设置mic参数
void audio_extn_set_mic_choose_parameters(struct str_parms *parms)
{
    int ret;
    char value[32] = {0};
    ret = str_parms_get_str(parms, "MIC_CHOOSE", value, sizeof(value));
    ALOGD("mic_choose_ret:%d", ret);
    if (ret >= 0) {
        if (strcmp(value, "primary_mic") == 0) {
            aextnmod.mic_choose = 1;
        }else if (strcmp(value, "secondary_mic") == 0) {
            aextnmod.mic_choose = 2;
        } else {
            aextnmod.mic_choose = 0;
        }
    } else {
        aextnmod.mic_choose = 0;
    }
    ALOGD("%s: mic_choose:%d, value:%s", __func__, aextnmod.mic_choose, value);
}

//头文件中声明

/hal/audio_extn/audio_extn.h

+
+
+int audio_extn_get_mic_choose_parameters(void);
+
+void audio_extn_set_mic_choose_parameters(struct str_parms *parms);

hal/msm8916/platform.c

@@ -541,6 +541,7 @@ static const char * const device_table[SND_DEVICE_MAX] = {
     [SND_DEVICE_IN_UNPROCESSED_THREE_MIC] = "three-mic",
     [SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = "quad-mic",
     [SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = "headset-mic",
     //添加mic参数,与mixer_paths_mtp.xml对应
+    [SND_DEVICE_IN_SECONDARY_MIC] = "secondary-mic",
 };

 // Platform specific backend bit width table
@@ -683,6 +684,7 @@ static int acdb_device_table[SND_DEVICE_MAX] = {
     [SND_DEVICE_IN_UNPROCESSED_THREE_MIC] = 145,
     [SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = 146,
     [SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = 147,
     //自定义ID
+    [SND_DEVICE_IN_SECONDARY_MIC] = 170,
 };

 struct name_to_index {
@@ -4313,6 +4315,20 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
                     snd_device = SND_DEVICE_IN_HANDSET_DMIC;
                     platform_set_echo_reference(adev, true, out_device);
                 }
+
+                /*
+                * 上层通过 AudioManager.setParameters("MIC_CHOOSE=xxx") 选择使用主副麦
+                * 主麦:MIC_CHOOSE=primary_mic
+                * 副麦:MIC_CHOOSE=secondary_mic
+                */
+                int mic_choose = 0;
+                mic_choose = audio_extn_get_mic_choose_parameters();
+                if (mic_choose == 1) {
+                    snd_device = SND_DEVICE_IN_HANDSET_MIC;
+                } else if (mic_choose == 2) {
+                    snd_device = SND_DEVICE_IN_SECONDARY_MIC;
+                }
+                ALOGD("%s: snd_device mic_choose (%s)", __func__, device_table[snd_device]);
             }
         }
     } else if (source == AUDIO_SOURCE_FM_TUNER) {

hal/msm8916/platform.h

     SND_DEVICE_IN_UNPROCESSED_THREE_MIC,
     SND_DEVICE_IN_UNPROCESSED_QUAD_MIC,
     SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC,
+    SND_DEVICE_IN_SECONDARY_MIC,
     SND_DEVICE_IN_END,

     SND_DEVICE_MAX = SND_DEVICE_IN_END,

// 设置MIC寄存器参数。

/configs/msm8953/mixer_paths_mtp.xml

           <path name="wsa-speaker-and-headphones" />
     </path>

+    <path name="secondary-mic">
+       <path name="adc3"/>
+   </path>
 </mixer>

原文地址:https://www.cnblogs.com/helloworldtoyou/p/9236548.html

时间: 2024-08-06 13:44:56

android设置主mic/副mic录音的相关文章

Android开发--仿微信语音对讲录音

自微信出现以来取得了很好的成绩,语音对讲的实现更加方便了人与人之间的交流.今天来实践一下微信的语音对讲的录音实现,这个也比较容易实现.在此,我将该按钮封装成为一个控件,并通过策略模式的方式实现录音和界面的解耦合,以方便我们在实际情况中对录音方法的不同需求(例如想要实现wav格式的编码时我们也就不能再使用MediaRecorder,而只能使用AudioRecord进行处理). 效果图: 实现思路 1.在微信中我们可以看到实现语音对讲的是通过点按按钮来完成的,因此在这里我选择重新自己的控件使其继承自

Android设置里面默认存储器选项(default write disk)的实现

原生的Android设置里面没有默认存储器的选项,但是MTK偏偏加上了这个功能,可能MTK觉得这个比较有用吧,所以,他们在原生的基础上面做了修改,加上了这个功能.但是高通平台没有这个功能,相对MTK来说,高通比较严谨一点,不会随随便便加上一些功能,但是MTK平台优化了很多东西(有有点也有缺点),开发者这可能是很多山寨手机选择MTK平台的原因吧. 我给"默认存储器"做了一个简单的定义:一些内置应用的数据存放位置.当然,如果其他应用知道这个接口(不是标准接口,所以只有开发者本人知道,或者M

Android设置之UI篇

一.  Android设置界面是如何定义的呢? 答:Android 系统设置的主界面是Settings.java,该类的定义为: 同时我们看看Settings.java的onCreate函数: 这里似乎没有调用setContentView的方法,那么设置的界面是如何显示的呢?那我们去它的父类(PreferenceActivity)中找找看,我们来看看这个类的onCreate方法: 正如我们看到,原来设置的界面定义为framework中的preference_list_content.xml. 通

逆向知识之CS1.6辅助/外挂专题.1.实现CS1.6主武器副武器无限子弹

逆向知识之CS辅助/外挂专题.1.实现CS主武器副武器无限子弹 PS: 相信大家CS1.6这类的FPS应该玩过.现在我们通过外挂手法.讲解逆向的本质.以及应用. 关于CS1.6的下载.网络百度下载即可. 一丶主武器无限子弹寻找方法. 首先我们知道.在CS中主武器有子弹个数.那么我们可以通过CE寻找子弹的个数增加或者减少来进行寻找我们的数据. 关于CE的使用.可以参考网络教程.很简单.主需要来回扫描即可. 寻找思路: 1.首次扫描子弹个数 2.变化子弹继续扫描. 3.重复2步骤.直到地址很少. 4

转:Android 设置屏幕不待机

本文转载于:http://blog.csdn.net/yudajun/article/details/7748760 Android设置支部待机有两种方法 第一种简单通过设置WindowManager属性实现: 在Activity oncreat()方法中设置 getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 第

android设置背景色为透明

android设置背景色为透明 方法一: 只要在配置文件内activity属性配置内加上 android:theme="@android:style/Theme.Translucent" 就好了. 这样就调用了android的透明样式! 方法二: 先在res/values下建colors.xml文件,写入: <?xmlversion="1.0"encoding="UTF-8"?> <resources> <color

android 设置字体颜色、EditText自动输入转换成大写字母的多种方式

在TextView上面设置某一个字的字体颜色为指定颜色时,可以通过java类SpannableString类和Html语言来实现. (一)SpannableString类方式 private void setText(TextView t){ String text = t.getText().toString().trim(); SpannableString span = new SpannableString(text); span.setSpan(new ForegroundColorS

android 设置系统屏幕亮度

android 设置系统屏幕亮度 权限<uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission> /*** 获得当前屏幕亮度的模式 * SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 为自动调节屏幕亮度* SCREEN_BRIGHTNESS_MODE_MANUAL=0 为手动调节屏幕亮度*/private int getScreen

Android 设置图片倒影效果

首先,贴出效果图: 1.布局文件main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_p