aboutsummaryrefslogtreecommitdiff
path: root/audio/jamulus
diff options
context:
space:
mode:
authorB. Watson <yalhcru@gmail.com>2021-12-07 13:05:17 -0500
committerWilly Sudiarto Raharjo <willysr@slackbuilds.org>2021-12-10 08:37:37 +0700
commitb57e04419b408c72bde993da3b6e0bf9cf6dae78 (patch)
tree5c6a5c27374ccacde2ac8cd40475ff9389ade33c /audio/jamulus
parenta79a62e75bed339ca0067ad5fbaa8d6947e2a2a1 (diff)
audio/jamulus: Updated for version 3.8.1.
Signed-off-by: B. Watson <yalhcru@gmail.com> Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
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.1x277
-rw-r--r--audio/jamulus/jamulus.SlackBuild90
-rw-r--r--audio/jamulus/jamulus.info8
-rw-r--r--audio/jamulus/slack-desc2
6 files changed, 363 insertions, 43 deletions
diff --git a/audio/jamulus/SERVER.txt b/audio/jamulus/SERVER.txt
index f226442b0802f..85167f295b4cb 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 5fb28930db0b9..3e5691a052b5b 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 0000000000000..342100b5d302d
--- /dev/null
+++ b/audio/jamulus/jamulus.1x
@@ -0,0 +1,277 @@
+.\" Manual page for jamulus
+.\" Copyright (c) 2021
+.\" mirabilos <tg@debian.org>
+.\" Published under the same terms as jamulus itself.
+.\"-
+.Dd December 7, 2021
+.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 e | Fl \-directoryfile Ar filename
+.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 \-port Ar number
+.Op Fl P | Fl \-delaypan
+.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 Ar channels
+.Op Fl v | Fl \-version
+.Op Fl w | Fl \-welcomemessage Ar message
+.Op Fl z | Fl \-startminimized
+.Op Fl \-clientname Ar name
+.Op Fl \-ctrlmidich Ar MIDISetup
+.Op Fl \-mutemyown
+.Op Fl \-norecord
+.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 addressing (IPv4 is always enabled).
+.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
+make the server public and set its genre by setting the address
+of the directory server 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 f | Fl \-listfilter Ar filter
+.Pq directory server mode only
+whitelist servers 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 public 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 \-port Ar number
+set the local UDP port to use to
+.Ar number
+.Pq default: 22124
+.Op Fl P | Fl \-delaypan
+.Pq server mode only
+start with delay panning enabled.
+.It Fl Q | Fl \-qos Ar value
+set the QoS value. Default is 128. Disable with 0.
+.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 Ar channels
+.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 \-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.
+.Op Fl e | Fl \-directoryfile Ar filename
+.Pq server mode only
+enable server list persistence, set file name.
+.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 \-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 private , public , directory .
+A private server is unlisted, clients can only connect if given
+the address (IP address and port).
+A public server will contact a directory server (whose address must be
+given at server startup) and show up in that server's list; clients
+can retrieve a list of public servers from the directory server.
+Several directory servers are operated by the Jamulus project; there is
+a directory server for each genre, which is how public servers are
+categorised into genres.
+.Sh SEE ALSO
+.Xr qjackctl 1
+.Bl -tag -width Ds
+.It Pa https://jamulus.io/wiki/
+The full Jamulus documentation.
+.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.
+.An B. Watson Aq yalhcru@gmail.com
+modified this man page slightly for the SlackBuilds.org project and
+jamulus 3.8.1.
+.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 seems to assume Legacy IP
+.Pq IPv4 .
diff --git a/audio/jamulus/jamulus.SlackBuild b/audio/jamulus/jamulus.SlackBuild
index a09ed2ec16724..9e7531405dba1 100644
--- a/audio/jamulus/jamulus.SlackBuild
+++ b/audio/jamulus/jamulus.SlackBuild
@@ -6,22 +6,22 @@
# 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
+# 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.8.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 +30,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 +57,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 +77,78 @@ 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 borrowed from Debian and modified slightly (since they
+# don't use 'noupcasename', their binary is called Jamulus).
+# 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
+
+if [ "${SERVERONLY:-no}" != "yes" ]; then
+ # 'make install' puts the SVG icons in the wrong place. also the only
+ # png icon provided is 512x512, ludicrously large.
+ HICOLOR=$PKG/usr/share/icons/hicolor/
+ mkdir -p $HICOLOR/scalable/apps
+ mv $HICOLOR/512x512/apps/*.svg $HICOLOR/scalable/apps
+
+ CVT="convert -background none"
+ for px in 16 32 48 64 128; do
+ size=${px}x${px}
+ dir=$HICOLOR/$size/apps
+ mkdir -p $dir
+ $CVT -resize $size distributions/$PRGNAM.svg $dir/$PRGNAM.png
+ $CVT -resize $size distributions/$PRGNAM-server.svg $dir/$PRGNAM-server.png
+ done
+
+ mkdir -p $PKG/usr/share/pixmaps
+ ln -s ../icons/hicolor/48x48/apps/$PRGNAM.png $PKG/usr/share/pixmaps/$PRGNAM.png
+fi
# NEWS is a 0-byte placeholder in 3.4.3.
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 RELEASE-PROCESS.md TRANSLATING.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 088ae25332690..51774e59179e4 100644
--- a/audio/jamulus/jamulus.info
+++ b/audio/jamulus/jamulus.info
@@ -1,8 +1,8 @@
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.8.1"
+HOMEPAGE="https://jamulus.io/"
+DOWNLOAD="https://github.com/jamulussoftware/jamulus/archive/r3_8_1/jamulus-r3_8_1.tar.gz"
+MD5SUM="1d4fe75560bacdf18987fdbd92260dec"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="jack"
diff --git a/audio/jamulus/slack-desc b/audio/jamulus/slack-desc
index c60183610b5df..22ced12401f66 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: