Other

项目介绍

CharlesBlonde/libsoundtouch 是一个托管在 GitHub 上的开源项目,主要使用 Python 编写,采用 Other 许可证,目前获得 102 个 Star、36 次 Fork。

仓库全名
CharlesBlonde/libsoundtouch
开源许可证
Other
Star 数
102
Fork 数
36
未关闭 Issue
22

README 摘要

Bose Soundtouch Python library This Python 2.7+/3.4+ library allows you to control Bose Soundtouch devices. http://libsoundtouch.readthedocs.io How to use it ? Supported features Basics commands Discovery power on/power off play/pause next/previous track volume setting (mute/set volume/volume up/volume down) repeat one/all/off shuffle on/off select AUX/Bluetooth inputs select preset (bookmark) playback selected…

完整内容见 GitHub 原始 README 或本页 。

常见问题

libsoundtouch 用什么语言开发?

主要使用 Python 编写,采用 Other 许可证,目前有 102 个 Star。

libsoundtouch 可以免费商用吗?

仓库标注的许可证为 Other,商用前请先阅读仓库 LICENSE 文件确认授权范围。

如何获取 libsoundtouch 的源码?

可以直接克隆仓库:git clone https://github.com/CharlesBlonde/libsoundtouch.git,默认分支为 master;安装与运行步骤见仓库 README。

libsoundtouch 最近还在维护吗?

仓库最近一次更新为 2022年10月30日,当前有 22 个未关闭 Issue;Star 数为 102,可作为社区活跃度的参考。

关于

Bose Soundtouch Python library

描述取自 GitHub 官方 API,中文内容由 GitRead 中文社区 编辑团队整理。

简要分析

热度分
186
价值分
72
活跃状态
活跃

语言占比

Python

Release

README

Bose Soundtouch Python library

Build Status Coverage Status PyPI version Documentation Status

This Python 2.7+/3.4+ library allows you to control Bose Soundtouch devices.

http://libsoundtouch.readthedocs.io

How to use it ?

pip install libsoundtouch
from libsoundtouch import discover_devices

devices = discover_devices(timeout=2)


for device in devices:
    print(device.config.name + " - " + device.config.type)
from libsoundtouch import soundtouch_device
from libsoundtouch.utils import Source, Type

device = soundtouch_device('192.168.1.1')
device.power_on()

# Config object
print(device.config.name)

# Status object
# device.status() will do an HTTP request. Try to cache this value if needed.
status = device.status()
print(status.source)
print(status.artist+ " - "+ status.track)
device.pause()
device.next_track()
device.play()

# Media Playback
# device.play_media(source, location, account, media_type) #account and media_type are optionals
device.play_media(Source.INTERNET_RADIO, '4712') # Studio Brussel
spot_user_id = '' # Should be filled in with your Spotify userID
# This userID can be found by playing Spotify on the connected SoundTouch speaker, and calling
# device.status().content_item.source_account
device.play_media(Source.SPOTIFY, 'spotify:track:5J59VOgvclrhLDYUoH5OaW', spot_user_id) # Bazart - Goud
# Local music (Windows media player, Itunes)
# Account ID can be found by playing local music on the connected Soundtouch speaker, and calling
# device.status().content_item.source_account
account_id = device.status().content_item.source_account
device.play_media(Source.LOCAL_MUSIC, 'album:1', account_id, Type.ALBUM)

# Snapshot current playing
device.snapshot()

# Select AUX input
device.select_source_aux()
# Select Bluetooth input
device.select_source_bluetooth()

# Restore previous snapshot
device.restore()

# Play URL
device.play_url('http://fqdn/file.mp3')

# Volume object
# device.volume() will do an HTTP request. Try to cache this value if needed.
volume = device.volume()
print(volume.actual)
print(volume.muted)
device.set_volume(30) # 0..100

# Presets object
# device.presets() will do an HTTP request. Try to cache this value if needed.
presets = device.presets()
print(presets[0].name)
print(presets[0].source)
# Play preset 0
device.select_preset(presets[0])

