1

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()

私が家に持っているスピーカーはHallwayKitchenと呼ばれていLiving Roomます。Hallway単独でKitchenいる間、グループに属して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) から実行します。

4

1 に答える 1

3

その答えは例外です。Sonos プレイヤーがグループ化されると、1 人のプレイヤーが「グループ コーディネーター」という特別な役割を果たします。グループ全体の状態に影響を与えるすべてのコマンドは、グループ コーディネーターに送信する必要があります。SoCo では、次のように呼び出すことで実現できます。

player.group.coordinator.play()

免責事項: SoCo は (素晴らしいライブラリであり) Sonos によってサポートまたは承認されていません。

于 2015-09-11T02:00:06.560 に答える