首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使ALSA能够捕获to 4207‘S SPDIF输入的音频

使ALSA能够捕获to 4207‘S SPDIF输入的音频
EN

Unix & Linux用户
提问于 2020-10-02 18:28:04
回答 2查看 1.3K关注 0票数 1

在一个自定义平台上,我利用聪慧的SA5模块和附加的CS4207 HDA编解码器,尝试使用编解码器数字SPDIF输入和输出。HDA-设计是从康泰克的康纳-斯瓦尔评估委员会复制而来的。

SPDIF输出(连接到放大器)是开箱即用的--这里没有问题。

但是SPDIF的输入(信号需要被记录)让我头疼。

在测试期间,我使用了一个Xubuntu20.04

代码语言:javascript
复制
Linux Test-01 5.4.0-48-generic #52-Ubuntu SMP Thu Sep 10 10:58:49 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

稍后,我们将在buildroot中实现这些特性。

我到目前为止做了什么,

通过使用hda_analyser.py工具,我能够看到,在默认情况下,SPDIF输入小部件是禁用的。手动启用它们对结果没有任何影响:

代码语言:javascript
复制
# Node 0x07 SPDIF Reciver Input Converter - Enable
hda-verb /dev/snd/hwC0D0 0x07 0x70d 0x01
# Node 0x0f SPDIF Reciver Input Pin - Enable
hda-verb /dev/snd/hwC0D0 0x0f 0x707 0x20

当我向SPDIF输入提供信号时,hda_analyser将显示信号的有效标志和控制字内容。所以我认为消息来源是好的。

通过手动启用By 4207‘S "SPDIF到TX1环通“功能:

代码语言:javascript
复制
# Enable Rx to Tx1 Loopthru
hda-verb /dev/snd/hwC0D0 0x11 0x0500 0x01 && hda-verb /dev/snd/hwC0D0 0x11 0x0400 0x402a

我也能听到信号输入到SPDIF输入从扬声器连接到SPDIF输出。

->,所以我的结论是硬件部分应该是好的。

在ALSA方面,我认为有一个配置问题,因为没有列出IEC958数字捕获设备。但这也是我脑子不清醒的地方。有太多的配置路径(/usr/share/pulseaudio/alsa-mixer/ /etc/alsa/conf.d/ /usr/share/alsa/)和更多的配置模板,它们的占位符似乎都是由其他东西填充的。但我没有找到一种方法来找出有效使用的配置。

在ALSA文档中也找不到任何提示。

aplay -l输出

