问题 : 数字输入 S/PDIF / IEC958 没有声音。
设备/软件: USB 外置声卡:CM106 - Ubuntu 20.04 LTS - GUI:Gnome-FlashBack
配置音频: FreeBox Player(法国互联网电视提供商) - 数字输出 S/PDIF ==[TosLink]=> 声卡 - 数字输入 S/PDIF
FreeBox 播放器配置:主声音输出 S/PDIF,带或不带直通
数字输入 iec958 在图形 pavucontrol 或脉冲命令行答案中可见。但声音计(vumeter)仍然是空的,没有声音,没有信号。
我没有任何其他声音设备来检查 FreeBox 播放器 S/PDIF 输出。
在 /sys 或 /proc 或 /dev 中是否有我可以检查的文件,以查看是否有任何数字信号/数据?
iec958 输入可见,但没有声音/信号?为什么 ?
是否需要做一些特定的事情才能使其发挥作用。
如何解决这个问题?从哪里开始?什么步骤?
我花了很多周末尝试修复它,阅读论坛,我不记得我尝试过的所有内容并在这里详细说明。我将回答您有关此故障排除的问题。
感谢您的帮助。
答案1
如果您在 pavucontrol 中看到输入电平,则您的卡正在接收输出,您应该能够记录它。
根据我的经验,除了设置持续录音/播放之外,没有办法让pulseaudio配置你的卡以将其传递到线路输出。
您也许可以使用 amixer 更改此设置,但这是高度特定于卡的,并且您的卡可能根本无法执行此操作,因此您可能有一个恒定的(消耗 CPU 的)环回解决方案。
如果您的问题是在输入上看不到任何内容,那么您需要配置您的卡:在 pavucontrol 中,将配置下的配置文件更改为包含“数字立体声 (IEC958) 输入”的内容。
更新:
我已经用我的 CM106 设备进行了实验,我认为 Linux 驱动程序不支持将 spdif 混合到输出中。
然而,根据数据表(http://www.steila.com/usb4io/CMedia/CM106--L_F-Datasheet-1.3.pdf),卡确实支持它,事实上,一些实验让我启用它,通过向寄存器1写入一个值来启用SPDIFMIX(hidraw1是与usb声卡对应的hidraw设备,插入时检查dmesg):
perl -e 'print pack "H*", "002001b001"' >/dev/hidraw1
这会将寄存器设置为加电默认值 (00b0) + SPDIFMIX 启用 (01b0)(采用小端字节序)。
以下 shell skript hack 在每个“USB 声音设备”上设置该位 - 当与错误的卡一起使用时可能会很危险:
#!/bin/sh
cd /sys/class/hidraw || exit
for dev in *; do
set "$dev"/device/input/*/name
read name <"$1"
if [ "$name" = "USB Sound Device" ]; then
echo "enabling SPDIFMIX on $dev"
printf "\000\040\001\260\001" >/dev/"$dev"
fi
done