问题描述
我的要求是:
- 在播放界面读取通道数
- 读取每个采集接口的通道数
- 将 WAV 通道映射到特定的扬声器输入/输出
说到扬声器,可以通过检查 alsa-info 命令的输出来实现:
[ 2.254295] input: HDA Intel PCH Front Mic as /devices/pci0000:00/0000:00:1b.0/sound/card2/input10
[ 2.254441] input: HDA Intel PCH Rear Mic as /devices/pci0000:00/0000:00:1b.0/sound/card2/input11
[ 2.254543] input: HDA Intel PCH Line as /devices/pci0000:00/0000:00:1b.0/sound/card2/input12
[ 2.254726] input: HDA Intel PCH Line Out Front as /devices/pci0000:00/0000:00:1b.0/sound/card2/input13
[ 2.254789] input: HDA Intel PCH Line Out Surround as /devices/pci0000:00/0000:00:1b.0/sound/card2/input14
[ 2.254845] input: HDA Intel PCH Line Out CLFE as /devices/pci0000:00/0000:00:1b.0/sound/card2/input15
[ 2.254904] input: HDA Intel PCH Line Out Side as /devices/pci0000:00/0000:00:1b.0/sound/card2/input16
[ 2.254966] input: HDA Intel PCH Front Headphone as /devices/pci0000:00/0000:00:1b.0/sound/card2/input17
我不明白这是 PCI Express 之间的映射,它的名称由声卡驱动程序提供商提供。以下输出可以说明:
有什么办法可以参考:
/devices/pci0000:00/0000:00:1b.0/sound/card2/input13
...直接播放单声道WAV进去?
通常,我希望能够列出所有声音接口并收集参数,以便我可以通过 SDL 播放到任何物理扬声器并从任何物理麦克风在特定 WAV 通道上录音。我设法通过以下方式部分实现了这一目标:
- 确定 aplay -l 将使用的设备。在我的例子中:
card 0: Device [USB Sound Device],device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0
捕获:状态:停止接口 2 Altset 1 格式:S16_LE 通道:2 端点:5 IN(异步)速率:44100、48000 位:16
所以它告诉我我有一个带有 2 个通道的捕获接口(但我希望有 2 个捕获 - 一个用于线路输入,第二个用于立体声麦克风)
- 所以我知道如果麦克风连接到接口,那么我应该期待 2 通道 WAV,每个通道将对应一个麦克风通道
非常相似的故事是播放界面。这是用于播放的 cat /proc/asound/card0/stream0
:
Playback:
Status: Running
Interface = 1
Altset = 2
Packet Size = 196
Momentary freq = 48000 Hz (0x30.0000)
Interface 1
Altset 1
Format: S16_LE
Channels: 8
Endpoint: 6 OUT (ADAPTIVE)
Rates: 44100,48000
Bits: 16
Interface 1
Altset 2
Format: S16_LE
Channels: 2
Endpoint: 6 OUT (ADAPTIVE)
Rates: 44100,48000
Bits: 16
Interface 1
Altset 3
Format: S16_LE
Channels: 4
Endpoint: 6 OUT (ADAPTIVE)
Rates: 44100,48000
Bits: 16
Interface 1
Altset 4
Format: S16_LE
Channels: 6
Endpoint: 6 OUT (ADAPTIVE)
Rates: 44100,48000
Bits: 16
Interface 1
Altset 5
Format: S16_LE
Channels: 2
Endpoint: 6 OUT (ADAPTIVE)
Rates: 96000
Bits: 16
在那种情况下,我有用于 7.1 扬声器设置 + 耳机的物理连接器输入。所以我希望能控制 10 个频道,但我有超过 8 个(耳机总是重复的,好像有 2.1)有什么办法可以单独访问这些频道? 还有一个 SPDIF 输入/输出物理接口。我应该期望在每个物理接口上总是有重复的 PCM 还是有任何方法可以分离这些流?我想尽可能多地从这辆有声汽车中挤出 I/O :)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)