2017-12-02 47 views
0

我想從Python soco加載一個sonos播放列表,這樣我就可以從我的電腦上控制音樂了。如何使用Python soco播放Sonos播放列表?

感謝soco的開發者。從我的音樂庫播放單個曲目以及流式傳輸互聯網音頻非常方便。我只是沒有想出如何使用sonos播放列表。

讓zone成爲表示Sonos揚聲器或揚聲器對的SoCo對象。每個區域都有一個當前隊列存儲在其zone.contentDirectory中。我想我需要用播放列表中的曲目替換此隊列,但我還沒有找到如何列舉播放列表中的曲目。另外,播放播放列表URI不起作用。

SONOS播放列表可與

import soco 

zone = soco.Soco('192.168.1.249') 
zone.get_playlists() 

具體的播放列表可通過其標題與

pl = zone.get_sonos_playlist_by_attr('title', 'Dance'). 

當我看到在播放列表的細節,唯一的軌道信息 似乎是Sonos設備上的一個uri。

>>> pprint(pl.to_dict()) 
{u'desc': None, 
u'item_id': u'SQ:28', 
u'parent_id': u'SQ:', 
u'resources': [{u'bitrate': None, 
       u'bits_per_sample': None, 
       u'color_depth': None, 
       u'duration': None, 
       u'import_uri': None, 
       u'nr_audio_channels': None, 
       u'protection': None, 
       u'protocol_info': 'file:*:audio/mpegurl:*', 
       u'resolution': None, 
       u'sample_frequency': None, 
       u'size': None, 
       u'uri': 'file:///jffs/settings/savedqueues.rsq#28'}], 
u'restricted': True, 
u'title': u'Dance'} 

但是這個uri不能和zone.play_uri()一起玩。

>>> zone.play_uri('file:///jffs/settings/savedqueues.rsq#28') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/soco/core.py", line 104, in inner_function 
    return function(self, *args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/soco/core.py", line 483, in play_uri 
    ('CurrentURIMetaData', meta) 
    File "/usr/local/lib/python2.7/dist-packages/soco/services.py", line 181, in _dispatcher 
    return self.send_command(action, *args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/soco/services.py", line 408, in send_command 
    self.handle_upnp_error(response.text) 
    File "/usr/local/lib/python2.7/dist-packages/soco/services.py", line 469, in handle_upnp_error 
    error_xml=xml_error 
soco.exceptions.SoCoUPnPException: UPnP Error 714 received: Illegal MIME-Type from 192.168.1.249 

我想我需要用播放列表uri中的曲目替換隊列,但是如何獲取它們?

回答

0

你必須使用不同的方法。首先你必須清除隊列(如果你想刪除舊的軌道),那麼你可以使用add_uri_to_queue將播放列表軌道添加到Sonos隊列中,最後你可以使用play

import soco 

sonos = soco.SoCo("192.168.1.249") 

uri = "file:///jffs/settings/savedqueues.rsq#28" 
sonos.clear_queue() 
sonos.add_uri_to_queue(uri=uri) 
sonos.play_from_queue(index=0) 
+0

謝謝!簡單,它的作品。 – gripsnarl

相關問題