MTK audio note -01
adb shell cat sys/devices/virtual/misc/mtgpio/pin 查看GPIO管脚信息 adb shell cat /sys/class/misc/mtgpio/pin 查看GPIO管脚信息 adb shell cat /proc/interrupts 查看中断信息 /sys/bus/cpu/devices 查看机器cpu 信息 打印kernel函数dump GPIO值: int mt_set_gpio_mode(unsigned long pin, unsigned long mode) { if (mode >= GPIO_MODE_MAX) { GPIOERR(“Parameter mode error: %d\n”, (int)mode); return -ERINVAL; }
if ((pin & 0xff) == GPIO24) { printk(“mt_set_gpio_mode::pin = %lu , mode = %lu --------”,pin, mode); dump_stack(); } return MT_GPIO_OPS_SET(pin, set_mode, mode); }
修改system/core/init/device.cpp加上一段代碼以創建/dev/snd } else if(!strncmp(uevent->subsystem, “sound”, 5)) { base = “/dev/snd/”; make_dir(base, 0755);
EQ英文全称Equaliser,中文也就是均衡器的意思。它的基本作用是通过对声音某一个或多个频段进行增益或衰减,从而达到调整音色的目的。 EQ通常包括以下三个参数:Frequency,频率――这是用于设定你要进行调整的频率点的参数;Gain,增益――用于调整在你设定好的F值上进行增益或衰减的参数;Quantize――用于设定你要进行增益或衰减的频段“宽度”的参数。在这里,要注意是:当你设定的Q值越小的时候,你所处理的频段就越宽,而当你设定的Q值越大的时候,你所处理的频段就越窄。
pcm.c 操作的文件是pcmC%uD%u%c 主要使用Linux提供的open/close/ioctl/mmap 主要函数pcm_open/pcm_close/pcm_is_ready/pcm_read/pcm_write
mixer.c 操作的文件是controlC% 设置mixer control 主要函数mixer_ctl_set_enum_by_string mixer_ctl_set_value 像打开audio patch、设置pga音量都是都通过Control Interface
查看系统支持多少核数 root@NOBLEX:/ # cat sys/devices/system/cpu/present
手机放音乐时连接音箱, 将音箱音量调到最大时,音乐会自动暂停 原因是:HPL上信号过大导致EINT拉高产生了耳机拨出讯号,所以音乐会自动暂停掉
耳机accdet dts配置: &accdet { accdet-mic-vol = <7>; headset-mode-setting = <0x500 0x500 1 0x3F0 0x800 0x800 0x200>; accdet-plugout-debounce = <20>; /1:ACC mode, 2:low cost without in bias, 6:low cost with in bias/ <0x500 0x500 1 0x3F0 0x800 0x800 0x200>这几个值分别表示的是什么? struct headset_mode_settings { int pwm_width; /pwm frequence/ int pwm_thresh; /pwm duty/ int fall_delay; /falling stable time/ int rise_delay; /rising stable time/ int debounce0; /hook switch or double check debounce/ int debounce1; /mic bias debounce/ int debounce3; /plug out debounce/ };
adb shell echo 8 8 8 8 > /proc/sys/kernel/printk //开启 kernel log的 printk 打印 CONFIG_LOG_BUF_SHIFT=19 //将这个宏变量改为19后,可以抓取从0秒 开始记录的kernel log,默认值是17
adb shell getprop |grep number 可以查看手机 烧写的软件版本 手机连接USB,pc端输入adb devices查询设备串号,三台机器的序列号都是一样的, 需要开启下面的这个宏 CONFIG_MTK_USB_UNIQUE_SERIAL=yes
e-fuse ROM里初始都是1,当且仅能一次把1改成0。可以这么理解ROM的数据只能写一次,通常用于保护关键数据,出厂时写入一次,以后每次都是读取 e-fuse 是烧写在 机器的CPU里,这样的话 能保证 手机不被其他 用户刷机 样机如果烧录了efuse则必须烧录签名版本,如果样机未烧录efuse,烧录版本是否签名无影响
有些手机因为结构原因没有把loopback plug dongle识别成mic耳机, 会导致 “Audio Loopback Latency Test”项测试结果值小于0.6,测试不通过。
frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp Android 6.0 上修改播放音乐从听筒发出 audio_devices_t AudioPolicyManager::getDeviceForStrategy(routing_strategy strategy, bool fromCache, audio_output_flags_t flags) { audio_devices_t Device; if(strategy == STRATEGY_MEDIA) { Device = AUDIO_DEVICE_OUT_EARPIECE; ALOGD("getDeviceForStrategy() from AUDIO_DEVICE_OUT_EARPIECE "); return Device; }
编译后清除 之前的编译环境,便于下次重新编译 git checkout – . git clean -xdf
从提供的register来看,异常时,AUDENC_ANA_CON0 = 0x583说明input选择的是耳机的,所以导致UL无声
kernel-3.10/drivers/misc/mediatek/gpio/mt6735/mt_gpio_debug.c//打印GPIO static ssize_t mt_gpio_dump_regs(char *buf, ssize_t bufLen) {}
vi out/target/product/xxx6753_65u_m0/obj/KERNEL_OBJ/arch/arm64/boot/dts/cust.dtsi //查看编译后的 i2c配置情况
checkAndSetVolume() 函数却没有执行 也不会有音量变化的
在构造AudioTrack对象的时候,传入了CallbackWrapper作为audiotrack的callback 当audiotrack需要数据的时候,就会调用此函数 void MediaPlayerService::AudioOutput::CallbackWrapper() audiotrack启动后就会周期性的调用 回调函数从解码器获取数据
AudioTrack中构造函数的参数 bufferSizeInBytes 这个是最难理解又最重要的一个参数,它配置的是 AudioTrack 内部的音频缓冲区的大小,该缓冲区的值不能低于一帧“音频帧”(Frame)的大小
D AudioALSADeviceConfigManager: ApplyDeviceTurnonSequenceByName() DeviceName = builtin_Mic_DualMic descriptor->DeviceStatusCounte = 6 descriptor->DeviceStatusCounte = 6这里有异常 mic不能正常打开
可以把双麦克风消噪强度降低提升speech quality
连接蓝牙耳机通话时,从蓝牙耳机切换到听筒 D/BTIF_HF_SERVER(20553): disconnect_audio D/AudioALSASpeechPhoneCallController( 289): routing(), bt_device_on = 0, sample_rate = 16000
accdet_custom.c中 16 #if defined(CONFIG_AUDIO_SUPPORT) 17 static struct headset_mode_settings cust_headset_settings = { 18 0x500, 0x200, 1, 0x3f0, 0x800, 0x800, 0x200 19 }; 20 #else 21 static struct headset_mode_settings cust_headset_settings = { 22 0x500, 0x500, 1, 0x3f0, 0x800, 0x800, 0x200 23 }; 24 #endif
如果将第二项 0x500改成0x200 相当于将MIC 波形改成 PWM,如果第一项和第二项 相等 ,Micbias 一直为高 最后一项 0x200 代表耳机拔出时的 debounce 时间(去抖动),将其转为十进制 除以32768 即为真正的debounce 时间 其他项目的 debounce 时间是0x20
请在accdet.c文件中配置: #define ACCDET_DEBOUNCE3_PLUG_OUT (0x20) //为了解决拔掉耳机后误报耳机按键消息 原来是#define ACCDET_DEBOUNCE3_PLUG_OUT (0x2030) / 30 msec */
按下 耳机按键,mic脚的电压波形 将会被拉低
耳机图标有显示 说明拔出耳机时 没有产生中断。 函数accdet_setup_eint() 都没有执行,那么accdet_setup_eint内部的中断申请函数request_irq() 肯定也不会执行 这时应关注 dws中 对于GPIO2对应的 EINT:ACCDET 配置是否有异常(配成了其他的GPIO6),需要重新适配 dws 同时需在mk文件中 定义CONFIG_ACCDET_EINT=yes ,CONFIG_ACCDET_EINT_IRQ=no
当插入耳机按键时,首先是触发了EINT中断,然后再触发ACCDET中断,这2个中断都是PMIC函数中注册 的,属于PMIC端的中断
把耳机mic的mode改为ACC audio_custom_exp.h 中 #define HEADSET_MIC_MODE (2) 改为 #define HEADSET_MIC_MODE (1) 在打开麦克风降噪的情况下,手机对非稳态噪音(比如使用者身边别人说话的声音)的消除增强,但是对远端的背景噪音消除能力会降低,并且会出现一定的底噪。这些都是MTK消噪算法的一些缺点,属于正常情况
播放出现卡顿时 //系统内存不足或者开启了串口log等影响了系统performance 01-01 08:03:08.428 E/AudioALSAPlaybackHandlerBase( 291): -getHardwareBufferInfo pcm_get_htimestamp fail, ret = -1, pcm_get_error = cannot start channel: Broken pipe
sound/soc/mediatek/mt_soc_audio_v3 目录下 mt_soc_pcm_routing.c AudDrv_Afe.c AudDrv_Ana.c mt_soc_pcm_fm_i2s.c mt_soc_pcm_routing.c
手机/system/etc/目录 audio_device.xml 音频通路切换 audio_effects.conf 音频效果文件 audio_policy.conf 音频配置
没带Smart PA的项目,如何在main log中查看 PA是否有open? D/AudioALSADeviceConfigManager( 288): cltname = Ext_Speaker_Amp_Switch cltvalue = On 关闭播放时 D/AudioALSADeviceConfigManager( 288): cltname = Ext_Speaker_Amp_Switch cltvalue = Off
在mt6750平台上 调节 耳机,扬声器等音频器件的模拟增益 是AudioALSAGainController.cpp 如void AudioMTKGainController::SetSpeakerGain(int index) 函数 调节外放的模拟增益 void AudioMTKGainController::SetSpeakerGain(uint32_t index) { SetHeadPhoneLGain(index); //调节耳机通路上的那个gain SetHeadPhoneRGain(index); }
只要外部pa接在耳机声道上,调节增益时都需要调节耳机通路上的那个gain。SetSpeakerGain函数根本作用不到耳机通路,如果外部pa接在内部pa后面,才需要调用SetSpeakerGain函数
在老的 mt6735平台上调节 扬声器等音频器件的模拟增益是 AudioALSAVolumeController.cpp文件 如AudioALSAVolumeController::SetSpeakerGain
MBDRC 分频段的DRC MTK_BESLOUDNESS_SUPPORT=yes 开启MBDRC MBDRC(Multi-Band DRC)导致雷霆战机游戏卡顿的原因是:MBDRC运算量大,并且是track base,每个AudioTrack都要进行DRC处理。在雷霆战机游戏的过程中,最多有20多个AudioTrack同时处于active状态并进行MBDRC运算,有可能造成CPU loading过大的情况,导致卡顿
//是否插入耳机扬声器的来电铃声大小不一样 之前手机 来电响铃时 喇叭信号(没有插入耳机时)会进行DRC 处理,而插入耳机时,喇叭信号则不会进行DRC处理,所以插入耳机时 扬声器听起来音量小
D/AudioALSAHardware( 353): = SET_DUMP_AUDIO_DEBUG_INFO(1) 开启Audio pcm log时 点击“Dump Audio Debug Info”后
find * -iname “*.h” |xargs grep -inr “snd_card” find ./ -name Android.mk -exec grep -l init {} ; find external/ -name Android.mk -exec grep -l test_name {} ;
device/mediatek/common/audio_param Android6.0 及MT6755平台上音频参数位置
device/mediatek/k50v1_66_cxo_pre/ProjectConfig.mk ProjectConfig.mk包含诸多版本信息,搜索BRANCH MTK_BRANCH = alps-mp-m0.mp1 //基线地址
/kernel-3.10/drivers/misc/mediatek/i2c/mt6752/i2c.c static S32 _i2c_deal_result(mt_i2c *i2c) 598 BUG_ON(data_size > i2c->msg_len); //BUG_ON即让 机器出现KE 上面这个 BUG_ON产生的KE,这个KE表示HW行为读出来的字节数不符合预期值
adb shell getevent -l 耳机按键上报 add device 7: /dev/input/event0 name: “ACCDET”
adb shell getevent |grep /dev/input/event1 查看音量 +/- 按键event 信息
log中看到在通话过程中进来的echo量相当大,导致经过AEC之后UL的语音信号被削得很小了,所以目前是建议您们将免提模式下面的MIC切换为负MIC进行通话。 请将Audio_Customization_Common.h中 #define USE_REFMIC_IN_LOUDSPK (1) //1表示免提打开refmic 免提通话用副麦 audio_custom_exp.h中 和AudioALSACaptureHandlerAEC.cpp中取消宏EXTCODEC_ECHO_REFERENCE_SUPPORT的定义,这样会将AEC参考信号改为MTK平台自带(而不用nxp(smartpa)) #ifndef CONFIG_BSP_AUDIO_SUPPORT #define EXTCODEC_ECHO_REFERENCE_SUPPORT #endif
手机灭屏后,关闭了LCD和TP,同时降低了CPU的工作频率,CPU降频后,进入低功耗工作模式,可能会改变播放线程的优先级,导致write audio data丢失,机器可能出现杂音卡顿
抓取数字寄存器reg的adb命令 adb shell cat /sys/kernel/debug/mtksocaudio > D:AFEreg.txt Digital register 抓取模拟寄存器reg的adb 命令 adb shell cat /sys/kernel/debug/mtksocanaaudio > D:PMICreg.txt Analog register
adb shell “echo Setafereg,regaddr,0x18,regvalue,0x9000100a > /sys/kernel/debug/mtksocaudio” //将bit0设为0即关闭i2s0 adb shell “echo Setafereg,regaddr,0x4c,regvalue,0x190a > /sys/kernel/debug/mtksocaudio”//将bit0设为0即关闭i2s3 adb shell “echo Setafereg,regaddr,0x4,regvalue,0x2 > /sys/kernel/debug/mtksocaudio” //soft reset lock adb shell “echo Setafereg,regaddr,0x18,regvalue,0x9010100a > /sys/kernel/debug/mtksocaudio” //设置bit20 loopback adb shell “echo Setafereg,regaddr,0x18,regvalue,0x9010100b > /sys/kernel/debug/mtksocaudio” //开启i2s0 adb shell “echo Setafereg,regaddr,0x4c,regvalue,0x190b > /sys/kernel/debug/mtksocaudio”//开启i2s3 adb shell “echo Setafereg,regaddr,0x4,regvalue,0x0 > /sys/kernel/debug/mtksocaudio” //normal unlock
在播放音乐过程中 反复多次插拔USB,可能会存在USB的数据流通过混用的地线串扰到音频接口上造成 播放杂音 可以使用adb命令 抓取Audio pcm log audio_dump L版本adb命令 adb shell setprop af.track.pcm 1 adb shell setprop af.mixer.end.pcm 1 adb shell setprop af.mixer.pcm 1 adb shell setprop af.mixer.write.pcm 1 adb shell setprop streamout.pcm.dump 1 抓取reg的adb命令 adb shell cat /sys/kernel/debug/mtksocaudio > D:AFEreg adb shell cat /sys/kernel/debug/mtksocanaaudio > D:PMICreg
当前的耳机模式下面的MIC 模拟增益值设置的是多少?我们从log中看到该值设置在172,所以看到UL的信号偏小,请帮忙将这个值设置在180然后再做相关的测试. 按照以下步驟調整 mic 音量 進入工模 (撥號畫面下輸入 ##3646633##) -> Hardware Testing -> Audio -> Headset Mode -> Type 選 Mic -> 將 Level 3 的 Value 設為 180
AudioFlinger.h中 static const nsecs_t kDefaultStandbyTimeInNsecs = seconds(3); 可以修改Standby 时间 standby是由AudioFlinger控制的,一旦满足以下条件后,没有AudioTrack处于活动状态并且已经到达了standbyTime这个时间就进入Standby模式。那么standbyTime=systemTime() + standbyDelay,也就是过了standbyDelay这段时间后,音频系统将进入待机,关闭音频设备 kDefaultStandbyTimeInNsecs 设置过短,导致播放短促音频时AudioTrack还处于活动状态,此刻已经到达了standbyTime这个时间就进入Standby模式,拨号盘会出现卡顿嘶哑的声音。
I AudioPolicyManager: loadAudioPolicyConfig() loaded /system/etc/audio_policy.conf device/mediatek/k50v1_66_cxo_pre/audio_policy.conf audio_policy.conf的配置根据底层Audio驱动注册信息来完成,配置好audio_policy.conf,上层便可打开audio_policy.conf中定义的虚拟设备,进而自动选择相应的音频通路。
D AudioALSAStreamManager: +routingOutputDevice(), output_devices: 0x2 => 0x20 //Device routing通路切换的关键词
从UL0到UL1会经过speech enhancement的处理 UL0是数字端能抓取的最接近mic的data, 如果UL0有问题,可能有2种情况: 1.mic hw问题导致送给PMIC的模拟信号就有问题,mic hw也有可能概率出问题; 2.PMIC的问题,这个需要通过register来检查是不是出问题时PMIC有异常;
android L DRC的开启如下:
-
ProjectConfig.mk MTK_BESLOUDNESS_SUPPORT=yes //为yes表示开启了DRC -
alps\frameworks\av\services\audioflinger\Android.mk #ifeq ($(strip $(MTK_BESLOUDNESS_SUPPORT)),yes) LOCAL_CFLAGS += -DMTK_AUDIOMIXER_ENABLE_DRC //需要有这行 #endif 连接 AudioTools 工具 ,选择里面的 “DRC” 选项 ,进行读入 参数是否 有效果 -
在setting菜单里面的喇叭音量助推器是个动态开关,开了数据会经过DRC处理,关了DRC算法不做任何处理。
ToneGenerator: getToneForRegion, tone 0, region 2, regionTone 0 按下数字0
没有声音是因为没有audiotrack资源可用,需要apk同事帮忙check 上层是否存在没有及时release audiotrack资源的情形。 10-13 09:32:56.090 15238 15315 W AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client 10-13 09:32:56.091 293 293 E AudioMixer: AudioMixer::getTrackName out of available tracks 10-13 09:32:56.091 293 293 E AudioFlinger: no more track names available
tar czvf mediatek.tar.gz mediatek/ 压缩下
来电铃声流程正常,log中有多个进程因为lowmemory被杀,是否是系统内存问题导致的声音卡顿. <6>[14290.078905]<0> (0)[69:kswapd0]lowmemorykiller: Killing ‘nee.anti.stolen’ (21398), adj 18, score_adj 1000 播放音乐卡顿问题,不仅仅是cpu性能问题,还有emmc的读写瓶颈问题
在下面方法中加上打印语句,这样只要提供复现问题时的mtklog就可以打印 Audio 寄存器信息。 mt_soc_pcm_dl1_i2s0Dl1.c static int mtk_pcm_I2S0dl1_start(struct snd_pcm_substream *substream) { 。。。。 Ana_Log_Print(); //在return 0前加上这2行打印寄存器code. Afe_Log_Print();
return 0; }
MIC的BIAS电压就是为MIC内部的JFET提供合适的直接偏置电压,麦克里面有个FET管,而这个电压正是为放大管提供偏置电压的.这样的话麦克才能工作
对于短音频,由于MediaTek的HW buffer size比较大,afLatency也会比较大,在AudioTrack中计算的shared buffer size比较大,因此会发生短音频播放不出来的情况。如果要减小HW buffer size,可以降低afLatency的值,减小shared buffer size,可以播放短音频。减小HW buffer size,会增大功耗。
AudioALSAStreamOut.cpp #ifdef MTK_DYNAMIC_CHANGE_HAL_BUFFER_SIZE #define LOW_POWER_HAL_BUFFER_SIZE (45056) #define LOW_LATENCY_HAL_BUFFER_SIZE (8192) Qualcomm可能 才1000左右 #endif
Android平台 统一固定采样率为 SampleRate = 44100 还是要按照MTK的设计, 不要固定采样率. 音乐采样率切换的时候只要正确配置我们PA NXP的采样率就没问题
理论上 FM外放时 采样率为 44100,AudioALSAFMController.cpp中 pAudioALSASampleRateController->setPrimaryStreamOutSampleRate(44100); 如果在device/gionee/gionee6753_66c_m0/audio_policy.conf 将sampling_rates固定为48000 则AudioALSAFMController.cpp 也应该修改pAudioALSASampleRateController->setPrimaryStreamOutSampleRate(480000) 上层与底层的采样率 要保持一致,上层会询问 kernel是否支持44100 或者48000 66 outputs { 67 primary { 68 sampling_rates 48000
增加文件 dump audio pcm FILE *tmpFd; tmpFd = fopen("/data/srspre.pcm", “ab+” ); if ( tmpFd < 0 ) { ALOGE(“No dump file”); } else{ fwrite(mMixBuffer, mixBufferSize, 1, tmpFd); fclose(tmpFd); }
Mediatek\custom\common\kernel\imgsensor\src\kd_sensorlist.c iWriteReg()中最前面加上g_pstI2Cclient->timing,表示设置I2C的速度 如果不设置,为默认值100K ,比如想将I2C的speed设置为400K,可将g_pstI2Cclient->timing设置为400K msg.timing = I2C_MASTER_CLOCK 调整i2c传输速率,搜索关键词timing i2c速率从 100k 提升到 400 k除了软件修改外,也需要硬件 将上拉电阻进行修改,这是因为如果硬件上不做相应适配,会导致I2C 通讯不稳定,影响到划 手势
MTK Audio PCM 工具解析步骤 1.af_mixer_pcm.pcm请使用44.1khz,双声道,32bit播放;
2.af_track_pcm_0xaac6d588.pcm请使用44.1khz,双声道,16bit播放;
3.streamout.pcm.0.AudioALSAPlaybackHandlerNormal.pcm请使用附件"PCM2WAV_Tool.rar"的工具pcm_to_wav_44.1kHz_Q9p23_stereo.exe转成wav播放; (具体转换方法是将streamout.pcm.0.AudioALSAPlaybackHandlerNormal.pcm直接拖至工具pcm_to_wav_44.1kHz_Q9p23_stereo.exe)
4.streamout.pcm.0.AudioALSAStreamOut.pcm 请使用附件"PCM2WAV_Tool.rar"的工具pcm_to_wav_44.1kHz_32bit_stereo.exe转成wav播放. (具体转换方法是将streamout.pcm.0.AudioALSAStreamOut.pcm直接拖至工具pcm_to_wav_44.1kHz_32bit_stereo.exe)
D SpeechDriverLAD: SetUplinkMute(), mute_on = 1, old mUplinkMuteOn = 0 在打电话的时候上行mic被静音了
一帧大小=一个采样点字节数 * 声道数
DRC:动态范围控制 (Dynamic range control) 常用于音频输出的柔和压限 DRC(dynamic range compress)动态范围压缩。其作用相当于power limiter来保护负载不被烧坏。当输出的音频信号不是很大的时候,系统会按照原来的设定输出,但是当输出的音频信号过大的时候,为了保护喇叭DRC会将输出信号的幅度进行压缩将其限制在一个范围内。因为输出的音频信号过大会引起削峰,从而引起音频失真,并且损坏喇叭,所以需要有DRC的作用来将输出限制在一定的范围内。在信号很小的时候DRC是不会起作用的,只有当输出信号的功率超过了你设定的DRC门限的时候DRC才会工作。
插入三段耳机后自动关闭micbias,Open 宏ACCDET_LOW_POWER 就可以实现. 在accdet.c文件中有定义宏 #define MICBIAS_DISALBE_TIMER (6*HZ) 修改这个值就可以修改 自动关闭micbias的时间
ACCDET_LOW_POWER 当插入三段耳机6s后自动关闭micbias,达到省电的目的 但是插入四段式 耳机后 mic将无法工作,也无法响应音量+ - 按键
耳机MIC_BIAS1配置为高 mic_bias 修改accdet.c中: pmic_pwrap_write(ACCDET_PWM_WIDTH, REGISTER_VALUE(cust_headset_settings->pwm_width)); pmic_pwrap_write(ACCDET_PWM_THRESH, REGISTER_VALUE(cust_headset_settings->pwm_thresh)); 将pwm_width 和pwm_thresh 设置为相等。
手机插入耳机时有POP音 若复现pop的方法是连续插拔耳机的话,那出现pop音属于目前ACCDET+EINT的已知问题。因为在拔出耳机时,Earbias上10uF大电容上的电并不能快速放掉,若在较短时间内再插入耳机,当插入过程中的耳机左右声道碰到MIC Pin时,就会听到pop noise。对于此问题暂时还没有解法。
如果采用 Smart PA,FM外放 要走Smart PA,ProjectConfig.mk必须要配置成 数字信号 MTK_FM_TX_AUDIO = FM_DIGITAL_OUTPUT MTK_FM_RX_AUDIO = FM_DIGITAL_INPUT
audio_device.xml中的配置可以在 AudioALSADeviceConfigManager.cpp 进行查看 MTK的 Audio设备加载配置文件 为/system/etc # vim audio_device.xml 有关通路配置都在此文件
音频参数中 CFG_AUDIO_File.h Audio Data Structure definition #define VER1_AUD_VOLUME_SPH \ 代表不同场景 56,68,84,96,108,120,132,0,0,0,0,0,0,0,0,\ normal mode 44,56,68,80,92,104,116,0,0,0,0,0,0,0,0,\ headset mode 48,60,72,84,96,108,120,0,0,0,0,0,0,0,0,\ Loudspeaker mode 40,52,64,76,88,100,112,0,0,0,0,0,0,0,0 Headset_Loudspeaker mode status_t AudioALSAVolumeController::initVolumeController()中设置音频参数 AudioMTKPolicyManager.cpp
mic增益 只能更改模拟增益,底层 传输音频数据 都是通过 DMA方式 D/AudioALSAVolumeController( 257): SetLSpeakerGain,DegradedBGain=5
出现无声时 复现问题后 请打开Audio pcm log 出现无声时 手机USB连接电脑 输入如下adb命令 adb shell cat /sys/kernel/debug/mtksocaudio > D:afe_reg.txt adb shell cat /sys/kernel/debug/mtksocanaaudio > D:pmic_reg.txt
然后在03 04打tone音看有没有声音 adb shell “echo Setafereg,regaddr,0x000001f0,regvalue,0x2c9a19a1 >/sys/kernel/debug/mtksocaudio” 关闭tone音 adb shell “echo Setafereg,regaddr,0x1f0,regvalue,0xF0000000 >/sys/kernel/debug/mtksocaudio”
在I5 I6打tone音看有没有声音 adb shell “echo Setafereg,regaddr,0x000001f0,regvalue,0x349a19a1 >/sys/kernel/debug/mtksocaudio” 关闭tone音 adb shell “echo Setafereg,regaddr,0x1f0,regvalue,0xF0000000 >/sys/kernel/debug/mtksocaudio”
Android 7.0 打开Audio pcm log方法如下: 1. 拨号界面输入“*#446633#”,进入工程模式 2. 选择Hardware Testing --> Audio–>Audio Logger 3. 勾选 Output 和Input 以及下面的AudioMixer ,分别点击确定即可。 4. 保存的log会在/sdcard/mtklog/audio_dump/ 即后缀为.pcm的log
抓音频 VM log的时候,进入工模里面audio-》speech enhancement-》common parameter 中index0改成6,这样抓出来的通话log才是完整的 打开VMlog方法如下: 1、拨号界面输入“*#446633#”,进入工程模式 2、选择Hardware Testing --> Audio–>Specch Logger 3、点击Enable speech log 复选框 选择 “Normal -VM+EPL” 4、点击Dump Specch Debug info按钮,显示成功即可。 5、保存的log会在/sdcard/mtklog/audio_dump/vm_log 即后缀为.vm的log。
通过 VM log 抓取到 AEC的参考信号 方法如下:
- 通话前请开启双方机器的 mtk log
- *#446633# 进入工程模式-》Hardware Testing -> Audio -> Speech Logger
勾选 Enable speech log,选择 Normal-VM+EPL,点击Dump Specch Debug info按钮 开启VM log - *#446633# 进入工程模式-》Hardware Testing -> Audio ->Speech Enhancement
最上面一项请选择common Parameter , 请将第一个选项:Index 0的值从0 改写成 7,并点击最下面的“Set” 按钮使设置生效 以上三个步骤缺一不可,将双方通话机器进行上述设置,这样才能抓取到 AEC的参考信号
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/Command + B 斜体:Ctrl/Command + I 标题:Ctrl/Command + Shift + H 无序列表:Ctrl/Command + Shift + U 有序列表:Ctrl/Command + Shift + O 检查列表:Ctrl/Command + Shift + C 插入代码:Ctrl/Command + Shift + K 插入链接:Ctrl/Command + Shift + L 插入图片:Ctrl/Command + Shift + G 查找:Ctrl/Command + F 替换:Ctrl/Command + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。 输入2次#,并按下space后,将生成2级标题。 以此类推,我们支持6级标题。有助于使用TOC 语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片 .
var foo = 'bar';
生成一个适合你的列表
- 项目1
- 项目2
- 项目3
创建一个表格
一个简单的表格是这么创建的:
设定内容居中、居左、居右
使用:---------: 居中 使用:---------- 居左 使用----------: 居右
第一列 | 第二列 | 第三列 |
---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ | Quotes | "Isn't this fun?" | “Isn’t this fun?” | Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
创建一个自定义列表
Markdown
-
Text-to-
HTML conversion tool
Authors
-
John
-
Luke
如何创建一个注脚
一个具有注脚的文本。
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示
Γ
(
n
)
=
(
n
?
1
)
!
?
n
∈
N
\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N
Γ(n)=(n?1)!?n∈N 是通过欧拉积分
Γ
(
z
)
=
∫
0
∞
t
z
?
1
e
?
t
d
t
?
.
\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.
Γ(z)=∫0∞?tz?1e?tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
Mon 06
Mon 13
Mon 20
已完成
进行中
计划一
计划二
现有任务
Adding GANTT diagram functionality to mermaid
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
张三
李四
王五
你好!李四, 最近怎么样?
你最近怎么样,王五?
我很好,谢谢!
我很好,谢谢!
李四想了很长时间, 文字太长了
不适合放在一行.
打量着王五...
很好... 王五, 你怎么样?
张三
李四
王五
这将产生一个流程图。:
FLowchart流程图
我们依旧会支持flowchart的流程图:
Created with Rapha?l 2.3.0
开始
我的操作
确认?
结束
yes
no
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入, 继续你的创作。
|