v3S驱动音频

文章目录

  • 一、buildroot 配置 alsa-lib 和 alsa-utils移植(测试不通过)
    • 1. 使能 alsa-lib
    • 2. 使能 alsa-utils
  • 二、自行配置 alsa-lib 和 alsa-utils移植(麻烦但不得不用)
    • 1. 将压缩包拷贝到ubuntu下
    • 2.alsa-lib移植
    • 3. alsa-utils移植
  • 三、声卡设置与测试
    • 1. amixer使用方法
      • 1. 查看帮助信息
      • 2.更多操作请看
    • 2.其他配置
      • 1. 查看CODEC设备
      • 2. 查看设备
      • 3. 调节音量
      • 4. 查看控制器 amixer contents
    • 3. 播放音乐
    • 4. 录音
      • 1.基本配置
      • 2. 录音测试

一、buildroot 配置 alsa-lib 和 alsa-utils移植(测试不通过)

输入 make menuconfig,打开 buildroot 配置界面,配置路径如下:

1. 使能 alsa-lib

Target packages
-> Libraries
-> Audio/Sound
-> -*- alsa-lib —> 此配置项下的文件全部选中
v3S驱动音频_第1张图片

2. 使能 alsa-utils

Target packages
-> Audio and video applications
-> alsa-utils 此目录下的软件全部选中

v3S驱动音频_第2张图片

配置好之后保存退出,编译,下载到开发板。

这里提示找不到
在这里插入图片描述

查看只有
在这里插入图片描述
少了好多东西,不知道怎么回事(测试了好久,百度也没搜到解决方法,只能直接编译了)

可能需要make clean 之后再重新编译一下,但重新编译花费时间很长

二、自行配置 alsa-lib 和 alsa-utils移植(麻烦但不得不用)

1. 将压缩包拷贝到ubuntu下

在这里插入图片描述

2.alsa-lib移植

注意 alsa-lib 编译过程中会生成一些配置文件,而这些配置信息的路径都是绝对路径,因此为了保证 ubuntu 和开发板根文件系统中的路径一致!我们需要在 ubuntu 和开发板中各创建一个路径和名字完全一样的目录,这里我们都创建一个/usr/share/arm-alsa 目录,ubuntu 中创建命令如下

cd /usr/share //进入 ubuntu 的/usr/share 目录
sudo mkdir arm-alsa  //创建 arm-alsa 目录 

最后在开发板根文件系统中也创建一个/usr/share/arm-alsa 目录,命令如下:

mkdir /usr/share/arm-alsa -p  //开发板根文件系统创建 arm-alsa 目录

这样 ubuntu 和开发板根文件系统都有一个“/usr/share/arm-alsa”目录,我们交叉编译的时候就不怕存在引用绝对路径了,因为 ubuntu 和开发板中的配置文件路径都是一模一样的。

由于 alsa-utils 要用到 alsa-lib 库,因此要先编译 alsa-lib 库。alsa-lib 就是 ALSA 相关库文件,应用程序通过调用 ALSA 库来对 ALSA 框架下的声卡进行操作。先创建一个名为“alsa-lib”的目录用来保存 alsa-lib 的编译结果

v3S驱动音频_第3张图片

然后将 alsa-lib-1.2.2.tar.bz2 拷贝到 ubuntu 中并解压,命令如下:

tar -vxjf alsa-lib-1.2.2.tar.bz2 

解压完成以后就会得到一个名为“alsa-lib-1.2.2”的文件夹,这个就是 alsa-lib 的源码。进入alsa-lib-1.2.2 目录,然后配置并编译,命令如下:

cd alsa-lib-1.2.2/  //进入 alsa-lib 源码目录
./configure --host=arm-linux-gnueabihf --prefix=/home/luatao/linux/tool/alsa-lib --with-configdir=/usr/share/arm-alsa 

v3S驱动音频_第4张图片
配置完成以后就可以编译了,命令如下:

make  //编译
sudo make install //安装

可能会出现如图所示的错误提示:

v3S驱动音频_第5张图片
图中提示 libatopology.la 编译失败,这是因为 sudo 会切换到 root 用户下,但是此时 root用户下的环境变量中没有交叉编译器路径,因此会提示找不到“arm-linux-gnueabihf-gcc”,从而导致 libatopology.la 编译失败。

解决方法就是先切换到 root 用户,重新执行一下/etc/profile
文件,然后直接 make install 即可,命令如下:

sudo -s  //切换到 root 用户
source /etc/profile //执行/etc/profile
make install  //安装,此时已经工作在 root 下,因此不需要加“sudo”
su luatao//编译完成以后回原来的用户

v3S驱动音频_第6张图片
编译完成以后前面创建的“alsa-lib”目录就会保存相应的编译结果,如图所示:
在这里插入图片描述
ubuntu 中/usr/share/arm-alsa 目录下的内容如图所示:
在这里插入图片描述
将图中 lib 目录下的所有文件拷贝到开发板根文件系统的/usr/lib 目录下,

