audio/jack: Added (realtime low-latency sound server).

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
B. Watson 2020-01-20 06:51:32 +07:00 committed by Willy Sudiarto Raharjo
parent 74f1cb8cc7
commit 0fa512cd35
6 changed files with 266 additions and 0 deletions

31
audio/jack/README Normal file
View File

@ -0,0 +1,31 @@
jack (realtime low-latency sound server)
JACK is a system for handling real-time, low latency audio and MIDI.
It can connect a number of different applications to an audio device,
as well as allowing them to share audio between themselves.
Its clients can run in their own processes (ie. as normal apps), or
within the JACK server (ie. as a "plugin"). JACK also has support for
distributing audio processing across a network, both fast & reliable
LANs as well as slower, less reliable WANs.
Note: This build conflicts with jack1: install only one of the two.
JACK's developers recommend not using jack1 at all, although it's still
maintained.
Note: this build was formerly known as jack2. Before installing this,
"removepkg jack2" if you had it installed.
SBo build maintainers, please list jack (not jack1) as a dependency for
your builds. If the software you're trying to build really does work
with jack1 but not jack, please contact the jack maintainer (currently
B. Watson <yalhcru@gmail.com>. Include the build log and any runtime
error messages in your email, plase.
This package uses POSIX filesystem capabilities to execute with
elevated privileges (required for realtime audio processing). This
may be considered a security/stability risk. Please read
http://www.slackbuilds.org/caps/ for more information. To disable
capabilities, pass SETCAP=no to the script.
Optional dependencies are celt, libffado and opus.

123
audio/jack/jack.SlackBuild Normal file
View File

@ -0,0 +1,123 @@
#!/bin/sh
# Slackware build script for "jack2".
# Copyright 2014 Yanes Checcacci Balod <email removed>, Brazil
# Copyright 2014-2015 Marcel Saegebarth <email removed>
# Copyright 2018 B. Watson <yalhcru@gmail.com>
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# 20200118 bkw: renamed from 'jack2' to 'jack'. If you want to see
# the old log: "git log -- audio/jack2"
# 20200112 bkw: get rid of --profile (thanks, dive!), BUILD=2.
# 20191201 bkw: update for v1.9.14 (including new python3 dep).
# 20180714 bkw:
# - Take over maintenance.
# - Update for v1.9.12.
# - Move HTML docs to proper Slackware doc dir.
# - i486 => i586.
PRGNAM=jack
VERSION=${VERSION:-1.9.14}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
SRCNAM=jack2
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i586"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $SRCNAM-$VERSION
tar xvf $CWD/$SRCNAM-$VERSION.tar.gz
cd $SRCNAM-$VERSION
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 {} \+
# Minor source of incompatibility between jack 1.x and 2.x: some jack
# apps don't add -lpthread to their CFLAGS because they assume jack.pc
# will already include it (it does, in 1.x). So make 2 act like 1:
sed -i '/^Libs:/s,$, -lpthread,' jack.pc.in
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./waf configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--mandir=/usr/man/man1 \
--htmldir=/usr/doc/$PRGNAM-$VERSION/html \
--classic \
--dbus \
--alsa
./waf build
./waf install --destdir=$PKG
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
# Only add capability stuff if not disabled:
if [ "${SETCAP:-yes}" = "yes" ]; then
cat $CWD/setcap.sh >> $PKG/install/doinst.sh
# Only allow execution by audio group
chown root:audio $PKG/usr/bin/*
chmod 0750 $PKG/usr/bin/*
fi
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

10
audio/jack/jack.info Normal file
View File

@ -0,0 +1,10 @@
PRGNAM="jack"
VERSION="1.9.14"
HOMEPAGE="http://jackaudio.org/"
DOWNLOAD="https://github.com/jackaudio/jack2/archive/v1.9.14/jack2-1.9.14.tar.gz"
MD5SUM="b63b5cf65fc43ccf9585d274fe91069f"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="python3"
MAINTAINER="B. Watson"
EMAIL="yalhcru@gmail.com"

View File

@ -0,0 +1,67 @@
20200119 bkw: The default jack version on SlackBuilds.org is now 1.9.14,
aka JACK2. The old 0.125.0 version (formerly jack-audio-connection-kit)
is still available as "jack1". The JACK2 build used to be called "jack2",
and has been renamed to simply "jack". SBo maintainers take note: please
don't list jack1 in REQUIRES for your builds. If your build really does
work only with jack1 and fails with jack, please contact me (B. Watson,
yalhcru@gmail.com) and let me know the details.
This information might be helpful in understanding the differences
between jack and jack1.
jack and jack1 are API compatible enough that applications can be built
against either, and in fact most (possibly all?) apps can be built
against one and run with the other with no problems.
jack1 wasn't designed to benefit from multiple CPU cores/threads. It may
(or may not) offer slightly better performance on single-core systems.
jack no longer supports jack1's "-Z" flag.
When using -Xseq with jack, connect your ALSA MIDI devices to the system
"MIDI thru" port, then connect that port to the JACK midi capture
port. This is an extra step that isn't necessary with jack1.
jack stores a persistent "registry" and database in /dev/shm, which
is intended to speed up jack startup and allow multiple jack servers
on the same host to cooperate. There is one small issue with this:
if jackd can't write to /dev/shm/jack_db/, it will fail to start
(segfault). If this happens, make sure jackd is not running, and "rm
-rf /dev/shm/jack*". This only happens when jackd is used by different
users, which means most of us will be unaffected by it. Upstream has
been notified, and a fix is being worked on.
Original README from the old jack2 package has some possibly outdated
info on the differences between 1 and 2:
jackdmp (aka JACK2) is a C++ version of the JACK low-latency audio
server for multi-processor machines. It is a new implementation
of the JACK server core features that aims in removing some
limitations of the JACK1 design. The activation system has been
changed for a data flow model and lock-free programming techniques
for graph access have been used to have a more dynamic and
robust system.
- jackdmp use a new client activation model that allows simultaneous
client execution (on a smp machine) when parallel clients exist
in the graph (client that have the same inputs). This activation model
allows to better use available CPU on a smp machine, but also works
on a mono-processor machine.
- jackdmp use a lock-free way to access (read/write) the client graph,
thus allowing connections/disconnection to be done without
interrupting the audio stream. The result is that
connections/disconnections are glitch-free.
- jackdmp can work in 2 different modes at the server level :
- synchronous activation : in a given cycle, the server waits for
all clients to be finished (similar to normal jackd)
- asynchronous activation : in a given cycle, the server does not
wait for all clients to be finished and use output buffer
computed the previous cycle.
The audible result of this mode is that if a client is not activated
during one cycle, other clients may still run and the resulting audio
stream will still be produced (even if its partial in some way).
This mode usually result in fewer (less audible) audio glitches in a
loaded system.

16
audio/jack/setcap.sh Normal file
View File

@ -0,0 +1,16 @@
if [ -x /sbin/setcap ]; then
bin=(
jackdbus jack_monitor_client jack_latent_client alsa_in
jack_midi_dump jack_showtime jack_rec jack_zombie jack_midiseq
jack_thru jack_connect jack_net_slave jack_bufsize jack_wait
alsa_out jack_freewheel jack_server_control jack_net_master
jack_evmon jack_metro jack_simple_client jack_lsp jack_cpu
jack_control jack_netsource jack_test jack_session_notify
jack_alias jack_iodelay jackd jack_simple_session_client
jack_midisine jack_unload jack_load jack_samplerate
jack_midi_latency_test jack_cpu_load jack_multiple_metro)
for i in ${bin[@]}; do
/sbin/setcap cap_ipc_lock,cap_sys_nice=ep usr/bin/$i
done
fi

19
audio/jack/slack-desc Normal file
View File

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.
# Line up the first '|' above the ':' following the base package name, and
# the '|' on the right side marks the last column you can put a character in.
# You must make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
jack: jack (realtime low-latency sound server)
jack:
jack: JACK is a system for handling real-time, low latency audio and MIDI.
jack: It can connect a number of different applications to an audio device,
jack: as well as allowing them to share audio between themselves.
jack:
jack: Its clients can run in their own processes (ie. as normal apps), or
jack: within the JACK server (ie. as a "plugin"). JACK also has support
jack: for distributing audio processing across a network, both fast &
jack: reliable LANs as well as slower, less reliable WANs.
jack: