Jump to content

Squeezeslave on the core: Difference between revisions

From LinuxMCE
Rperre (talk | contribs)
No edit summary
Rperre (talk | contribs)
No edit summary
Line 5: Line 5:
==Squeezeslave Setup==
==Squeezeslave Setup==
Here's how to setup squeezeslave to run on the core.  It's fairly straight forward.  One small issue is that because squeezeslave uses the OSS interface, you will need a separate sound card for each instance of squeezeslave you want to run.
Here's how to setup squeezeslave to run on the core.  It's fairly straight forward.  One small issue is that because squeezeslave uses the OSS interface, you will need a separate sound card for each instance of squeezeslave you want to run.
===Download Source===
===Needed depends===
First download a version of [http://sourceforge.net/project/showfiles.php?group_id=105169 Squeezeslave].  I'm running the latest version as it fixed some playback bugs I was having, but any version that works with you're setup should be fine.  
System libraries needed are subversion and libasound2-dev
  sudo apt-get install subversion
  sudo apt-get install libasound2-dev
===Typical build===
  svn checkout http://squeezeslave.googlecode.com/svn/squeezeslave/trunk/squeezeslave
  cd squeezeslave
  make -f deprecated/makefile.linux26-alsa realclean
  make -f deprecated/makefile.linux26-alsa
===Or Download Source / look at the squeezeslave wiki===
Download a version of [http://sourceforge.net/project/showfiles.php?group_id=105169 Squeezeslave].  I'm running the latest version which was 0.9-143
 
Look at the slimdevices wiki for the latest options and install instructions http://wiki.slimdevices.com/index.php/SqueezeSlave
===Installing===  
===Installing===  
*You'll want to put it somewhere in your path.   
*You'll want to put it somewhere in your path.   
**Example: /usr/local/bin
*There will be a file in the /bin directory called squeezeslave (there might be something added to this to represent the version you build, just rename the file to squeezeslave and copy to your wanted directory
*Example: /usr/local/bin
====Modify /etc/rc.local====
====Modify /etc/rc.local====
Next add the following to /etc/rc.local (this is my setup for two)
Next add the following to /etc/rc.local
   /usr/local/bin/squeezeslave -o0 -m 00:00:00:00:00:01 -r5 &
   /usr/local/bin/squeezeslave -o5 -m00:00:00:00:00:01 -r5 -M/var/log/squeezeslave.log
  /usr/local/bin/squeezeslave -o1 -m 00:00:00:00:00:02 -r5 &


* the MAC address can be whatever you want
* the MAC address can be whatever you want, it just needs to be the same as the device created in linux mce
* the -o option specifies which OSS output device ie /dev/dsp1
* the -o option specifies which OSS output device ie /dev/dsp1 (check with "squeezeslave -l" for available devices)
* the -s (no longer an option)
* the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.
* the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.
* the -M option makes it run as a Daemon and creates log


===Setting Up Alsamixer===
===Setting Up Alsamixer===
Line 34: Line 45:
* Regen your orbiters and reload the router.
* Regen your orbiters and reload the router.


== LMCE init script ==
Restart the core to make sure it's starting automatically, to run it manually just run the line made in the rc.local
Copy attached script text into a file named /etc/init.d/squeezeslave


=== Startup Script ===
  /usr/local/bin/squeezeslave -o5 -m 00:00:00:00:00:01 -r5 -M/var/log/squeezeslave.log
<pre>
#! /bin/sh
### BEGIN INIT INFO
# Provides:          squeezeslave
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:     S 0 1 6
# Short-Description: Initscript for squeezeslave
# Description:       This init script make it possible to start squeezeslave as a daemon
#                    It is placed in /etc/init.d.
### END INIT INFO


# Author: Magnus Nilsson <magnus@karabas.nu>
* Check with ps if it is running:
#
  ps aux | grep squeezeslave
**Example output:
root    11502  0.0  0.8  51484  8812 ?        SLl  Apr07  0:33 /usr/local/bin/squeezeslave -05 -m00:00:00:00:00:02 -r5 -M/var/log/squeezeslave


That should do it.


# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/sbin:/usr/bin:/usr/local/bin:/sbin:/bin
DESC="Squeezeslave dameon"
NAME=squeezeslave
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="-o1 -m 00:00:00:00:00:01 -r5"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
do_start()
{
        # Return
        #  0 if daemon has been started
        #  1 if daemon was already running
        #  2 if daemon could not be started
        start-stop-daemon --start -b --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start -b --quiet --pidfile $PIDFILE --exec $DAEMON -- \
                $DAEMON_ARGS \
                || return 2
        # Add code here, if necessary, that waits for the process to be ready
        # to handle requests from services started subsequently which depend
        # on this one.  As a last resort, sleep for some time.
}
#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #  0 if daemon has been stopped
        #  1 if daemon was already stopped
        #  2 if daemon could not be stopped
        #  other if a failure occurred
        start-stop-daemon --stop --quiet --retry=TERM/3/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        # Wait for children to finish too if this is a daemon that forks
        # and if the daemon is only ever run from this initscript.
        # If the above conditions are not satisfied then add some other code
        # that waits for the process to drop all resources that could be
        # needed by services started subsequently.  A last resort is to
        # sleep for some time.
        start-stop-daemon --stop --quiet --oknodo --retry=0/3/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -f $PIDFILE
        return "$RETVAL"
}
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
        #
        # If the daemon can reload its configuration without
        # restarting (for example, when it is sent a SIGHUP),
        # then implement that here.
        #
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
        return 0
}
case "$1" in
  start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  #reload|force-reload)
        #
        # If do_reload() is not implemented then leave this commented out
        # and leave 'force-reload' as an alias for 'restart'.
        #
        #log_daemon_msg "Reloading $DESC" "$NAME"
        #do_reload
        #log_end_msg $?
        #;;
  restart|force-reload)
        #
        # If the "reload" option is implemented then remove the
        # 'force-reload' alias
        #
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
        #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 3
        ;;