cd -  // 返回上次的目录 进入 alsa-lib
sudo cp lib/* /home/luatao/linux/nfs/rootfs/lib/ -af

将图中/usr/share/arm-alsa 目录下的所有文件拷贝到开发板的/usr/share/arm-alsa 目录下,命令如下:

cd /usr/share/arm-alsa  //进入 arm-alsa 目录,拷贝配置文件
sudo cp * /home/luatao/linux/nfs/rootfs/usr/share/arm-alsa/ -raf

3. alsa-utils移植

alsa-utils 是 ALSA 的一些小工具集合,我们可以通过这些小工具还测试我们的声卡。将 alsa-utils-1.2.2.tar.bz2 复制到 ubuntu 中并解压,命令如下:

tar -vxjf alsa-utils-1.2.2.tar.bz2  //解压

解压成功以后会得到一个名为“alsa-utils-1.2.2”的文件夹,此文件夹就是 alsa-utils 源码。重新创建一个名为“alsa-utils”的目录用于存放 alsa-utils-1.2.2 的编译结果。按照如下命令编译alsa-utils:

cd alsa-utils-1.2.2/ //进入
./configure --host=arm-linux-gnueabihf --prefix=/home/luatao/linux/tool/alsa-utils --with-alsa-inc-prefix=/home/luatao/linux/tool/alsa-lib/include/ --with-alsa-prefix=/home/luatao/linux/tool/alsa-lib/lib/ --disable-alsamixer --disable-xmlto

出现下面的情况,是错误的,后面无法操作
v3S驱动音频_第7张图片
需要执行

sudo -s  //切换到 root 用户
source /etc/profile //执行/etc/profile
./configure --host=arm-linux-gnueabihf --prefix=/home/luatao/linux/tool/alsa-utils --with-alsa-inc-prefix=/home/luatao/linux/tool/alsa-lib/include/ --with-alsa-prefix=/home/luatao/linux/tool/alsa-lib/lib/ --disable-alsamixer --disable-xmlto

然后成功了

v3S驱动音频_第8张图片

make //编译
sudo make install

v3S驱动音频_第9张图片
译完成以后就会在前面创建的“alsa-utils”目录下生成 bin、sbin 和 share 三个文件夹,如图所示:
在这里插入图片描述
将图中 bin、sbin 和 share 这三个目录中的所有文件分别拷贝到开发板根目录下的/bin、/sbin 和/usr/share/alsa 目录下,命令如下:

cd alsa-utils
sudo cp bin/* /home/luatao/linux/nfs/rootfs/bin/ -rfa
sudo cp sbin/* /home/luatao/linux/nfs/rootfs/sbin/ -rfa
sudo cp share/* /home/luatao/linux/nfs/rootfs/usr/share/ -rfa

打开开发板根文件系统中的/etc/profile 文件,在里面加入如下所示内容:

export ALSA_CONFIG_PATH=/usr/share/arm-alsa/alsa.conf

LSA_CONFIG_PATH 用于指定 alsa 的配置文件,这个配置文件是 alsa-lib 编译出来的。
v3S驱动音频_第10张图片

三、声卡设置与测试

1. amixer使用方法

1. 查看帮助信息

声卡相关选型默认都是关闭的,比如耳机和喇叭的左右声道输出等。因此我们在使用之前一定要先设置好声卡,alsa-utils 自带了 amixer 这个声卡设置工具。输入如下命令即可查看 amixer的帮助信息:

amixer --help //查看 amixer 帮助信息

v3S驱动音频_第11张图片

从图可以看出,amixer 软件命令分为两组,scontrols、scontents、sset 和 sget 为一组。controls、contents、cset 和 cget 为另一组。这两组的基本功能都是一样的,只不过“s”开头的是 simple(简单)组,这一组命令是简化版,本教程最终使用“s”开头的命令设置声卡,因为少输入很多字符。

2.更多操作请看

amixer

2.其他配置

1. 查看CODEC设备

ls /dev/snd

在这里插入图片描述

controlC0表示控制器
pcmC0D0c 表示capture
pcmC0D0p 表示play
timer 表示定时器

出现了该设备说明codec驱动被正确加载。

2. 查看设备

arecord -l

v3S驱动音频_第12张图片

3. 调节音量

alsamixer是图形化的amixer工具,如下图所示
v3S驱动音频_第13张图片
从左到右是:耳机音量,耳机输出源,Mic增益,mic1 boost, DAC增益。
可以很方便地调整音频输出设置

00表示当前音量正常,MM表示此声道是静音.可以通过键盘上的M键来切换静音和正常状态.

4. 查看控制器 amixer contents

[root@buildroot]:/$:amixer contents
numid=13,iface=MIXER,name='Headphone Source Playback Route'
  ; type=ENUMERATED,access=rw------,values=2,items=2
  ; Item #0 'DAC'
  ; Item #1 'Mixer'
  : values=0,0
numid=3,iface=MIXER,name='Headphone Playback Switch'
  ; type=BOOLEAN,access=rw------,values=2
  : values=on,on
numid=2,iface=MIXER,name='Headphone Playback Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=63,step=0
  : values=63
  | dBscale-min=-63.00dB,step=1.00dB,mute=1
numid=5,iface=MIXER,name='Mic1 Boost Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=7,step=0
  : values=4
  | dBrange-
    rangemin=0,,rangemax=0
      | dBscale-min=0.00dB,step=0.00dB,mute=0
    rangemin=1,,rangemax=7
      | dBscale-min=24.00dB,step=3.00dB,mute=0

numid=12,iface=MIXER,name='Mic1 Capture Switch'
  ; type=BOOLEAN,access=rw------,values=2
  : values=off,off
numid=9,iface=MIXER,name='Mic1 Playback Switch'
  ; type=BOOLEAN,access=rw------,values=2
  : values=off,off
numid=4,iface=MIXER,name='Mic1 Playback Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=7,step=0
  : values=3
  | dBscale-min=-4.50dB,step=1.50dB,mute=0
numid=6,iface=MIXER,name='ADC Gain Capture Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=7,step=0
  : values=3
  | dBscale-min=-4.50dB,step=1.50dB,mute=0
numid=7,iface=MIXER,name='DAC Playback Switch'
  ; type=BOOLEAN,access=rw------,values=2
  : values=off,off
numid=1,iface=MIXER,name='DAC Playback Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=63,step=0
  : values=63
  | dBscale-min=-73.08dB,step=1.16dB,mute=0
numid=8,iface=MIXER,name='DAC Reversed Playback Switch'
  ; type=BOOLEAN,access=rw------,values=2
  : values=off,off
numid=10,iface=MIXER,name='Mixer Capture Switch'
  ; type=BOOLEAN,access=rw------,values=2
  : values=on,on
numid=11,iface=MIXER,name='Mixer Reversed Capture Switch'
  ; type=BOOLEAN,access=rw------,values=2
  : values=off,off
[root@buildroot]:/$:

3. 播放音乐

板子上没有功放,但是留出了接口,我们需要外接一个功放。
我这里使用的是8002B功放芯片,用的是之前打的JQ8900的板子,然后我只焊接了功放部分,测试能用。

v3S驱动音频_第14张图片

开机后默认状态是静音状态,需要取消掉静音状态

执行下面取消静音

amixer -c 0 sset 'Headphone',0 100% unmute

v3S驱动音频_第15张图片
找一个音乐
在这里插入图片描述
我们可以播放liudehua.wav
在这里插入图片描述
然后就可以听到美妙的音乐了。

4. 录音

1.基本配置

耳机输入内置了放大器。
耳机,linein,同时只能使用1种。
使用输入端口前需要设置mixer控制器,ADC input Mux

ADC Input Mux 和对应的输入端口

0 linein
1 fmin
2 mic1
3 mic2
4 mic1,mic2
5 mic1+mic2
6 output mixer
7 linein,mic1

使用amixer来设置通道
具体参数如下:

amixer -c <"card"> cset numid=<"control#"> <"input_port">

where:
<"card"> is the card, 0 for the sunxi-codec and 1 for the hdmi audio output
<"input_port"> is the input port from the table
<"control#"> is the control # showed using: aximer contents

card, device的确定方法
card, device必须对应hdmi的声卡号和设备号,可以使用aplay -l查看对应的hdmi设备,可能会有出现多个hdmi设备,确定当前可以使用的hdmi设备的方法如下:

#. cat /proc/asound/cards 查看nvidia设备对应的ID号(根据下面的查看就是为0)

在这里插入图片描述

#. alsamixer -c 0 打开声音设置,其中<S/PDIF>即为HDMI输出,“MM”代表静音,alsa在每次重启声音设备时都会默认为静音,所以必须首先打开音量再进行后续的操作。

v3S驱动音频_第16张图片

#. alsactl store 保存上述配置

2. 录音测试

使用下面命令使能耳机并录音

amixer -c 0 cset numid=12 2		使能mic1

v3S驱动音频_第17张图片

录音3s

arecord -D hw:0,0 -d 3 -f S16_LE -r 16000 tmp.wav	录音测试

在这里插入图片描述
或执行下面的录音10s

arecord -f cd -d 10 record.wav

-f 是设置录音质量,“-f cd”表示录音质量为 cd 级别。-d 是指定录音时间,单位是 s,这条指令就是录制一段 cd 级别 10s 的 wav 音频,音频名字为 record.wav。录制的时候大家就可以对着开发板上的 MIC 说话,直到录制完成。

可以自行播放测试

你可能感兴趣的:(Linux,荔枝派V3S,ubuntu,linux)