mirror of
https://github.com/owntone/owntone-server.git
synced 2024-12-27 15:45:56 -05:00
07e46d75c8
The unconfigurable resync period of 10 seconds was not frequent enough to keep my own ALSA device in sync with the AirPlay stream. Now the period is configurable. The default is still at 10 seconds, to prevent any change in behavior unless opted in by the user. Currently the adjustment causes a tiny "click" distortion in the ALSA output, so it is better to make the check as infrequent as possible, while still being frequent enough to stay in sync over lengthy sessions of playback. Added source_sample_rate, target_sample_rate to alsa_session. This is a first step toward rendering ALSA at a different sampling rate than the AirPlay stream, so that (a) we will be able to dynamically adjust the ALSA sampling rate for an improved sync algorithm, and (b) later, a more generalized resampling algorithm can accommodate very different hardware sampling rates like 22050 Hz or 48000 Hz. Reworked alsa_session_free() so that it can be used to tear down a partially initialized alsa_session if an error occurs in the middle of alsa_session_make(). This simplifies the error handling logic in alsa_session_make(). This refactoring will be helpful later when resampling is added, because more data structures will be dynamically allocated during initialization. Signed-off-by: Don Cross <cosinekitty@gmail.com>
349 lines
13 KiB
Plaintext
349 lines
13 KiB
Plaintext
# A quick guide to configuring forked-daapd:
|
|
#
|
|
# For regular use, the most important setting to configure is "directories",
|
|
# which should be the location of your media. Whatever user you have set as
|
|
# "uid" must have read access to this location. If the location is a network
|
|
# mount, please see the README.
|
|
#
|
|
# In all likelihood, that's all you need to do!
|
|
|
|
general {
|
|
# Username
|
|
# Make sure the user has read access to the library directories you set
|
|
# below, and full access to the databases, log and local audio
|
|
uid = "@DAAPD_USER@"
|
|
|
|
# Database location
|
|
# db_path = "@localstatedir@/cache/@PACKAGE@/songs3.db"
|
|
|
|
# Log file and level
|
|
# Available levels: fatal, log, warning, info, debug, spam
|
|
logfile = "@localstatedir@/log/@PACKAGE@.log"
|
|
loglevel = log
|
|
|
|
# Admin password for the web interface
|
|
# Note that access to the web interface from computers in
|
|
# "trusted_network" (see below) does not require password
|
|
# admin_password = ""
|
|
|
|
# Websocket port for the web interface.
|
|
# websocket_port = 3688
|
|
|
|
# Sets who is allowed to connect without authorisation. This applies to
|
|
# client types like Remotes, DAAP clients (iTunes) and to the web
|
|
# interface. Options are "any", "localhost" or the prefix to one or
|
|
# more ipv4/6 networks. The default is { "localhost", "192.168", "fd" }
|
|
# trusted_networks = { "localhost", "192.168", "fd" }
|
|
|
|
# Enable/disable IPv6
|
|
ipv6 = yes
|
|
|
|
# Location of cache database
|
|
# cache_path = "@localstatedir@/cache/@PACKAGE@/cache.db"
|
|
|
|
# DAAP requests that take longer than this threshold (in msec) get their
|
|
# replies cached for next time. Set to 0 to disable caching.
|
|
# cache_daap_threshold = 1000
|
|
|
|
# When starting playback, autoselect speaker (if none of the previously
|
|
# selected speakers/outputs are available)
|
|
# speaker_autoselect = yes
|
|
|
|
# Most modern systems have a high-resolution clock, but if you are on an
|
|
# unusual platform and experience audio drop-outs, you can try changing
|
|
# this option
|
|
# high_resolution_clock = yes
|
|
}
|
|
|
|
# Library configuration
|
|
library {
|
|
# Name of the library as displayed by the clients
|
|
# %h: hostname, %v: version
|
|
name = "My Music on %h"
|
|
|
|
# TCP port to listen on. Default port is 3689 (daap)
|
|
port = 3689
|
|
|
|
# Password for the library. Optional.
|
|
# password = ""
|
|
|
|
# Directories to index
|
|
directories = { "/srv/music" }
|
|
|
|
# Follow symlinks. Default: true.
|
|
# follow_symlinks = true
|
|
|
|
# Directories containing podcasts
|
|
# For each directory that is indexed the path is matched against these
|
|
# names. If there is a match all items in the directory are marked as
|
|
# podcasts. Eg. if you index /srv/music, and your podcasts are in
|
|
# /srv/music/Podcasts, you can set this to "/Podcasts".
|
|
# (changing this setting only takes effect after rescan, see the README)
|
|
podcasts = { "/Podcasts" }
|
|
|
|
# Directories containing audiobooks
|
|
# For each directory that is indexed the path is matched against these
|
|
# names. If there is a match all items in the directory are marked as
|
|
# audiobooks.
|
|
# (changing this setting only takes effect after rescan, see the README)
|
|
audiobooks = { "/Audiobooks" }
|
|
|
|
# Directories containing compilations (eg soundtracks)
|
|
# For each directory that is indexed the path is matched against these
|
|
# names. If there is a match all items in the directory are marked as
|
|
# compilations.
|
|
# (changing this setting only takes effect after rescan, see the README)
|
|
compilations = { "/Compilations" }
|
|
|
|
# Compilations usually have many artists, and if you don't want every
|
|
# artist to be listed when artist browsing in Remote, you can set
|
|
# a single name which will be used for all music in the compilation dir
|
|
# (changing this setting only takes effect after rescan, see the README)
|
|
compilation_artist = "Various artists"
|
|
|
|
# If your album and artist lists are cluttered, you can choose to hide
|
|
# albums and artists with only one track. The tracks will still be
|
|
# visible in other lists, e.g. songs and playlists. This setting
|
|
# currently only works in some remotes.
|
|
# hide_singles = false
|
|
|
|
# Internet streams in your playlists will by default be shown in the
|
|
# "Radio" library, like iTunes does. However, some clients (like
|
|
# TunesRemote+) won't show the "Radio" library. If you would also like
|
|
# to have them shown like normal playlists, you can enable this option.
|
|
# radio_playlists = false
|
|
|
|
# These are the default playlists. If you want them to have other names,
|
|
# you can set it here.
|
|
# name_library = "Library"
|
|
# name_music = "Music"
|
|
# name_movies = "Movies"
|
|
# name_tvshows = "TV Shows"
|
|
# name_podcasts = "Podcasts"
|
|
# name_audiobooks = "Audiobooks"
|
|
# name_radio = "Radio"
|
|
|
|
# Artwork file names (without file type extension)
|
|
# forked-daapd will look for jpg and png files with these base names
|
|
# artwork_basenames = { "artwork", "cover", "Folder" }
|
|
|
|
# Enable searching for artwork corresponding to each individual media
|
|
# file instead of only looking for album artwork. This is disabled by
|
|
# default to reduce cache size.
|
|
# artwork_individual = false
|
|
|
|
# File types the scanner should ignore
|
|
# Non-audio files will never be added to the database, but here you
|
|
# can prevent the scanner from even probing them. This might improve
|
|
# scan time. By default .db, .ini, .db-journal, .pdf and .metadata are
|
|
# ignored.
|
|
# filetypes_ignore = { ".db", ".ini", ".db-journal", ".pdf", ".metadata" }
|
|
|
|
# File paths the scanner should ignore
|
|
# If you want to exclude files on a more advanced basis you can enter
|
|
# one or more POSIX regular expressions, and any file with a matching
|
|
# path will be ignored.
|
|
# filepath_ignore = { "myregex" }
|
|
|
|
# Disable startup file scanning
|
|
# When forked-daapd starts it will do an initial file scan of your
|
|
# library (and then watch it for changes). If you are sure your library
|
|
# never changes while forked-daapd is not running, you can disable the
|
|
# initial file scan and save some system ressources. Disabling this scan
|
|
# may lead to forked-daapd's database coming out of sync with the
|
|
# library. If that happens read the instructions in the README on how
|
|
# to trigger a rescan.
|
|
# filescan_disable = false
|
|
|
|
# Should iTunes metadata override ours?
|
|
# itunes_overrides = false
|
|
|
|
# Should we import the content of iTunes smart playlists?
|
|
# itunes_smartpl = false
|
|
|
|
# Decoding options for DAAP clients
|
|
# Since iTunes has native support for mpeg, mp4a, mp4v, alac and wav,
|
|
# such files will be sent as they are. Any other formats will be decoded
|
|
# to raw wav. If forked-daapd detects a non-iTunes DAAP client, it is
|
|
# assumed to only support mpeg and wav, other formats will be decoded.
|
|
# Here you can change when to decode. Note that these settings have no
|
|
# effect on AirPlay.
|
|
# Formats: mp4a, mp4v, mpeg, alac, flac, mpc, ogg, wma, wmal, wmav, aif, wav
|
|
# Formats that should never be decoded
|
|
# no_decode = { "format", "format" }
|
|
# Formats that should always be decoded
|
|
# force_decode = { "format", "format" }
|
|
|
|
# Watch named pipes in the library for data and autostart playback when
|
|
# there is data to be read. To exclude specific pipes from watching,
|
|
# consider using the above _ignore options.
|
|
# pipe_autostart = true
|
|
|
|
# Enable automatic rating updates
|
|
# If enabled, rating is automatically updated after a song has either been
|
|
# played or skipped (only skipping to the next song is taken into account).
|
|
# The calculation is taken from the beets plugin "mpdstats" (see
|
|
# https://beets.readthedocs.io/en/latest/plugins/mpdstats.html).
|
|
# It consist of calculating a stable rating based only on the play- and
|
|
# skipcount and a rolling rating based on the current rating and the action
|
|
# (played or skipped). Both results are combined with a mix-factor of 0.75:
|
|
# new rating = 0.75 * stable rating + 0.25 * rolling rating)
|
|
# rating_updates = false
|
|
}
|
|
|
|
# Local audio output
|
|
audio {
|
|
# Name - used in the speaker list in Remote
|
|
nickname = "Computer"
|
|
|
|
# Type of the output (alsa, pulseaudio, dummy or disabled)
|
|
# type = "alsa"
|
|
|
|
# For pulseaudio output, an optional server hostname or IP can be
|
|
# specified (e.g. "localhost"). If not set, connection is made via local
|
|
# socket.
|
|
# server = ""
|
|
|
|
# Audio PCM device name for local audio output - ALSA only
|
|
# card = "default"
|
|
|
|
# Mixer channel to use for volume control - ALSA only
|
|
# If not set, PCM will be used if available, otherwise Master.
|
|
# mixer = ""
|
|
|
|
# Mixer device to use for volume control - ALSA only
|
|
# If not set, the value for "card" will be used.
|
|
# mixer_device = ""
|
|
|
|
# Synchronization
|
|
# If your local audio is out of sync with AirPlay, you can adjust this
|
|
# value. Positive values correspond to moving local audio ahead,
|
|
# negative correspond to delaying it. The unit is samples, where is
|
|
# 44100 = 1 second. The offset must be between -44100 and 44100.
|
|
# offset = 0
|
|
|
|
# How often to check and correct for drift between ALSA and AirPlay.
|
|
# The value is an integer expressed in seconds.
|
|
# Clamped to the range 1..20.
|
|
# adjust_period_seconds = 10
|
|
}
|
|
|
|
# Pipe output
|
|
# Allows forked-daapd to output audio data to a named pipe
|
|
#fifo {
|
|
# nickname = "fifo"
|
|
# path = "/path/to/fifo"
|
|
#}
|
|
|
|
# AirPlay/Airport Express device settings
|
|
# (make sure you get the capitalization of the device name right)
|
|
#airplay "My AirPlay device" {
|
|
# forked-daapd's volume goes to 11! If that's more than you can handle
|
|
# you can set a lower value here
|
|
# max_volume = 11
|
|
|
|
# Enable this option to exclude a particular AirPlay device from the
|
|
# speaker list
|
|
# exclude = false
|
|
|
|
# AirPlay password
|
|
# password = "s1kr3t"
|
|
#}
|
|
|
|
# Spotify settings (only have effect if Spotify enabled - see README/INSTALL)
|
|
spotify {
|
|
# Directory where user settings should be stored (credentials)
|
|
# settings_dir = "@localstatedir@/cache/@PACKAGE@/libspotify"
|
|
|
|
# Cache directory
|
|
# cache_dir = "/tmp"
|
|
|
|
# Set preferred bitrate for music streaming
|
|
# 0: No preference (default), 1: 96kbps, 2: 160kbps, 3: 320kbps
|
|
# bitrate = 0
|
|
|
|
# Your Spotify playlists will by default be put in a "Spotify" playlist
|
|
# folder. If you would rather have them together with your other
|
|
# playlists you can set this option to true.
|
|
# base_playlist_disable = false
|
|
|
|
# Spotify playlists usually have many artist, and if you don't want
|
|
# every artist to be listed when artist browsing in Remote, you can set
|
|
# the artist_override flag to true. This will use the compilation_artist
|
|
# as album artist for Spotify items.
|
|
# artist_override = false
|
|
|
|
# Similar to the different artists in Spotify playlists, the playlist
|
|
# items belong to different albums, and if you do not want every album
|
|
# to be listed when browsing in Remote, you can set the album_override
|
|
# flag to true. This will use the playlist name as album name for
|
|
# Spotify items. Notice that if an item is in more than one playlist,
|
|
# it will only appear in one album when browsing (in which album is
|
|
# random).
|
|
# album_override = false
|
|
}
|
|
|
|
# MPD configuration (only have effect if MPD enabled - see README/INSTALL)
|
|
mpd {
|
|
# TCP port to listen on for MPD client requests.
|
|
# Default port is 6600, set to 0 to disable MPD support.
|
|
# port = 6600
|
|
|
|
# HTTP port to listen for artwork requests (only supported by some MPD
|
|
# clients and will need additional configuration in the MPD client to
|
|
# work). Set to 0 to disable serving artwork over http.
|
|
# http_port = 0
|
|
|
|
# By default forked-daapd will - like iTunes - clear the playqueue if
|
|
# playback stops. Setting clear_queue_on_stop_disable to true will keep
|
|
# the playlist like MPD does. Note that some dacp clients do not show
|
|
# the playqueue if playback is stopped.
|
|
# clear_queue_on_stop_disable = false
|
|
|
|
# Allows creating, deleting and modifying m3u playlists in the library directories.
|
|
# Defaults to being disabled.
|
|
# allow_modifying_stored_playlists = false
|
|
|
|
# A directory in one of the library directories that will be used as the default
|
|
# playlist directory. forked-dapd creates new playlists in this directory if only
|
|
# a playlist name is provided by the mpd client (requires "allow_modify_stored_playlists"
|
|
# set to true).
|
|
# default_playlist_directory = ""
|
|
}
|
|
|
|
# SQLite configuration (allows to modify the operation of the SQLite databases)
|
|
# Make sure to read the SQLite documentation for the corresponding PRAGMA
|
|
# statements as changing them from the defaults may increase the possibility of
|
|
# database corruptions! By default the SQLite default values are used.
|
|
sqlite {
|
|
# Cache size in number of db pages for the library database
|
|
# (SQLite default page size is 1024 bytes and cache size is 2000 pages)
|
|
# pragma_cache_size_library = 2000
|
|
|
|
# Cache size in number of db pages for the daap cache database
|
|
# (SQLite default page size is 1024 bytes and cache size is 2000 pages)
|
|
# pragma_cache_size_cache = 2000
|
|
|
|
# Sets the journal mode for the database
|
|
# DELETE (default), TRUNCATE, PERSIST, MEMORY, WAL, OFF
|
|
# pragma_journal_mode = DELETE
|
|
|
|
# Change the setting of the "synchronous" flag
|
|
# 0: OFF, 1: NORMAL, 2: FULL (default)
|
|
# pragma_synchronous = 2
|
|
|
|
# Number of bytes set aside for memory-mapped I/O for the library database
|
|
# (requires sqlite 3.7.17 or later)
|
|
# 0: disables mmap (default), any other value > 0: number of bytes for mmap
|
|
# pragma_mmap_size_library = 0
|
|
|
|
# Number of bytes set aside for memory-mapped I/O for the cache database
|
|
# (requires sqlite 3.7.17 or later)
|
|
# 0: disables mmap (default), any other value > 0: number of bytes for mmap
|
|
# pragma_mmap_size_cache = 0
|
|
|
|
# Should the database be vacuumed on startup? (increases startup time,
|
|
# but may reduce database size). Default is yes.
|
|
# vacuum = yes
|
|
}
|