转 -ALSA 配置
在sound/soc/codecs目录中有很多音频codec的codec驱动,我使用的是wm9713,AP是s3c6410;这里个驱动文件中定义了很多widget和control,alsa在playback或record的时候,sound/soc/soc-dapm.c中的dapm_power_widgets函数会根据“配置情况”打开相应的widget,搭建一个完整的音频路径,只要该路径搭建成功,就可以正常工作;
sound/soc/codecs/wm9713.c中的audio_map[]就是一个wm9713的路由表,根据wm9713手册中的Audio
Paths
Overview可以选择自己需要的音频路径,在audio_map[]中测试一下,看audio_map中是否支持这种路径。
alsa 的配置
alsa音频的调试最主要的是alsa的配置。alsa使用amixer命令打开audio_map[]中的开关(control/switch)和其它一些controls,这些control设置后,使用aplay/arecord的时候即可搭建正确的路径,实现播放和录音。
比如我在调试的时候,在不用amixer控制时(默认状态),arecord可以正确录音,使用sound/soc/soc-dapm.c中的dump_dapm函数dump出的路径是正确的;而aplay的时候,dump_dapm出来的路径是错误的,原因是默认设置里没有打开playback的开关(switch),运行如下命令即可正确playback:
alsa_amixer cset numid=4,iface=MIXER,name='Headphone Playback
Switch' 1
alsa_amixer cset numid=93,iface=MIXER,name='Left Headphone Out Mux'
2
alsa_amixer cset numid=34,iface=MIXER,name='Out3 Playback
Switch'1
alsa_amixer cset numid=95,iface=MIXER,name='Left Speaker Out Mux'
4
alsa_amixer cset numid=94,iface=MIXER,name='Right Speaker Out Mux'
2
alsa_amixer cset numid=91,iface=MIXER,name='Out 3 Mux' 2
alsa_amixer cset numid=81,iface=MIXER,name='Left HP Mixer PCM
Playback Swit' 1
alsa_amixer cset numid=75,iface=MIXER,name='Right HP Mixer PCM
Playback Swi' 1
alsa_amixer cset numid=3,iface=MIXER,name='Headphone Playback
Volume' 26
alsa_amixer cset numid=36,iface=MIXER,name='Out3 Playback Volume'
48
其实就是打开playback路径需要的开关,dapm_power_widgets会自动把这些开关连接的widget连接起来,构成一个播放路径。
Android中alsa的配置:
Andriod中使用alsa-lib,也需要对配置音频路径。配置方法有两个:
1、在AudioHardwareALSA.cpp中的doRouting中使用system函数调用amixer进行配置
system("alsa_amixer cset numid=4,iface=MIXER,name='Headphone
Playback Switch' 1");
2、编写asound.conf文件,AudioHardwareALSA.cpp中的ALSAMixer::ALSAMixer对象初始化的时候会通过alsa-lib的conf.c文件中的函数读取/etc/asound.conf文件,获取配置信息,对codec进行配置。
alsa的一些命令
alsa_amixer该命令配置主要配置音频codec的mixer开关、mux对路选择、volume值等;
alsa_amixer --help
alsa_amixer contents
alsa_amixer contents
numid=30,iface=MIXER,name='Headphone Playback ZC Switch'
; type=BOOLEAN,access=rw------,values=2
: values=off,off
numid=4,iface=MIXER,name='Headphone Playback Switch'
; type=BOOLEAN,access=rw------,values=2
: values=off,off
numid=3,iface=MIXER,name='Headphone Playback Volume'
; type=INTEGER,access=rw------,values=2,min=0,max=31,step=0
: values=31,31
numid=6,iface=MIXER,name='PCM Playback Volume'
; type=INTEGER,access=rw------,values=2,min=0,max=31,step=0
: values=23,23
numid=5,iface=MIXER,name='Line In Volume'
; type=INTEGER,access=rw------,values=2,min=0,max=31,step=0
: values=23,23
numid=7,iface=MIXER,name='Mic 1 Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=31,step=0
: values=23
numid=8,iface=MIXER,name='Mic 2 Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=31,step=0
: values=23
numid=85,iface=MIXER,name='Mic A Source'
; type=ENUMERATED,access=rw------,values=1,items=3
; Item #0 'Mic 1'
; Item #1 'Mic 2 A'
; Item #2 'Mic 2 B'
: values=0
alsa_amixer controls
numid=30,iface=MIXER,name='Headphone Playback ZC Switch'
numid=4,iface=MIXER,name='Headphone Playback Switch'
numid=3,iface=MIXER,name='Headphone Playback Volume'
numid=6,iface=MIXER,name='PCM Playback Volume'
numid=5,iface=MIXER,name='Line In Volume'
numid=7,iface=MIXER,name='Mic 1 Volume'
numid=8,iface=MIXER,name='Mic 2 Volume'
numid=85,iface=MIXER,name='Mic A Source'
numid=84,iface=MIXER,name='Mic B Source'
numid=9,iface=MIXER,name='Mic Boost (+20dB) Switch'
numid=10,iface=MIXER,name='Mic Headphone Mixer Volume'
numid=47,iface=MIXER,name='Aux Playback Headphone Volume'
numid=48,iface=MIXER,name='Aux Playback Master Volume'
numid=49,iface=MIXER,name='Aux Playback Mono Volume'
numid=67,iface=MIXER,name='Mono Mixer Aux Playback Switch'
numid=69,iface=MIXER,name='Mono Mixer Bypass Playback Swit'
numid=70,iface=MIXER,name='Mono Mixer Mic 1 Sidetone Switc'
numid=71,iface=MIXER,name='Mono Mixer Mic 2 Sidetone Switc'
numid=65,iface=MIXER,name='Mono Mixer PC Beep Playback Swi'
numid=68,iface=MIXER,name='Mono Mixer PCM Playback Switch'
numid=66,iface=MIXER,name='Mono Mixer Voice Playback Switc'
alsa_alsactl
store:该命令生成/etc/asound.state文件,该文件显示当请codec的状态,可以根据该文件检查codec的状态是否正确。
# cat /etc/asound.state
state.SMDK6400 {
control.1 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 31'
iface MIXER
name 'Speaker Playback Volume'
value.0 31
value.1 31
}
control.2 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 2
iface MIXER
name 'Speaker Playback Switch'
value.0 false
value.1 false
}
control.3 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 31'
iface MIXER
name 'Headphone Playback Volume'
value.0 26
value.1 26
}
control.4 {
comment.access 'read write'
comment.type BOOLEAN
comment.count 2
iface MIXER
name 'Headphone Playback Switch'
value.0 true
value.1 true
}
control.5 {
comment.access 'read write'
comment.type INTEGER
comment.count 2
comment.range '0 - 31'
iface MIXER
name 'Line In Volume'
value.0 23
value.1 23
}
使用amixer命令可以参照alsa_amixer
contents的内容;编写asound.conf,可以参照alsa_alsactl生成的/etc/asound.state。
下面是我的asound.conf的一段,其它的pcm.AndroidPlayback_xxx可以写法一样,就是hook_argsp[]中的内容根据自己的情况设置。
##
## Mixer Devices
##
ctl.AndroidPlayback {
type hw
card 0 # Can replace with driver"s name from
/proc/asound/cards
}
ctl.AndroidRecord {
type hw
card 0 # Can replace with driver"s name from
/proc/asound/cards
}
##
## Playback Devices
##
pcm.AndroidPlayback {
type hooks
slave.pcm {
type hw
card 0
device 0 # Must be of type "digital audio playback"
}
hooks.0 {
type ctl_elems
hook_args [
{
name 'Master Playback Switch'
value true
}
{
name 'Master Playback Volume'
value.0 51
value.1 51
}
{
name 'Phone Playback Switch'
value false
}
{
name 'Phone Playback Volume'
value.0 0
value.1 0
}
{
name 'Mic Playback Switch'
value false
}
{
name 'Mic Playback Volume'
value.0 0
value.1 0
}
{
name 'Mic Boost (+20dB)'
value false
}
{
name 'Line Playback Switch'
value false
}
{
name 'Line Playback Volume'
value.0 0
value.1 0
}
{
name 'PCM Playback Switch'
value true
}
{
name 'PCM Playback Volume'
value.0 51
value.1 51
}
{
name 'Capture Source'
value.0 Mic
value.1 Mic
}
{
name 'Capture Switch'
value true
}
{
name 'Capture Volume'
value.0 0
value.1 0
}
]
}
}
转 -ALSA 配置的更多相关文章
- Alsa中PCM参数设置⭐⭐
1) PCM设备的句柄.2) 指定同时可供回放或截获的PCM流的方向3) 提供一些关于我们想要使用的设置选项的信息,比如缓冲区大小,采样率,PCM数据格式等4) 检查硬件是否支持设置选项. 4.1 ...
- linux(ubuntu) 查看系统设备信息 命令
时间:2012-08-02 00:12 ubuntu查看版本命令 方法一: 在终端中执行下列指令: cat /etc/issue 方法二: 使用 lsb_release 命令也可以查看 Ubunt ...
- linux常用的查看设备的命令
系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # ...
- linux(ubuntu) 查看系统设备信息
ubuntu查看版本命令 方法一: 在终端中执行下列指令: cat /etc/issue 方法二: 使用 lsb_release 命令也可以查看 Ubuntu 的版本号,与方法一相比,内容更为详细. ...
- mixer音量的设置:amixer小工具的…
1.关于alsa-utils和lib的移植我的上一篇博文中已经说明了,下面我就来说说我的混音器mixer音量控制的调节过程,网上的很多方法都是比较基本的入门没有知名具体的操作方法,在此我来谈谈我的设置 ...
- alsa-lib 交叉编译以及声卡驱动测试 (转)
l 下载alsa-utils, alsa-lib, 版本要一致 http://www.alsa-project.org/main/index.php/Download l 编译alsa-lib . ...
- 【Linux】Linux下设备网卡以及硬件管理等
这是Linux下网络硬件管理的基础知识,虽然平时用到的可能比软件的少一点,但是作为基础命令,还是需要记住,以免用时又得查询. 本文参考官方文档:https://wiki.ubuntu.com.cn/% ...
- 三个小白是如何在三个月内搭一个基于kaldi的嵌入式在线语音识别系统的
前面的博客里说过最近几个月我从传统语音(语音通信)切到了智能语音(语音识别).刚开始是学语音识别领域的基础知识,学了后把自己学到的写了PPT给组内同学做了presentation(语音识别传统方法(G ...
- 1-1. OSS/ALSA 声卡的驱动与配置和 Madplay 嵌入式播放器的移植
报警子系统 一. OSS/ALSA 声卡的驱动与配置 声卡驱动中传统的OSS构架在02年被收购后即不开源,并且OSS的混音效果不好->因此ALSA构架孕育而生. ALSA(高级音频构架,目前应用 ...
随机推荐
- 2017.11.15 Add a parameter –serial <serial no> to the Target field.
1 exe创建快捷方式,并且加后缀 program --serial 50114130 这是Win里面的一种调用说明. Please note that the programming logs ...
- PostgreSQL upset解决在插入过程中重复数据冲突
关于重复行问题: 在SQL Server中则可以自动排出重复行,不需要处理.在Oracle中经常遇到upsert语法,来排出冲突行.在PostgreSQL中,也需要手动排出重复行,否则会爆出错误,up ...
- std::hash实现太简单分布不匀
std::hash实现太简单分布不匀(金庆的专栏 2017.5)#include <iostream>#include <functional>using namespace ...
- iOS开发之谈谈App应用的架构搭建(推荐给大家看)
1.iOS应用架构谈 开篇: 2.iOS应用架构谈 view层的组织和调用方案: 3.iOS应用架构谈 网络层设计方案: 4.iOS应用架构谈 本地持久化方案及动态部署: 5.iOS应用架构谈 组件化 ...
- C# 操作嵌入的资源
被嵌入的程序执行文件 namespace AppTest { class Program { static void Main(string[] args) { Console.WriteLine(& ...
- JavaScript 冒号(:)详解
1.switch语句分支 2.?:三元表达式的false 3.声明对象直接量的成员 4.声明标签 1和2相信地球人都知道吧?如果有人不知道,那我改成地球上的程序员都知道,哈哈 3.对象直接量我们也经常 ...
- Pycharm简单使用教程
转自https://blog.csdn.net/qq_40130759/article/details/79421242 1.下载pycharm pycharm是一种Python IDE,能够帮助我们 ...
- 10 结构体和类 - —— 《Swift3.0 从入门到出家》
Swift中的面向对象5个要素:枚举.结构体.类.协议.扩展 面向对象研究的是对象,完成一件事情需要多个对象参与,是生活的映射 Swift中结构体和类非常相似,也就是结构体能完成类的所有功能.结构体是 ...
- Oracle恢复drop误删除的表和建用户操作
一.表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的.一般步骤有: 1.从flash back里查询被删除的表 select * from r ...
- PHP 页面编码声明方法详解(header或meta)(转)
编码格式有两种,一种是php文件本身的编码格式,如 editplus之类的编辑器在保存文件的时候允许你指定文件编码格式:另一种是php输出的文本的编码格式,这个信息只对浏览器生效,方法为<?ph ...