代码语言:javascript
复制
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: CS4207 Analog [CS4207 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: CS4207 Digital [CS4207 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 10: HDMI 4 [HDMI 4]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

arecord -l的输出(此处没有数字输入):

代码语言:javascript
复制
**** List of CAPTURE Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: CS4207 Analog [CS4207 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

pacmd list-cards的输出:

代码语言:javascript
复制
1 card(s) available.
    index: 0
        name: <alsa_card.pci-0000_00_0e.0>
        driver: <module-alsa-card.c>
        owner module: 7
        properties:
                alsa.card = "0"
                alsa.card_name = "HDA Intel PCH"
                alsa.long_card_name = "HDA Intel PCH at 0x91410000 irq 143"
                alsa.driver_name = "snd_hda_intel"
                device.bus_path = "pci-0000:00:0e.0"
                sysfs.path = "/devices/pci0000:00/0000:00:0e.0/sound/card0"
                device.bus = "pci"
                device.vendor.id = "8086"
                device.vendor.name = "Intel Corporation"
                device.product.id = "5a98"
                device.product.name = "Celeron N3350/Pentium N4200/Atom E3900 Series Audio Cluster"
                device.form_factor = "internal"
                device.string = "0"
                device.description = "Built-in Audio"
                module-udev-detect.discovered = "1"
                device.icon_name = "audio-card-pci"
        profiles:
                input:analog-stereo: Analog Stereo Input (priority 65, available: unknown)
                output:analog-stereo: Analog Stereo Output (priority 6500, available: unknown)
                output:analog-stereo+input:analog-stereo: Analog Stereo Duplex (priority 6565, available: unknown)
                output:iec958-stereo: Digital Stereo (IEC958) Output (priority 5500, available: unknown)
                output:iec958-stereo+input:analog-stereo: Digital Stereo (IEC958) Output + Analog Stereo Input (priority 5565, available: unknown)
                output:hdmi-stereo: Digital Stereo (HDMI) Output (priority 5900, available: no)
                output:hdmi-stereo+input:analog-stereo: Digital Stereo (HDMI) Output + Analog Stereo Input (priority 5965, available: no)
                output:hdmi-surround: Digital Surround 5.1 (HDMI) Output (priority 800, available: no)
                output:hdmi-surround+input:analog-stereo: Digital Surround 5.1 (HDMI) Output + Analog Stereo Input (priority 865, available: no)
                output:hdmi-surround71: Digital Surround 7.1 (HDMI) Output (priority 800, available: no)
                output:hdmi-surround71+input:analog-stereo: Digital Surround 7.1 (HDMI) Output + Analog Stereo Input (priority 865, available: no)
                output:hdmi-stereo-extra1: Digital Stereo (HDMI 2) Output (priority 5700, available: no)
                output:hdmi-stereo-extra1+input:analog-stereo: Digital Stereo (HDMI 2) Output + Analog Stereo Input (priority 5765, available: no)
                output:hdmi-surround-extra1: Digital Surround 5.1 (HDMI 2) Output (priority 600, available: no)
                output:hdmi-surround-extra1+input:analog-stereo: Digital Surround 5.1 (HDMI 2) Output + Analog Stereo Input (priority 665, available: no)
                output:hdmi-surround71-extra1: Digital Surround 7.1 (HDMI 2) Output (priority 600, available: no)
                output:hdmi-surround71-extra1+input:analog-stereo: Digital Surround 7.1 (HDMI 2) Output + Analog Stereo Input (priority 665, available: no)
                output:hdmi-stereo-extra2: Digital Stereo (HDMI 3) Output (priority 5700, available: no)
                output:hdmi-stereo-extra2+input:analog-stereo: Digital Stereo (HDMI 3) Output + Analog Stereo Input (priority 5765, available: no)
                output:hdmi-surround-extra2: Digital Surround 5.1 (HDMI 3) Output (priority 600, available: no)
                output:hdmi-surround-extra2+input:analog-stereo: Digital Surround 5.1 (HDMI 3) Output + Analog Stereo Input (priority 665, available: no)
                output:hdmi-surround71-extra2: Digital Surround 7.1 (HDMI 3) Output (priority 600, available: no)
                output:hdmi-surround71-extra2+input:analog-stereo: Digital Surround 7.1 (HDMI 3) Output + Analog Stereo Input (priority 665, available: no)
                output:hdmi-stereo-extra3: Digital Stereo (HDMI 4) Output (priority 5700, available: no)
                output:hdmi-stereo-extra3+input:analog-stereo: Digital Stereo (HDMI 4) Output + Analog Stereo Input (priority 5765, available: no)
                output:hdmi-surround-extra3: Digital Surround 5.1 (HDMI 4) Output (priority 600, available: no)
                output:hdmi-surround-extra3+input:analog-stereo: Digital Surround 5.1 (HDMI 4) Output + Analog Stereo Input (priority 665, available: no)
                output:hdmi-surround71-extra3: Digital Surround 7.1 (HDMI 4) Output (priority 600, available: no)
                output:hdmi-surround71-extra3+input:analog-stereo: Digital Surround 7.1 (HDMI 4) Output + Analog Stereo Input (priority 665, available: no)
                output:hdmi-stereo-extra4: Digital Stereo (HDMI 5) Output (priority 5700, available: no)
                output:hdmi-stereo-extra4+input:analog-stereo: Digital Stereo (HDMI 5) Output + Analog Stereo Input (priority 5765, available: no)
                output:hdmi-surround-extra4: Digital Surround 5.1 (HDMI 5) Output (priority 600, available: no)
                output:hdmi-surround-extra4+input:analog-stereo: Digital Surround 5.1 (HDMI 5) Output + Analog Stereo Input (priority 665, available: no)
                output:hdmi-surround71-extra4: Digital Surround 7.1 (HDMI 5) Output (priority 600, available: no)
                output:hdmi-surround71-extra4+input:analog-stereo: Digital Surround 7.1 (HDMI 5) Output + Analog Stereo Input (priority 665, available: no)
                off: Off (priority 0, available: unknown)
        active profile: <output:analog-stereo+input:analog-stereo>
        sinks:
                alsa_output.pci-0000_00_0e.0.analog-stereo/#0: Built-in Audio Analog Stereo
        sources:
                alsa_output.pci-0000_00_0e.0.analog-stereo.monitor/#0: Monitor of Built-in Audio Analog Stereo
                alsa_input.pci-0000_00_0e.0.analog-stereo/#1: Built-in Audio Analog Stereo
        ports:
                analog-input-mic: Microphone (priority 8700, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "audio-input-microphone"
                analog-input-linein: Line In (priority 8100, latency offset 0 usec, available: yes)
                        properties:

                analog-output-lineout: Line Out (priority 9000, latency offset 0 usec, available: no)
                        properties:

                analog-output-speaker: Speakers (priority 10000, latency offset 0 usec, available: unknown)
                        properties:
                                device.icon_name = "audio-speakers"
                analog-output-headphones: Headphones (priority 9900, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "audio-headphones"
                iec958-stereo-output: Digital Output (S/PDIF) (priority 0, latency offset 0 usec, available: unknown)
                        properties:

                hdmi-output-0: HDMI / DisplayPort (priority 5900, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "video-display"
                hdmi-output-1: HDMI / DisplayPort 2 (priority 5800, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "video-display"
                hdmi-output-2: HDMI / DisplayPort 3 (priority 5700, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "video-display"
                hdmi-output-3: HDMI / DisplayPort 4 (priority 5600, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "video-display"
                hdmi-output-4: HDMI / DisplayPort 5 (priority 5500, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "video-display"

另一件引起我注意的事情是/usr/share/pulseaudio/alsa-mixer/paths/analog-input.conf.common上的一条评论

代码语言:javascript
复制
;  We explicitly don't want to wrap the following sources:
;
;       CD
[...]
;       Digital/SPDIF

现在的

那么,是否有一种简单的方法可以简单地启用IEC958捕获设备?

在哪里或如何获得当前有效的alsa配置以进行修改?

-->见这个答案

编辑

CS4207编解码器的SPDIF-In特性在内核3.5和3.8之间丢失了。在此期间,对补丁_cirrus.c进行了主要的重构。

因此,即使当我为i 958输入添加ALSA控件(从内核3.5的默认配置复制)到当前内核的合并时:

代码语言:javascript
复制
    control.67 {
        iface MIXER
        name 'IEC958 Capture Switch'
        value false
        comment {
            access 'read write'
            type BOOLEAN
            count 1
        }
    }
    control.68 {
        iface MIXER
        name 'IEC958 Capture Default'
        value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
        comment {
            access read
            type IEC958
            count 1
        }
    }

我得到了回报:

代码语言:javascript
复制
Found hardware: "HDA-Intel" "Cirrus Logic CS4207" "HDA:10134207,10134207,00100302 HDA:8086280a,80860101,00100000" "0x8086" "0x7270"
Hardware is initialized using a generic method
alsactl: set_control:1325: failed to obtain info for control #67 (No such file or directory)
alsactl: set_control:1325: failed to obtain info for control #68 (No such file or directory)

因此,hda驱动程序似乎没有向系统提供SPDIF输入。因此,这个问题不再是关于ALSA配置的,而是与hda驱动相关的.

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2020-10-28 16:24:00

使SPDIF-In可用

主要问题是snd_hda框架目前只支持一个数字输入引脚,而CS4207有3种支持。

在解析编解码器引脚期间,它们都通过循环,最后一个则获胜,并呈现给ALSA。诀窍是没有配置任何连接在循环中跳过的引脚。

通常,引脚配置是由BIOS设置的。因为我们在这个设置中不控制BIOS,所以这不是一个选项。

另一种选择是使用修补程序文件(如早期修补程序一节中描述的这里 )来设置引脚配置。

为此,我需要引脚节点ID (在本例中为0x0E0x12 ),并读取它们当前的引脚配置:

代码语言:javascript
复制
# hda-verb /dev/snd/hwC0D0 0x0e GET_CONFIG_DEFAULT 0x00
nid = 0xe, verb = 0xf1c, param = 0x0
value = 0xb7d6003e
# hda-verb /dev/snd/hwC0D0 0x12 GET_CONFIG_DEFAULT 0x00
nid = 0x12, verb = 0xf1c, param = 0x0
value = 0xb7d6005e

替代方案

代码语言:javascript
复制
# cat /sys/class/sound/hwC0D0/init_pin_configs
0x09 0x022140f0
0x0a 0x010140f0
0x0b 0x901700f0
0x0c 0x01813051
0x0d 0x01a19031
0x0e 0xb7d6003e
0x0f 0x02c4e0f0
0x10 0x014460f0
0x12 0xb7d6005e
0x15 0x014510f0

然后将配置中的前2位更改为“无连接”(01)。配置位的含义记录在HDA规范 7.3.3.31配置默认值中。

0x0e 0xb7d6003e -> 0x0e 0x77d6003e0x12 0xb7d6005e -> 0x12 0xb7d6005e

可以使用这些值创建具有以下内容的修补程序文件(例如/lib/firmware/patch_cs4207 ):

代码语言:javascript
复制
[codec]
0x10134207 0x10134207 0

[pincfg]
0x0e 0x77d6003e
0x12 0x77d6005e

在编解码器下,需要列出vendor_id、subsystem_id和address。

之后,修补程序文件需要由snd_hda_intel加载。为此,需要将以下行添加到/etc/modprobe.d/alsa-base.conf中:

代码语言:javascript
复制
options snd-hda-intel patch=patch_cs4207

重新启动后,无需进一步调整ALSA,SPDIF-In将被识别:

代码语言:javascript
复制
# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: CS4207 Analog [CS4207 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: CS4207 Digital [CS4207 Digital]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
票数 0
EN

Unix & Linux用户

发布于 2020-10-23 13:11:02

请参阅原始文章中的编辑以了解其他(ALSA无关的)问题。

对有关ALSA-配置的原始问题的回答:

alsa-info似乎也是第一位看的最好的地方。

根据该脚本,您可以通过以下方式保存当前有效的ALSA确认:

代码语言:javascript
复制
alsactl -f /tmp/alsa-config.txt store

之后,可以在文件中更改配置(在本例中为/tmp/alsa-config.txt),配置可以通过

代码语言:javascript
复制
alsactl -f /tmp/alsa-config.txt restore

此外,当前有效的ALSA-配置默认存储在

代码语言:javascript
复制
/var/lib/alsa/asound.state
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/612626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档