如何保存数字输出(S/PDIF)的音量设置?

如何保存数字输出(S/PDIF)的音量设置?

Sound Settings可以选择模拟和数字输出。当我选择“数字输出 (S/PDIF)”时,每次启动后我都必须降低音量。我该怎么做才能自动保存这些设置(关机时)?

这些是我关机时的设置:

在此处输入图片描述

启动后如下所示:

在此处输入图片描述

自动保存的是无论我选择模拟还是数字输出,并且模拟输出的音量设置也会被存储。

卡和芯片,设置

我不使用额外的声卡;我有华擎 M3N78D 主板lshw打印以下内容:

*-multimedia
          Beschreibung: Audio device
          Produkt: MCP72XE/MCP72P/MCP78U/MCP78S High Definition Audio
          Hersteller: NVIDIA Corporation
          Physische ID: 7
          Bus-Informationen: pci@0000:00:07.0
          Version: a1
          Breite: 32 bits
          Uhr: 66MHz
          Fähigkeiten: pm bus_master cap_list
          Konfiguration: driver=snd_hda_intel latency=0 maxlatency=5 mingnt=2
          Ressourcen: irq:21 memory:fbd78000-fbd7bfff

启动时alsamixer显示“芯片:VIA VT1718S”。

这是的输出aplay -l

**** Liste der Hardware-Geräte (PLAYBACK) ****
Karte 0: NVidia [HDA NVidia], Gerät 0: VT1718S Analog [VT1718S Analog]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 0: NVidia [HDA NVidia], Gerät 1: VT1718S Digital [VT1718S Digital]
  Sub-Geräte: 0/1
  Sub-Gerät #0: subdevice #0
Karte 0: NVidia [HDA NVidia], Gerät 2: VT1718S HP [VT1718S HP]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0

这是输出自pactl stat

Server-Name: pulseaudio
Server-Version: 1.1
Standard-Sample-Angabe: s16le 2ch 44100Hz
Standard-Kanalzuordnung: front-left,front-right
Standard-Sink: alsa_output.pci-0000_00_07.0.iec958-stereo
Standard-Quelle: alsa_input.pci-0000_00_07.0.analog-stereo

这是的输出amixer

Simple mixer control 'Master',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum
  Playback channels: Mono
  Limits: Playback 0 - 42
  Mono: Playback 0 [0%] [-63.00dB] [on]
Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 42
  Mono:
  Front Left: Playback 42 [100%] [0.00dB] [on]
  Front Right: Playback 42 [100%] [0.00dB] [on]
Simple mixer control 'PCM',0
  Capabilities: pvolume penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 255
  Mono:
  Front Left: Playback 253 [99%] [0.40dB]
  Front Right: Playback 253 [99%] [0.40dB]
Simple mixer control 'PCM Loopback',0
  Capabilities: pvolume pswitch penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 31
  Mono:
  Front Left: Playback 24 [77%] [1.50dB] [off]
  Front Right: Playback 24 [77%] [1.50dB] [off]
Simple mixer control 'Front',0
  Capabilities: pvolume pswitch penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 42
  Mono:
  Front Left: Playback 39 [93%] [-4.50dB] [on]
  Front Right: Playback 39 [93%] [-4.50dB] [on]
Simple mixer control 'Front Mic',0
  Capabilities: pvolume pswitch penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 31
  Mono:
  Front Left: Playback 31 [100%] [12.00dB] [off]
  Front Right: Playback 31 [100%] [12.00dB] [off]
Simple mixer control 'Front Mic Boost',0
  Capabilities: volume penum
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 3
  Front Left: 3 [100%] [30.75dB]
  Front Right: 3 [100%] [30.75dB]
Simple mixer control 'Surround',0
  Capabilities: pvolume pswitch penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 42
  Mono:
  Front Left: Playback 42 [100%] [0.00dB] [on]
  Front Right: Playback 42 [100%] [0.00dB] [on]
Simple mixer control 'Center',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum
  Playback channels: Mono
  Limits: Playback 0 - 42
  Mono: Playback 42 [100%] [0.00dB] [on]
Simple mixer control 'LFE',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum
  Playback channels: Mono
  Limits: Playback 0 - 42
  Mono: Playback 42 [100%] [0.00dB] [on]
Simple mixer control 'Side',0
  Capabilities: pvolume pswitch penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 42
  Mono:
  Front Left: Playback 42 [100%] [0.00dB] [on]
  Front Right: Playback 42 [100%] [0.00dB] [on]
