CODEC的使用

默认dts中使能了codec

需要使用的话,在buildroot中勾选 alsa-utils相关命令

CODEC 设备

# ls /dev/snd
controlC0  pcmC0D0c   pcmC0D0p   timer
  • controlC0表示控制器
  • pcmC0D0c 表示capture
  • pcmC0D0p 表示play
  • timer 表示定时器

使用该设备编程可以参考:http://blog.csdn.net/zhenwenxian/article/details/5901239

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

alsa-utils 使用

查看设备

# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Codec [V3s Audio Codec], device 0: CDC PCM Codec-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0

调节音量

alsamixer是图形化的amixer工具,如下图所示

从左到右是:耳机音量,耳机输出源,Mic增益,mic1 boost, DAC增益。

可以很方便地调整音频输出设置

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

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

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

查看控制器 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=off,off
numid=2,iface=MIXER,name='Headphone Playback Volume'
; type=INTEGER,access=rw---R--,values=1,min=0,max=63,step=0
: values=7
| 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=on,on
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=off,off
numid=11,iface=MIXER,name='Mixer Reversed Capture Switch'
; type=BOOLEAN,access=rw------,values=2
: values=off,off

录音测试

耳机输入内置了放大器。

耳机,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

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

amixer -c 0 cset numid=12 2     使能mic1
arecord -D hw:0,0 -d 3 -f S16_LE -r 16000 tmp.wav   录音测试

播放

amixer -c 0 sset 'Headphone',0 100% unmute
speaker-test -twav -c2
atest
aplay  tmp.wav

配置文件

/etc/asound.conf(简易配置) :

{{{
    pcm.!default{
        type hw
        card 0
        devive 0
        }  
    ctl.!default{
        type hw
        card 0
        device 0
        }  
}}}

其中card代表声卡号, device代表设备号,asound.conf的配置极其强大和复杂,详情可查阅http://www.alsa-project.org/main/index.php/Main_Page

card, device的确定方法

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

#. cat /proc/asound/cards 查看nvidia设备对应的ID号(假设=1)
#. alsamixer -c 1 打开声音设置,其中<S/PDIF>即为HDMI输出,“MM”代表静音,alsa在每次重启声音设备时都会默认为静音,所以必须首先打开音量再进行后续的操作。
#. alsactl store 保存上述配置
#. aplay -D hw:1,7  /usr/share/sounds/alsa/test.wav  "hw后的1代表声卡号,7代表设备号,需要根据aplay -l的输出来确定这两个数字"找到对应的hdmi输出口。

参考 http://linux-sunxi.org/Audio_Codec