linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一【转】
本文转载自:http://blog.csdn.net/radianceblau/article/details/64125411
目前linux中主流的音频体系结构是ALSA(Advanced Linux Sound Architecture),ALSA在内核驱动层提供了alsa-driver,在应用层提供了alsa-lib,应用程序只需要调用alsa-lib提供的API就可以完成对底层硬件的操作。说的这么好,但是Android中没有使用标准的ALSA,而是一个ALSA的简化版叫做tinyalsa。Android中使用tinyalsa控制管理所有模式的音频通路,我们也可以使用tinyalsa提供的工具进行查看、调试。
编译tinyalsa后生成四个小工具:
- tinymix
- tinyplay
- tinycap
- tinypcminfo
编译命令:
- mmm external/tinyalsa/
下面依次演示一下四个小工具的使用:(以下使用联芯科技的LC1860平台配合LC1160电源+音频芯片,截图及演示效果均来自M7301P5测试机)
1, tinypcminfo
tinypcminfo用于查看pcm通道的相关信息
输入:
- tinypcminfo -D /proc/asound/cards
结果如下:
从上面获得的信息中可以知道PCM的采样率,通道个数,采样点数等信息。
其中 –D 后边跟的参数为声卡文件,一般位于/proc/asound/cards。可以使用
- cat /proc/asound/cards
查看当前声卡
2, tinymix
如下图所示,直接输入tinymix可以得到音频通路相关的各项配置参数。也可以通过添加参数修改其中的配置,如希望提高ADC1 Gain值到110,输入tinymix 12 110即可。
单独查看上述信息比较难以梳理,配合音频通路图会更加清晰。
上图中红色字体标明了LC1160与麦克风、耳机等硬件设备的连接关系。(注:M73xx项目由于内部ClassD不满足要求,喇叭连在了AUX通路上)
各个通路上的增益调节部分使用绿色字体标出了与tinymix中选项的对应关系。
图中加号与Mux是通路选择开关,对应tinymix中的其它的选项,用于在各种模式下切换音频通道。此部分比较多没有在图中一一标出,但根据已知的通路名是比较容易对应的。
图中黄色箭头标出的是通话时下行音频数据流,从PCM接口进入到LC1160,然后经过MonoDAC进行数模转化后送到听筒。
图中紫色箭头标出的是通话时上行音频数据流,从主MIC采集声音后,经过ADC1进行模数转换后由PMC的DO线送出
3, tinyplay
tinyplay是一个简易的音乐播放器,一般用于播放测试。tinyplay只能播放wav原始格式的音乐,不能进行Mp3等格式的解码,支持44.1kHz,48kHz采样率的wav音乐。
在调用tinyplay播放音乐之前需要先使用tinymix切换好音频通路:
- tinymix 0 I2SR //选择Stereo DACR的音源为i2s
- tinymix 1 I2SL //选择Stereo DACL的音源为i2s
- tinymix 2 0 0 //将Stereo DAC左右声道的mute关闭
- tinymix 24 1 //开启喇叭的外部PA芯片
- tinymix 40 1 //将Stereo DACR的声音路由到AUX口输出(因为实验机器喇叭挂载AUX接口上)
- tinymix 41 1 //将Stereo DACR的声音路由到AUX口输出(因为实验机器喇叭挂载AUX接口上)
- tinyplay z.wav
4, tinycap
tinycap是一个简易的录音软件,一般用于录音测试。
在调用tinycap录音之前需要先调整好音频通路:
- tinymix 14 30 //mic1 volume
- tinymix 19 1 //mic1 boost on
- tinymix 26 1 //adc1 -> mic1
- tinymix 50 ADC1 //i2sR out -> adc1
- tinymix 51 ADC1 //i2sL out -> adc2
- echo "0xfb 0x01" > /sys/devices/platform/comip_codec/lc1160_reg //bias poweron
- echo "0xad 0x08" > /sys/devices/platform/comip_codec/lc1160_reg //adc1 enable
- echo "0xac 0x01" > /sys/devices/platform/comip_codec/lc1160_reg //mic1 pga enable
- echo "0x3b 0xcc" > /sys/devices/platform/comip_codec/lc1160_reg //ldo
- echo 2 > /sys/bus/i2c/drivers/fm2018/0-0060/mode //bypass 外部的回声消除音频芯片(M730x项目特有)
- tinycap /sdcard/Music/l.wav
录音结束通过ctrl+C强行退出即可,之后在/sdcard/Music/路径下查看到l.wav音频文件
使用adb pull到本地电脑中,使用goldwave播放、查看。
- adb pull /sdcard/Music/l.wav d:\
另外:
LC1160的寄存器是分页的,即同一个地址上存在两个不同含义的寄存器,通过控制0xFC寄存器中的值来切换到第二功能页
- echo "0xfc 0x01" > /sys/devices/platform/comip_codec/lc1160_reg
- cat /sys/devices/platform/comip_codec/lc1160_reg
- echo "0xfc 0x00" > /sys/devices/platform/comip_codec/lc1160_reg
linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一【转】的更多相关文章
- linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)【转】
本文转载自:https://blog.csdn.net/radianceblau/article/details/73498303 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...
- linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)【转】
本文转载自:https://blog.csdn.net/radianceblau/article/details/76180915 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...
- linux驱动由浅入深系列:PBL-SBL1-(bootloader)LK-Android启动过程详解之一(高通MSM8953启动实例)
转自:http://blog.csdn.net/radianceblau/article/details/73229005 http://www.aiuxian.com/article/p-14142 ...
- linux驱动基础系列--linux spi驱动框架分析
前言 主要是想对Linux 下spi驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型等也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! spi ...
- linux驱动基础系列--linux spi驱动框架分析(续)
前言 这篇文章是对linux驱动基础系列--linux spi驱动框架分析的补充,主要是添加了最新的linux内核里设备树相关内容. spi设备树相关信息 如之前的文章里所述,控制器的device和s ...
- linux驱动基础系列--linux rtc子系统
前言 linux驱动子系统太多了,连时钟也搞了个子系统,这导致一般的时钟芯片的驱动也会涉及到至少2个子系统,一个是时钟芯片接口子系统(比如I2c接口的时钟芯片),一个是内核给所有时钟芯片提供的rtc子 ...
- linux驱动基础系列--Linux mmc sd sdio驱动分析
前言 主要是想对Linux mmc子系统(包含mmc sd sdio)驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.块设备驱动.设备模型等也不进行详细说明原 ...
- linux驱动基础系列--Linux 串口、usb转串口驱动分析
前言 主要是想对Linux 串口.usb转串口驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如字符设备驱动.平台驱动等也不进行详细说明原理.如果有任何错误地方,请指出, ...
- linux驱动基础系列--Linux下Spi接口Wifi驱动分析
前言 本文纯粹的纸上谈兵,我并未在实际开发过程中遇到需要编写或调试这类驱动的时候,本文仅仅是根据源码分析后的记录!基于内核版本:2.6.35.6 .主要是想对spi接口的wifi驱动框架有一个整体的把 ...
随机推荐
- [hihocoder][Offer收割]编程练习赛58
最大的K-偏差排列 每次取可选范围里的最大的数字,如果最左侧的数字还没有使用就直接使用最左侧的数字 #pragma comment(linker, "/STACK:102400000,102 ...
- Java—将文件压缩为zip文件
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import ...
- [Windows Server 2003] 安装PHP+MySQL方法
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:PHP+MyS ...
- VMware 11安装Mac OS X 10.10 及安装Mac Vmware Tools.
先上一张效果图兴奋一下,博主穷屌丝一个,只能通过虚拟黑苹果体验下高富帅的生活,感觉超爽的,废话不多说的,直接上图了! 目录: 1.安装所需软件下载: 2.Mac OS X10.10 安装基本步骤: 3 ...
- 【sqli-labs】 less57 GET -Challenge -Union -14 queries allowed -Variation4 (GET型 挑战 联合查询 只允许14次查询 变化4)
双引号闭合 http://192.168.136.128/sqli-labs-master/Less-57/?id=1"%23 和less56一样查数据
- CDR X8图框精确剪裁在哪?
对于CorelDRAW,刚从低版本升级为高版本的同学可能一下子理不清方向,因为在CorelDRAW X8中有很多功能命令做了整改和位置的变化.很多用户反映,CDR中的图框精确剪裁不见了,然而并不是该命 ...
- react 子组件调用父组件方法
import React from 'react'import '../page1/header.css'import { Table } from 'antd'import Child from ' ...
- python合并多个txt文件成为一个文件
#coding=utf-8 import os import os.path #文件夹遍历函数 #获取目标文件夹的路径 filedir = './data/click_data' #获取当前文件夹中的 ...
- BFS入门篇——RQNOJ195&&335
PID195 / 校园迷宫☆ 从x,y走到去q,w的最小步数,限制是有的点可走,有的点不可走,BFS嘛. #include<bits/stdc++.h> using namespace s ...
- LVM(Logical Volume Manager)逻辑卷管理
本文实验部分,完全由本人亲自动手实践得来 文章中有部分的内容是我个人通过实验测试出来的,虽以目前本人的能力还没发现不通之处,但错误难免,所以若各位朋友发现什么错误,或有疑惑.更好的建议等,盼请各位能在 ...