# Maintainer: David Runge # Contributor: Lieven Moors pkgbase=x42-plugins pkgname=(x42-plugins x42-plugins-lv2 x42-plugins-standalone) pkgver=20230512 pkgrel=1 pkgdesc="Professional audio processing units available as LV2-plugin and JACK-application" arch=(x86_64) url="https://x42-plugins.com/x42/" license=( GPL2 GPL3 ) makedepends=( cairo fftw ftgl gendesk glib2 glu help2man jack liblo libltc libsamplerate libsndfile lv2 pango ttf-dejavu zita-convolver ) checkdepends=( kxstudio-lv2-extensions lv2lint ) source=( https://gareus.org/misc/$pkgname/$pkgname-$pkgver.tar.xz $pkgname.png::https://x42-plugins.com/x42/static/img/x42.png $pkgname.directory $pkgname.menu ) sha512sums=('cec686ad04905c0df6df3519580564381920db78d4be9c4548442d7620537a0a36b8b0d8fe365bbf3be26297ca82491da26fb4157d63137707b268beb1bf8569' '956fdd8e04c846d06a5267d1748916744418e0ddfce0ac2e9dd3a1c1376aea61499177af80709d9fe78f8c0c2ddcbf9f9e5b2e413adc9a7eca9b648a87ad4860' 'fef75b22b2c1fed8586af4dfd01ea291a7c1506e80ce384f05f13dc04c4b7e3e934003c20d89ae94f36ad1021b7ad75097da836ca30ee965b4107b559305b496' '411015b0feb8a289272cb821afa7e2a284d3e9d994a446baa73b3a6ce0f0ebd1e94c4cb3392a0afb1d741ce6d8b2d14c9bd124a0684b830275b4ba8e14680aa3') b2sums=('5d641d9fb447c629a832175ad4db228ee2ea08ddbf091571714b62505691cc65ceeaf79ae4c09d288064d9babb8c33441b92e4d1cebb1f8f35d3ec2aa6d4d25c' '35a8cfcdf7f8c57ba655049a6d75b3bf9d253c25702a3f191d3f6cab215887f7de5025d025993861ae88c1b4daae132e9cc1ddf083e5b822f1b53a683c0fcaa3' 'fb6557cd2e8b83dae1cb38503f2a72093085ddcc0a4ba2e5e0375f7063b83b3fb4180091ce10524cd336eeb33cffed45ada93055b960c9189f83d664216b33ee' '9c695f58099fcbfdce3e693e491d851ff7894a650ea12e079894176ef054b5f592785467c286bd8feaa340fdcdfb53d930b3a44ea890112e3fc1a4d172beb243') _names=( darc dpl fat1 fil4 matrixmixer8x8 meter mixtri phaserotate scope spectr stepseq tuna ) _pick() { local p="$1" f d; shift for f; do d="$srcdir/$p/${f#$pkgdir/}" mkdir -p "$(dirname "$d")" mv "$f" "$d" rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")" done } prepare() { declare -A comments=( ["darc"]="A general purpose audio signal compressor" ["dpl"]="Look-ahead digital peak limiter intended but not limited to the final step of mastering or mixing" ["fat1"]="Auto-tuner based on Fons Adriaensen's zita-at1" ["fil4"]="4 band parametric equalizer with additional low+high shelf filters, Low and High-pass" ["matrixmixer8x8"]="Matrix Mixer 8x8" ["mixtri"]="Matrix mixer and trigger processor" ["phaserotate"]="Audio Phase rotate" ["scope"]="Simple audio oscilloscope with variable time scale, triggering, cursors and numeric readout" ["spectr"]="Spectrum Analyzer" ["stepseq"]="Simple step sequencer for moddevices.com" ) declare -A generic=( ["darc"]="Dynamic Audio Range Compressor" ["dpl"]="Peak Limiter" ["fat1"]="Auto Tune" ["fil4"]="Parametric Equalizer" ["matrixmixer8x8"]="Matrix Mixer" ["mixtri"]="Mixer'n'Trigger" ["phaserotate"]="Phase Rotation" ["scope"]="Oscilloscope" ["spectr"]="Spectrum Analyzer" ["stepseq"]="Step Sequencer" ) declare -A meter_types=( [0]='EBU R128 Meter' [1]='K20/RMS Meter (Stereo)' [2]='K14/RMS Meter (Stereo)' [3]='K12/RMS Meter (Stereo)' [4]='BBC Meter (Stereo)' [5]='BBC M-6' [6]='DIN Meter (Stereo)' [7]='EBU Meter (Stereo)' [8]='Nordic Meter (Stereo)' [9]='VU Meter (Stereo)' [10]='True-Peak and RMS Meter (Stereo)' [11]='DR-14 - Crest Factor Loudness Range Meter' [12]='Stereo Phase-Correlation Meter' [13]='Goniometer' [14]='Phase/Frequency Wheel' [15]='1/3 Octave Spectrum Analyzer' [16]='Stereo/Frequency Scope' [17]='Signal Distribution Histogram' [18]='Bit Meter' [19]='Surround Level 8' ) declare -A tuna_types=( [0]='Instrument Tuner' [1]='Instrument Tuner (Spectrum)' ) # XDG desktop files for name in "${_names[@]}"; do case "$name" in meter) for type in {0..19}; do gendesk -n -f \ --pkgname "com.x42_plugins.x42_meter_$type" \ --name "x42-meter ${meter_types[$type]}" \ --pkgdesc "${meter_types[$type]}" \ --exec "x42-meter $type" \ --icon "x42-meter" \ --genericname "Audio Meter" done ;; tuna) for type in {0,1}; do gendesk -n -f \ --pkgname "com.x42_plugins.x42_${name}_$type" \ --name "x42-${name} ${tuna_types[$type]}" \ --pkgdesc "${tuna_types[$type]}" \ --exec "x42-$name $type" \ --icon "x42-$name" \ --genericname "Music Instrument Tuner" done ;; *) gendesk -n -f \ --pkgname "com.x42_plugins.x42_$name" \ --name "x42-$name" \ --pkgdesc "${comments[$name]}" \ --exec "x42-$name" \ --icon "x42-$name" \ --genericname "${generic[$name]}" ;; esac done sed -e '/Categories/d' -i *.desktop cd $pkgname-$pkgver # moving images to correct location so installation is not such a hassle later on mv -v fat1.lv2/img/x42{_,-}fat1.png mv -v fil4.lv2/img/x42{_,-}fil4.png mv -v mixtri.lv2/img/x42{_,-}mixtri.png mv -v meters.lv2/img/x42-meter{s,}.png mv -v matrixmixer.lv2/img/x42-matrixmixer{,8x8}.png } build() { cd $pkgbase-$pkgver # replace ttf-freefont with ttf-liberation export FONTFILE=/usr/share/fonts/TTF/DejaVuSans-Bold.ttf make } check() { local _name _version _convolver _controlfilter _default _meter _midifilter _onsettrigger _sisco _tuna local _controlfilters=( exp invert linearscale lowpass nlog ) local _convolvers=( Mono MonoToStereo Stereo ) local _defaults=( mono stereo ) local _meters=( VUmono VUstereo BBCmono BBCstereo BBCM6 EBUmono EBUstereo DINmono DINstereo NORmono NORstereo COR EBUr128 goniometer spectr30mono spectr30stereo dBTPmono dBTPstereo K12mono K12stereo K14mono K14stereo K20mono K20stereo phasewheel stereoscope dr14mono dr14stereo TPnRMSmono TPnRMSstereo SigDistHist bitmeter surround8 surround5 surround4 surround3 ) local _midifilters=( cctonote channelfilter channelmap chokefilter enforcescale eventblocker keyrange keysplit mapcc mapkeychannel mapkeyscale midichord mididelay mididup midistrum miditranspose monolegato noactivesensing nodup notetocc notetoggle ntapdelay onechannelfilter passthru quantize randvelocity scalecc sostenuto velocitygamma velocityrange velocityscale ) local _onsettriggers=( bassdrum_mono bassdrum_stereo ) local _siscos=( Mono Stereo 3chan 4chan ) local _tunas=( one two ) local _zconvolvers=( Mono CfgMono Stereo CfgStereo MonoToStereo CfgMonoToStereo ) local _url="http://gareus.org/oss/lv2/" cd $pkgbase-$pkgver while IFS=" " read -r _name _version; do echo "lv2lint test for $_name $_version" case "$_name" in controlfilter.lv2 ) for _controlfilter in "${_controlfilters[@]}"; do lv2lint -Mpack -I "$_name/build" "${_url}${_name//.lv2/}#$_controlfilter" done ;; convoLV2 ) for _convolver in "${_convolvers[@]}"; do lv2lint -Mpack -I "$_name/build" "${_url}$_name#$_convolver" done ;; darc.lv2|dpl.lv2|fil4.lv2 ) for _default in "${_defaults[@]}"; do lv2lint -Mpack -I "$_name/build" "${_url}${_name//.lv2/}#$_default" done ;; matrixmixer.lv2 ) lv2lint -Mpack -I "$_name/build" "${_url}${_name//.lv2/}#i8o8" ;; meters.lv2 ) for _meter in "${_meters[@]}"; do lv2lint -Mpack -I "$_name/build" "${_url}${_name//.lv2/}#$_meter" done ;; midifilter.lv2 ) for _midifilter in "${_midifilters[@]}"; do lv2lint -Mpack -I "$_name/build" "${_url}${_name//.lv2/}#$_midifilter" done ;; mixtri.lv2 ) lv2lint -Mpack -I "$_name/build" "${_url}${_name//.lv2/}#lv2" ;; onsettrigger.lv2 ) for _onsettrigger in "${_onsettriggers[@]}"; do lv2lint -Mpack -I "$_name/build" "${_url}${_name//.lv2/}#$_onsettrigger" done ;; sisco.lv2 ) for _sisco in "${_siscos[@]}"; do lv2lint -Mpack -I "$_name/build" "${_url}${_name//.lv2/}#$_sisco" done ;; spectra.lv2 ) lv2lint -Mpack -I "$_name/build" "${_url}${_name//.lv2/}#Mono" ;; stepseq.lv2 ) lv2lint -Mpack -I "$_name/build" "${_url}${_name//.lv2/}#s8n8" ;; tuna.lv2 ) for _tuna in "${_tunas[@]}"; do lv2lint -Mpack -I "$_name/build" "${_url}${_name//.lv2/}#$_tuna" done ;; zconvo.lv2 ) for _zconvolver in "${_zconvolvers[@]}"; do lv2lint -Mpack -I "$_name/build" "${_url}zeroconvolv#$_zconvolver" done ;; robtk ) echo "Toolkit. Skipping..." ;; * ) lv2lint -Mpack -I "$_name/build" "${_url}${_name//.lv2/}" ;; esac done < plugin.versions } package_x42-plugins() { depends=( "x42-plugins-lv2=$pkgver" "x42-plugins-standalone=$pkgver" ) make install DESTDIR="$pkgdir/" PREFIX=/usr -C $pkgbase-$pkgver ( cd "$pkgdir" _pick $pkgbase-lv2 usr/lib/lv2 _pick $pkgbase-standalone usr/bin _pick $pkgbase-standalone usr/share ) } package_x42-plugins-lv2() { pkgdesc+=" - LV2 plugins" depends=( cairo ftgl fftw libfftw3f.so gcc-libs glib2 libgobject-2.0.so glibc libglvnd libltc libltc.so libsamplerate libsamplerate.so libsndfile libsndfile.so libx11 lv2-host pango libpango-1.0.so libpangocairo-1.0.so zita-convolver libzita-convolver.so ) groups=( lv2-plugins pro-audio ) mv -v $pkgname/* "$pkgdir" } package_x42-plugins-standalone() { declare -A _dirs=( ["darc"]="darc.lv2" ["dpl"]="dpl.lv2" ["fat1"]="fat1.lv2" ["fil4"]="fil4.lv2" ["matrixmixer8x8"]="matrixmixer.lv2" ["meter"]="meters.lv2" ["mixtri"]="mixtri.lv2" ["phaserotate"]="phaserotate.lv2" ["scope"]="sisco.lv2" ["spectr"]="spectra.lv2" ["stepseq"]="stepseq.lv2" ["tuna"]="tuna.lv2" ) pkgdesc+=" - JACK standalones" depends=( cairo fftw libfftw3f.so gcc-libs glib2 libgobject-2.0.so glibc hicolor-icon-theme jack libjack.so libglvnd liblo liblo.so libltc libltc.so libx11 pango libpango-1.0.so libpangocairo-1.0.so ) groups=( pro-audio ) mv -v $pkgname/* "$pkgdir" # xdg desktop integration install -vDm 644 ./*.desktop -t "$pkgdir/usr/share/applications/" cd $pkgbase-$pkgver # icons for name in "${_names[@]}"; do install -vDm 644 "${_dirs[$name]}/img/x42-$name.png" -t "$pkgdir/usr/share/icons/hicolor/256x256/apps/" done install -vDm 644 ../$pkgbase.png -t "$pkgdir/usr/share/icons/hicolor/256x256/apps/" # menu integration install -vDm 644 ../$pkgbase.menu -t "$pkgdir/etc/xdg/menus/applications-merged/" install -vDm 644 ../$pkgbase.directory -t "$pkgdir/usr/share/desktop-directories/" } # vim:set ts=2 sw=2 et: