gpt4 book ai didi

android - 关于 ALSA 驱动 : How to handle Audio Devices correctly

转载 作者:行者123 更新时间:2023-11-29 15:22:19 25 4
gpt4 key购买 nike

最近,我正在尝试为 Linux(实际上是 Android TV)开发一个 alsa 驱动程序。我遇到了一个关于 alsa(alsa 指的是高级 Linux 声音架构)设备处理的问题

其实,我已经研究了alsa-lib-1.0.27.1和tinyalsa(for android devices)的部分源代码。我研究了三星设备的音频驱动程序。

用户空间应用程序使用/dev/snd/pcmXXXXX 来播放/捕获音频数据。但是有一个问题,如果只有一个音频设备就可以了;

/dev/snd/
├── by-path
│   └── pci-0000:02:02.0 -> ../controlC0
├── controlC0
├── midiC0D0
├── pcmC0D0c
├── pcmC0D0p
├── pcmC0D1p
└── timer

但是,如果有多个设备(例如,当我插入 USB 音频设备时)。

/dev/snd/
├── by-path
│   └── pci-0000:02:02.0 -> ../controlC0
├── controlC0
├── controlC1 //new Control channel
├── midiC0D0
├── pcmC0D0c
├── pcmC0D0p
├── pcmC0D1p
├── pcmC1D0c //new card,new capture channel
├── pcmC1D0p //new card,new playback channel
└── timer

用户应用程序如何正确处理这些设备。

我真的被三星驱动搞糊涂了。==>linux-3.5.4/device/samsung/crespo/libaudio/AudioHardware.cpp

status_t AudioHardware::AudioStreamInALSA::open_l()
{
//.....
ALOGV("open pcm_in driver");
TRACE_DRIVER_IN(DRV_PCM_OPEN)
mPcm = pcm_open(0, 0, flags, &config);
//Why it always uses Card 0 and device 0.
//does this mean it can not support multi-devices

此外,如果您能与我分享一段源代码以获取更多信息(例如,其他驱动程序...),我将不胜感激

非常感谢。

最佳答案

mPcm = pcm_open(0, 0, flags, &config); 
//Why it always uses Card 0 and device 0.
//does this mean it can not support multi-devices

在我使用过的平台上,除 USB 之外的所有音频设备都位于卡 0 上。我并不是说硬编码卡和设备编号是个好主意——只是它通常不会成为实践中的实际问题。直到您开始添加更多卡片..

在这些平台上,USB 音频附件的 ALSA 卡/设备号将由 WiredAccessoryManager(或主机模式附件中的 UsbDeviceManager)获取(这是在 Android 的 Java 层中)。因此,如果您想避免让音频 HAL 对 USB 音频配件的卡/设备编号进行硬编码(但我怀疑有些实现只是假设卡 1 用于 USB 音频配件),则可以使用该信息。

Here's a link到 CodeAurora 论坛上的音频 HAL 实现,它作为许多高通平台的引用实现。和 here's the driver用于主机模式 USB 音频配件 (Android Open Accessory)。

关于android - 关于 ALSA 驱动 : How to handle Audio Devices correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17194777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com