android alsa将usb 声卡集成到android4.0上
来源:互联网 发布:exp导出数据库 full=y 编辑:程序博客网 时间:2024/05/19 23:58
1. 任务分解
1.1 android 使用了tinyalsa库,看了一下代码,这个库实在功能太弱,google总是放弃稳定的好用的东西不用,自己乱搞,或许是因为licence的问题?于是第一个子任务是将原来android 2.3.3上的alsa库移植上来。
1.2 内核要打开配置,至少把UAC打开
1.3 找一个usb声卡,淘宝上7块钱就能买到,真他妈便宜,不知道这些人怎么挣钱的!
1.4 使用编译出来的alsa库进行测试,验证可正常使用
1.5 使用android自带的tinyalsa进行播放测试,因为android的HAL层是调用这个库的,所以这个还非测试不可
1.6 修改audio_hw(android声音的HAL层)代码,将UAC声卡接入到android4.0中去
1.7 使用android自带的Music.apk,SoundRecorder.apk进行最后测试,我想这两个过了其它软件应该没问题了吧
2. 各子任务的具体实施
2.1 移植alsa库
将原来android2.3.3/external/alsa-lib,android2.3.3/external/alsa-utils
这两个库cp到 android4.0/external/中 直接编译生成 相应的alsa_aplay,alsa_amixer,alsa_ctl,并cp到目标板子上,
将alsa的配置文件也从android2.3.3 复制到目标板子/system/usr/share/alsa 目录下
./pcm/center_lfe.conf
./pcm/surround40.conf
./pcm/surround50.conf
./pcm/dmix.conf
./pcm/rear.conf
./pcm/front.conf
./pcm/surround71.conf
./pcm/surround51.conf
./pcm/dsnoop.conf
./pcm/dpl.conf
./pcm/default.conf
./pcm/modem.conf
./pcm/side.conf
./pcm/iec958.conf
./pcm/surround41.conf
./alsa.conf
./cards/aliases.conf
adb shell进入目标板
执行alsa_amixer ,alsa_aplay -l 执行成功,到此alsa工具移植成功,这点看来没有太大难度
2.2 打开kernel配置,menuconfig,打开如下配置
========================================================
Device Drivers --->
<*> Sound card support --->
[*] USB sound devices --->
<*> USB Audio/MIDI driver
========================================================
重新编译内核,并烧写到目标板子上
2.3 找一个usb声卡,插入usb端口
并使用dmesg查看内核日志输出,从dmesg上应该可以看见UAC设备的驱动加载信息
ls /dev/snd/*
/dev/snd/pcmC0D0c
/dev/snd/pcmC0D0p
/dev/snd/pcmC1D0c //uac capture
/dev/snd/pcmC1D0p //uac play out
说明声卡已经加载成功了
2.4 使用alsa 工具测试
列出设备
alsa_aplay -l
alsa_aplay 001.wav -D default:CARD=USB Set default:CARD=USB Set是从alsa_aplay -l中列出的设备名
可正常听到声音
2.5 使用tinyalsa测试
# tinyplay -d 1 001.wav //居然提示invalid parameter 只能看代码了
external/tinyalsa/tinyplay.c
发现主要问题在于tinyplay只打开了设备0多的设备不理,这点真比alsa库差远了,只能山寨一下了,修改如下红色字体部分
void play_sample(FILE *file, unsigned int card, unsigned int device, unsigned int channels,
int main(int argc, char **argv)
{
if (strcmp(*argv, "-d") == 0) {
}
void play_sample(FILE *file,unsigned int card, unsigned int device, unsigned int channels,
{
//config 的配置很重要,tinyalsa直接从wav文件把channels,rate,等读出来并配置进声卡,而像我买的7块钱声卡,功能很弱从windows的设备管理器上看,只支持 16000hz, 16bits,2 channels
//所以我只好录一个 16000hz,16bits,2 channel的001.wav文件了
//如果config 配置出错,将看到 invalid parameter的错误提示,这点和alsa_aplay的功能 就差远了
buffer = malloc(size);
}
# tinyplay -d 1 001.wav
2.6 修改audio_hw(android声音的HAL层)代码,将UAC声卡接入到android4.0中去
HAL层代码位置:
hardware/targetboard目标板/audio/audio_hw.c
找到 pcm_open(card, port, PCM_OUT,&config); 的地方把相应的config配置成和tinyplay.c里正确的配置
像我的声卡就是16000hz 16bits,2 channels
重新编译 生成 audio.primary.$(TARGET_BOARD_PLATFORM).so 并更新到目标板上
重新 启动 mediaserver进程 (kill掉这个进程,就会自动重启,并重新加载audio.primary.xxx.so库)
使用android音乐播放,播放mp3,OK可成功听到声音了
使用android录音机, 可成功录音了
至此UAC移植完成,折腾了4个多小时,不容易啊!!
明天继续Stagefright部分的开发,争取把摄像头,声音的rtp流发送集成到stagefright中去。并完成测试程序的开发
- android alsa将usb 声卡集成到android4.0上
- 在omap3530上移植成功Android的ALSA声卡驱动
- 在omap3530上移植成功Android的ALSA声卡驱动
- 在omap3530上移植成功Android的ALSA声卡驱动
- Android中使用ALSA声卡
- Android中使用ALSA声卡
- Android ALSA 声卡驱动学习
- Android中使用ALSA声卡
- alsa声卡
- Android中使用ALSA声卡及alsa.conf asound.conf
- Android中使用ALSA声卡及alsa.conf asound.conf
- Android中使用ALSA声卡及alsa.conf asound.conf
- ALSA 驱动解决 Ubuntu Linux Intel 集成声卡问题
- 浅析alsa声卡驱动snd_pcm_start函数-将音频数据真实的发送到外部音频接口硬件
- USB启动盘,将DOS工具集成到WinPE的grub
- 在Gentoo上用ALSA驱动Intel的声卡
- Android设备使用libusb和usb声卡
- alsa声卡安装
- 《C++ Primer》读书笔记(7.8,7.9)
- Nexus 7 不能连接到电脑进行Debug
- 在release模式下使用vector下崩溃的问题
- 再玩KMP算法
- 【利用Word“自动更正”功能快速输入文字】
- android alsa将usb 声卡集成到android4.0上
- 开发DBA(APPLICATION DBA)的重要性
- printf函数返回值的含义
- 如何在Windows8中设置虚拟热点共享上网
- C程序设计课程-2012电子信息 第十次实验任务
- 全排列算法
- 黑马程序员——位运算符
- InvokeHelper调用引发异常
- 团购网站商品倒计时