Compare commits
4 Commits
f3f2fbd42b
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 02ba383ab0 | |||
| 20c341de98 | |||
| 5fbc51fba7 | |||
| a09a007787 |
49
README.md
49
README.md
@@ -0,0 +1,49 @@
|
||||
# Mopidy Music Server Configuration
|
||||
|
||||
This repository contains the configuration and setup for the local Mopidy instance. Mopidy acts as the primary music logic server (Radio, Local Files, Extensions) feeding into the Snapcast multi-room audio system.
|
||||
|
||||
This system ses snapweb which needs to be set to MainAudio for Piper Voice play http://192.168.20.13:1780/
|
||||
|
||||
## 🎵 System Architecture
|
||||
|
||||
* **Core:** Mopidy (Python-based music server).
|
||||
* **Output:** Pipes audio to Snapserver via a Named Pipe (`/tmp/snapfifo`).
|
||||
* **Frontend:** Iris Web Interface (Port 6680).
|
||||
* **Extensions:** `mopidy-radionet`, `mopidy-local`, etc.
|
||||
|
||||
## 📂 Key Files
|
||||
|
||||
* **`mopidy.conf`**: The master configuration file. Controls enabled plugins, file paths, and GStreamer audio pipelines.
|
||||
* **`requirements.txt`** (Optional): Python pip dependencies for installed plugins.
|
||||
|
||||
## ⚙️ Configuration Highlights
|
||||
|
||||
### Audio Output (Snapcast Link)
|
||||
To ensure compatibility with Snapserver, the audio output is forced to **48kHz Stereo 16-bit** and written to the pipe:
|
||||
|
||||
```ini
|
||||
[audio]
|
||||
output = audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format=S16LE ! wavenc ! filesink location=/tmp/snapfifo
|
||||
```
|
||||
|
||||
## 🚀 Management Commands
|
||||
|
||||
**Restart Service:**
|
||||
```bash
|
||||
sudo systemctl restart mopidy
|
||||
```
|
||||
|
||||
**Check Status & Logs:**
|
||||
```bash
|
||||
sudo systemctl status mopidy
|
||||
sudo journalctl -u mopidy -f
|
||||
```
|
||||
|
||||
**Rescan Local Library:**
|
||||
```bash
|
||||
sudo mopidy local scan
|
||||
```
|
||||
|
||||
**Config Location:**
|
||||
* `/etc/mopidy/mopidy.conf` (System Service)
|
||||
* `~/.config/mopidy/mopidy.conf` (User Mode)
|
||||
|
||||
238
snapserver.conf
Normal file
238
snapserver.conf
Normal file
@@ -0,0 +1,238 @@
|
||||
###############################################################################
|
||||
# ______ #
|
||||
# / _____) #
|
||||
# ( (____ ____ _____ ____ ___ _____ ____ _ _ _____ ____ #
|
||||
# \____ \ | _ \ (____ || _ \ /___)| ___ | / ___)| | | || ___ | / ___) #
|
||||
# _____) )| | | |/ ___ || |_| ||___ || ____|| | \ V / | ____|| | #
|
||||
# (______/ |_| |_|\_____|| __/ (___/ |_____)|_| \_/ |_____)|_| #
|
||||
# |_| #
|
||||
# #
|
||||
# Snapserver config file #
|
||||
# #
|
||||
###############################################################################
|
||||
|
||||
# default values are commented
|
||||
# uncomment and edit to change them
|
||||
|
||||
# Settings can be overwritten on command line with:
|
||||
# "--<section>.<name>=<value>", e.g. --server.threads=4
|
||||
|
||||
|
||||
# General server settings #####################################################
|
||||
#
|
||||
[server]
|
||||
# Number of additional worker threads to use
|
||||
# - For values < 0 the number of threads will be 2 (on single and dual cores)
|
||||
# or 4 (for quad and more cores)
|
||||
# - 0 will utilize just the processes main thread and might cause audio drops
|
||||
# in case there are a couple of longer running tasks, such as encoding
|
||||
# multiple audio streams
|
||||
#threads = -1
|
||||
|
||||
# the pid file when running as daemon (-d or --daemon)
|
||||
#pidfile = /var/run/snapserver/pid
|
||||
|
||||
# the user to run as when daemonized (-d or --daemon)
|
||||
#user = snapserver
|
||||
# the group to run as when daemonized (-d or --daemon)
|
||||
#group = snapserver
|
||||
|
||||
# directory where persistent data is stored (server.json)
|
||||
# if empty, data dir will be
|
||||
# - "/var/lib/snapserver/" when running as daemon
|
||||
# - "$HOME/.config/snapserver/" when not running as daemon
|
||||
#datadir =
|
||||
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Secure Socket Layer #########################################################
|
||||
#
|
||||
[ssl]
|
||||
# Certificate files are either specified by their full or relative path. Certificates with
|
||||
# relative path are searched for in the current path and in "/etc/snapserver/certs"
|
||||
|
||||
# Certificate file in PEM format
|
||||
#certificate =
|
||||
|
||||
# Private key file in PEM format
|
||||
#certificate_key =
|
||||
|
||||
# Password for decryption of the certificate_key (only needed for encrypted certificate_key file)
|
||||
#key_password =
|
||||
|
||||
# Verify client certificates
|
||||
#verify_clients = false
|
||||
|
||||
# List of client CA certificate files, can be configured multiple times
|
||||
#client_cert =
|
||||
#client_cert =
|
||||
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
|
||||
# HTTP RPC ####################################################################
|
||||
#
|
||||
[http]
|
||||
# enable HTTP Json RPC (HTTP POST and websockets)
|
||||
#enabled = true
|
||||
|
||||
# address to listen on, can be specified multiple times
|
||||
# use "0.0.0.0" to bind to any IPv4 address or :: to bind to any IPv6 address
|
||||
# or "127.0.0.1" or "::1" to bind to localhost IPv4 or IPv6, respectively
|
||||
# use the address of a specific network interface to just listen to and accept
|
||||
# connections from that interface
|
||||
#bind_to_address = ::
|
||||
|
||||
# which port the server should listen to
|
||||
#port = 1780
|
||||
|
||||
# enable HTTPS Json RPC (HTTPS POST and ssl websockets)
|
||||
#ssl_enabled = false
|
||||
|
||||
# same as 'bind_to_address' but for SSL
|
||||
#ssl_bind_to_address = ::
|
||||
|
||||
# same as 'port' but for SSL
|
||||
#ssl_port = 1788
|
||||
|
||||
# serve a website from the doc_root location
|
||||
# disabled if commented or empty
|
||||
doc_root = /usr/share/snapserver/snapweb
|
||||
|
||||
# Hostname or IP under which clients can reach this host
|
||||
# used to serve cached cover art
|
||||
# use <hostname> as placeholder for your actual host name
|
||||
#host = <hostname>
|
||||
|
||||
# Optional custom URL prefix for generated URLs where clients can reach
|
||||
# cached album art, to e.g. match scheme behind a reverse proxy.
|
||||
#url_prefix = https://<hostname>
|
||||
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
|
||||
# TCP RPC #####################################################################
|
||||
#
|
||||
[tcp]
|
||||
# enable TCP Json RPC
|
||||
#enabled = true
|
||||
|
||||
# address to listen on, can be specified multiple times
|
||||
# use "0.0.0.0" to bind to any IPv4 address or :: to bind to any IPv6 address
|
||||
# or "127.0.0.1" or "::1" to bind to localhost IPv4 or IPv6, respectively
|
||||
# use the address of a specific network interface to just listen to and accept
|
||||
# connections from that interface
|
||||
#bind_to_address = ::
|
||||
|
||||
# which port the server should listen to
|
||||
#port = 1705
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Stream settings #############################################################
|
||||
#
|
||||
[stream]
|
||||
# address to listen on, can be specified multiple times
|
||||
# use "0.0.0.0" to bind to any IPv4 address or :: to bind to any IPv6 address
|
||||
# or "127.0.0.1" or "::1" to bind to localhost IPv4 or IPv6, respectively
|
||||
# use the address of a specific network interface to just listen to and accept
|
||||
# connections from that interface
|
||||
#bind_to_address = ::
|
||||
|
||||
# which port the server should listen to
|
||||
#port = 1704
|
||||
|
||||
# source URI of the PCM input stream, can be configured multiple times
|
||||
# The following notation is used in this paragraph:
|
||||
# <angle brackets>: the whole expression must be replaced with your specific setting
|
||||
# [square brackets]: the whole expression is optional and can be left out
|
||||
# [key=value]: if you leave this option out, "value" will be the default for "key"
|
||||
#
|
||||
# Format: TYPE://host/path?name=<name>[&codec=<codec>][&sampleformat=<sampleformat>][&chunk_ms=<chunk ms>][&controlscript=<control script filename>[&controlscriptparams=<control script command line arguments>]]
|
||||
# parameters have the form "key=value", they are concatenated with an "&" character
|
||||
# parameter "name" is mandatory for all sources, while codec, sampleformat and chunk_ms are optional
|
||||
# and will override the default codec, sampleformat or chunk_ms settings
|
||||
# Available types are:
|
||||
# pipe: pipe:///<path/to/pipe>?name=<name>[&mode=create], mode can be "create" or "read"
|
||||
# librespot: librespot:///<path/to/librespot>?name=<name>[&username=<my username>&password=<my password>][&devicename=Snapcast][&bitrate=320][&wd_timeout=7800][&volume=100][&onevent=""][&normalize=false][&autoplay=false][¶ms=<generic librepsot process arguments>]
|
||||
# note that you need to have the librespot binary on your machine
|
||||
# sampleformat will be set to "44100:16:2"
|
||||
# file: file:///<path/to/PCM/file>?name=<name>
|
||||
# process: process:///<path/to/process>?name=<name>[&wd_timeout=0][&log_stderr=false][¶ms=<process arguments>]
|
||||
# airplay: airplay:///<path/to/airplay>?name=<name>[&port=5000]
|
||||
# note that you need to have the airplay binary on your machine
|
||||
# sampleformat will be set to "44100:16:2"
|
||||
# tcp server: tcp://<listen IP, e.g. 127.0.0.1>:<port>?name=<name>[&mode=server]
|
||||
# tcp client: tcp://<server IP, e.g. 127.0.0.1>:<port>?name=<name>&mode=client
|
||||
# alsa: alsa:///?name=<name>&device=<alsa device>[&send_silence=false][&idle_threshold=100][&silence_threshold_percent=0.0]
|
||||
# meta: meta:///<name of source#1>/<name of source#2>/.../<name of source#N>?name=<name>
|
||||
|
||||
|
||||
|
||||
#source = pipe:///tmp/snapfifo?name=default
|
||||
source = meta:///Announcements/default?name=MainAudio
|
||||
source = tcp://0.0.0.0:4953?name=Announcements&sampleformat=48000:16:2&codec=pcm
|
||||
source = pipe:///run/snapserver/snapfifo?name=default
|
||||
#source = spotify:///librespot?name=Spotify&username=guzzbinkles&password=Finn05092013&devicename=Snapcast&bitrate=320
|
||||
|
||||
|
||||
|
||||
#announcements
|
||||
#source = tcp://0.0.0.0:4953?name=Announcements&sampleformat=22050:16:1&codec=pcm
|
||||
#source = spotify:///librespot?name=Spotify&devicename=Snapcast&bitrate=320
|
||||
|
||||
|
||||
# Plugin directory, containing scripts, referred by "controlscript"
|
||||
#plugin_dir = /usr/share/snapserver/plug-ins
|
||||
|
||||
# Default sample format: <sample rate>:<bits per sample>:<channels>
|
||||
#sampleformat = 48000:16:2
|
||||
|
||||
# Default transport codec
|
||||
# (flac|ogg|opus|pcm)[:options]
|
||||
# Start Snapserver with "--stream:codec=<codec>:?" to get codec specific options
|
||||
#codec = flac
|
||||
|
||||
# Default source stream read chunk size [ms].
|
||||
# The server will continously read this number of milliseconds from the source into buffer and pass this buffer to the encoder.
|
||||
# The encoded buffer is sent to the clients. Some codecs have a higher latency and will need more data, e.g. Flac will need ~26ms chunks
|
||||
#chunk_ms = 20
|
||||
|
||||
# Buffer [ms]
|
||||
# The end-to-end latency, from capturing a sample on the server until the sample is played-out on the client
|
||||
#buffer = 1000
|
||||
|
||||
# Send audio to muted clients
|
||||
#send_to_muted = false
|
||||
#
|
||||
|
||||
|
||||
# Streaming client options ####################################################
|
||||
#
|
||||
[streaming_client]
|
||||
|
||||
# Volume assigned to new snapclients [percent]
|
||||
# Defaults to 100 if unset
|
||||
#initial_volume = 100
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Logging options #############################################################
|
||||
#
|
||||
[logging]
|
||||
|
||||
# log sink [null,system,stdout,stderr,file:<filename>]
|
||||
# when left empty: if running as daemon "system" else "stdout"
|
||||
#sink =
|
||||
|
||||
# log filter <tag>:<level>[,<tag>:<level>]*
|
||||
# with tag = * or <log tag> and level = [trace,debug,info,notice,warning,error,fatal]
|
||||
#filter = *:info
|
||||
#
|
||||
###############################################################################
|
||||
Reference in New Issue
Block a user