summaryrefslogtreecommitdiffstats
path: root/audio/jamulus
diff options
context:
space:
mode:
Diffstat (limited to 'audio/jamulus')
-rw-r--r--audio/jamulus/SERVER.txt23
-rw-r--r--audio/jamulus/doinst.sh6
-rw-r--r--audio/jamulus/jamulus.1x320
-rw-r--r--audio/jamulus/jamulus.SlackBuild94
-rw-r--r--audio/jamulus/jamulus.info10
-rw-r--r--audio/jamulus/slack-desc2
6 files changed, 409 insertions, 46 deletions
diff --git a/audio/jamulus/SERVER.txt b/audio/jamulus/SERVER.txt
index f226442b08..85167f295b 100644
--- a/audio/jamulus/SERVER.txt
+++ b/audio/jamulus/SERVER.txt
@@ -5,12 +5,13 @@ By default, the jamulus binary can function as:
- Headless server (-s and -n options, neither X nor jackd required)
Even though the headless mode doesn't require a running X server,
-it still requires the qt4 and X11 shared libraries. There's no way to
-compile jamulus without these.
+it still requires the Qt5 shared libraries. There's no way to compile
+jamulus without these.
-If you launch jamulus from the desktop start menu, you'll get the client.
-If you want to run a server, you'll have to either run it from the command
-line, or create a different launcher/shortcut for jamulus as a server.
+You can launch jamulus as either a client or a server with GUI from
+the desktop start menu. If you want to run a headless server, you'll
+have to either run it from the command line, or create a different
+launcher/shortcut for jamulus as a headless server (with -n option).
If you want to run a headless server that starts at boot time (like
a regular daemon), currently the best way to do this is to call it
@@ -18,13 +19,19 @@ from /etc/rc.d/rc.local. There's no "daemon" option, so you'll have to
background it with &, and redirect stdout/stderr somewhere (see also
the -l <logfile> option).
+Dedicated server only build
+----------------------------
+
If you *really* want to build a dedicated jamulus server, you can do so
by setting SERVERONLY=yes in the SlackBuild's environment. In this case,
you can ignore the REQUIRES="jack" line in the .info file.
-The resulting jamulus binary will work exactly as the regular jamulus,
-except it doesn't make sound nor accept audio input from your instrument.
-It'll only be useful as a server (with -s and possibly also -n).
+The resulting jamulus binary will work only as a dedicated server.
+It wont't make sound nor accept audio input from your instrument, and
+it won't require X11 shared libraries (though it still does require
+Qt5 shared libs). It'll only be useful as a server, and it'll have to
+be run from the command line, or a shell script (won't show up in your
+desktop start menu).
The *only* reason to ever do this is if you really *really* don't want
to install jack for some reason.
diff --git a/audio/jamulus/doinst.sh b/audio/jamulus/doinst.sh
index 5fb28930db..3e5691a052 100644
--- a/audio/jamulus/doinst.sh
+++ b/audio/jamulus/doinst.sh
@@ -1,3 +1,9 @@
if [ -x /usr/bin/update-desktop-database ]; then
/usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
fi
+
+if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then
+ if [ -x /usr/bin/gtk-update-icon-cache ]; then
+ /usr/bin/gtk-update-icon-cache usr/share/icons/hicolor >/dev/null 2>&1
+ fi
+fi
diff --git a/audio/jamulus/jamulus.1x b/audio/jamulus/jamulus.1x
new file mode 100644
index 0000000000..4f9f4b8933
--- /dev/null
+++ b/audio/jamulus/jamulus.1x
@@ -0,0 +1,320 @@
+.\" Manual page for jamulus
+.\" Copyright (c) 2021
+.\" mirabilos <tg@debian.org>
+.\" Published under the same terms as Jamulus itself.
+.\"-
+.Dd January 12, 2023
+.Dt JAMULUS "1x" "SlackBuilds.org"
+.Os jamulus-3.8.1
+.Sh NAME
+.Nm jamulus
+.Nd real-time collaborative music session
+.Sh SYNOPSIS
+.Nm
+.Op Fl 6 | Fl \-enableipv6
+.Op Fl c | Fl \-connect Ar address
+.Op Fl d | Fl \-discononquit
+.Op Fl e | Fl \-directoryserver Ar hostname
+.Op Fl F | Fl \-fastupdate
+.Op Fl f | Fl \-listfilter Ar filter
+.Op Fl h | Fl \&? | Fl \-help
+.Op Fl i | Fl \-inifile Ar file
+.Op Fl j | Fl \-nojackconnect
+.Op Fl L | Fl \-licence
+.Op Fl l | Fl \-log Ar file
+.Op Fl M | Fl \-mutestream
+.Op Fl m | Fl \-htmlstatus Ar file
+.Op Fl n | Fl \-nogui
+.Op Fl o | Fl \-serverinfo Ar info
+.Op Fl P | Fl \-delaypan
+.Op Fl p | Fl \-port Ar number
+.Op Fl Q | Fl \-qos Ar value
+.Op Fl R | Fl \-recording Ar directory
+.Op Fl s | Fl \-server
+.Op Fl T | Fl \-multithreading
+.Op Fl t | Fl \-notranslation
+.Op Fl u | Fl \-numchannels
+.Op Fl v | Fl \-version
+.Op Fl w | Fl \-welcomemessage Ar message
+.Op Fl z | Fl \-startminimized
+.Op Fl \-centralserver Ar hostname
+.Op Fl \-clientname Ar name
+.Op Fl \-ctrlmidich Ar MIDISetup
+.Op Fl \-directoryfile Ar file
+.Op Fl \-mutemyown
+.Op Fl \-norecord
+.Op Fl \-serverbindip Ar ip
+.Op Fl \-serverpublicip Ar ip
+.Op Fl \-showallservers
+.Op Fl \-showanalyzerconsole
+.Sh DESCRIPTION
+.Nm Jamulus ,
+a low-latency audio client and server, enables musicians to perform real-time
+.Dq jam
+sessions over the internet.
+It is available across multiple platforms, so participants of any field
+can communicate without specialist setup requirements.
+This is not restricted to music, of course; other use
+.Pq perhaps conferencing?
+is also possible.
+.Pp
+One participant starts
+.Nm
+in Server mode, ideally on a dedicated server (virtual) machine;
+all participants start the (graphical) Client which transmits audio
+to the Server, receiving back a mixed stream.
+Use of a metronome is recommended.
+Clients should be connected using ethernet, not wireless, and use
+proper headphone and microphone connections, not Bluetooth.
+The Server should run on a low-latency system, ideally not a VM.
+.Pp
+Running
+.Nm
+without any extra options launches the full graphical Client.
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl 6 | Fl \-enableipv6
+enable IPv6 support
+.It Fl c | Fl \-connect Ar address
+.Pq Client mode only
+connect to the given Server
+.Ar address
+.Pq Ar hostname Ns Op Ar :port
+at startup
+.It Fl d | Fl \-discononquit
+.Pq Server mode only
+disconnect all Clients on quit
+.It Fl e | Fl \-directoryserver Ar hostname
+.Pq Server mode only
+Register the Server with the given Directory by setting the Directory Server Address to use to
+.Ar hostname ;
+see also
+.Fl o ;
+to be a Directory Server, use
+.Dq Li localhost
+.It Fl F | Fl \-fastupdate
+.Pq Server mode only
+use 64 samples frame size mode, which reduces latency if Clients connect with
+.Dq enable small network buffers
+turned on; requires a faster CPU to avoid dropouts and uses more bandwidth to
+connected Clients
+.It Fl \-jsonrpcsecretfile Ar file
+(Server mode only)
+Set the path to a text
+.Ar file
+containing an authentication string for obtaining access to the JSON-RPC API.
+This option is required when
+.Fl \-jsonrpcport
+is used.
+.It Fl \-jsonrpcport Ar port
+(Server mode only)
+Enables JSON-RPC API server to control the application, set the TCP
+.Ar port
+number.
+This API is
+.Em experimental
+and may change.
+It is only accessible from localhost.
+Please refer to the JSON-RPC API Documentation.
+.It Fl f | Fl \-listfilter Ar filter
+.Pq Directory mode only
+whitelist which Servers are allowed to register on the server list;
+.Ar filter
+must consist of semicolon-separated IP addresses
+.It Fl h | Fl \&? | Fl \-help
+display a short help text and exit immediately
+.It Fl i | Fl \-inifile Ar file
+.Pq Client and non-headless Server mode only
+override default initialisation file with
+.Ar file
+.It Fl j | Fl \-nojackconnect
+.Pq Client mode only
+do not automatically connect to JACK
+.It Fl L | Fl \-licence
+.Pq Server mode only
+require Clients to accept the agreement shown in the welcome message
+.Pq use Fl w No to set the text
+before they are allowed joining
+.It Fl l | Fl \-log Ar file
+.Pq Server mode only
+enable logging to
+.Ar file
+.It Fl M | Fl \-mutestream
+.Pq Client mode only
+start in muted state
+.It Fl m | Fl \-htmlstatus Ar file
+.Pq Server mode only
+write Server status and list of connected Clients, in HTML format, to
+.Ar file
+periodically
+.It Fl n | Fl \-nogui
+disable the GUI
+.It Fl o | Fl \-serverinfo Ar info
+.Pq Registered Servers only
+set Server location details, formatted as
+.Sm off
+.Xo
+.Ar name Li \&;
+.Ar city Li \&;
+.Ar locale
+.Xc
+.Sm on
+where
+.Ar locale
+is the numeric value of a
+.Li QLocale ;
+see
+.Pa https://doc.qt.io/qt\-5/qlocale.html#Country\-enum
+for a list
+.It Fl P | Fl \-delaypan
+.Pq Server mode only
+start with delay panning enabled
+.It Fl p | Fl \-port Ar number
+set the local UDP port to use to
+.Ar number
+.Pq default: 22124
+.It Fl Q | Fl \-qos Ar value
+set QoS
+.Ar value
+.Pq iptos byte
+to use
+.Pq default: 128
+.It Fl R | Fl \-recording Ar Directory
+.Pq Server mode only
+enable recording
+.Pq but see Fl \-norecord
+storing tracks in
+.Ar Directory
+.It Fl s | Fl \-server
+start in Server mode
+.It Fl T | Fl \-multithreading
+.Pq Server mode only
+use multithreading to make better use of multi-core CPUs and
+support more Clients
+.It Fl t | Fl \-notranslation
+disable translations, use built-in English strings
+.It Fl u | Fl \-numchannels
+.Pq Server mode only
+set maximum number of channels
+.Pq and , therefore , users ;
+default is 10, maximum is 150
+.It Fl v | Fl \-version
+display version information and exit immediately
+.It Fl w | Fl \-welcomemessage Ar message
+.Pq Server mode only
+show
+.Ar message
+.Pq may contain HTML and inline CSS
+to users on connect
+.It Fl z | Fl \-startminimized
+.Pq Server mode only
+start with minimised window
+.It Fl \-centralserver Ar hostname
+.Pq Server mode only
+deprecated alias for
+.Fl \-directoryserver
+.It Fl \-clientname Ar name
+.Pq Client mode only
+set window title and JACK client name
+.It Fl \-ctrlmidich Ar MIDISetup
+.Pq Client mode only
+set MIDI controller channel to listen on, control number offset and
+consecutive CC numbers (channels); format:
+.Sm off
+.Xo
+.Ar channel
+.Op Li \&;f Ar off Li \&* Ar nchans
+.Op Li \&;p Ar off Li \&* Ar nchans
+.Op Li \&;s Ar off Li \&* Ar nchans
+.Op Li \&;m Ar off Li \&* Ar nchans
+.Xc
+.Sm on
+.Pp
+The first semicolon-separated element sets the MIDI channel
+.Nm
+listens on for control messages.
+The other elements specify the items to control by their
+first literal letter (f\ =\ volume fader, p\ =\ pan, m\ =\ mute,
+s\ =\ solo) directly followed by the offset (CC number) to start from,
+a literal asterisk, and the amount of consecutive CC numbers to assign.
+Fader strips in the mixer window are controlled in ascending order from
+left to right.
+.Nm
+does not provide feedback as to the current state of the Solo and Mute
+buttons so the controller must track and signal their state locally.
+.It Fl \-directoryfile Ar file
+.Pq Directory mode only
+remember registered Servers even if the Directory is restarted
+.It Fl \-mutemyown
+.Pq headless Client only
+mute my channel in my personal mix
+.It Fl \-norecord
+.Pq Server mode only
+do not automatically start recording even if configured with
+.Fl R
+.It Fl \-serverbindip Ar ip
+.Pq Server mode only
+configure Legacy IP address to bind to
+.It Fl \-serverpublicip Ar ip
+.Pq Server mode only
+configure public legacy IP address when both the Directory Server
+and the actual Server are situated behind the same NAT, so that
+Clients can connect
+.It Fl \-showallservers
+.Pq Client mode only
+show all registered Servers in the serverlist regardless whether a ping
+to the Server is possible or not
+.Pq debugging command
+.It Fl \-showanalyzerconsole
+.Pq Client mode only
+show analyser console to debug network buffer properties
+.Pq debugging command
+.El
+.Pp
+Note that the debugging commands are not intended for general use.
+.Pp
+.Nm Jamulus
+knows four modes of operation: Client mode and three kinds of Server
+.Pq Unregistered, Registered, Directory.
+A Unregistered Server is unlisted, Clients can only connect if given
+the address (IP address and port).
+A Registered Server will contact a Directory (whose address must be
+given at Server startup) and show up in that Server's list; Clients
+can retrieve a list of Registered Servers from the Directory Server.
+Several Registered Directories are operated by the Jamulus project;
+there is a Directory for each genre, which is how Registered Jamulus
+Servers are categorised into genres.
+.Sh SEE ALSO
+.Xr qjackctl 1
+.Bl -tag -width Ds
+.It Pa https://jamulus.io/wiki/Software\-Manual
+online handbook
+.It Pa https://jamulus.io/wiki/FAQ
+frequently asked questions
+.It Pa https://jamulus.io/wiki/Running\-a\-Server
+documentation on Server configuration and types
+.It Pa https://jamulus.io/wiki/Server\-Linux#running\-in\-registered\-mode
+current list of Directory Servers operated by the Jamulus project,
+controlling the
+.Dq genre
+.It Pa https://jamulus.io/wiki/Tips\-Tricks\-More
+verbose
+.Fl \-ctrlmidich
+documentation and other more or less useful information
+.It Pa https://github.com/jamulussoftware/jamulus/blob/master/docs/JSON\-RPC.md
+JSON-RPC API Documentation (see
+.Fl \-jsonrpcport
+above)
+.El
+.Sh AUTHORS
+.An -nosplit
+.An mirabilos Aq tg@debian.org
+wrote this manual page for the Debian project,
+but it may be used elsewhere as well.
+.Sh BUGS
+This manual page was derived from the source code and summarises
+some of the information from the website, but it could be more helpful.
+.Pp
+Some of the networking code assumes Legacy IP
+.Pq IPv4 .
diff --git a/audio/jamulus/jamulus.SlackBuild b/audio/jamulus/jamulus.SlackBuild
index a09ed2ec16..4b997610bc 100644
--- a/audio/jamulus/jamulus.SlackBuild
+++ b/audio/jamulus/jamulus.SlackBuild
@@ -2,26 +2,27 @@
# Slackware build script for jamulus
-# Written by B. Watson (yalhcru@gmail.com)
+# Written by B. Watson (urchlay@slackware.uk)
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
-# Possible TODOs:
-# - write a man page
-# - have slack-desc show whether or not SERVERONLY=yes
+# 20230112 bkw: update for v3.9.1.
+# 20211207 bkw:
+# - update for v3.8.1.
+# - add 'headless' option to SERVERONLY=yes config.
+# - new-style icons.
+# - man page.
+# - dynamic slack-desc.
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=jamulus
-VERSION=${VERSION:-3.4.3}
+VERSION=${VERSION:-3.9.1}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
-# I hate capitalized package names, so:
-SRCNAM=Jamulus
-
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
@@ -30,9 +31,6 @@ if [ -z "$ARCH" ]; then
esac
fi
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
exit 0
@@ -60,7 +58,7 @@ set -e
# Check this before doing anything else.
if [ "${SERVERONLY:-no}" = "yes" ]; then
- EXTRACONF="CONFIG+=nosound"
+ EXTRACONF="CONFIG+=nosound CONFIG+=headless"
elif ! pkg-config --exists jack; then
cat <<EOF
@@ -80,45 +78,77 @@ EOF
exit 1
fi
+TARVER=r"${VERSION//./_}"
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
-rm -rf $SRCNAM$VERSION
-tar xvf $CWD/$SRCNAM-$VERSION.tar.gz
-cd $SRCNAM$VERSION
+rm -rf $PRGNAM-$TARVER
+tar xvf $CWD/$PRGNAM-$TARVER.tar.gz
+cd $PRGNAM-$TARVER
chown -R root:root .
+find -L . -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \
+ \! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+
-# permissions are gross, nonstandard find needed here:
-find -L . -type d -a -exec chmod 755 {} \+ -o \
- -type f -a \! -perm 644 -a -exec chmod 644 {} \+
-
-qmake-qt5 "CONFIG+=noupcasename" $EXTRACONF \
+qmake-qt5 \
+ "CONFIG+=noupcasename" \
+ $EXTRACONF \
QMAKE_CFLAGS="$SLKCFLAGS" QMAKE_CXXFLAGS="$SLKCFLAGS" \
- $SRCNAM.pro
+ PREFIX=/usr \
+ Jamulus.pro
make clean
make
+make install INSTALL_ROOT=$PKG
-# No 'make install' target, so:
-mkdir -p $PKG/usr/bin $PKG/usr/share/applications $PKG/usr/share/pixmaps
-install -s -m0755 $PRGNAM $PKG/usr/bin/
-install -m0644 src/res/$PRGNAM.desktop $PKG/usr/share/applications/
+# binary already stripped.
-# The png icons provided are tiny, but the OSX icon is big enough
-# to actually see, so I extracted the 256x256 version & include
-# it with the build.
-cat $CWD/$PRGNAM.png > $PKG/usr/share/pixmaps/$PRGNAM.png
+# Man page taken from the sourceand modified slightly.
+# Had to make the man page a "1x" instead of "1": It uses BSD macros
+# (see groff_mdoc(7)). If I made it a "1" man page, it would say
+# "BSD General Commands Manual" unconditionally (no way to force it
+# to say "SlackBuilds.org" or even "General Commands Manual").
+mkdir -p $PKG/usr/man/man1
+gzip -9c < $CWD/$PRGNAM.1x > $PKG/usr/man/man1/$PRGNAM.1x.gz
+rm -rf $PKG/usr/share/man # original page (in wrong place)
+
+if [ "${SERVERONLY:-no}" != "yes" ]; then
+ # The only png icon provided is 512x512, ludicrously large, make smaller ones.
+ # Note to self: use rsvg-convert rather than ImageMagick's convert, because
+ # IM behaves differently depending on whether inkscape is installed. It
+ # wouldn't really hurt anything, I just want to be consistent.
+ HICOLOR=$PKG/usr/share/icons/hicolor/
+ ICNAME=io.jamulus.jamulus
+
+ for px in 16 32 48 64 128; do
+ size=${px}x${px}
+ dir=$HICOLOR/$size/apps
+ mkdir -p $dir
+ CVT="rsvg-convert --width=$px --height=$px"
+ $CVT src/res/$ICNAME.svg > $dir/$ICNAME.png
+ $CVT src/res/${ICNAME}server.svg > $dir/${ICNAME}server.png
+ done
+
+ mkdir -p $PKG/usr/share/pixmaps
+ ln -s ../icons/hicolor/48x48/apps/$ICNAME.png $PKG/usr/share/pixmaps/$PRGNAM.png
+fi
-# NEWS is a 0-byte placeholder in 3.4.3.
+# NEWS is a 0-byte placeholder in 3.4.3... and nonexistent in 3.9.1
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
-cp -a AUTHORS COPYING ChangeLog $PKG/usr/doc/$PRGNAM-$VERSION
+cp -a COPYING ChangeLog CONTRIBUTING.md README.md SECURITY.md \
+ $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
# Include our own (hopefully) helpful hints for servers.
cat $CWD/SERVER.txt > $PKG/usr/doc/$PRGNAM-$VERSION/SERVER.txt
+if objdump -p $PKG/usr/bin/$PRGNAM | grep -q 'NEEDED.*libjack'; then
+ DESC="full client and server"
+else
+ DESC="headless server only"
+fi
+
mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
+sed "s,@DESC@,$DESC," $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh
# Only add capability stuff if not disabled:
diff --git a/audio/jamulus/jamulus.info b/audio/jamulus/jamulus.info
index 088ae25332..bb162de233 100644
--- a/audio/jamulus/jamulus.info
+++ b/audio/jamulus/jamulus.info
@@ -1,10 +1,10 @@
PRGNAM="jamulus"
-VERSION="3.4.3"
-HOMEPAGE="http://llcon.sourceforge.net/"
-DOWNLOAD="https://downloads.sourceforge.net/project/llcon/Jamulus/3.4.3/Jamulus-3.4.3.tar.gz"
-MD5SUM="fa0f73b1d4e2fdbeb230899f1b2d0f0e"
+VERSION="3.9.1"
+HOMEPAGE="https://jamulus.io/"
+DOWNLOAD="https://github.com/jamulussoftware/jamulus/archive/r3_9_1/jamulus-r3_9_1.tar.gz"
+MD5SUM="9c529cbc90824d5c891100b8c0d335aa"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="jack"
MAINTAINER="B. Watson"
-EMAIL="yalhcru@gmail.com"
+EMAIL="urchlay@slackware.uk"
diff --git a/audio/jamulus/slack-desc b/audio/jamulus/slack-desc
index c60183610b..22ced12401 100644
--- a/audio/jamulus/slack-desc
+++ b/audio/jamulus/slack-desc
@@ -13,7 +13,7 @@ jamulus: sessions over the internet. There is one server running the Jamulus
jamulus: server software which collects the audio data from each Jamulus
jamulus: client, mixes the audio data and sends the mix back to each client.
jamulus:
-jamulus:
+jamulus: This package contains the @DESC@.
jamulus:
jamulus:
jamulus: