Android添加iPod USB PCM音频
2014-10-02 14:26
337 查看
在Apple的MFI文档中说明了,USB接口的播放器是需要接入USB的HID接口以及USB PCM接口。
驱动部分暂时先不说了,直接说framwork部分的添加PCM接口部分的事情了。
1.在android的源码中提供了pcm部分的接口,源码位置;\external\tinyalsa.这里面就有pcm部分的代码了。
a.打开audio设备:struct pcm *pcm_open(unsigned int card, unsigned int device,unsigned int flags, struct pcm_config *config)
参数说明:
card 声卡编号。 这个可以在 proc/asound/下看到card0 、card1、cards。 如果你有两个声卡设备你才看得到card1,也就是说,如果ipod的usb pcm驱动成功的话在这个里面你就可以看到了card1了。
devices这个就是接口设备、按照实际需要修改了。
flags:这个参数填入 PCM_IN,因为我们需要的是PCM输入设备。
config:这个就是配置信息项目了重点配置项目: format : PCM_FORMAT_S16_LE; channels : 2;还有就是rates:我们先默认配置44100.这个参数是需要根据ipod发送过来的参数实时调整的。
在pcm_open的源码里面我们可以看到,实际上是直接打开设备:
snprintf(fn, sizeof(fn), "/dev/snd/pcmC%uD%u%c", card, device,flags & PCM_IN ? 'c' : 'p');
也就是dev/snd/目录下的接口。注意这个地方,我们查看一下/dev/snd下的权限是属于system的,也就是说如果我们的程序没有系统的签名,这个设备是不能打开的。这里在写应用的时候就需要注意了。在程序中声明一下使用uid.system,这个不明白就再google一下吧。
这里需要注意一下:写代码的时候应该按照标准写,返回值pcm指针需要判断是否会null然后判断fd,不能只判断是否等于null,因为在错误的时候返回的是bad_pcm
static struct pcm bad_pcm = {
.fd = -1,
};
剩下的事情就比较简单了。pcm读取的流程是:pcm_read然后将读取的数据写入到pcm_write就可以了。关于buff设置大小的问题就可以参考alsa的资料了。
这样子音频就出来了。。。。。
驱动部分暂时先不说了,直接说framwork部分的添加PCM接口部分的事情了。
1.在android的源码中提供了pcm部分的接口,源码位置;\external\tinyalsa.这里面就有pcm部分的代码了。
a.打开audio设备:struct pcm *pcm_open(unsigned int card, unsigned int device,unsigned int flags, struct pcm_config *config)
参数说明:
card 声卡编号。 这个可以在 proc/asound/下看到card0 、card1、cards。 如果你有两个声卡设备你才看得到card1,也就是说,如果ipod的usb pcm驱动成功的话在这个里面你就可以看到了card1了。
devices这个就是接口设备、按照实际需要修改了。
flags:这个参数填入 PCM_IN,因为我们需要的是PCM输入设备。
config:这个就是配置信息项目了重点配置项目: format : PCM_FORMAT_S16_LE; channels : 2;还有就是rates:我们先默认配置44100.这个参数是需要根据ipod发送过来的参数实时调整的。
在pcm_open的源码里面我们可以看到,实际上是直接打开设备:
snprintf(fn, sizeof(fn), "/dev/snd/pcmC%uD%u%c", card, device,flags & PCM_IN ? 'c' : 'p');
也就是dev/snd/目录下的接口。注意这个地方,我们查看一下/dev/snd下的权限是属于system的,也就是说如果我们的程序没有系统的签名,这个设备是不能打开的。这里在写应用的时候就需要注意了。在程序中声明一下使用uid.system,这个不明白就再google一下吧。
这里需要注意一下:写代码的时候应该按照标准写,返回值pcm指针需要判断是否会null然后判断fd,不能只判断是否等于null,因为在错误的时候返回的是bad_pcm
static struct pcm bad_pcm = {
.fd = -1,
};
剩下的事情就比较简单了。pcm读取的流程是:pcm_read然后将读取的数据写入到pcm_write就可以了。关于buff设置大小的问题就可以参考alsa的资料了。
这样子音频就出来了。。。。。
相关文章推荐
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPool的利弊以及各个在游戏中的用途!
- 在Android 中调用选择图片、视频、添加音频、录音、拍摄视频、拍照等其他的功能
- 在Android 中调用选择图片、视频、添加音频、录音、拍摄视频、拍照等其他的功能
- Android中添加USB键盘的CapsLock键
- android 添加一个音频
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPool的利弊以及各个在游戏中的用途!
- 深度分析:Android4.3下MMS发送到附件为音频文件(音频为系统内置音频)的彩信给自己,添加音频-发送彩信-接收彩信-下载音频附件-预览-播放(一,添加附件)
- Android游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- (转)【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- Android KitKat 4.4平台开发-添加USB ADB和MTP功能支持
- android:添加usb键盘+按键布局和映射的修改
- android:添加usb键盘+按键布局和映射的修改
- Android中添加USB键盘的CapsLock键
- android:添加usb键盘+按键布局和映射的修改
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- 在Android 中调用选择图片、视频、添加音频、录音、拍摄视频、拍照等其他的功能
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPool的利弊以及各个在游戏中的用途!
- android:添加usb键盘+按键布局和映射的修改
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- 深度分析:Android4.3下MMS发送到附件为音频文件(音频为系统内置音频)的彩信给自己,添加音频-发送彩信-接收彩信-下载音频附件-预览-播放(一,添加附件)