本文转载自: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后生成四个小工具:

  1. tinymix
  2. tinyplay
  3. tinycap
  4. tinypcminfo

编译命令:

  1. mmm external/tinyalsa/

下面依次演示一下四个小工具的使用:(以下使用联芯科技的LC1860平台配合LC1160电源+音频芯片,截图及演示效果均来自M7301P5测试机)

1,  tinypcminfo

tinypcminfo用于查看pcm通道的相关信息

输入:

  1. tinypcminfo -D /proc/asound/cards

结果如下:

从上面获得的信息中可以知道PCM的采样率,通道个数,采样点数等信息。

其中 –D 后边跟的参数为声卡文件,一般位于/proc/asound/cards。可以使用

  1. 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切换好音频通路:

  1. tinymix 0 I2SR      //选择Stereo DACR的音源为i2s
  2. tinymix 1 I2SL      //选择Stereo DACL的音源为i2s
  3. tinymix 2 0 0       //将Stereo DAC左右声道的mute关闭
  4. tinymix 24 1        //开启喇叭的外部PA芯片
  5. tinymix 40 1        //将Stereo DACR的声音路由到AUX口输出(因为实验机器喇叭挂载AUX接口上)
  6. tinymix 41 1        //将Stereo DACR的声音路由到AUX口输出(因为实验机器喇叭挂载AUX接口上)
  7. tinyplay z.wav

4,  tinycap

tinycap是一个简易的录音软件,一般用于录音测试。

在调用tinycap录音之前需要先调整好音频通路:

  1. tinymix 14 30           //mic1 volume
  2. tinymix 19 1            //mic1 boost on
  3. tinymix 26 1            //adc1 -> mic1
  4. tinymix 50 ADC1         //i2sR out -> adc1
  5. tinymix 51 ADC1     //i2sL out -> adc2
  6. echo "0xfb 0x01" >  /sys/devices/platform/comip_codec/lc1160_reg     //bias poweron
  7. echo "0xad 0x08" >  /sys/devices/platform/comip_codec/lc1160_reg //adc1 enable
  8. echo "0xac 0x01" >  /sys/devices/platform/comip_codec/lc1160_reg     //mic1 pga enable
  9. echo "0x3b 0xcc" >  /sys/devices/platform/comip_codec/lc1160_reg     //ldo
  10. echo 2 > /sys/bus/i2c/drivers/fm2018/0-0060/mode     //bypass 外部的回声消除音频芯片(M730x项目特有)
  11. tinycap /sdcard/Music/l.wav

录音结束通过ctrl+C强行退出即可,之后在/sdcard/Music/路径下查看到l.wav音频文件

使用adb pull到本地电脑中,使用goldwave播放、查看。

  1. adb pull /sdcard/Music/l.wav d:\

另外:

LC1160的寄存器是分页的,即同一个地址上存在两个不同含义的寄存器,通过控制0xFC寄存器中的值来切换到第二功能页

    1. echo "0xfc 0x01" >  /sys/devices/platform/comip_codec/lc1160_reg
    2. cat /sys/devices/platform/comip_codec/lc1160_reg
    3. echo "0xfc 0x00" >  /sys/devices/platform/comip_codec/lc1160_reg

linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一【转】的更多相关文章

  1. linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)【转】

    本文转载自:https://blog.csdn.net/radianceblau/article/details/73498303 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...

  2. linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)【转】

    本文转载自:https://blog.csdn.net/radianceblau/article/details/76180915 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...

  3. linux驱动由浅入深系列:PBL-SBL1-(bootloader)LK-Android启动过程详解之一(高通MSM8953启动实例)

    转自:http://blog.csdn.net/radianceblau/article/details/73229005 http://www.aiuxian.com/article/p-14142 ...

  4. linux驱动基础系列--linux spi驱动框架分析

    前言 主要是想对Linux 下spi驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型等也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! spi ...

  5. linux驱动基础系列--linux spi驱动框架分析(续)

    前言 这篇文章是对linux驱动基础系列--linux spi驱动框架分析的补充,主要是添加了最新的linux内核里设备树相关内容. spi设备树相关信息 如之前的文章里所述,控制器的device和s ...

  6. linux驱动基础系列--linux rtc子系统

    前言 linux驱动子系统太多了,连时钟也搞了个子系统,这导致一般的时钟芯片的驱动也会涉及到至少2个子系统,一个是时钟芯片接口子系统(比如I2c接口的时钟芯片),一个是内核给所有时钟芯片提供的rtc子 ...

  7. linux驱动基础系列--Linux mmc sd sdio驱动分析

    前言 主要是想对Linux mmc子系统(包含mmc sd sdio)驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.块设备驱动.设备模型等也不进行详细说明原 ...

  8. linux驱动基础系列--Linux 串口、usb转串口驱动分析

    前言 主要是想对Linux 串口.usb转串口驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如字符设备驱动.平台驱动等也不进行详细说明原理.如果有任何错误地方,请指出, ...

  9. linux驱动基础系列--Linux下Spi接口Wifi驱动分析

    前言 本文纯粹的纸上谈兵,我并未在实际开发过程中遇到需要编写或调试这类驱动的时候,本文仅仅是根据源码分析后的记录!基于内核版本:2.6.35.6 .主要是想对spi接口的wifi驱动框架有一个整体的把 ...

随机推荐

  1. Java 基础入门随笔(2) JavaSE版——关键字、进制转换、类型转换

    1.Java语言-关键字 关键字:被java语言赋予了特殊含义的词,特点是所有的字母都为小写. java涉及到的关键字整理: 用于定义数据类型的关键字 class interface byte sho ...

  2. 一个数据去重sql

    参考: https://www.jb51.net/article/129656.htm DELETE testcaseFROM testcase,  (  SELECT  max(id) id,  a ...

  3. 【转载】使用IntelliJ IDEA创建Maven聚合工程、创建resources文件夹、ssm框架整合、项目运行一体化

    一.创建一个空的项目作为存放整个项目的路径 1.选择 File——>new——>Project ——>Empty Project 2.WorkspaceforTest为项目存放文件夹 ...

  4. 最新 Xilinx vivado IP许可申请

    xilinx的fpga使用vivado开发,zynq系列fpga的SOC开发成为主流,加快fpga开发,也进一步提高了fpga开发的灵活性. xilinx提供很多ip核供开发者直接使用,开发快捷方便, ...

  5. enote笔记语言(4)

    what:我想知道某个“关键词(keyword)”(即,词语,可以是概念|专业术语|.......)的定义. why:我想知道事物发生的原因:我会不会犯“归因错误”?是“单因素”的还是“多因素”的原因 ...

  6. uva 10048 Audiophobia UVA - 10048

    题目简介 一个无向正权图,求任意两个节点之间的路径里最短的路径长度. 直接Floyd解决,就是注意要把Floyd的DP式子改一下成 G[i][j]=min(G[i][j],max(G[i][k],G[ ...

  7. 16.copy_to定制组合field解决cross-fields搜索弊端

    主要知识点: 在index的mapping中加copy_to字段的方法 copy_to搜索方法     用most_fields策略,去实现cross-fields搜索,有3大弊端,为了解决这三个弊端 ...

  8. MySQL-----一对多

    一对多: 用户表和部门表 用户: 用户id 用户名 部门 1 George   1 2 Elizabeth 1 3 Bruce 2 4 Catherine 3 部门: 部门id 部门名称 1 CEO ...

  9. JavaScript单元测试工具-Jest

    标注: 首先这并不是一篇完整的关于Jest的教程,只是个人在接触jest学习的一点随手笔记,大部分内容都是对官方文档的一些翻译. ----------------------------------- ...

  10. js调用ro的webservice

    Enabling JavaScript Access on the Server Drop the JavaScriptHttpDispatcher component onto the server ...