USB声卡的介绍和调试

        常见的USB摄像头会自带MIC

        使用tinypcminfo -D [card编号] 查看usb声卡支持的格式,通道等;pcm_in就是录音的,pcm_out是放音的。如下可知,该usb声卡支持的是1通道,因此使用tinycap录音时记得把声道设置正确。此外,例如你使用rk809进行放音,但由于rk809支持的是2通道的,所以放音会失败。

        usb摄像头自带MIC不能走tinyalsa_hal,其走的是usbaudio_hal,这样才能自动识别支持的格式。hardware\libhardware\modules\usbaudio\audio_hal.c中可以打印出这些函数的返回值,tinypcminfo -D [USB声卡] 看下和usb声卡参数是否正确,这些函数都是根据usb声卡信息去自动匹配的。

        调试时会遇到使用tinycap可以正常的录取到声音,但用系统自带的录音机无法录音,会报如下错误:  这是参数不匹配导致的,可如下修改

proxy_open() pcm_is_ready() failed: cannot set hw params: Invalid argument

        usb mic的优先级是高于板载麦的,例如rk3568平台,未插入usb摄像头时,使用rk809,插入带mic的usb摄像头时,就会使用usb声卡录音。那如何修改,在插入usb摄像头时,还是使用rk809进行录音呢?如下patch,当接入usb带麦克风的设备时,使用板载麦克风。

         android只能录默认优先级高的设备,而优先级的修改参考下面的补丁:也是在Engine.c文件中

         在apk里面调用相关的接口去选择录音设备,也就是实现切换录音设备的功能

//获取当前录音设备
private AudioDeviceInfo mSelectDevice;
AudioDeviceInfo[] devices = mAudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS);

//设置录音设备
public native void setAudioSource(@Source int audioSource) throws IllegalStateException;

        加入使用mAudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS);这个接口去获取录音设备,获取到个数是3,通过cat /proc/asound/cards查到的只有一个,这个会是什么原因造成的? 其原因是音频来源除了物理声卡,还可以源自其他地方,比如投屏,网络,或者一些模拟设备等。这个又不是一一对应的关系。

        usb声卡,使用tinycap录音正常,但本地录音会存在杂音;看logcat存在如下警告,内存溢出了,可能是buffer太小的原因,导致溢出,存在杂音

04-14 17:06:29.539 425 2860 W AudioFlinger: RecordThread: buffer overflow

        \system\media\alsa_utils\alsa_device_proxy.c如下修改,使用默认的SIZE;在alsa_utils/alsa_device_profile.c中定义了#define DEFAULT_PERIOD_SIZE 1024

         上面是针对usb声卡,还有板载mic,修改 hardware\rockchip\audio\tinyalsa_hal\audio_hw.h里面period_size

        所以usb声卡的相关调试文件主要有以下几个,可以去熟悉下

        system/media/alsa_utils/alsa_device_proxy.c

        system/media/alsa_utils/alsa_device_profile.c

        hardware\libhardware\modules\usbaudio\audio_hal.c

        frameworks\av\services\audiopolicy\enginedefault\src\Engine.cpp

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android USB是一种通过USB接口连接到Android设备的外部音频设备,用于提供更高质量的音频输入和输出。它可以替代手机或平板自带的内部声,提供更好的音频处理和音频效果。 Android USB通常由一个USB接口和音频输入输出接口组成。通过连接USB接口,可以将声连接到Android设备上。利用声的音频输入接口,可以将外部麦克风或乐器等音频信号输入到Android设备上,进行录音或音频处理。利用声的音频输出接口,可以将Android设备上的音频信号输出到外部音响、耳机或音箱等设备上,提供更好的音频体验。 通过使用Android USB,用户可以获得更高质量的音频输入输出。与手机或平板自带的内部声相比,USB通常具有更高的采样率和比特深度,可以捕捉更真实、清晰的声音和音乐细节。此外,USB通常还提供了更多的音频接口,比如耳机输出、音频输入等,方便用户根据不同的需求进行连接。 此外,在音乐制作、录音和混音等专业领域,Android USB也发挥着重要的作用。相对于内部声USB通常具有更好的音频处理和效果处理能力,可以满足专业用户的需求。用户可以通过连接USB,将专业麦克风、乐器等设备连接到Android设备上,进行更高水平的音频创作和编辑。 综上所述,Android USB可以提供更高质量的音频输入输出,以及更好的音频处理和效果处理能力。无论是普通用户还是专业音乐人,都可以通过使用Android USB,获得更出色的音频体验和创作效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值