esac
:
</pre>
===Make script executable===
sudo chmod +x /etc/init.d/squeezeslave
===Modify Parameters===
Modify parameters in the beginning of the file to suite your needs.
* MAC address
* slimserver host
* binary location
* soundcard device.
Below is the parameters you should change:
NAME=squeezeslave
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="-o1 -m 00:00:00:00:00:01 -r"
===Setup to Run at Start Up===
* Run from shell:


  sudo ln -s ../init.d/squeezeslave /etc/rc2.d/S50squeezeslave
use /usr/local/bin/squeezeslave -L for available audio devices


* You should now be able to start/stop squeezeslave from shell.
use /usr/local/bin/squeezeslave -h for a list of options (see below)
  sudo /etc/init.d/squeezeslave start
 
* Check with ps if it is running:
  ps aux | grep squeezeslave
**Example output:
root      9007  0.0  0.3  64116  5436 ?        Sl  Jun18  0:03 /root/squeezeslave-0.7.1/squeezeslave -o 1 -m    00:04:20:00:00:01 -r -s 192.168.80.1


*To stop:
<pre>/usr/local/bin/squeezeslave -h
squeezeslave 0.9-143
compile flags: linux portaudio:1485 debug signals daemon


  sudo /etc/init.d/squeezeslave stop
Squeezeslave is licensed free of charge. There is NO WARRANTY for
the program. This program is provided "as is" without warranty of
any kind, either expressed or implied, including, but not limited
to, the implied warranties of merchantability and fitness for a
particular purpose.  The entire risk as to the quality and
performance of the program is with you. Should the program prove
defective, you assume the cost of all necessary servicing, repair
or correction.


* Restart your core and check if everything start as it should, including squeezeslave.
Copyright (c) 2004-2007 Richard Titmuss,
              2008-2010 Duane Paddock.


That should do it.
squeezeslave [options] [<server address>]
The Squeezebox Server address defaults to 127.0.0.1.
Options:
-h, --help:                Prints this message.
-a,                        Sets the amplitude of a high-frequency tone
--predelay_amplitude <val>: produced during the predelay (see --predelay).
                            The frequency is set at the source's sampling
                            rate/2 and the amplitude is in absolute value.
                            For 16-bit sources, the max is 32767, but values
                            below 10 are likely to work.  The goal is to
                            produce an inaudible signal that will cause DACs
                            to wake-up and lock before actual samples are
                            played out.  If the DAC locks using only silence,
                            do not use this option (it will default to 0).
-k, --keepalive <sec>:      Controls how frequently squeezeslave sends a
                            alive signal to SqueezeCenter.  6.5.x servers
                            need this to avoid dropping the player's
                            connection.  By default, the implementation
                            chooses the right value: 10s for a >=6.5.x server
                            and 0s for a <6.5.x server, which means no
                            keepalive.
