在Raspbery Pi上改变Python程序的音量

时间:2017-01-11 13:37:17

标签: python-2.7 raspberry-pi raspberry-pi2

我使用Raspbery Pi B + 2.我有一个Python程序,它使用超声波传感器测量到物体的距离。我想要的是根据与人类的距离来改变音量。有了Python代码来获取距离,我不知道如何通过Python中的代码更改Raspbery Pi卷。

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:4)

您可以使用 python-alsaaudio 包。 安装和使用非常简单。

安装run:

sudo apt-get install python-alsaaudio

在Python脚本中,导入模块:

import alsaaudio

现在,您需要获得主混音器并获取/设置音量:

m = alsaaudio.Mixer()
current_volume = m.getvolume() # Get the current Volume
m.setvolume(70) # Set the volume to 70%.

如果第m = alsaaudio.Mixer()行引发错误,请尝试:

m = alsaaudio.Mixer('PCM')

这可能发生,因为Pi使用PCM而不是主通道。

通过运行amixer命令,您可以查看有关Pi音频频道,音量(等等)的更多信息。

答案 1 :(得分:1)

我为一个双按钮音量控制做了一个简单的python服务。根据@ ant0nisk的内容。

https://gist.github.com/peteristhegreat/3c94963d5b3a876b27accf86d0a7f7c0

显示获取和设置音量,以及静音。

答案 2 :(得分:1)

  1. 收集可用的实际混音器(将提供可用卡片列表):
  2. import alsaaudio as audio
    scanCards = audio.cards()
    print("cards:", scanCards)
    

    就我而言,我有以下列表:

    [u'PCH', u'headset']
    
    1. 每张卡片扫描一下混音器:
    2. for card in scanCards:
          scanMixers = audio.mixers(scanCards.index(card))
          print("mixers:", scanMixers)
      

      在我的情况下,我有以下两个列表:

      [u'Master', u'Headphone', u'Speaker', u'PCM', u'Mic', u'Mic Boost', u'IEC958', u'IEC958', u'IEC958', u'IEC958', u'IEC958', u'Beep', u'Capture', u'Auto-Mute Mode', u'Internal Mic Boost', u'Loopback Mixing']
      
      [u'Headphone', u'Mic', u'Auto Gain Control']
      

      正如您所看到的,“Master”并不总是可用的混音器,但传统上预期主混音器的等效值为索引0.(并不总是意味着!)

      1. 在这种情况下,为USB耳机控制音量将遵循以下步骤。
      2. 增加音量

        def volumeMasterUP():
            mixer = audio.Mixer('Headphone', cardindex=1)
            volume = mixer.getvolume()
            newVolume = int(volume[0])+10
            if newVolume <= 100:
                mixer.setvolume(newVolume)
        

        降低音量

        def volumeMasterDOWN():
            mixer = audio.Mixer('Headphone', cardindex=1)
            volume = mixer.getvolume()
            newVolume = int(volume[0])-10
            if newVolume >= 0:
                mixer.setvolume(newVolume)