1

我需要一种从 bash 或 sh 脚本中选择 ALSA 音频输出的通用方法。脚本应该在不同的平台上工作,不了解已安装的音频设备。

所以最好有 2 个脚本:1)音频输出的输出列表和 2)用于选择和激活所需输出的脚本

问题似乎微不足道,但我用谷歌搜索了很多,但还找不到解决方案。例如,在 Raspberry Pi3 上,aplay 显示给我

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

和明显的解决方案,如使用“aplay -D hw:0,1 music.wav”在 HDMI 上播放不起作用。

我发现的唯一在 Raspberry 上切换 HDMI 和 Jack 的解决方案是amixer cset numid=3 2用于插孔和amixer cset numid=3 1HDMI。

$ amixer controls
numid=3,iface=MIXER,name='PCM Playback Route'
numid=2,iface=MIXER,name='PCM Playback Switch'
numid=1,iface=MIXER,name='PCM Playback Volume'
numid=5,iface=PCM,name='IEC958 Playback Con Mask'
numid=4,iface=PCM,name='IEC958 Playback Default'

但是在这里,我需要有关特定平台的这些特定 numid 的知识。在测试 x86 笔记本上的 amixer 控件 numids 列表有很大不同。在笔记本电脑上,我没有看到“PCM Playback Route”选项。

那么,是否可以编写可以在不同平台上运行的通用脚本解决方案?这个怎么做?

4

0 回答 0