-M, --daemonize <logfile>  Run squeezeslave as a daemon.
                            Messages written to specified file.
                            Not supported with lirc and display modes.
-L, --list                  List available audio devices and exit.
-m, --mac <mac_address>:    Sets the mac address for this instance.
                            Use the colon-separated notation.
                            The default is 00:00:00:00:00:01.
                            SqueezeCenter uses this value to distinguish
                            multiple instances, allowing per-player settings.
-o, --output <device_id>:  Sets the output device id.
                            The default id is 0.
                            The output device ids can be found with -L.
-P, --port <portnumber>:    Sets the SqueezeCenter port number.
                            The default port is 3483.
-p, --predelay <msec>:      Sets a delay before any playback is started.  This
                            is useful if the DAC used for output is slow to
                            wake-up/lock, causing the first few samples to be
                            dropped.
--retry                    Causes the program to retry connecting to
                            SqueezeCenter until it succeeds or is stopped using
                            SIGTERM or keyboard entry (see -s/--signal).
                            If the connection to SqueezeCenter is lost, the
                            program will poll it until it restarts.  --retry
                            enables retry with a 5 second delay between
                            attempts.
-r <sec>                    For a different retry interval use -r and the
                            desired interval in seconds. (ie. -r10)
                            A value is required for this option.
-s, --signal:              Ignored. Always uses SIGTERM to exit.
-V, --version:              Prints the squeezeslave version.
-v, --volume <sw|off>:      Enables/disables volume changes done by
                            SqueezeCenter during its operation, such as when
                            changing the volume through the web interface or
                            when applying replay gain.  Defaults to sw.
                                  sw:  volume changes performed in software.
                                  off: volume changes ignored.
-Y, --debuglog <logfile>:  Redirect debug output from stderr to <logfile>.
-d, --debug <trace_name>:  Turns on debug tracing for the specified level.
                            The option can be used multiple times to enable
                            multiple levels.
                            Available levels:
                                  all
                                  slimproto
                                  slimaudio
                                  slimaudio_buffer
                                  slimaudio_buffer_v
                                  slimaudio_decoder
                                  slimaudio_decoder_r
                                  slimaudio_decoder_v
                                  slimaudio_http
                                  slimaudio_http_v
                                  slimaudio_output
                                  slimaudio_output_v</pre>

Revision as of 21:16, 8 April 2010

Squeezeslave Setup

Here's how to setup squeezeslave to run on the core. It's fairly straight forward. One small issue is that because squeezeslave uses the OSS interface, you will need a separate sound card for each instance of squeezeslave you want to run.

Needed depends

System libraries needed are subversion and libasound2-dev

 sudo apt-get install subversion
 sudo apt-get install libasound2-dev

Typical build

 svn checkout http://squeezeslave.googlecode.com/svn/squeezeslave/trunk/squeezeslave
 cd squeezeslave
 make -f deprecated/makefile.linux26-alsa realclean
 make -f deprecated/makefile.linux26-alsa

Or Download Source / look at the squeezeslave wiki

Download a version of Squeezeslave. I'm running the latest version which was 0.9-143

Look at the slimdevices wiki for the latest options and install instructions http://wiki.slimdevices.com/index.php/SqueezeSlave