Simple mixer control 'Line',0
  Capabilities: pvolume pswitch penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 31
  Mono:
  Front Left: Playback 0 [0%] [-34.50dB] [off]
  Front Right: Playback 0 [0%] [-34.50dB] [off]
Simple mixer control 'CD',0
  Capabilities: pvolume pswitch penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 31
  Mono:
  Front Left: Playback 0 [0%] [-34.50dB] [off]
  Front Right: Playback 0 [0%] [-34.50dB] [off]
Simple mixer control 'IEC958',0
  Capabilities: pswitch pswitch-joined penum
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'IEC958 Default PCM',0
  Capabilities: pswitch pswitch-joined penum
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Capture',0
  Capabilities: cvolume cswitch penum
  Capture channels: Front Left - Front Right
  Limits: Capture 0 - 31
  Front Left: Capture 28 [90%] [25.50dB] [on]
  Front Right: Capture 28 [90%] [25.50dB] [on]
Simple mixer control 'Capture',1
  Capabilities: cvolume cswitch penum
  Capture channels: Front Left - Front Right
  Limits: Capture 0 - 31
  Front Left: Capture 0 [0%] [-16.50dB] [on]
  Front Right: Capture 0 [0%] [-16.50dB] [on]
Simple mixer control 'Digital',0
  Capabilities: cvolume penum
  Capture channels: Front Left - Front Right
  Limits: Capture 0 - 120
  Front Left: Capture 60 [50%] [0.00dB]
  Front Right: Capture 60 [50%] [0.00dB]
Simple mixer control 'Dynamic Power-Control',0
  Capabilities: enum
  Items: 'Disabled' 'Enabled'
  Item0: 'Disabled'
Simple mixer control 'Independent HP',0
  Capabilities: enum
  Items: 'OFF' 'ON'
  Item0: 'OFF'
Simple mixer control 'Input Source',0
  Capabilities: cenum
  Items: 'Front Mic' 'Rear Mic' 'Line' 'CD' 'Stereo Mixer'
  Item0: 'Front Mic'
Simple mixer control 'Input Source',1
  Capabilities: cenum
  Items: 'Front Mic' 'Rear Mic' 'Line' 'CD' 'Stereo Mixer'
  Item0: 'Stereo Mixer'
Simple mixer control 'Loopback Mixing',0
  Capabilities: enum
  Items: 'Disabled' 'Enabled'
  Item0: 'Disabled'
Simple mixer control 'Rear Mic',0
  Capabilities: pvolume pswitch penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 31
  Mono:
  Front Left: Playback 31 [100%] [12.00dB] [off]
  Front Right: Playback 31 [100%] [12.00dB] [off]
Simple mixer control 'Rear Mic Boost',0
  Capabilities: volume penum
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 3
  Front Left: 0 [0%] [0.00dB]
  Front Right: 0 [0%] [0.00dB]

奇事异闻

当我在听音乐时切换到“模拟输出”时,连接到数字输出的扬声器也可以使用,但音量会达到 100%,我无法调整它 - 只有当我切换回“数字输出”或使用alsamixer和调暗“PCM”时才可以。

当我在“音频设置”中选择“数字输出”并启动时alsamixer,更改“主”音量没有任何影响。那里也显示“S/​​PDIF”和“S/PDIF D”,但都设置为“00”,我无法修改它们……

当我将音量调整到正常水平(即 40%)并运行sudo alsactl store并重新启动时,面板中的音量图标不会显示 100%,但声音会显示 100% - 直到我向下滚动图标上方:然后它立即跳转到 39%。

答案1

我也有同样的问题。模拟信号已保存/恢复,但启动后 SPDIF 总是会发出最大声响。我不太喜欢在登录时将音量设置为零或低的解决方法,因为我最讨厌登录屏幕上的启动声音,它震破了我的窗户。我还没有找到解决办法,但情况有所好转。这是我所做的:

  • 我认为问题可能源于模拟输出是卡 0 的设备 0,而数字输出是设备 1(卡 0)。(XiFi 芯片或类似的东西)并且存储/恢复过程仅存储第一个。但是 alsactl store/restore(重新)存储所有音量级别的“完成”状态。
  • 我得出结论,alsa 不会保存/恢复 spdif 输出的状态(card:0,device:1),因为“alsactl store”/“... restore”对 spdif 通道没有影响。它仍保持原样。
  • 在声音控制面板中选择 SPDIF 后运行“alsactl store”会给我一个不同的 /var/lib/alsa/asouns.state 文件。不确定这会导致什么,但也许 alsa 会根据控制面板中选择的输出看到不同的音量控制?
  • alsactl -f /var/lib/alsa/asound.state 存储似乎有效(给我一个新的 asouns.state)
  • alsactl -f /var/lib/alsa/asound.state restore 显示:“alsactl:set_control:1464:无法写入控制‘2:0:0:IEC958 Playback Default:0’:操作不允许”
  • 我发现 IEC958 确实是数字输出。
  • 停止了我的音乐播放器:错误消失
  • 安装pavucontrol,选择默认输出
  • 删除了 /var/lib/alsa/asound.state
  • 重启
  • 音量滑块现在在重新启动时恢复,实际音量似乎不是

