我有一台运行 Fedora 24 的现代 PC,带有实时补丁(CCRMA 音频工具),并在 PCIe 上安装了 ASUS Essence STX II 立体声声卡。用它我们运行一个播放/捕获应用程序。此外,我们需要将 CAN(控制器局域网)和 BLE(低功耗蓝牙)集成到系统中,并为每个功能配备一个 PCIe 卡。 CAN PCIe 卡来自 PEAK (PCAN-PCI Express 2-ch),BLE 卡是 HP 放在 PCIe 卡上的 Intel 8260 M2 卡 (AFAIK)。
仅安装声卡即可正常工作(使用 ALSA 作为 API)。安装 CAN 和 BLE 后,会观察到以下情况:
- 播放效果与以前一样。
- 一个捕获通道在所有样本中仅返回零 (0) 或负一 (-1)。
- 另一个捕获通道返回 -2..2 范围内的值(预期为 -100..100),并且当应用我们的应用程序信号处理时,会呈现低质量但可检测的预期结果。
- ALSA API 报告设置和配置没有问题。
- CAN 和 BLE 按预期运行。
如果没有任何更深入的 PCIe 经验,我怀疑 CAN 和/或 BLE PCIe 卡混淆了声卡功能的映射。我在我面前看到了一些设置脚本来解开卡片的实际操作,但不知道从哪里开始。
有人可以吗:
- 告诉我我的预感是否正确?
- 请告诉我可以去哪里获取有关如何纠正问题的信息?
- ...或者,分享您对类似问题的解决方案?
谢谢!
更新
arecord -l
为所有卡组合(仅限音频卡、BLE + 音频和 CAN + BLE + 音频)提供相同的报告。
dmesg
不喊奇怪,但我没有资格说。
从lspci -vv
,安装了所有三张卡后,我有
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
Bus: primary=00, secondary=02, subordinate=02, sec-latency=0
Bus: primary=00, secondary=03, subordinate=03, sec-latency=0
Bus: primary=00, secondary=04, subordinate=05, sec-latency=0
Bus: primary=04, secondary=05, subordinate=05, sec-latency=0
从所有声称是 PCI 桥的条目中。我将其解释为一种结构,其中主总线 (00) 有四个子总线 (01-04),并且子总线 04 连接了另一个子总线(总线 05)。
声卡具有 BDF 05:04.0 并使用 IRQ 16,该 IRQ 16 通过 00-04-05 桥 04:00.0 传播。现在,00:1f.4 处有一个“SMBus”设备也使用 IRQ 16。该设备也仅安装了声卡(当音频按预期工作时),然后也使用 IRQ 16。第四个 (! ) IRQ 16 的用户是 PEAK CAN 网络控制器,时间为 01:00.0。列出的所有其他设备都有唯一的 IRQ 编号。
我正在不断学习,但无法确定非唯一 IRQ 是否是一个问题。这是个问题吗?lspci
我应该查看更好/其他信息吗?
答案1
我们已经解决了!看来我们插入其他PCI卡影响了混合器在ALSA驱动程序中,将捕获转移到主板内置声音功能的前置麦克风。最重要的是,该麦克风的音量设置为 0。这适用于我们所看到的诊断(信号水平非常低的单通道捕获)。我们错过了正确设置 ALSA 配置,使其能够由其他进程控制。一个可能的罪魁祸首可能是允许远程音频控制的脉冲音频过程。
混音器设置以及大多数综合的可以使用alsa-info.sh
我们发现影响我们的应用程序的差异的地方找到有关所有当前音频设置的信息集。
现在我们已经明确设置了 ALSA 驱动程序的配置全部所有 PCI 卡上的音频功能和经过验证的功能。这关联展示如何保存混音器设置,我们还通过/etc/modprobe.d/alsa.conf
配置文件显式设置音频驱动程序。
呼呼!