Installing

  • You'll want to put it somewhere in your path.
  • There will be a file in the /bin directory called squeezeslave (there might be something added to this to represent the version you build, just rename the file to squeezeslave and copy to your wanted directory
  • Example: /usr/local/bin

Modify /etc/rc.local

Next add the following to /etc/rc.local

 /usr/local/bin/squeezeslave -o5 -m00:00:00:00:00:01 -r5 -M/var/log/squeezeslave.log
  • the MAC address can be whatever you want, it just needs to be the same as the device created in linux mce
  • the -o option specifies which OSS output device ie /dev/dsp1 (check with "squeezeslave -l" for available devices)
  • the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.
  • the -M option makes it run as a Daemon and creates log

Setting Up Alsamixer

Next make sure all the volume levels in the mixer (alsamixer) are set correctly

 alsamixer

Make sure that the settings are as desired and save (Esc button)

Setting Up LinuxMCE

Next step, manually add the squeezeslave to linuxmce as a squeezebox using the mac address you gave it.

Select Device

  • Select Device->A/V Equipment
  • Select SqueezeBox Player from the dropdown options
  • Assign it to a room and entertainment area.
  • Regen your orbiters and reload the router.

Restart the core to make sure it's starting automatically, to run it manually just run the line made in the rc.local

 /usr/local/bin/squeezeslave -o5 -m 00:00:00:00:00:01 -r5 -M/var/log/squeezeslave.log
  • Check with ps if it is running:
 ps aux | grep squeezeslave
    • Example output:
root     11502  0.0  0.8  51484  8812 ?        SLl  Apr07   0:33 /usr/local/bin/squeezeslave -05 -m00:00:00:00:00:02 -r5 -M/var/log/squeezeslave

That should do it.


use /usr/local/bin/squeezeslave -L for available audio devices

use /usr/local/bin/squeezeslave -h for a list of options (see below)

/usr/local/bin/squeezeslave -h
squeezeslave 0.9-143
compile flags: linux portaudio:1485 debug signals daemon

Squeezeslave is licensed free of charge. There is NO WARRANTY for
the program. This program is provided "as is" without warranty of
any kind, either expressed or implied, including, but not limited
to, the implied warranties of merchantability and fitness for a
particular purpose.  The entire risk as to the quality and
performance of the program is with you.  Should the program prove
defective, you assume the cost of all necessary servicing, repair
or correction.

Copyright (c) 2004-2007 Richard Titmuss,
              2008-2010 Duane Paddock.

squeezeslave [options] [<server address>]
The Squeezebox Server address defaults to 127.0.0.1.
Options:
-h, --help:                 Prints this message.
-a,                         Sets the amplitude of a high-frequency tone
--predelay_amplitude <val>: produced during the predelay (see --predelay).
                            The frequency is set at the source's sampling
                            rate/2 and the amplitude is in absolute value.
                            For 16-bit sources, the max is 32767, but values
                            below 10 are likely to work.  The goal is to
                            produce an inaudible signal that will cause DACs
                            to wake-up and lock before actual samples are
                            played out.  If the DAC locks using only silence,
                            do not use this option (it will default to 0).
-k, --keepalive <sec>:      Controls how frequently squeezeslave sends a
                            alive signal to SqueezeCenter.  6.5.x servers
                            need this to avoid dropping the player's
                            connection.  By default, the implementation
                            chooses the right value: 10s for a >=6.5.x server
                            and 0s for a <6.5.x server, which means no
                            keepalive.
-M, --daemonize <logfile>   Run squeezeslave as a daemon.
                            Messages written to specified file.
                            Not supported with lirc and display modes.
-L, --list                  List available audio devices and exit.
-m, --mac <mac_address>:    Sets the mac address for this instance.
                            Use the colon-separated notation.
                            The default is 00:00:00:00:00:01.
                            SqueezeCenter uses this value to distinguish
                            multiple instances, allowing per-player settings.
-o, --output <device_id>:   Sets the output device id.
                            The default id is 0.
                            The output device ids can be found with -L.
-P, --port <portnumber>:    Sets the SqueezeCenter port number.
                            The default port is 3483.
-p, --predelay <msec>:      Sets a delay before any playback is started.  This
                            is useful if the DAC used for output is slow to
                            wake-up/lock, causing the first few samples to be
                            dropped.
--retry                     Causes the program to retry connecting to
                            SqueezeCenter until it succeeds or is stopped using
                            SIGTERM or keyboard entry (see -s/--signal).
                            If the connection to SqueezeCenter is lost, the
                            program will poll it until it restarts.  --retry
                            enables retry with a 5 second delay between
                            attempts.
-r <sec>                    For a different retry interval use -r and the
                            desired interval in seconds. (ie. -r10)
                            A value is required for this option.
-s, --signal:               Ignored. Always uses SIGTERM to exit.
-V, --version:              Prints the squeezeslave version.
-v, --volume <sw|off>:      Enables/disables volume changes done by
                            SqueezeCenter during its operation, such as when
                            changing the volume through the web interface or
                            when applying replay gain.  Defaults to sw.
                                  sw:  volume changes performed in software.
                                  off: volume changes ignored.
-Y, --debuglog <logfile>:   Redirect debug output from stderr to <logfile>.
-d, --debug <trace_name>:   Turns on debug tracing for the specified level.
                            The option can be used multiple times to enable
                            multiple levels.
                            Available levels:
                                  all
                                  slimproto
                                  slimaudio
                                  slimaudio_buffer
                                  slimaudio_buffer_v
                                  slimaudio_decoder
                                  slimaudio_decoder_r
                                  slimaudio_decoder_v
                                  slimaudio_http
                                  slimaudio_http_v
                                  slimaudio_output
                                  slimaudio_output_v