也许它对某些人有帮助..至少删除你的 asound.state 并看看它是否有帮助。

答案2

我不知道有什么方法可以“正确”地完成此操作,但您可以添加启动脚本来完成此工作。使用程序“amixer”,我可以生成输出,其中列出 0 到 64 之间的声音输出设置,包括“主”通道。在关机之前,可以对其进行解析(也许使用正则表达式?)以将音量存储在文件中。当系统再次启动时,可以发出命令“amixer set CHANNEL VALUE”以将音量设置为存储的值。

通过将其添加到 shell 脚本(通常是 /etc/init.d 中的启动作业),您可以自动完成它,这应该会让它看起来天衣无缝。我以前用过这些启动脚本来做其他事情,我完全看不出它为什么不能解决您的问题。

细节:

第一步是创建一个能够更改音量的 shell 脚本。目前我没有时间,也没有所有详细的知识来为您编写它,但是如果您对脚本有所了解,或者您可以找到一个好的教程,那么这应该不难。如果您遇到问题,我很乐意提供帮助。下面是您可以使用的模板。

#! /bin/sh

start(){
    # This function is called on startup
    # This is where you will need to read the volume from a file and call amixer
}

stop(){
    # This function is called on shutdown
    # This is where amixer is called and the volume is saved to file
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    *)
        echo "Usage: avolumesaver {start|stop}"
        exit 1
esac

exit 0

基本上,每次系统启动时都会调用 start 函数,而关闭前会调用 stop 函数。您可以在这些函数中执行任何需要的操作。您应该以 root 身份打开编辑器(在终端输入“sudo gedit”),然后将文件保存为“/etc/init.d/avolumesaver”。执行此操作后,您需要发出以下命令:

chmod a+x /etc/init.d/avolumesaver
update-rc.d avolumesaver defaults

第一行将使脚本可执行。第二行将其转换为 upstart 作业。从技术上讲,这仅意味着创建了一些符号链接,但最好使用 update-rc.d 而不是尝试自己添加链接。

完成此操作后,您可以编辑 /etc/init.d/avolumesaver,直到实现所需的效果。您可以通过发出以下命令(使其成为 upstart 作业后)来测试功能,而无需实际重新启动:

service avolumesaver start
service avolumesaver stop

答案3

我问过类似的问题这里. 也许这能有所帮助。

每次登录后,它将音量级别设置为特定值。它与 PulseAudio 和数字输出配合使用。

  1. 将默认脉冲配置文件复制到您的家庭位置:

    cp /etc/pulse/default.pa ~/.pulse

  2. 在您的配置文件中找到以下行:

    load-module module-always-sink

    紧接着上面这一行,添加下面这一行:

    set-sink-volume 0 {your-volume-level-here}

    音量级别是 0 到 65535 范围内的数字。例如:

    set-sink-volume 0 32768

答案4

我希望这可以帮助到别人..我一直有这个问题,我刚刚在 ubuntu 13:10(Pear Os 8)上修复了它。在 /etc/pulse/default.pa 文件中,有一行选择 alsa sink..这对我来说是关键。我必须将其改为这样才能节省音量...

### Load audio drivers statically
### (it's probably better to not load these drivers manually, but instead
### use module-udev-detect -- see below -- for doing this automatically)
load-module module-alsa-sink
load-module module-alsa-sink device=hw:0,1
#load-module module-oss device="/dev/dsp" sink_name=output source_name=input
#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input
#load-module module-null-sink
#load-module module-pipe-sink

现在在 load-module module-alsa-sink device=hw:0,1 行上,你可能必须使用 aplay -l 示例更改 PCM 位置https://wiki.archlinux.org/index.php/PulseAudio/Examples

您的号码将是 hw:X(卡号),X(设备号)

我希望其他人读到这篇文章并让他们的声音正常工作,因为多年来这对我来说一直是一个巨大的痛苦。

相关内容