完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、PCM
脉冲编码调制(PCM)是一种用于数字表示采样模拟信号的方法。它是数字音频在计算机、光盘、数字电话和其他数字音频应用中的标准形式。在PCM流中,模拟信号的振幅以均匀的间隔进行有规律的采样,并在数字步长的范围内将每个采样量子化到最接近的值。线性脉码调制(LPCM)是一种特定类型的PCM,其量化电平是线性均匀的。这与PCM编码量化水平不同振幅的函数(如 A-law算法或μ-law算法)。尽管PCM是一个更通用的术语,但它通常用于描述被编码为LPCM的数据。 pcm设备,通过阅读tinyalsa的代码和查看Android下的音频设备节点,可知在Android中一个pcm设备最多可有一个mixer设备"/dev/snd/controlC%u"(一般是controlC0)和32个/dev/snd/pcmC%uD%uc(一般是pcmC0D0c)、 /dev/snd/pcmC%uD%u%p(一般是pcmC0D0p), pcm设备中的C代表card,D代表device,c代表capture,p代表playback。 当我们新增一个pcm声卡C的值会+1,D还是从0开始,可能只有c(pcmC1D0c 例如麦克风),可能只有p(pcmC1D0p 例如音响),可能同时存在c和p(pcmC1D0c pcmC1D0p )。 rk3288:/ # ls -l dev/snd/ total 0 crw-rw---- 1 system audio 116, 2 1970-01-01 00:00 controlC0 crw-rw---- 1 system audio 116, 10 1970-01-01 00:00 controlC1 crw-rw---- 1 system audio 116, 4 1970-01-01 00:00 pcmC0D0c crw-rw---- 1 system audio 116, 3 1970-01-01 00:00 pcmC0D0p crw-rw---- 1 system audio 116, 6 1970-01-01 00:00 pcmC0D1c crw-rw---- 1 system audio 116, 5 1970-01-01 00:00 pcmC0D1p crw-rw---- 1 system audio 116, 8 1970-01-01 00:00 pcmC0D2c crw-rw---- 1 system audio 116, 7 1970-01-01 00:00 pcmC0D2p crw-rw---- 1 system audio 116, 9 1970-01-01 00:00 pcmC0D3p crw-rw---- 1 system audio 116, 11 1970-01-01 00:00 pcmC1D0p crw-rw---- 1 system audio 116, 33 1970-01-01 00:00 timer 2、ALSA 目前Linux中主流的音频体系结构是ALSA(Advanced Linux Sound Architecture),ALSA在内核驱动层提供了alsa-driver,在应用层提供了alsa-lib,应用程序只需要调用alsa-lib提供的API就可以完成对底层硬件的操作。但是Android中没有使用标准的ALSA,而是一个ALSA的简化版叫做tinyalsa。Android中使用tinyalsa控制管理所有模式的音频通路,我们也可以使用tinyalsa提供的工具进行查看、调试。 3、tinyalsa的对外提供的头文件是"asoundlib.h",提供最基础的pcm和mixer操作。实现文件为pcm.c(实现pcm api)和mixer.c(实现mixer api)。根据asoundlib.h编写了四个小工具tinypcminfo tinyplay tinycap tinymix,这四个小工具作为系统命令存放在系统中,可以很方便的使用。 代码目录:external/tinyalsa/ tinypcminfo的实现文件tinypcminfo.c (查看pcm设备的功能和信息) tinyplay的实现文件tinyplay.c(使用pcm设备播放wav格式的音频文件) tinycap的实现文件tinycap.c(使用pcm设备采集pcm格式的码流,并保存为wav格式的文件) tinymix的实现文件tinymix.c(对pcm设备的控制,包括音量调节、设备切换等) 这几个命令使用时可以先使用tinypcminfo查看pcm设备的功能和信息,否则当我们使用其他三个命令时使用了不合理的配置参数会出现parameter invalid的错误。 3.1编译tinyalsa命令: Android很多默认是没有编译出tinyplay,tinycap,tinymix,tinypcminfo的,需要手动局部编译,编译出来文件,push到系统system/bin/目录 mmm external/tinyalsa/ 3.2编译tinyalsa后生成四个小工具: tinymix tinyplay tinycap tinypcminfo tinypcminfo 用于查看pcm通道相关的信息 (tinypcminfo -D /proc/asound/cards) tinymix 可以得到音频通路相关的各项配置参数。也可以通过添加参数修改其中的配置 tinyplay是一个简易的音乐播放器,一般用于播放测试。 tinycap是一个简易的录音软件,一般用于录音测试。 4、说一下四个小工具(tinypcminfo tinyplay tinycap tinymix)的使用【以下都是在rk3288 Android7.1 kernel4.4平台下的操作】 4.1 tinypcminfo tinypcminfo用于查看pcm通道的相关信息。 rk3288:/ # tinypcminfo -D /proc/asound/cards Info for card 0, device 0: PCM out: Access: 0x000009 Format[0]: 0x000045 Format[1]: 00000000 Format Name: S8, S16_LE, S24_LE Subformat: 0x000001 Rate: min=8000Hz max=96000Hz Channels: min=2 max=2 Sample bits: min=8 max=32 Period size: min=32 max=131072 Period count: min=2 max=8192 PCM in: Access: 0x000009 Format[0]: 0x000045 Format[1]: 00000000 Format Name: S8, S16_LE, S24_LE Subformat: 0x000001 Rate: min=8000Hz max=96000Hz Channels: min=2 max=2 Sample bits: min=8 max=32 Period size: min=32 max=131072 Period count: min=2 max=8192 从上面获得的信息中可以知道PCM的采样率,通道个数,采样点数等信息。 其中 –D 后边跟的参数为声卡文件,一般位于/proc/asound/cards。 查看当前声卡设备可以使用cat /proc/asound/cards rk3288:/ # cat /proc/asound/cards 0 [realtekrt5651co]: realtekrt5651co - realtekrt5651codec_hdmiin realtekrt5651codec_hdmiin 1 [SPDIF ]: SPDIF - SPDIF SPDIF 4.2 tinymix 直接输入tinymix可以得到音频通路相关的各项配置参数。也可以使用tinymix通过添加参数修改其中的配置,如希望提高ADC Capture Volume值到110,输入tinymix 9 110即可。 rk3288:/ # tinymix Mixer name: 'realtekrt5651codec_hdmiin' Number of controls: 93 ctl type num name value 0 INT 2 HP Playback Volume 31 31 1 INT 2 OUT Playback Volume 24 24 2 BOOL 2 DAC2 Playback Switch On On 3 INT 2 DAC1 Playback Volume 175 175 4 INT 2 Mono DAC Playback Volume 175 175 5 INT 1 IN1 Boost 0 6 INT 1 IN2 Boost 0 7 INT 2 IN Capture Volume 23 23 8 BOOL 2 ADC Capture Switch On On 9 INT 2 ADC Capture Volume 47 47 10 INT 2 Mono ADC Capture Volume 47 47 11 INT 2 ADC Boost Gain 0 0 12 ENUM 1 RT5651 ASRC Switch Enable 13 BOOL 1 IF1 ASRC Switch Off 14 BOOL 1 IF2 ASRC Switch On 15 BOOL 1 DMIC ASRC Switch Off 16 ENUM 1 ADC IF2 Data Switch Normal 17 ENUM 1 DAC IF2 Data Switch Normal 18 BYTE 128 ELD 00000000000000000000000000000000 19 INT 1 AUDIO MODE 0 20 BOOL 1 Headphones Switch On 21 BOOL 1 Lineout Switch On 22 BOOL 1 Headset Mic Switch On 23 BOOL 1 Int Mic Switch On 24 BOOL 1 RECMIXL INL1 Switch Off 25 BOOL 1 RECMIXL BST3 Switch Off 26 BOOL 1 RECMIXL BST2 Switch Off 27 BOOL 1 RECMIXL BST1 Switch Off 28 BOOL 1 RECMIXR INR1 Switch Off 29 BOOL 1 RECMIXR BST3 Switch Off 30 BOOL 1 RECMIXR BST2 Switch Off 31 BOOL 1 RECMIXR BST1 Switch Off 32 ENUM 1 Stereo1 ADC L2 Mux DD MIX 33 ENUM 1 Stereo1 ADC R2 Mux DD MIX 34 ENUM 1 Stereo1 ADC L1 Mux ADC 35 ENUM 1 Stereo1 ADC R1 Mux ADC 36 ENUM 1 Stereo2 ADC L2 Mux DD MIXL 37 ENUM 1 Stereo2 ADC L1 Mux ADCL 38 ENUM 1 Stereo2 ADC R1 Mux DD MIXR 39 ENUM 1 Stereo2 ADC R2 Mux DMIC R 40 BOOL 1 Stereo1 ADC MIXL ADC1 Switch Off 41 BOOL 1 Stereo1 ADC MIXL ADC2 Switch Off 42 BOOL 1 Stereo1 ADC MIXR ADC1 Switch Off 43 BOOL 1 Stereo1 ADC MIXR ADC2 Switch Off 44 BOOL 1 Stereo2 ADC MIXL ADC1 Switch Off 45 BOOL 1 Stereo2 ADC MIXL ADC2 Switch Off 46 BOOL 1 Stereo2 ADC MIXR ADC1 Switch Off 47 BOOL 1 Stereo2 ADC MIXR ADC2 Switch Off 48 ENUM 1 IF2 ADC IF1 ADC1 49 ENUM 1 PDM L Mux DD MIX 50 ENUM 1 PDM R Mux DD MIX 51 BOOL 1 DAC MIXL Stereo ADC Switch Off 52 BOOL 1 DAC MIXL INF1 Switch On 53 BOOL 1 DAC MIXR Stereo ADC Switch Off 54 BOOL 1 DAC MIXR INF1 Switch On 55 ENUM 1 DAC L2 Mux IF2 56 ENUM 1 DAC R2 Mux IF2 57 BOOL 1 Stereo DAC MIXL DAC L1 Switch On 58 BOOL 1 Stereo DAC MIXL DAC L2 Switch Off 59 BOOL 1 Stereo DAC MIXL DAC R1 Switch Off 60 BOOL 1 Stereo DAC MIXR DAC R1 Switch On 61 BOOL 1 Stereo DAC MIXR DAC R2 Switch Off 62 BOOL 1 Stereo DAC MIXR DAC L1 Switch Off 63 BOOL 1 DD MIXL DAC L1 Switch Off 64 BOOL 1 DD MIXL DAC L2 Switch Off 65 BOOL 1 DD MIXL DAC R2 Switch Off 66 BOOL 1 DD MIXR DAC R1 Switch Off 67 BOOL 1 DD MIXR DAC R2 Switch Off 68 BOOL 1 DD MIXR DAC L2 Switch Off 69 BOOL 1 OUT MIXL BST1 Switch Off 70 BOOL 1 OUT MIXL BST2 Switch Off 71 BOOL 1 OUT MIXL INL1 Switch Off 72 BOOL 1 OUT MIXL REC MIXL Switch Off 73 BOOL 1 OUT MIXL DAC L1 Switch On 74 BOOL 1 OUT MIXR BST2 Switch Off 75 BOOL 1 OUT MIXR BST1 Switch Off 76 BOOL 1 OUT MIXR INR1 Switch Off 77 BOOL 1 OUT MIXR REC MIXR Switch Off 78 BOOL 1 OUT MIXR DAC R1 Switch On 79 BOOL 1 OUTVOL L Switch On 80 BOOL 1 OUTVOL R Switch On 81 BOOL 1 HPOVOL L Switch On 82 BOOL 1 HPOVOL R Switch On 83 BOOL 1 HPO MIX DAC1 Switch Off 84 BOOL 1 HPO MIX HPVOL Switch On 85 BOOL 1 LOUT MIX DAC L1 Switch Off 86 BOOL 1 LOUT MIX DAC R1 Switch Off 87 BOOL 1 LOUT MIX OUTVOL L Switch On 88 BOOL 1 LOUT MIX OUTVOL R Switch On 89 BOOL 1 HPO L Playback Switch On 90 BOOL 1 HPO R Playback Switch On 91 BOOL 1 LOUT L Playback Switch On 92 BOOL 1 LOUT R Playback Switch On 提高ADC Capture Volume值到110,输入tinymix 9 110,得到以下结果 rk3288:/ # tinymix 9 110 rk3288:/ # tinymix Mixer name: 'realtekrt5651codec_hdmiin' Number of controls: 93 ctl type num name value 0 INT 2 HP Playback Volume 31 31 1 INT 2 OUT Playback Volume 24 24 2 BOOL 2 DAC2 Playback Switch On On 3 INT 2 DAC1 Playback Volume 175 175 4 INT 2 Mono DAC Playback Volume 175 175 5 INT 1 IN1 Boost 0 6 INT 1 IN2 Boost 0 7 INT 2 IN Capture Volume 23 23 8 BOOL 2 ADC Capture Switch On On 9 INT 2 ADC Capture Volume 110 110 10 INT 2 Mono ADC Capture Volume 47 47 11 INT 2 ADC Boost Gain 0 0 12 ENUM 1 RT5651 ASRC Switch Enable 当然了,单独查看上述信息比较难以梳理,配合音频通路图会更加清晰,所以我们可以结合硬件原理图一起梳理。 4.3 tinyplay tinyplay是一个简易的音乐播放器,一般用于播放测试。tinyplay只能播放wav原始格式的音乐,不能进行Mp3等格式的解码,支持44.1kHz,48kHz采样率的wav音乐。 在调用tinyplay播放音乐之前需要先使用tinymix切换好音频通路:例如如下设置 rk3288:/ # tinyplay Usage: tinyplay file.wav [-D card] [-d device] [-p period_size] [-n n_periods] 1|rk3288:/ # tinyplay /sdcard/rec.wav -D 0 -d 1 -p 1024 -n 3 Playing sample: 2 ch, 44100 hz, 16 bit rk3288:/ # 注: -D card 声卡 -d device 设备 -p period_size 一次中断的帧数 -n n_periods 周期数 4.4 tinycap tinycap是一个简易的录音软件,一般用于录音测试。 在调用tinycap录音之前需要先调整好音频通路: rk3288:/ # tinycap /sdcard/rec.wav -D 0 -d 1 -c 2 -r 44100 -b 16 -p 1024 -n 3 Capturing sample: 2 ch, 44100 hz, 16 bit ^CCaptured 463872 frames //ctrl+C 停止录音 注: -D card 声卡 -d device 设备 -c channels 通道 -r rate 采样率 -b bits pcm 位宽 -p period_size 一次中断的帧数 -n n_periods 周期数 录音结束通过ctrl+C强行退出即可,之后在/sdcard/路径下查看到test.wav音频文件。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1348 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
1391 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
2970 浏览 1 评论
【飞凌嵌入式OK3576-C开发板体验】RKNN神经网络-YOLO图像识别
254 浏览 0 评论
【飞凌嵌入式OK3576-C开发板体验】SSH远程登录网络配置及CAN通讯
1336 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-3 12:21 , Processed in 0.522022 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号