From 79bbef16b18e1a8050e8a39d8d1b11598ba77200 Mon Sep 17 00:00:00 2001 From: Szabolcs Hubai Date: Thu, 18 Apr 2024 00:18:44 +0200 Subject: [PATCH 1/2] snapcast: add Snapcast from badaix/snapos as is This will be squashed in the end. Fixes: #23924 Signed-off-by: Szabolcs Hubai --- sound/snapcast/Makefile | 117 +++++++++++++++++++++++++++ sound/snapcast/files/snapclient.init | 31 +++++++ sound/snapcast/files/snapserver.init | 31 +++++++ 3 files changed, 179 insertions(+) create mode 100644 sound/snapcast/Makefile create mode 100755 sound/snapcast/files/snapclient.init create mode 100755 sound/snapcast/files/snapserver.init diff --git a/sound/snapcast/Makefile b/sound/snapcast/Makefile new file mode 100644 index 0000000000..a7c2291765 --- /dev/null +++ b/sound/snapcast/Makefile @@ -0,0 +1,117 @@ +# +# Copyright (C) 2015 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME := snapcast +PKG_VERSION := 0.27.0 +PKG_RELEASE := $(PKG_SOURCE_VERSION) +PKG_USE_MIPS16 := 0 + +# PKG_MIRROR_HASH=skip +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/badaix/snapcast.git +PKG_SOURCE_VERSION:=v0.27.0 +PKG_BUILD_DIR:=$(BUILD_DIR)/snapcast-$(PKG_VERSION) + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/cmake.mk + +CMAKE_OPTIONS += -DBUILD_TESTS=OFF + +define Package/snapcast/Default + SECTION := sound + CATEGORY := Sound + TITLE := Synchronous multiroom audio player + DEPENDS := +AUDIO_SUPPORT:alsa-lib +libstdcpp +libavahi-client +libatomic +libogg +libflac +libopus +boost +libsoxr + URL := https://github.com/badaix/snapcast +endef + +define Package/snapcast/description/Default + Synchronous audio player +endef + +define Package/snapcast + $(call Package/snapcast/Default) + TITLE += packages +endef + +define Package/snapcast/description + $(call Package/snapcast/description/Default) + Snapcast is a multi-room client-server audio player, + where all clients are time synchronized with the server + to play perfectly synced audio +endef + +define Package/snapserver + $(call Package/snapcast/Default) + TITLE += Snapserver + DEPENDS += +AUDIO_SUPPORT:alsa-lib +libvorbis +libsoxr + HIDDEN := 1 +endef + +define Package/snapclient + $(call Package/snapcast/Default) + TILE += Snapclient + DEPENDS += +libvorbisidec +libsoxr + HIDDEN := 1 +endef + +define Package/snapserver/description + $(call Package/snapcast/description/Default) + Snapcast server +endef + +define Package/snapclient/description + $(call Package/snapcast/description/Default) + Snapcast client +endef + +define Package/snapcast/config + menu "Select Snapcast Options" + depends on PACKAGE_snapcast + comment "Choose server or client" + config PACKAGE_snapserver + prompt "Snapserver" + help + Snapcast server + default n + + config PACKAGE_snapclient + prompt "Snapclient" + help + Snapcast client + default y + endmenu +endef + +define Package/snapcast/Default/install + true +endef + +define Package/snapserver/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/snapserver $(1)/usr/bin/ + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/snapserver.init $(1)/etc/init.d/snapserver + $(INSTALL_DIR) $(1)/etc/default + $(INSTALL_BIN) $(CURDIR)/../../debian/snapserver.default $(1)/etc/default/snapserver + $(INSTALL_BIN) $(PKG_BUILD_DIR)/server/etc/snapserver.conf $(1)/etc/snapserver.conf +endef + +define Package/snapclient/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/snapclient $(1)/usr/bin/ + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/snapclient.init $(1)/etc/init.d/snapclient + $(INSTALL_DIR) $(1)/etc/default + $(INSTALL_BIN) $(CURDIR)/../../debian/snapclient.default $(1)/etc/default/snapclient +endef + +$(eval $(call BuildPackage,snapserver)) +$(eval $(call BuildPackage,snapclient)) +$(eval $(call BuildPackage,snapcast)) diff --git a/sound/snapcast/files/snapclient.init b/sound/snapcast/files/snapclient.init new file mode 100755 index 0000000000..9bace4b084 --- /dev/null +++ b/sound/snapcast/files/snapclient.init @@ -0,0 +1,31 @@ +#!/bin/sh /etc/rc.common +# Author: Johannes Pohl +START=90 + +USE_PROCD=1 + +NAME=snapclient +PROG=/usr/bin/$NAME +PID_FILE=/var/run/$NAME.pid +CONFIG_FILE=/etc/default/$NAME + + +start_service() +{ + local autostart opts + + autostart=$(grep ^START_SNAPCLIENT $CONFIG_FILE |cut -d= -f2) + [ "$autostart" != "true" ] && logger -t $NAME "Not starting due to START_SNAPCLIENT" && exit 0 + + opts=$(grep ^SNAPCLIENT_OPTS $CONFIG_FILE |cut -d "\"" -f2) + opts="--logsink system $opts" + + procd_open_instance + procd_set_param command $PROG + procd_append_param command $opts + procd_set_param pidfile $PID_FILE + procd_set_param respawn # use the defaults for respawing crashed process + procd_set_param stderr 1 + procd_set_param stdout 1 + procd_close_instance +} diff --git a/sound/snapcast/files/snapserver.init b/sound/snapcast/files/snapserver.init new file mode 100755 index 0000000000..0747fe95c9 --- /dev/null +++ b/sound/snapcast/files/snapserver.init @@ -0,0 +1,31 @@ +#!/bin/sh /etc/rc.common +# Author: Johannes Pohl +START=90 + +USE_PROCD=1 + +NAME=snapserver +PROG=/usr/bin/$NAME +PID_FILE=/var/run/$NAME.pid +CONFIG_FILE=/etc/default/$NAME + + +start_service() +{ + local autostart opts + + autostart=$(grep ^START_SNAPSERVER $CONFIG_FILE |cut -d= -f2) + [ "$autostart" != "true" ] && logger -t $NAME "Not starting due to START_SNAPSERVER" && exit 0 + + opts=$(grep ^SNAPSERVER_OPTS $CONFIG_FILE |cut -d "\"" -f2) + opts="--logging.sink system $opts" + + procd_open_instance + procd_set_param command $PROG + procd_append_param command $opts + procd_set_param pidfile $PID_FILE + procd_set_param respawn # use the defaults for respawing crashed process + procd_set_param stderr 1 + procd_set_param stdout 1 + procd_close_instance +} From cbf46ff76cddee3ce06d2483cdd02e573738698d Mon Sep 17 00:00:00 2001 From: Szabolcs Hubai Date: Thu, 18 Apr 2024 00:23:26 +0200 Subject: [PATCH 2/2] snapcast: add package snapserver and snapclient Snapcast [1] is a multiroom client-server audio player, where all clients are time synchronized with the server to play perfectly synced audio. It's not a standalone player, but an extension that turns your existing audio player into a Sonos-like multiroom solution. Audio is captured by the server and routed to the connected clients. Several players can feed audio to the server in parallel and clients can be grouped to play the same audio stream. One of the most generic ways to use Snapcast is in conjunction with the music player daemon (MPD) [1] or Mopidy [2]. [1]: https://github.com/badaix/snapcast [2]: http://www.musicpd.org/ [3]: https://www.mopidy.com/ Signed-off-by: Szabolcs Hubai --- sound/snapcast/Makefile | 44 +++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/sound/snapcast/Makefile b/sound/snapcast/Makefile index a7c2291765..f87910d1bc 100644 --- a/sound/snapcast/Makefile +++ b/sound/snapcast/Makefile @@ -1,22 +1,23 @@ -# -# Copyright (C) 2015 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# +# SPDX-License-Identifier: GPL-2.0-or-later include $(TOPDIR)/rules.mk -PKG_NAME := snapcast -PKG_VERSION := 0.27.0 -PKG_RELEASE := $(PKG_SOURCE_VERSION) -PKG_USE_MIPS16 := 0 +PKG_NAME:=snapcast +BASE_VERSION:=0.28.0 +PKG_SOURCE_DATE:=2024-04-15 +PKG_SOURCE_VERSION:=5fa01b8a49d842ed368138ee071cdf1c34be7a64 +PKG_RELEASE:=1 -# PKG_MIRROR_HASH=skip PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/badaix/snapcast.git -PKG_SOURCE_VERSION:=v0.27.0 -PKG_BUILD_DIR:=$(BUILD_DIR)/snapcast-$(PKG_VERSION) +PKG_MIRROR_HASH=bac3da20899f507e096df96892a4292ecad907fbeb158ddd056a5893ae96a04c + +PKG_VERSION:=$(BASE_VERSION).$(subst -,.,$(PKG_SOURCE_DATE))~$(call version_abbrev,$(PKG_SOURCE_VERSION)) + +PKG_MAINTAINER:= +PKG_LICENSE:=GPL-3.0-or-later +PKG_LICENSE_FILES:=LICENSE +PKG_BUILD_PARALLEL:=1 include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk @@ -50,14 +51,14 @@ endef define Package/snapserver $(call Package/snapcast/Default) TITLE += Snapserver - DEPENDS += +AUDIO_SUPPORT:alsa-lib +libvorbis +libsoxr + DEPENDS += +libvorbis HIDDEN := 1 endef define Package/snapclient $(call Package/snapcast/Default) TILE += Snapclient - DEPENDS += +libvorbisidec +libsoxr + DEPENDS += +libvorbisidec HIDDEN := 1 endef @@ -89,6 +90,15 @@ define Package/snapcast/config endmenu endef +define Package/snapserver/conffiles +/etc/default/snapserver +/etc/snapserver.conf +endef + +define Package/snapclient/conffiles +/etc/default/snapclient +endef + define Package/snapcast/Default/install true endef @@ -99,7 +109,7 @@ define Package/snapserver/install $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/snapserver.init $(1)/etc/init.d/snapserver $(INSTALL_DIR) $(1)/etc/default - $(INSTALL_BIN) $(CURDIR)/../../debian/snapserver.default $(1)/etc/default/snapserver + $(INSTALL_BIN) $(PKG_BUILD_DIR)/extras/package/debian/snapserver.default $(1)/etc/default/snapserver $(INSTALL_BIN) $(PKG_BUILD_DIR)/server/etc/snapserver.conf $(1)/etc/snapserver.conf endef @@ -109,7 +119,7 @@ define Package/snapclient/install $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/snapclient.init $(1)/etc/init.d/snapclient $(INSTALL_DIR) $(1)/etc/default - $(INSTALL_BIN) $(CURDIR)/../../debian/snapclient.default $(1)/etc/default/snapclient + $(INSTALL_BIN) $(PKG_BUILD_DIR)/extras/package/debian/snapclient.default $(1)/etc/default/snapclient endef $(eval $(call BuildPackage,snapserver))