;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015, 2016 Ricardo Wurmus ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer ;;; Copyright © 2015 Andreas Enge ;;; Copyright © 2015 Alex Kost ;;; Copyright © 2015, 2016 Mark H Weaver ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (gnu packages audio) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix utils) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix build-system gnu) #:use-module (guix build-system waf) #:use-module (guix build-system trivial) #:use-module (guix build-system cmake) #:use-module (guix build-system python) #:use-module (gnu packages) #:use-module (gnu packages algebra) #:use-module (gnu packages autotools) #:use-module (gnu packages avahi) #:use-module (gnu packages boost) #:use-module (gnu packages base) #:use-module (gnu packages bison) #:use-module (gnu packages compression) #:use-module (gnu packages curl) #:use-module (gnu packages databases) #:use-module (gnu packages file) #:use-module (gnu packages flex) #:use-module (gnu packages fltk) #:use-module (gnu packages fontutils) #:use-module (gnu packages gettext) #:use-module (gnu packages glib) #:use-module (gnu packages gtk) #:use-module (gnu packages gnome) #:use-module (gnu packages gperf) #:use-module (gnu packages image) #:use-module (gnu packages ncurses) #:use-module (gnu packages qt) #:use-module (gnu packages linux) #:use-module (gnu packages mp3) ;taglib #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages pulseaudio) ;libsndfile, libsamplerate #:use-module (gnu packages python) #:use-module (gnu packages rdf) #:use-module (gnu packages readline) #:use-module (gnu packages webkit) #:use-module (gnu packages xiph) #:use-module (gnu packages xml) #:use-module (gnu packages xorg) #:use-module (gnu packages zip) #:use-module (srfi srfi-1)) (define-public alsa-modular-synth (package (name "alsa-modular-synth") (version "2.1.2") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/alsamodular/ams-" version ".tar.bz2")) (sha256 (base32 "1azbrhpfk4nnybr7kgmc7w6al6xnzppg853vas8gmkh185kk11l0")))) (build-system gnu-build-system) (arguments `(#:configure-flags '("--enable-qt5") #:phases (modify-phases %standard-phases ;; Insert an extra space between linker flags. (add-before 'configure 'add-missing-space (lambda _ (substitute* "configure" (("LIBS\\+=\\$LIBSsave") "LIBS+=\" $LIBSsave\"") (("CFLAGS\\+=\\$CFLAGSsave") "CFLAGS+=\" $CFLAGSsave\"")) #t))))) (inputs `(("alsa-lib" ,alsa-lib) ;; We cannot use zita-alsa-pcmi (the successor of clalsadrv) due to ;; license incompatibility. ("clalsadrv" ,clalsadrv) ("fftw" ,fftw) ("jack" ,jack-1) ("ladspa" ,ladspa) ("liblo" ,liblo) ("qt" ,qt))) (native-inputs `(("pkg-config" ,pkg-config))) (home-page "http://alsamodular.sourceforge.net/") (synopsis "Realtime modular synthesizer and effect processor") (description "AlsaModularSynth is a digital implementation of a classical analog modular synthesizer system. It uses virtual control voltages to control the parameters of the modules. The control voltages which control the frequency e.g. of the VCO (Voltage Controlled Oscillator) and VCF (Voltage Controlled Filter) modules follow the convention of 1V / Octave.") (license license:gpl2))) (define-public aubio (package (name "aubio") (version "0.4.1") (source (origin (method url-fetch) (uri (string-append "http://aubio.org/pub/aubio-" version ".tar.bz2")) (sha256 (base32 "15f6nf76y7iyl2kl4ny7ky0zpxfxr8j3902afvd6ydnnkh5dzmr5")))) (build-system waf-build-system) (arguments `(#:tests? #f ; no check target #:configure-flags '("--enable-fftw3f" "--enable-jack" "--enable-sndfile" "--enable-samplerate" ;; enable compilation with avcodec once available "--disable-avcodec") #:python ,python-2)) (inputs `(("jack" ,jack-1) ("libsndfile" ,libsndfile) ("libsamplerate" ,libsamplerate) ("fftwf" ,fftwf))) (native-inputs `(("pkg-config" ,pkg-config))) (home-page "http://aubio.org/") (synopsis "Library for audio labelling") (description "aubio is a tool designed for the extraction of annotations from audio signals. Its features include segmenting a sound file before each of its attacks, performing pitch detection, tapping the beat and producing MIDI streams from live audio.") (license license:gpl3+))) (define (ardour-rpath-phase major-version) `(lambda* (#:key outputs #:allow-other-keys) (let ((libdir (string-append (assoc-ref outputs "out") "/lib/ardour" ,major-version))) (substitute* "wscript" (("linker_flags = \\[\\]") (string-append "linker_flags = [\"" "-Wl,-rpath=" libdir ":" libdir "/backends" ":" libdir "/engines" ":" libdir "/panners" ":" libdir "/surfaces" ":" libdir "/vamp" "\"]")))) #t)) (define-public ardour (package (name "ardour") (version "4.7") (source (origin (method git-fetch) (uri (git-reference (url "git://git.ardour.org/ardour/ardour.git") (commit version))) (snippet ;; Ardour expects this file to exist at build time. The revision ;; is the output of ;; git describe HEAD | sed 's/^[A-Za-z]*+//' '(call-with-output-file "libs/ardour/revision.cc" (lambda (port) (format port "#include \"ardour/revision.h\" namespace ARDOUR { const char* revision = \"4.7-219-g0e36f8e\" ; }")))) (sha256 (base32 "149gswphz77m3pkzsn2nqbm6yvcfa3fva560bcvjzlgb73f64q5l")) (file-name (string-append name "-" version)))) (build-system waf-build-system) (arguments `(#:configure-flags '("--cxx11") ; required by gtkmm #:phases (modify-phases %standard-phases (add-after 'unpack 'set-rpath-in-LDFLAGS ,(ardour-rpath-phase (version-prefix version 1)))) #:tests? #f ; no check target #:python ,python-2)) (inputs `(("alsa-lib" ,alsa-lib) ("aubio" ,aubio) ("lrdf" ,lrdf) ("boost" ,boost) ("atkmm" ,atkmm) ("cairomm" ,cairomm) ("gtkmm" ,gtkmm-2) ("glibmm" ,glibmm) ("libart-lgpl" ,libart-lgpl) ("libgnomecanvasmm" ,libgnomecanvasmm) ("pangomm" ,pangomm) ("liblo" ,liblo) ("libsndfile" ,libsndfile) ("libsamplerate" ,libsamplerate) ("libxml2" ,libxml2) ("libogg" ,libogg) ("libvorbis" ,libvorbis) ("flac" ,flac) ("lv2" ,lv2) ("vamp" ,vamp) ("curl" ,curl) ("fftw" ,fftw) ("fftwf" ,fftwf) ("jack" ,jack-1) ("serd" ,serd) ("sord" ,sord) ("sratom" ,sratom) ("suil" ,suil) ("lilv" ,lilv) ("redland" ,redland) ("rubberband" ,rubberband) ("taglib" ,taglib) ("python-rdflib" ,python-rdflib))) (native-inputs `(("perl" ,perl) ("pkg-config" ,pkg-config))) (home-page "http://ardour.org") (synopsis "Digital audio workstation") (description "Ardour is a multi-channel digital audio workstation, allowing users to record, edit, mix and master audio and MIDI projects. It is targeted at audio engineers, musicians, soundtrack editors and composers.") (license license:gpl2+))) (define-public azr3 (package (name "azr3") (version "1.2.3") (source (origin (method url-fetch) (uri (string-append "mirror://savannah/ll-plugins/azr3-jack-" version ".tar.bz2")) (sha256 (base32 "18mdw6nc0vgj6k9rsy0x8w64wvzld0frqshrxxbxfj9qi9843vlc")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no check target #:make-flags (list "LV2PEG=ttl2c" (string-append "prefix=" %output) (string-append "pkgdatadir=" %output "/share/azr3-jack")))) (inputs `(("gtkmm" ,gtkmm-2) ("lvtk" ,lvtk) ("jack" ,jack-1) ("lash" ,lash))) (native-inputs `(("pkg-config" ,pkg-config))) (home-page "http://ll-plugins.nongnu.org/azr3/") (synopsis "Tonewheel organ synthesizer") (description "AZR-3 is a port of the free VST plugin AZR-3. It is a tonewheel organ with drawbars, distortion and rotating speakers. The organ has three sections, two polyphonic sections with nine drawbars each and one monophonic bass section with five drawbars. A standalone JACK application and LV2 plugins are provided.") (license license:gpl2))) (define-public calf (package (name "calf") (version "0.0.60") (source (origin (method url-fetch) (uri (string-append "http://calf-studio-gear.org/files/calf-" version ".tar.gz")) (sha256 (base32 "019fwg00jv217a5r767z7szh7vdrarybac0pr2sk26xp81kibrx9")))) (build-system gnu-build-system) (inputs `(("fluidsynth" ,fluidsynth) ("expat" ,expat) ("glib" ,glib) ("gtk" ,gtk+-2) ("cairo" ,cairo) ("lash" ,lash) ("jack" ,jack-1) ("lv2" ,lv2) ("ladspa" ,ladspa) ("fftw" ,fftw))) (native-inputs `(("pkg-config" ,pkg-config))) (native-search-paths (list (search-path-specification (variable "LV2_PATH") (files '("lib/lv2"))))) (home-page "http://calf.sourceforge.net/") (synopsis "Audio plug-in pack for LV2 and JACK environments") (description "Calf Studio Gear is an audio plug-in pack for LV2 and JACK environments. The suite contains lots of effects (delay, modulation, signal processing, filters, equalizers, dynamics, distortion and mastering effects), instruments (SF2 player, organ simulator and a monophonic synthesizer) and tools (analyzer, mono/stereo tools, crossovers).") ;; calfjackhost is released under GPLv2+ ;; The plugins are released under LGPLv2.1+ (license (list license:lgpl2.1+ license:gpl2+)))) (define-public csound (package (name "csound") (version "6.05") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/csound/csound6/Csound" version "/Csound" version ".tar.gz")) (sha256 (base32 "0a1sni6lr7qpwywpggbkp0ia3h9bwwgf9i87gsag8ra2h30v82hd")) (patches (list (search-patch "csound-header-ordering.patch"))))) (build-system cmake-build-system) (arguments ;; Work around this error on x86_64 with libc 2.22+: ;; libmvec.so.1: error adding symbols: DSO missing from command line (if (string-prefix? "x86_64" (or (%current-target-system) (%current-system))) '(#:configure-flags '("-DCMAKE_EXE_LINKER_FLAGS=-lmvec")) '())) (inputs `(("alsa-lib" ,alsa-lib) ("boost" ,boost) ("pulseaudio" ,pulseaudio) ("libsndfile" ,libsndfile) ("liblo" ,liblo) ("ladspa" ,ladspa) ("jack" ,jack-1) ("gettext" ,gnu-gettext))) (native-inputs `(("bison" ,bison) ("flex" ,flex) ("zlib" ,zlib))) (home-page "http://csound.github.io/") (synopsis "Sound and music computing system") (description "Csound is a user-programmable and user-extensible sound processing language and software synthesizer.") (license license:lgpl2.1+))) (define-public clalsadrv (package (name "clalsadrv") (version "2.0.0") (source (origin (method url-fetch) (uri (string-append "http://kokkinizita.linuxaudio.org" "/linuxaudio/downloads/clalsadrv-" version ".tar.bz2")) (sha256 (base32 "0bsacx3l9065gk8g4137qmz2ij7s9x06aldvacinzlcslw7bd1kq")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no "check" target #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))) #:phases (alist-cons-after 'unpack 'patch-makefile-and-enter-directory (lambda _ (substitute* "libs/Makefile" (("/sbin/ldconfig") "true") (("^LIBDIR =.*") "LIBDIR = lib\n")) (chdir "libs") #t) (alist-cons-after 'install 'install-symlink (lambda _ (symlink "libclalsadrv.so" (string-append (assoc-ref %outputs "out") "/lib/libclalsadrv.so.2"))) ;; no configure script (alist-delete 'configure %standard-phases))))) (inputs `(("alsa-lib" ,alsa-lib) ("fftw" ,fftw))) (home-page "http://kokkinizita.linuxaudio.org") (synopsis "C++ wrapper around the ALSA API") (description "clalsadrv is a C++ wrapper around the ALSA API simplifying access to ALSA PCM devices.") (license license:gpl2+))) (define-public mcp-plugins (package (name "mcp-plugins") (version "0.4.0") (source (origin (method url-fetch) (uri (string-append "http://kokkinizita.linuxaudio.org" "/linuxaudio/downloads/MCP-plugins-" version ".tar.bz2")) (sha256 (base32 "06a9r1l85jmg7l1cvc3788mk8ra0xagjfy1rmhw3b80y4n0vlnvc")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; no "check" target #:phases (modify-phases %standard-phases ;; no configure script (delete 'configure) (add-before 'install 'prepare-target-directory (lambda* (#:key outputs #:allow-other-keys) (mkdir-p (string-append (assoc-ref outputs "out") "/lib/ladspa")) #t)) (add-after 'unpack 'override-target-directory (lambda* (#:key outputs #:allow-other-keys) (substitute* "Makefile" (("/usr") (assoc-ref outputs "out"))) #t))))) (home-page "http://kokkinizita.linuxaudio.org") (synopsis "Chorus, phaser, and vintage high-pass and low-pass filters") (description "This package provides various LADSPA plugins. @code{cs_chorus} and @code{cs_phaser} provide chorus and phaser effects, respectively; @code{mvclpf24} provides four implementations of the low-pass filter used in vintage Moog synthesizers; @code{mvchpf24} is based on the voltage-controlled high-pass filter by Robert Moog. The filters attempt to accurately emulate the non-linear circuit elements of their original analog counterparts.") (license license:gpl2+))) (define-public fluidsynth (package (name "fluidsynth") (version "1.1.6") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/fluidsynth/fluidsynth-" version "/fluidsynth-" version ".tar.gz")) (sha256 (base32 "070pwb7brdcn1mfvplkd56vjc7lbz4iznzkqvfsakvgbv68k71ah")))) (build-system gnu-build-system) (arguments `(#:phases (alist-cons-after 'unpack 'remove-broken-symlinks (lambda _ (delete-file-recursively "m4") #t) %standard-phases))) (inputs `(("libsndfile" ,libsndfile) ("alsa-lib" ,alsa-lib) ("jack" ,jack-1) ("ladspa" ,ladspa) ("lash" ,lash) ("readline" ,readline) ("glib" ,glib))) (native-inputs `(("pkg-config" ,pkg-config))) (home-page "http://www.fluidsynth.org/") (synopsis "SoundFont synthesizer") (description "FluidSynth is a real-time software synthesizer based on the SoundFont 2 specifications. FluidSynth reads and handles MIDI events from the MIDI input device. It is the software analogue of a MIDI synthesizer. FluidSynth can also play midifiles using a Soundfont.") (license license:gpl2+))) (define-public faad2 (package (name "faad2") (version "2.7") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/faac/faad2-" version ".zip")) (sha256 (base32 "16f3l16c00sg0wkrkm3vzv0gy3g97x309vw788igs0cap2x1ak3z")))) (build-system gnu-build-system) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake) ("libtool" ,libtool) ("unzip" ,unzip))) (arguments '(#:phases (alist-cons-after 'unpack 'bootstrap (lambda _ (substitute* "bootstrap" (("\r\n") "\n")) (zero? (system* "sh" "bootstrap"))) %standard-phases))) (home-page "http://www.audiocoding.com/faad2.html") (synopsis "MPEG-4 and MPEG-2 AAC decoder") (description "FAAD2 is an MPEG-4 and MPEG-2 AAC decoder supporting LC, Main, LTP, SBR, PS, and DAB+.") (license license:gpl2))) (define-public faust (package (name "faust") (version "0.9.67") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/faudiostream/faust-" version ".zip")) (sha256 (base32 "068vl9536zn0j4pknwfcchzi90rx5pk64wbcbd67z32w0csx8xm1")) (snippet ;; Remove prebuilt library '(delete-file "architecture/android/libs/armeabi-v7a/libfaust_dsp.so")))) (build-system gnu-build-system) (arguments `(#:make-flags (list (string-append "prefix=" (assoc-ref %outputs "out"))) #:tests? #f #:phases (modify-phases %standard-phases ;; no "configure" script (delete 'configure)))) (native-inputs `(("unzip" ,unzip))) (home-page "http://faust.grame.fr/") (synopsis "Signal processing language") (description "Faust is a programming language for realtime audio signal processing.") (license license:gpl2+))) (define-public freepats (package (name "freepats") (version "20060219") (source (origin (method url-fetch) (uri (string-append "http://freepats.zenvoid.org/freepats-" version ".tar.bz2")) (sha256 (base32 "12iw36rd94zirll96cd5k0va7p5hxmf2shvjlhzihcmjaw8flq82")))) (build-system trivial-build-system) (arguments `(#:modules ((guix build utils)) #:builder (begin (use-modules (guix build utils)) (let ((out (string-append %output "/share/freepats"))) (setenv "PATH" (string-append (assoc-ref %build-inputs "bzip2") "/bin:" (assoc-ref %build-inputs "tar") "/bin")) (system* "tar" "xvf" (assoc-ref %build-inputs "source")) (chdir "freepats") ;; Use absolute pattern references (substitute* "freepats.cfg" (("Tone_000") (string-append out "/Tone_000")) (("Drum_000") (string-append out "/Drum_000"))) (mkdir-p out) (copy-recursively "." out))))) (native-inputs `(("tar" ,tar) ("bzip2" ,bzip2))) (home-page "http://freepats.zenvoid.org") (synopsis "GUS compatible patches for MIDI players") (description "FreePats is a project to create a free and open set of GUS compatible patches that can be used with softsynths such as Timidity and WildMidi.") ;; GPLv2+ with exception for compositions using these patches. (license license:gpl2+))) (define-public guitarix (package (name "guitarix") (version "0.34.0") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/guitarix/guitarix2-" version ".tar.bz2")) (sha256 (base32 "0pamaq8iybsaglq6y1m1rlmz4wgbs2r6m24bj7x4fwg4grjvzjl8")))) (build-system waf-build-system) (arguments `(#:tests? #f ; no "check" target #:python ,python-2 #:configure-flags (list ;; Add the output lib directory to the RUNPATH. (string-append "--ldflags=-Wl,-rpath=" %output "/lib") "--cxxflags=-std=c++11"))) (inputs `(("libsndfile" ,libsndfile) ("boost" ,boost) ("avahi" ,avahi) ("eigen" ,eigen) ("lv2" ,lv2) ("lilv" ,lilv) ("ladspa" ,ladspa) ("jack" ,jack-1) ("gtkmm" ,gtkmm-2) ("gtk+" ,gtk+-2) ("webkitgtk/gtk+-2" ,webkitgtk/gtk+-2) ("fftwf" ,fftwf) ("lrdf" ,lrdf) ("zita-resampler" ,zita-resampler) ("zita-convolver" ,zita-convolver))) (native-inputs `(("gperf" ,gperf) ("faust" ,faust) ("intltool" ,intltool) ("gettext" ,gnu-gettext) ("pkg-config" ,pkg-config))) (native-search-paths (list (search-path-specification (variable "LV2_PATH") (files '("lib/lv2"))))) (home-page "http://guitarix.org/") (synopsis "Virtual guitar amplifier") (description "Guitarix is a virtual guitar amplifier running JACK. Guitarix takes the signal from your guitar as a mono-signal from your sound card. The input is processed by a main amp and a rack-section. Both can be routed separately and deliver a processed stereo-signal via JACK. You may fill the rack with effects from more than 25 built-in modules including stuff from a simple noise gate to modulation effects like flanger, phaser or auto-wah.") (license license:gpl2+))) (define-public rakarrack (package (name "rakarrack") (version "0.6.1") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/rakarrack/rakarrack/" "rakarrack-" version "/rakarrack-" version ".tar.bz2")) (sha256 (base32 "1rpf63pdn54c4yg13k7cb1w1c7zsvl97c4qxcpz41c8l91xd55kn")) (modules '((guix build utils))) (snippet '(begin (substitute* '("src/process.C" "src/global.h") (("#include