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即可。
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即可。
举报