我正在尝试使用python 3制作自己的歌曲应用程序。我已经从pip3命令安装了SoCo。我目前有这个脚本(称为find.py)。

import time, soco, sys
def search_for_speaker(speaker_name):
    global zone_list
    zone_list = list(soco.discover())

    for speaker in zone_list:
        if speaker.player_name == speaker_name:
            global player
            player = speaker

search_for_speaker(sys.argv[1])
player.pause()
time.sleep(1)
player.play()


我家中的扬声器称为HallwayKitchenLiving RoomHallwayKitchen在一个组中,而Living Room是独立的。

当我运行python3 find.py Living\ Room时,脚本会暂停扬声器,然后再次播放。运行python3 find.py Kitchen时也是如此。问题是当我尝试python3 find.py Hallway时。我最终收到此错误。

Traceback (most recent call last):
  File "find.py", line 12, in <module>
    player.pause()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/soco/core.py", line 94, in inner_function
    raise SoCoSlaveException(message)
soco.exceptions.SoCoSlaveException: The method or property "pause" can only be called/used on the coordinator in a group


我猜这是因为扬声器kitchen是“主”扬声器,而“走廊”不是。

我需要做些什么才能使它正常工作?我希望能够播放/暂停曲目上的下一个/上一个并更改音量。

我知道我可以在运行脚本时更改扬声器的名称,但是我不会通过命令行运行它,而是从Better Touch Tool Remote(iOS)中运行

最佳答案

答案是例外:将Sonos玩家分组时,一名玩家将扮演“组协调者”的特殊角色。需要将影响整个组状态的所有命令发送到组协调器。在SoCo中,您可以通过调用

player.group.coordinator.play()




免责声明:SoCo是(一个很棒的库,并且)不受Sonos的支持或认可。

关于python - Soco,在小组中休息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32443484/

10-12 18:13