如何使用 Python soco 播放 Sonos 播放列表?
How can I play a Sonos playlist using Python soco?
我正在尝试从 Python soco 加载一个 sonos 播放列表,以便我可以从我的 PC 控制音乐。
感谢soco的开发者。播放我的音乐库中的单个曲目和流式传输互联网音频非常方便。我只是还没有想出如何使用 sonos 播放列表。
设区域为 SoCo object,代表 Sonos 扬声器或扬声器对。每个区域都有一个当前 queue 存储在其 zone.contentDirectory 中。我想我需要用播放列表中的曲目替换此 queue,但我还没有找到如何枚举播放列表中的曲目。此外,播放播放列表 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
我想我需要将 queue 替换为播放列表 uri 中的曲目,但如何获取它们?
您必须使用不同的方法。首先你必须清除队列(如果你想删除旧曲目),然后你可以使用 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)
我正在尝试从 Python soco 加载一个 sonos 播放列表,以便我可以从我的 PC 控制音乐。
感谢soco的开发者。播放我的音乐库中的单个曲目和流式传输互联网音频非常方便。我只是还没有想出如何使用 sonos 播放列表。
设区域为 SoCo object,代表 Sonos 扬声器或扬声器对。每个区域都有一个当前 queue 存储在其 zone.contentDirectory 中。我想我需要用播放列表中的曲目替换此 queue,但我还没有找到如何枚举播放列表中的曲目。此外,播放播放列表 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
我想我需要将 queue 替换为播放列表 uri 中的曲目,但如何获取它们?
您必须使用不同的方法。首先你必须清除队列(如果你想删除旧曲目),然后你可以使用 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)