15. 音频¶
音视频是人类在日常生活里面使用非常广泛的信息获取方式,它的本质就是声音和图像信息的采集、存储和回放。 本章我们来介绍音视频播放的相关基础概念,并且给大家演示如何在板卡上进行音视频的播放。
15.1. 声卡设备¶
注意
LubanCat-H618系列板卡3.5mm音频接口仅支持音频输出,不支持音频输入
15.1.2. 获取播放设备¶
1 2 | #获取播放设备
aplay -l
|
运行结果如下图:
card 0
:板载SOC(H618)音频输出card 2
:HDMI声音设备card 0 和 card 2 是这些设备在Linux里注册的设备,我们可以通过应用程序调用这些接口
15.1.3. 声卡驱动目录¶
查看声卡驱动目录
运行结果如下图:
controlC0:用于声卡控制,C0 表示声卡0,对应上文的板载H618芯片。
controlC2:用于声卡控制,C2 表示声卡2,对应上文的HDMI声音输出。
pcmC0D0p:用于播放的 pcm 设备,最后面的“p”是 playback 的缩写,表示放音。
pcmC2D0p:用于播放的 pcm 设备,最后面的“p”是 playback 的缩写,表示放音。
pcmC2D0c:用于录音的 pcm 设备,最后面的“c”是 capture 的缩写,表示录音
timer :定时器
by-path: 保存着设备的对应关系
运行结果如下图:
可以看到每个control之间都有一个对应关系。
查看系统挂载上的声卡:
1 2 | #查看系统挂载上的声卡
cat /proc/asound/cards
|
运行结果如下图:
15.2. 配置声卡¶
15.2.1. amixer¶
使用amixer可以获取声卡的详细配置
使用amixer前需要知道你需要的配置的声卡的设备号(card x, 如card 0)
下面以audiocodec(card 0)为例进行配置
1 2 | #列出可以控制card 0的控制器
amixer controls -c 0
|
运行结果如下图:
1 2 | #列出所有card 0控制器能配置的值
amixer contents -c 0
|
运行结果如下图:
可以看到列出了每个控制器能配置的值,以及当前的值
1 2 3 | #获取对应的控制器配置的值
#例如:amixer -c $card_id cget $id,这里获取的是card 0的声音数字音量大小
amixer -c 0 cget numid=2
|
运行结果如下图:
其中:
values=1: 需要配置两个值
min=0 :可配置的最小值为0
max=63:可配置的最大值为252
values=57:当前的值为57
运行结果如下图:
可以看到成功配置完成
配置声音播放输出
1 2 | #例:获取card 0的声音播放的方式
amixer -c 0 cset numid=1
|
运行结果如下图:
注意
如果card 0声音播放方式为Off,则需要配置为开, 可使用命令amixer -c 0 cset numid=1 1或者amixer -c 0 cset numid=1 On将板卡声音播放打开。
15.2.2. alsamixer¶
这是一个命令行图形化的配置工具
1 | alsamixer
|
运行结果如下图:
按 F6 选择自己想要配置的声卡
通过界面可以看到,下方列出的可配置的控制器,和上述amixer contents列出的可配置的控制器是一致的。 因为图形化配置的方式会比较容易上手且方便,因此我们推荐使用alsamixer进行音频配置。
15.3. 音频播放¶
可以通过上述的 《文件传输与NFS网络文件系统》 方法将音频文件拷贝到鲁班猫板卡上。
15.3.1. 命令行¶
注意
命令行操作时要注意在桌面端切换成正确的输出设备
15.3.1.1. 音频播放¶
注意
在播放声音前请确认声卡控制器的配置,具体方法在上面。
1 2 3 4 5 | #获取播放设备
aplay -l
#播放音频文件
aplay -Dhw:0 xxx.wav
|
-Dhw:0
:使用card 0作为播放设备
更多命令需要自己去探索
1 2 | #获取更多用法
aplay -h
|
15.3.1.2. 多格式音频播放¶
如果需要播放除wav格式外的比较通用的文件格式(mp3,flac等),可以参照以下方法:
SoX是一个跨平台的命令行实用程序, 可以将各种格式的音频文件转换为需要的其他格式。 SoX 还可以对输入的音频文件应用各种效果,也支持在大多数平台上播放和录制音频文件。
本小节仅以简单的测试播放,更多使用方式请参考官方说明文档: http://sox.sourceforge.net/
用以下命令安装sox,libsox-fmt-all包含各个格式的解码器。
1 | sudo apt install sox libsox-fmt-all
|
使用方法:
1 2 3 4 5 6 7 8 | #使用card 0播放mp3音频
play -d hw:0 xxx.mp3
#使用card 0播放wav音频
play -d hw:0 xxx.wav
#使用card 0播放flac音频
play -d hw:0 xxx.flac
|