子类__Audio
文章平均质量分 55
KrisFei
工作记录.
展开
-
[RK3399][Android7.1] 调试笔记 --- HDMI输出没有音频信号
Platform: RK3399OS: Android 7.1 industryKernel: v4.4.83现象:主屏使用HDMI,插入显示屏播放音乐,只有显示没有声音。Log:01-18 08:51:20.024 414 437 D AudioHardwareTiny: start_output_stream: the number of HDMI is invalid,...原创 2019-08-16 18:39:29 · 8466 阅读 · 11 评论 -
[RK3288][Android6.0] 调试笔记 --- 3GPP转成PCM格式
Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92用SoundRecorder APK录出来的声音格式是3GPP格式,现在需要转换成pcm格式。一种是源代码实现输出,见 How to read raw values of 3gp / AMR-NB audio format?另外一种是在线先转换成wav(见3GPP to WAV),转过过程很简单,原创 2017-11-20 13:41:39 · 1190 阅读 · 0 评论 -
[RK3288][Android6.0] 调试笔记 --- 如何确认声卡是否注册成功
Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92方法一: root@rk3288:/proc/asound/card0 # cat /proc/asound/cards 0 [RKRT5631 ]: RK_RT5631 - RK_RT5631 RK_RT5631方法二:原创 2017-10-31 09:42:32 · 3340 阅读 · 0 评论 -
[RK3288][Android6.0] 调试笔记 --- RT5640 I2S对应的ADC/DAC通路
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92Audio Codec RT5640 有两路I2S,如下图:原本以为I2S1对应的就是ADCLR1/DACLR1,I2S2对应的就是ADCLR2/DACLR2,但是我们的硬件原理图 只使用了I2S1,但是软件的配置确是走的ADCLR2/DACLR2通路,并能正常播放声音。后来发现I2S可以选原创 2017-10-20 15:32:25 · 4788 阅读 · 0 评论 -
[RK3288][Android6.0] 音频输入接口Mic In和Line In
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92Mic in的信号幅度很小,需要在接入电路上加入放大电路,另外其匹配阻抗较line in要大很多。 Line in的输入信号幅度可以很大,且接入电路上无需加入放大电路。像我们平常用的录音的MIC就可以接Mic in接口, 如果要直接接音响输出这类幅值大的,那么就接Line in。放大电路一般在A原创 2017-10-11 14:17:36 · 10060 阅读 · 5 评论 -
RK3288][Android6.0] ALSA dapm框架中的widget/path/route
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92kcontrol缺点: 各自独立,无法控制各个kcontrol之间的连接。widget: widget是kcontrol的升级和封装,它也是是指音频系统中的某个部件,比如mixer,mux,输入输出引脚,电源供应器等等。 widget把kcontrol和动态电源管理进行了有机的结合,同时还具备原创 2017-10-11 08:55:50 · 1490 阅读 · 0 评论 -
[RK3288][Android6.0] 用户空间对音频寄存器的控制
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92Audio HAL控制驱动中的寄存器是通过kcontrol结构实现的,kcontrol有多种类型,如mixer, mux等,由struct snd_kcontrol_new表示。简单型控件: 只有一个控制量,比如一个开关。如:static const struct snd_kcontrol_n原创 2017-09-29 17:28:49 · 1777 阅读 · 0 评论 -
[RK3288][Android6.0] 调试笔记 --- RT5640的ctl name列表
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 Codec: RT5640在查看录音通路的ctl config列表时发现有找不到的ctrl name, 例如:const struct config_control rt3261_main_mic_capture_controls[] = { { .ctl_nam原创 2017-09-29 08:50:27 · 2953 阅读 · 7 评论 -
[RK3288][Android6.0] 调试笔记 --- RT5640播放时的Codec寄存器列表
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92RT5640用的是RT3261的驱动.speaker接的HPOL和HOPR. 正常播放走speaker, 对应config配置在hardware/rockchip/audio/tinyalsa_hal/codec_config/rt3261_config.h中.const struct conf原创 2017-09-28 09:39:18 · 4191 阅读 · 10 评论 -
[RK3288][Android6.0] 调试笔记 --- RT5640录音时的Codec寄存器列表
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 Codec: RT5640此文给调试RT5640播放无声音的朋友做参考。RT5640用的是RT3261的驱动.MIC接的是MIC1通路正常播放走main mic, 对应config配置在hardware/rockchip/audio/tinyalsa_hal/codec_config/r原创 2017-09-28 09:52:15 · 3688 阅读 · 0 评论 -
[RK3288][Android6.0] 调试笔记 --- 命令行录音方法
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92录制wav文件: 使用tinycap root@rk3288:/ # tinycap /data/test.wavtinycap用法:录制mp3文件使用系统自带的录音机 root@rk3288:/ #am start -n com.android.soundrecorder/co原创 2017-09-27 09:25:47 · 4005 阅读 · 0 评论 -
[RK3288][Android6.0] 调试笔记 --- 命令行播放音乐方法
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92播放wav文件可以使用tinyplay tinyplay /data/test.wavtinyplay用法 root@rk3288:/ # tinyplay Usage: tinyplay file.wav [-D card] [-d device] [-p period_size原创 2017-09-27 08:59:09 · 1977 阅读 · 9 评论 -
[RK3288][Android6.0] 移植笔记 --- RT5640 Audio Codec添加
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92之前平台用的RT5631, 由于此IC将要停产,所以需要替换为RT5640.RT5640和RT3224在硬件和软件上完全兼容, 而RK配置RT3224时用是RT3261的驱动,有点绕.以下是添加步骤: 1. 开启对应宏 kernel/arch/arm/configs/rockchip_defc原创 2017-09-26 15:48:48 · 6319 阅读 · 5 评论 -
[RK3288][Android6.0] 有线耳机驱动小结
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92OverviewRockchip针对有线耳机的驱动单独建了目录, 在kernel/drivers/headset_observe/下rockchip_headset_core.c: 读取dts中的配置,根据配置不同决定使用adc还是普通的headset探测。rk_headset.c: 普通方式原创 2017-09-06 16:06:45 · 4759 阅读 · 18 评论 -
[RK3288][Android6.0] 调试笔记 --- 关闭按键音后无法录音问题
Platform: ROCKCHIPOS: Android 6.0Kernel: 3.10.92这个问题蛮奇怪的,现象是:1. 默认系统按键音是打开的,然后去录音,是正常的.2. 当把按键音关闭之后再去录音,虽然录音有在工作,但是不能录制到声音.理论上说播放和录音是两条不相干的通路,可以同时工作,也可以独立工作,可事实上播放的配置影响到了录音. 有通原创 2017-04-11 14:00:00 · 2213 阅读 · 2 评论 -
[RK3288][Android6.0] 音频调试方法小结
Platform: ROCKCHIPOS: Android 6.0Kernel: 3.10.92以rt5631为例,后续遇到再增加.使用tinyalsa工具确定播放音问题是否在驱动层1|root@rk3288:/data # tinycap test.wav Capturing samp原创 2017-04-11 14:33:32 · 10249 阅读 · 11 评论 -
[RK3288][Android6.0] 调试笔记 --- 关闭音频播放停止后进入Standby功能
Platform: ROCKCHIPOS: Android 6.0Kernel: 3.10.92Android系统默认播放停止后3秒会进入Standby模式以节省电源.需求: 禁止进入StandbyHAL层虽然提供了Standby接口,但是不能直接屏蔽掉, 因为里面有pcm_close()和播放的pcm_start()配对.解决方法:原创 2017-04-12 18:15:04 · 3922 阅读 · 12 评论 -
[RK3399][Android7.1] Audio中的Ducking模式
Platform: rk3399 OS: Android 7.1 Kernel: v4.4.83概念: Ducking就是当其他应用在使用音频时降低自身音量的过程。 举例: 当你开车在边听车载音乐边导航时,当导航发声时,音乐会自动变小,等当行播放完毕,音乐又正常恢复到原来的音量。背景: 摘网友一段话来描述AudioFocus的来历,Ducking属于其中的一种模式:...原创 2018-03-02 14:18:45 · 2955 阅读 · 2 评论 -
[RK3399][Android7.1] 移植笔记 --- 音频Codec RT5640添加
Platform: RK3399 OS: Android 7.1 Kernel: v4.4.83原理图:数据走I2S1通道控制走I2C1通道输出走HPOUTL/HPOUTR改动:DTS配置: //Kris,180706, porting rt5640 on i2s1. rt5640-sound { compatible ...原创 2018-07-10 14:06:03 · 16409 阅读 · 34 评论 -
[RK3399][Android7.1] 调试笔记 --- 两种HDMI音频框架配置
Platform: RK3399OS: Android 7.1 industryKernel: v4.4.83HDMI显示有两套流程框架。一套是基于DRM显示标准的HDMI框架;另外一套是RK自定义的HDMI框架。那么对应地,HDMI Audio部分也对应的是有两套流程框架。DRM标准HDMI框架显示部分配置: hdmi: hdmi@ff940000 { compatible ...原创 2019-08-19 11:02:12 · 3122 阅读 · 0 评论 -
[RK3399][Android7.1] 4通道ADC芯片ES7210驱动源码
Platform: RK3399OS: Android 7.1Kernel: v4.4.83说明:内核里并没有关于ADC芯片ES7210的源码,驱动基于ES7243,分享给大家。/* * ALSA SoC ES7210 adc driver * * Author: David Yang, <yangxiaohua@everest-semi.com> * Co...原创 2019-02-20 14:25:35 · 5226 阅读 · 17 评论 -
[RK3399][Android7.1] 调试笔记 --- 兼容思必驰语音识别模块到系统中
Platform: RK3399OS: Android 7.1Kernel: v4.4.83需求:使用思必驰的方案做语音识别功能,并且不影响普通的麦克风录音功能。分析:由于speech也是用的内置mic设备(软件中),这样和会系统使用的录音设备冲突,导致audio policy中的input profile只有一个有效。 因此两种方法解决此问题:1.修改speech使用的设备2....原创 2019-01-16 18:48:28 · 3426 阅读 · 8 评论 -
[RK3399][Android7.1] 音频中audio_policy.conf的作用
Platform: RK3399OS: Android 7.1Kernel: v4.4.83文件内容:按模块划分,比如primary,a2dp, usb…模块里包含硬件设备支持的参数,比如采样率、通道数、数据位深。audio_hw_modules { primary { outputs { primary { sampling_rates 44...原创 2019-01-03 10:55:03 · 3723 阅读 · 2 评论 -
[RK3399][Android7.1] 调试笔记 --- 虚拟声卡驱动添加
Platform: RK3399OS: Android 7.1Kernel: v4.4.83需求:当前默认一个普通的codec已经无法满足需求了,如回声消除,降噪,唤醒等功能。RK3399平台的I2S0通道提供最高8路通道录音支持。如果拿到一个麦克阵列,那么可以添加到此路通道上。I2S1就接普通codec.代码实现:firefly平台也有对应的实现,可参考。这部分代码是由roc...原创 2018-12-24 18:24:02 · 6946 阅读 · 12 评论 -
[RK3399][Android7.1] 调试笔记 --- 读取当前系统音量
Platform: RK3399OS: Android 7.1Kernel: v4.4.83需求:当系统音量出问题比如没有声音的时候需要查看系统当前音量设置。可以有不同方法实现:写一个test app通过audiomanager获取。原始代码中添加log获取。通过读取data下文件获取。最方便的就是方法三。解决方法:系统所有当前设置的音量都被保存到了/data下,读取对应...原创 2018-12-24 17:25:44 · 1312 阅读 · 6 评论 -
[RK3399][Android7.1] 调试笔记 --- 使用ADC芯片ES7243遇到的问题
Platform: RK3399OS: Android 7.1Kernel: v4.4.83用途:ES7243模块用于环形麦克场景时,采集的是音频播放的声音,然后采到之后回送到CPU,和麦克录取到的声音做消回声处理。遇到问题: 问题一:I2C通信失败,波形和电压都正常。原因一:ES7243的I2C受MCLK影响, 需要发送两个0101的MCLK,I2C才能工作。改动:st...原创 2018-12-05 16:26:18 · 6578 阅读 · 17 评论 -
[RK3399][Android7.1] 调试笔记 --- Audio codec时钟源从BCLK1获取
Platform: RK3399OS: Android 7.1Kernel: v4.4.83需求:默认codec的clock source是从I2S1的mclk获取,由于I2S0和I2S1的mclk是共用同一个,而且同一时刻只有一个I2S模块才能使用,因此I2S1接的RT5640 Codec的时钟源改从BCLK1来获取。此功能codec也是支持的。信号源选择方法:参考RT5640...原创 2018-11-28 14:37:04 · 5553 阅读 · 10 评论 -
[RK3399][Android7.1] 调试笔记 --- tinycap无法录音
Platform: RK3399OS: Android 7.1Kernel: v4.4.83现象:使用系统自带的tinycap录音,发现录取到的wav文件没有声音。原因:tinycap运行时,clk_i2sout没有被enable.如下图,左边是用录音机录音,右边是tinycap录音。对应代码:执行tinycap的时候不会调用到rt5640_set_bias_level()...原创 2018-12-04 19:20:22 · 4634 阅读 · 23 评论 -
[RK3399][Android7.1] 调试笔记 --- I2S1工作输出是12MHz问题
Platform: RK3399OS: Android 7.1Kernel: v4.4.83现象:使用I2S1通道,测量到的I2S MCLK是12MHz.理论上应该是11.288MHz.原因:rk3399平台有三路I2S(其中一路内部使用,可以不管),但是MCLK只有一个,也就是说两路I2S只有一路能占用。而默认的sdk中,I2S1输出时,使用的是I2S0的MCLK,I2S0默认是...原创 2018-11-13 16:19:19 · 4431 阅读 · 0 评论 -
[RK3399][Android7.1] 调试笔记 --- 解决开关按键时产生的Pop声
Platform: RK3399OS: Android 7.1Kernel: v4.4.83背景:按键音在打开和关闭的时候,会有pop声。原因:audio codec后面有个功放,功放一直打开着,当codec打开和关闭的时候,会有噪声带进到功放中。解决方法:注:GPIO4_D4是用来控制功放的开关。diff --git a/arch/arm64/boot/dts/rockch...原创 2018-11-01 14:17:12 · 4567 阅读 · 7 评论 -
[RK3399][Android7.1] Audio中的MCLK时钟小结
Platform: RK3399OS: Android 7.1Kernel: v4.4.83Power Domain:audio codec的clk被关联到power domains中管理。rk3399.dtsi:i2s0: i2s@ff880000 { //...... clock-names = &amp;amp;amp;amp;quot;i2s_clk&amp;amp;amp;amp;quot;, &amp;a原创 2018-10-23 17:34:15 · 7437 阅读 · 8 评论 -
[RK3399][Android7.1] 调试笔记 --- 系统音量无法调节
Platform: RK3399OS: Android 7.1Kernel: v4.4.83背景:刚开始配置完音频codec后声音是正常,后来改着改着发现音量无法调节了。调试:测试修改了下codec的输出gain值是可以调节声音的,说明问题出在软件调节声音模块。HAL层dump不同音量级别的data,发现没有变化。根据音量调节的过程,在各个层添加log查看volume的值,发现...原创 2018-09-27 15:58:05 · 3586 阅读 · 0 评论 -
[RK3399][Android7.1] 调试笔记 --- Codec播放音乐会有底噪
Platform: RK3399OS: Android 7.1Kernel: v4.4.83背景:移植完Codec RT5640之后,发现播放声音的时候底部有噪声。用示波器测量到的左右声道波形如下:左声道波形:右声道波形:左右声道波形:原因:一般波形上有这种有规律的毛刺基本上都是clock的问题。经后面分析查证,发现i2s1的master clock在主rk3399....原创 2018-09-27 15:35:57 · 3584 阅读 · 5 评论 -
[RK3288][Android6.0] 调试笔记 --- tinyplay无法播放
Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92现象:执行tinyplay播放wave文件一点反应都没有,卡在那边不动。分析:系统开机之后会开打audio codec,然后过了三秒如果没有操作之后,那么就会关闭device。 从log上看,device并未关闭。08-29 13:39:55.524 215 2...原创 2018-08-29 18:28:58 · 4039 阅读 · 4 评论 -
[RK3399][Android7.1] 调试笔记 --- 播放音乐没有声音
Platform: RK3399 OS: Android 7.1 Kernel: v4.4.83现象:使用自带播放器播放音乐,没有声音。Log:01-18 13:34:17.119 306 352 D alsa_route: route_info->sound_card 0, route_info->devices 0 01-18 1...原创 2018-07-12 13:52:51 · 6575 阅读 · 3 评论 -
[RK3288][Android6.0] 开机播放音乐流程小结
Platform: ROCKCHIPOS: Android 6.0Kernel: 3.10.92main -> bootanimation_main.cpp new BootAnimation -> Bootanimation.cpp BootAnimation::threadLoop -> BootAnimation::原创 2017-04-17 10:23:41 · 4993 阅读 · 14 评论 -
[RK3288][Android6.0] 调试笔记 --- 实时录音会有呲呲噪音问题
Platform: RockchipOS: Android 6.0Kernel: 3.10.92需求:APP按照16k, 16bit, 单声道去读取录音数据, 每100ms读取一次,也就是一次要读取3200字节,读取完之后写到网络发送到发送到PC.现象:经验证发现,如果读取之后直接写到文件,听到的声音不会有呲呲的噪音.而当写到网络发送缓冲时,因为耗时比写文件原创 2017-05-05 18:39:11 · 6122 阅读 · 2 评论 -
[RK3288][Android6.0] Audio播放时的pcm数据dump思路
Platform: RockchipOS: Android 6.0Kernel: 3.10.92其实这块RK已经写了,不过它的思路很好,即通过动态调节property而来决定是否需要dump data,这样的话在不用reboot的情况下就可以拿数据了,适合处理once的bug,其他模块也可以用这个思路。static ssize_t out_write(struct audio_原创 2017-06-07 13:19:48 · 3779 阅读 · 0 评论 -
[RK3288][Android6.0] Audio的音量设置流程小结
Platform: RockchipOS: Android 6.0Kernel: 3.10.92说明一: AudioManager提供了两个调节音量接口adjustSuggestedStreamVolume(): 只能一级级调,按键调用的就是这个接口. setStreamVolume(): 可以直接设置成你想要的音量level.说明二:本平台 hardware/libhar...原创 2017-06-08 17:34:16 · 5679 阅读 · 2 评论 -
[RK3288][Android6.0] Audio的音量计算过程小结
Platform: RockchipOS: Android 6.0Kernel: 3.10.92AudioPolicyManager::checkAndSetVolume -> AudioPolicyManager.cpp AudioPolicyManager::computeVolume -> mEngine->volIndexToDb -> Eng原创 2017-06-09 14:24:43 · 5242 阅读 · 9 评论