diff options
Diffstat (limited to 'audio/jamulus')
-rw-r--r-- | audio/jamulus/SERVER.txt | 23 | ||||
-rw-r--r-- | audio/jamulus/doinst.sh | 6 | ||||
-rw-r--r-- | audio/jamulus/jamulus.1x | 320 | ||||
-rw-r--r-- | audio/jamulus/jamulus.SlackBuild | 94 | ||||
-rw-r--r-- | audio/jamulus/jamulus.info | 10 | ||||
-rw-r--r-- | audio/jamulus/slack-desc | 2 |
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: |