# ZoneStatus object
# device.zone_status() will do an HTTP request. Try to cache this value if needed.
zone_status = device.zone_status()
print(zone_status.master_id)
print(len(zone_status.slaves))

Supported features

Basics commands

  • Discovery
  • power on/power off
  • play/pause
  • next/previous track
  • volume setting (mute/set volume/volume up/volume down)
  • repeat one/all/off
  • shuffle on/off
  • select AUX/Bluetooth inputs
  • select preset (bookmark)
  • playback selected music
  • allow snapshot and restore playing content
  • play HTTP URL (HTTPS not supported)
  • Websockets notification

Multi-room

Soundtouch devices supports multi-room features called zones.

from libsoundtouch import soundtouch_device

master = soundtouch_device('192.168.18.1')
slave1 = soundtouch_device('192.168.18.2')
slave2 = soundtouch_device('192.168.18.3')

# Create a new zone
master.create_zone([slave1, slave2])

# Remove a slave
master.remove_zone_slave([slave2])

# Add a slave
master.add_zone_slave([slave2])

Websocket

Soundtouch devices support Websocket notifications in order to prevent pulling and to get immediate updates.

from libsoundtouch import soundtouch_device
import time

# Events listeners

# Volume updated
def volume_listener(volume):
    print(volume.actual)

# Status updated
def status_listener(status):
    print(status.track)

# Presets updated
def preset_listener(presets):
    for preset in presets:
        print(preset.name)

# Zone updated
def zone_status_listener(zone_status):
    if zone_status:
        print(zone_status.master_id)
    else:
        print('no Zone')
        
device = soundtouch_device('192.168.18.1')

device.add_volume_listener(volume_listener)
device.add_status_listener(status_listener)
device.add_presets_listener(preset_listener)
device.add_zone_status_listener(zone_status_listener)

# Start websocket thread. Not started by default
device.start_notification()

time.sleep(600)  # Wait for events

Full documentation

http://libsoundtouch.readthedocs.io

Incoming features

The following features are not yet implemented:

  • Better error management
  • Bass configuration

Access to the official API documentation

For an unknown reason, the API documentation is not freely available but you can request to get it: http://developers.bose.com/. You have to sent an email and you’ll received a response in a minute with 2 PDF:

  • SoundTouchAPI_Discovery.pdf: How to use SSDP and MDNS discovery protocols
  • SoundTouchAPI_WebServices.pdf: REST API documentation. Be careful, the documentation contains errors and is not fully up to date

Changelog

0.8.0 - 2018/02/11

  • Fix: New API content with latest firmware
  • Fix: Device names with UTF-8 characters
  • Allow to select AUX/Bluetooth inputs
  • Add snapshotting/restore feature

0.7.2 - 2017/07/05

  • Add missing template

0.7.1 - 2017/07/05

  • Remove debugging (print) |

0.7.0 - 2017/07/05

  • Add play_url method to play an HTTP URL (HTTPS not supported)

0.6.2 - 2017/06/21

  • Fix websocket source status in messages

0.6.1 - 2017/06/19

  • Use enum-compat instead of enum34 directly

0.6.0 - 2017/06/17

  • Add discovery (mDNS) support

0.5.0 - 2017/05/28

  • Add Websocket support

0.4.0 - 2017/05/21

  • Add Bluetooth source

0.3.0 - 2017/04/09

  • Fix issue with non ASCII characters
  • Allow playing local computer media

0.2.2 - 2017/02/07

  • Fix status with non ascii characters in Python 2.7

0.2.1 - 2017/02/05

  • Fix dependencies

0.2.0 - 2017/02/05

  • Add play_media support

0.1.0 - 2016/11/20

  • Initial release

Contributors

Thanks to:

  • jeanregisser (Use enum-compat instead of enum34 directly)
  • Tyzer34 (add play_media support)
  • wanderor (add local computer media support)
  • obadz (add Bluetooth source)
  • luca-angemi (Fix new firmware error)
  • vanto (Fix device names with UTF-8 characters)

评论

暂无评论