gnu: python-libxml2, itstool: Provide crash-free variants.
[jackhill/guix/guix.git] / gnu / packages / music.scm
CommitLineData
1b6826d3 1;;; GNU Guix --- Functional package management for GNU
658212eb 2;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
6ec95a00 3;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
e8069d01 4;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
aa0edd3f 5;;; Copyright © 2016 Al McElrath <hello@yrns.org>
6ff5e9ba 6;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
e42ba3da 7;;; Copyright © 2016, 2018 Leo Famulari <leo@famulari.name>
72385c34 8;;; Copyright © 2016, 2017, 2019 Kei Kebreau <kkebreau@posteo.net>
6d3ef286 9;;; Copyright © 2016 John J. Foerch <jjfoerch@earthlink.net>
23319ed6 10;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
47956fa0 11;;; Copyright © 2017 ng0 <ng0@n0.is>
a42619e5 12;;; Copyright © 2017 Rodger Fox <thylakoid@openmailbox.org>
8204ec8d 13;;; Copyright © 2017, 2018, 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
d09e31bd 14;;; Copyright © 2017, 2018 Pierre Langlois <pierre.langlois@gmx.com>
bc27eb3b 15;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
4fa37ce2 16;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
6b445c57 17;;; Copyright © 2018 nee <nee.git@hidamari.blue>
b0dea60c 18;;; Copyright © 2018 Stefan Reichör <stefan@xsteve.at>
4715f92e 19;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
b0c2c5ab 20;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
e029d90f 21;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
1331a6c0 22;;; Copyright © 2019 Gabriel Hondet <gabrielhondet@gmail.com>
455e6a31 23;;; Copyright © 2019 Timotej Lazar <timotej.lazar@araneo.si>
4ee2cce3 24;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays@sdf.lonestar.org>
7fcc2f93 25;;; Copyright © 2019 raingloom <raingloom@protonmail.com>
1b6826d3
RW
26;;;
27;;; This file is part of GNU Guix.
28;;;
29;;; GNU Guix is free software; you can redistribute it and/or modify it
30;;; under the terms of the GNU General Public License as published by
31;;; the Free Software Foundation; either version 3 of the License, or (at
32;;; your option) any later version.
33;;;
34;;; GNU Guix is distributed in the hope that it will be useful, but
35;;; WITHOUT ANY WARRANTY; without even the implied warranty of
36;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
37;;; GNU General Public License for more details.
38;;;
39;;; You should have received a copy of the GNU General Public License
40;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
41
42(define-module (gnu packages music)
43 #:use-module (guix utils)
44 #:use-module (guix packages)
45 #:use-module (guix download)
8e80244a 46 #:use-module (guix git-download)
1b6826d3
RW
47 #:use-module ((guix licenses) #:prefix license:)
48 #:use-module (guix build-system gnu)
f467c352 49 #:use-module (guix build-system ant)
8b9ec354 50 #:use-module (guix build-system cmake)
2394afa4 51 #:use-module (guix build-system meson)
b0c2c5ab 52 #:use-module (guix build-system perl)
821664f1 53 #:use-module (guix build-system python)
bc27eb3b 54 #:use-module (guix build-system scons)
58301682 55 #:use-module (guix build-system glib-or-gtk)
8e80244a 56 #:use-module (guix build-system waf)
87d1b7b0 57 #:use-module (guix build-system trivial)
5703380b 58 #:use-module (guix build-system go)
1b6826d3 59 #:use-module (gnu packages)
7f559045 60 #:use-module (gnu packages admin)
ddfddb0c 61 #:use-module (gnu packages algebra)
91595624 62 #:use-module (gnu packages apr)
c267cc15 63 #:use-module (gnu packages audio)
2d0fd07b 64 #:use-module (gnu packages autotools)
b7367762 65 #:use-module (gnu packages backup)
8b9ec354 66 #:use-module (gnu packages base) ;libbdf
7bac8196 67 #:use-module (gnu packages bash)
1b6826d3 68 #:use-module (gnu packages bison)
b7367762 69 #:use-module (gnu packages boost)
e8069d01 70 #:use-module (gnu packages cdrom)
8b9ec354
RW
71 #:use-module (gnu packages code)
72 #:use-module (gnu packages check)
a7a7186c 73 #:use-module (gnu packages cmake)
8b9ec354 74 #:use-module (gnu packages compression)
d20b7384 75 #:use-module (gnu packages crypto)
aa0edd3f 76 #:use-module (gnu packages curl)
13416a10 77 #:use-module (gnu packages cyrus-sasl)
d20b7384 78 #:use-module (gnu packages datastructures)
1b6826d3 79 #:use-module (gnu packages docbook)
99828fa7 80 #:use-module (gnu packages documentation)
91595624 81 #:use-module (gnu packages emacs)
13416a10 82 #:use-module (gnu packages file)
1b6826d3 83 #:use-module (gnu packages flex)
8e80244a 84 #:use-module (gnu packages fltk)
1b6826d3
RW
85 #:use-module (gnu packages fonts)
86 #:use-module (gnu packages fontutils)
3bf429af 87 #:use-module (gnu packages freedesktop)
72385c34 88 #:use-module (gnu packages game-development)
6260d1a8 89 #:use-module (gnu packages gcc)
aa0edd3f 90 #:use-module (gnu packages gnupg)
1b6826d3
RW
91 #:use-module (gnu packages gettext)
92 #:use-module (gnu packages ghostscript)
ec8da0e2 93 #:use-module (gnu packages gl)
8e80244a 94 #:use-module (gnu packages glib)
c267cc15 95 #:use-module (gnu packages gnome)
a9f847ad 96 #:use-module (gnu packages gpodder)
770305f4 97 #:use-module (gnu packages graphics)
d20b7384 98 #:use-module (gnu packages gstreamer)
1b6826d3
RW
99 #:use-module (gnu packages gtk)
100 #:use-module (gnu packages guile)
7f559045 101 #:use-module (gnu packages haskell)
c267cc15 102 #:use-module (gnu packages image)
1b6826d3 103 #:use-module (gnu packages imagemagick)
6260d1a8 104 #:use-module (gnu packages java)
91595624 105 #:use-module (gnu packages libffi)
d20b7384 106 #:use-module (gnu packages libusb)
7bac8196
LF
107 #:use-module (gnu packages linux) ; for alsa-utils
108 #:use-module (gnu packages lirc)
91595624 109 #:use-module (gnu packages llvm)
c267cc15
RW
110 #:use-module (gnu packages man)
111 #:use-module (gnu packages mp3)
3bf429af 112 #:use-module (gnu packages mpd)
e8069d01 113 #:use-module (gnu packages ncurses)
1b6826d3 114 #:use-module (gnu packages netpbm)
91595624 115 #:use-module (gnu packages pcre)
821664f1 116 #:use-module (gnu packages pdf)
1b6826d3 117 #:use-module (gnu packages perl)
b2961dda 118 #:use-module (gnu packages perl-web)
1b6826d3 119 #:use-module (gnu packages pkg-config)
d20b7384 120 #:use-module (gnu packages protobuf)
d231bb35 121 #:use-module (gnu packages pulseaudio) ;libsndfile
1b6826d3 122 #:use-module (gnu packages python)
1b2f753d 123 #:use-module (gnu packages python-web)
44d10b1f 124 #:use-module (gnu packages python-xyz)
8b9ec354 125 #:use-module (gnu packages qt)
d231bb35 126 #:use-module (gnu packages rdf)
c493679f 127 #:use-module (gnu packages readline)
1b6826d3 128 #:use-module (gnu packages rsync)
21d18113 129 #:use-module (gnu packages sdl)
cd0322a3 130 #:use-module (gnu packages sqlite)
2d0fd07b 131 #:use-module (gnu packages tcl)
1b6826d3 132 #:use-module (gnu packages texinfo)
8f9ac901 133 #:use-module (gnu packages tex)
4ee2cce3 134 #:use-module (gnu packages time)
13416a10 135 #:use-module (gnu packages tls)
1ea29aa0 136 #:use-module (gnu packages version-control)
e8069d01 137 #:use-module (gnu packages video)
8b9ec354 138 #:use-module (gnu packages web)
c30a66de 139 #:use-module (gnu packages wxwidgets)
c267cc15 140 #:use-module (gnu packages xml)
ddfddb0c 141 #:use-module (gnu packages xorg)
c267cc15 142 #:use-module (gnu packages xiph)
5703380b
PN
143 #:use-module (gnu packages golang)
144 #:use-module (gnu packages lua)
2d0fd07b 145 #:use-module ((srfi srfi-1) #:select (last)))
1b6826d3 146
c30a66de
RW
147(define-public aria-maestosa
148 (package
149 (name "aria-maestosa")
0a151351 150 (version "1.4.13")
c30a66de
RW
151 (source (origin
152 (method url-fetch)
153 (uri (string-append "mirror://sourceforge/ariamaestosa/ariamaestosa/"
154 version "/AriaSrc-" version ".tar.bz2"))
155 (sha256
156 (base32
0a151351 157 "1cs3z6frx2ch7rm5ammx9p0rxcjrbj1vq14hvcbimpaw39rdsn3d"))))
30812446 158 (build-system scons-build-system)
c30a66de
RW
159 (arguments
160 `(#:tests? #f ;no tests
20e42d1e
DM
161 #:scons-flags
162 (list (string-append "prefix=" (assoc-ref %outputs "out")))
30812446 163 #:scons ,scons-python2
c30a66de 164 #:phases
c30a66de
RW
165 (modify-phases %standard-phases
166 (delete 'configure)
167 (add-after 'unpack 'scons-propagate-environment
168 (lambda _
169 ;; By design, SCons does not, by default, propagate
170 ;; environment variables to subprocesses. See:
171 ;; <http://comments.gmane.org/gmane.linux.distributions.nixos/4969>
172 ;; Here, we modify the SConstruct file to arrange for
173 ;; environment variables to be propagated.
174 (substitute* "SConstruct"
175 (("env = Environment\\(\\)")
176 "env = Environment(ENV=os.environ)")
177 ;; Scons errors out when copying subdirectories from Resources,
178 ;; so we move them instead.
179 (("Copy") "Move")
180 ;; We move the "score" and "Documentation" directories at once,
181 ;; so we have to ignore files contained therein.
182 (("if \".svn\" in file" line)
183 (string-append line
184 " or \"score/\" in file"
185 " or \"Documentation/\" in file")))
186 #t))
30812446 187 (add-after 'install 'fix-directory-permissions
c30a66de
RW
188 (lambda* (#:key outputs #:allow-other-keys)
189 (let ((out (assoc-ref outputs "out")))
30812446
DM
190 (chmod (string-append out "/share/Aria/Documentation") #o555)
191 (chmod (string-append out "/share/Aria/score") #o555)
192 #t))))))
c30a66de
RW
193 (inputs
194 `(("wxwidgets" ,wxwidgets)
195 ("glib" ,glib)
196 ("alsa-lib" ,alsa-lib)))
197 (native-inputs
30812446 198 `(("pkg-config" ,pkg-config)))
c30a66de
RW
199 (home-page "http://ariamaestosa.sourceforge.net/")
200 (synopsis "MIDI sequencer and editor")
201 (description
202 "Aria Maestosa is a MIDI sequencer and editor. It lets you compose, edit
203and play MIDI files with a few clicks in a user-friendly interface offering
204score, keyboard, guitar, drum and controller views.")
205 (license license:gpl3+)))
206
d20b7384
PL
207;; We don't use the latest release because it depends on Qt4. Instead we
208;; download the sources from the tip of the "qt5" branch.
209(define-public clementine
8a6d16b8
PL
210 (let ((commit "4619a4c1ab3b17b13d4b2327ad477912917eaf36")
211 (revision "2"))
d20b7384
PL
212 (package
213 (name "clementine")
8a6d16b8 214 (version (git-version "1.3.1" revision commit))
d20b7384
PL
215 (source (origin
216 (method git-fetch)
217 (uri (git-reference
218 (url "https://github.com/clementine-player/Clementine.git")
219 (commit commit)))
8a6d16b8 220 (file-name (git-file-name name version))
d20b7384
PL
221 (sha256
222 (base32
8a6d16b8 223 "1hximk3q0p8nw8is5w7215xgkb7k4flnfyr0pdz9svfwvcm05w1i"))
d20b7384
PL
224 (modules '((guix build utils)))
225 (snippet
6cbee49d
MW
226 '(begin
227 (for-each
d20b7384
PL
228 (lambda (dir)
229 (delete-file-recursively
6cbee49d 230 (string-append "3rdparty/" dir)))
d20b7384 231 (list
6cbee49d
MW
232 ;; TODO: The following dependencies are still bundled:
233 ;; - "qxt": Appears to be unmaintained upstream.
234 ;; - "qsqlite"
235 ;; - "qtsingleapplication"
236 ;; - "qocoa"
237 ;; - "qtiocompressor"
238 ;; - "gmock": The tests crash when using our googletest
239 ;; package instead of the bundled gmock.
240 "SPMediaKeyTap"
241 "fancytabwidget"
242 "google-breakpad"
243 "libmygpo-qt"
244 "libmygpo-qt5"
245 "libprojectm"
246 "qtwin"
247 "sha2" ;; Replaced by openssl.
248 "taglib"
249 "tinysvcmdns"))
250 #t))
af414f34 251 (patches (search-patches "clementine-use-openssl.patch"
7bcc3405
PL
252 "clementine-remove-crypto++-dependency.patch"
253 "clementine-fix-sqlite.patch"))))
d20b7384
PL
254 (build-system cmake-build-system)
255 (arguments
256 '(#:test-target "clementine_test"
257 #:configure-flags
af414f34
PL
258 (list ;; Requires unpackaged "projectm"
259 "-DENABLE_VISUALISATIONS=OFF"
260 ;; Otherwise it may try to download a non-free library at run-time.
261 ;; TODO In an origin snippet, remove the code that performs the
262 ;; download.
263 "-DHAVE_SPOTIFY_DOWNLOADER=FALSE"
264 "-DUSE_SYSTEM_SHA2=TRUE")
d20b7384
PL
265 #:phases
266 (modify-phases %standard-phases
267 (add-after 'install 'wrap-program
268 (lambda* (#:key inputs outputs #:allow-other-keys)
269 (let ((out (assoc-ref outputs "out"))
270 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
271 (wrap-program (string-append out "/bin/clementine")
272 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path)))
273 #t))))))
274 (native-inputs
275 `(("gettext" ,gettext-minimal)
276 ("pkg-config" ,pkg-config)
277 ("qtlinguist" ,qttools)))
278 (inputs
279 `(("boost" ,boost)
280 ("chromaprint" ,chromaprint)
d20b7384
PL
281 ("fftw" ,fftw)
282 ("glib" ,glib)
283 ("glu" ,glu)
284 ("gstreamer" ,gstreamer)
285 ("gst-plugins-base" ,gst-plugins-base)
8473f802
LF
286 ("gst-plugins-good" ,gst-plugins-good)
287 ("gst-libav" ,gst-libav)
d20b7384
PL
288 ("libcdio" ,libcdio)
289 ("libmygpo-qt" ,libmygpo-qt)
d20b7384
PL
290 ;; TODO: Package libgpod.
291 ("libmtp" ,libmtp)
292 ("libxml2" ,libxml2)
293 ("openssl" ,openssl)
294 ("protobuf" ,protobuf)
295 ("pulseaudio" ,pulseaudio)
296 ("qtbase" ,qtbase)
297 ("qtx11extras" ,qtx11extras)
f09e8abc 298 ("sqlite" ,sqlite-with-column-metadata)
d20b7384
PL
299 ("sparsehash" ,sparsehash)
300 ("taglib" ,taglib)))
88491097 301 (home-page "https://clementine-player.org")
d20b7384
PL
302 (synopsis "Music player and library organizer")
303 (description "Clementine is a multiplatform music player. It is inspired
304by Amarok 1.4, focusing on a fast and easy-to-use interface for searching and
305playing your music.")
306 (license (list
307 ;; clementine and qtiocompressor are under GPLv3.
308 license:gpl3+
309 ;; gmock is under BSD-3.
310 license:bsd-3
311 ;; qxt is under CPL1.0.
312 license:cpl1.0
313 ;; qsqlite and qtsingleapplication are under LGPL2.1+.
314 license:lgpl2.1+
315 ;; qocoa is under MIT and CC by-sa for the icons.
316 license:cc-by-sa3.0)))))
317
e8069d01
PW
318(define-public cmus
319 (package
320 (name "cmus")
455e6a31 321 (version "2.8.0")
e8069d01 322 (source (origin
4e829468
RW
323 (method git-fetch)
324 (uri (git-reference
325 (url "https://github.com/cmus/cmus.git")
326 (commit (string-append "v" version))))
327 (file-name (git-file-name name version))
e8069d01
PW
328 (sha256
329 (base32
455e6a31 330 "1ydnvq13ay8b8mfmmgwi5qsgyf220yi1d01acbnxqn775dghmwar"))))
e8069d01
PW
331 (build-system gnu-build-system)
332 (arguments
333 `(#:tests? #f ; cmus does not include tests
334 #:phases
335 (modify-phases %standard-phases
ec618c20
RW
336 (replace 'configure
337 (lambda* (#:key outputs #:allow-other-keys)
338 (let ((out (assoc-ref outputs "out")))
339 ;; It's an idiosyncratic configure script that doesn't
340 ;; understand --prefix=..; it wants prefix=.. instead.
341 (invoke "./configure"
342 (string-append "prefix=" out))
343 #t))))))
e8069d01
PW
344 ;; TODO: cmus optionally supports the following formats, which haven't yet
345 ;; been added to Guix:
346 ;;
347 ;; - Roar, libroar
348 ;;
349 ;; - DISCID_LIBS, apparently different from cd-discid which is included in
350 ;; Guix. See <http://sourceforge.net/projects/discid/>
351 (native-inputs
352 `(("pkg-config" ,pkg-config)))
353 (inputs
354 `(("alsa-lib" ,alsa-lib)
355 ("ao" ,ao)
9d34cc13 356 ("faad2" ,faad2)
e8069d01
PW
357 ("ffmpeg" ,ffmpeg)
358 ("flac" ,flac)
359 ("jack" ,jack-1)
360 ("libcddb" ,libcddb)
361 ("libcdio-paranoia" ,libcdio-paranoia)
362 ("libcue" ,libcue)
363 ("libmad" ,libmad)
364 ("libmodplug" ,libmodplug)
365 ("libmpcdec" ,libmpcdec)
366 ("libsamplerate" ,libsamplerate)
367 ("libvorbis" ,libvorbis)
368 ("ncurses" ,ncurses)
369 ("opusfile" ,opusfile)
370 ("pulseaudio" ,pulseaudio)
371 ("wavpack" ,wavpack)))
372 (home-page "https://cmus.github.io/")
373 (synopsis "Small console music player")
374 (description "Cmus is a small and fast console music player. It supports
375many input formats and provides a customisable Vi-style user interface.")
376 (license license:gpl2+)))
377
edd1652e
KK
378(define-public denemo
379 (package
380 (name "denemo")
6ff5e9ba 381 (version "2.1")
edd1652e
KK
382 (source (origin
383 (method url-fetch)
384 (uri (string-append "mirror://gnu/denemo/denemo-"
385 version ".tar.gz"))
386 (sha256
387 (base32
6ff5e9ba 388 "0hggf8c4xcrjcxd5m00r788r7jg7g8ff54w2idfaqpj5j2ix3299"))))
edd1652e
KK
389 (build-system gnu-build-system)
390 (arguments
391 `(#:phases
392 (modify-phases %standard-phases
393 (replace 'check
394 ;; Denemo's documentation says to use this command to run its
395 ;; testsuite.
396 (lambda _
f6181921 397 (invoke "make" "-C" "tests" "check")))
b43ec33b
KK
398 (add-before 'build 'set-lilypond
399 ;; This phase sets the default path for lilypond to its current
400 ;; location in the store.
401 (lambda* (#:key inputs #:allow-other-keys)
402 (let* ((lilypond (string-append (assoc-ref inputs "lilypond")
403 "/bin/lilypond")))
404 (substitute* "src/core/prefops.c"
405 (("g_string_new \\(\"lilypond\"\\);")
406 (string-append "g_string_new (\""
407 lilypond
408 "\");"))))
409 #t))
edd1652e
KK
410 (add-after 'install 'correct-filename
411 ;; "graft-derivation/shallow" from the (guix grafts) module runs in
412 ;; the C locale, expecting file names to be ASCII encoded. This
413 ;; phase renames a filename with a Unicode character in it to meet
414 ;; the aforementioned condition.
415 (lambda* (#:key outputs #:allow-other-keys)
416 (let* ((out (assoc-ref outputs "out")))
417 (chdir (string-append
418 out
419 "/share/denemo/templates/instruments/woodwind"))
420 (rename-file "Clarinet in B♭.denemo"
421 "Clarinet in Bb.denemo"))
422 #t)))))
423 (native-inputs
f6181921 424 `(("glib:bin" ,glib "bin") ; for gtester
edd1652e
KK
425 ("pkg-config" ,pkg-config)))
426 (inputs
427 `(("alsa-lib" ,alsa-lib)
428 ("aubio" ,aubio)
429 ("evince" ,evince)
430 ("fftw" ,fftw)
431 ("fluidsynth" ,fluidsynth)
432 ("glib" ,glib)
433 ("gtk+" ,gtk+)
434 ("gtk-doc" ,gtk-doc)
6bf79532 435 ("gtksourceview" ,gtksourceview-3)
edd1652e
KK
436 ("guile" ,guile-2.0)
437 ("intltool" ,intltool)
438 ("librsvg" ,librsvg)
439 ("libsndfile" ,libsndfile)
440 ("libtool" ,libtool)
441 ("libxml2" ,libxml2)
c695fb76 442 ("lilypond" ,lilypond)
edd1652e
KK
443 ("portaudio" ,portaudio)
444 ("portmidi" ,portmidi)
445 ("rubberband" ,rubberband)))
edd1652e
KK
446 (synopsis "Graphical music notation, front-end to GNU Lilypond")
447 (description
448 "GNU Denemo is a music notation editor that provides a convenient
449interface to the powerful music engraving program Lilypond. Music can be
450typed in using the computer keyboard, played in using a MIDI keyboard, or
451even input via a microphone connected to the sound card. The final product
452is publication-quality music notation that is continuously generated in the
453background while you work.")
454 (home-page "http://www.denemo.org")
455 (license license:gpl3+)))
456
72385c34
KK
457(define-public dumb
458 (package
459 (name "dumb")
460 (version "2.0.3")
461 (source
462 (origin
463 (method git-fetch)
464 (uri (git-reference
465 (url "https://github.com/kode54/dumb.git")
466 (commit version)))
467 (sha256
468 (base32 "1cnq6rb14d4yllr0yi32p9jmcig8avs3f43bvdjrx4r1mpawspi6"))
469 (file-name (git-file-name name version))))
470 (build-system cmake-build-system)
471 (arguments
472 '(#:tests? #f ; no check target
473 #:configure-flags
474 (list "-DBUILD_SHARED_LIBS=ON"
475 "-DBUILD_EXAMPLES=OFF")))
476 (home-page "https://github.com/kode54/dumb")
477 (synopsis "Module audio renderer library")
478 (description
479 "DUMB is a tracker library with support for IT, XM, S3M and MOD files. It
480targets maximum accuracy to the original formats, with low-pass resonant filters
481for the IT files, accurate timing and pitching, and three resampling quality
482settings (aliasing, linear interpolation and cubic interpolation).")
483 ;; The DUMB license is a bit peculiar.
484 ;; Clause 8 states that clauses 4, 5 and 6 are null and void, leaving only
485 ;; the first three clauses for genuine consideration.
486 ;; Clauses 1, 2 and 3 are analogous to clauses 1, 2 and 3 of the zlib
487 ;; license, a known free software license.
488 ;; Therefore, the DUMB license may be considered a free software license.
489 (license (license:fsf-free "file://LICENSE"))))
490
d61dcb1b
KK
491(define-public dumb-allegro4
492 (package
493 (inherit dumb)
494 (name "dumb-allegro4")
495 (arguments
496 (substitute-keyword-arguments (package-arguments dumb)
497 ((#:configure-flags flags)
498 `(cons "-DBUILD_ALLEGRO4=ON" ,flags))))
499 (inputs
500 `(("allegro" ,allegro-4)))))
501
d231bb35
RW
502(define-public hydrogen
503 (package
504 (name "hydrogen")
80808d67 505 (version "1.0.0-beta1")
d231bb35 506 (source (origin
80808d67
RW
507 (method git-fetch)
508 (uri (git-reference
509 (url "https://github.com/hydrogen-music/hydrogen.git")
510 (commit version)))
511 (file-name (string-append name "-" version "-checkout"))
d231bb35
RW
512 (sha256
513 (base32
80808d67 514 "0nv83l70j5bjz2wd6n3a8cq3bmgrvdvg6g2hjhc1g5h6xnbqsh9x"))))
b7367762 515 (build-system cmake-build-system)
d231bb35 516 (arguments
80808d67
RW
517 `(#:test-target "tests"
518 #:phases
519 (modify-phases %standard-phases
520 (add-after 'unpack 'fix-data-directory
521 (lambda* (#:key outputs #:allow-other-keys)
522 (substitute* "CMakeLists.txt"
523 (("/usr/share/pixmaps")
524 (string-append (assoc-ref outputs "out")
525 "/share/pixmaps")))
526 #t)))))
d231bb35 527 (native-inputs
b7367762 528 `(("cppunit" ,cppunit)
d231bb35
RW
529 ("pkg-config" ,pkg-config)))
530 (inputs
b7367762 531 `(("alsa-lib" ,alsa-lib)
d231bb35 532 ("jack" ,jack-1)
b7367762 533 ;; ("ladspa" ,ladspa) ; cannot find during configure
d231bb35 534 ("lash" ,lash)
b7367762
EF
535 ("libarchive" ,libarchive)
536 ("libsndfile" ,libsndfile)
537 ("libtar" ,libtar)
538 ("lrdf" ,lrdf)
80808d67
RW
539 ("qtbase" ,qtbase)
540 ("qtxmlpatterns" ,qtxmlpatterns)
b7367762 541 ("zlib" ,zlib)))
d231bb35
RW
542 (home-page "http://www.hydrogen-music.org")
543 (synopsis "Drum machine")
544 (description
545 "Hydrogen is an advanced drum machine for GNU/Linux. Its main goal is to
546enable professional yet simple and intuitive pattern-based drum programming.")
547 (license license:gpl2+)))
548
58301682
PL
549(define-public easytag
550 (package
551 (name "easytag")
552 (version "2.4.3")
553 (source (origin
554 (method url-fetch)
555 (uri (string-append "mirror://gnome/sources/easytag/2.4/easytag-"
556 version ".tar.xz"))
557 (sha256
558 (base32
559 "1mbxnqrw1fwcgraa1bgik25vdzvf97vma5pzknbwbqq5ly9fwlgw"))))
560 (build-system glib-or-gtk-build-system)
561 (native-inputs
562 `(("desktop-file-utils" ,desktop-file-utils)
563 ("glib" ,glib "bin")
564 ("intltool" ,intltool)
565 ("itstool" ,itstool)
566 ("pkg-config" ,pkg-config)
567 ("xmllint" ,libxml2)))
568 (inputs
569 `(("flac" ,flac)
570 ("gtk+" ,gtk+)
571 ("id3lib" ,id3lib)
572 ("libid3tag" ,libid3tag)
573 ("libvorbis" ,libvorbis)
574 ("opusfile" ,opusfile)
575 ("speex" ,speex)
576 ("taglib" ,taglib)
577 ("wavpack" ,wavpack)
578 ("yelp" ,yelp)))
579 (arguments
580 '(#:phases
581 (modify-phases %standard-phases
582 (add-before 'configure 'configure-libid3tag
583 (lambda* (#:key inputs #:allow-other-keys)
584 ;; libid3tag does not provide a .pc file and EasyTAG's configure
585 ;; script healivy relies on pkg-config. Providing a temporary
586 ;; local .pc file is easier than patching the configure script.
587 (let* ((libid3tag (assoc-ref inputs "libid3tag")))
588 (mkdir-p "pkgconfig")
589 (with-output-to-file
590 "pkgconfig/id3tag.pc"
591 (lambda _
592 (format #t
593 "prefix=~@*~a~@
594 libdir=${prefix}/lib~@
595 includedir=${prefix}/include~@
596 Libs: -L${libdir} -lid3tag -lz~@
597 Cflags: -I${includedir}~%"
598 libid3tag)))
599 (setenv "PKG_CONFIG_PATH"
600 (string-append (getenv "PKG_CONFIG_PATH")
601 ":" (getcwd) "/pkgconfig")))))
602 (add-after 'unpack 'patch-makefile
603 (lambda _
604 (substitute* "Makefile.in"
605 ;; The Makefile generates a test-desktop-file-validate.sh
606 ;; script with /bin/sh hard-coded.
607 (("/bin/sh") (which "sh"))
608 ;; Don't create 'icon-theme.cache'.
609 (("gtk-update-icon-cache") "true")))))))
610 (home-page "https://wiki.gnome.org/Apps/EasyTAG")
611 (synopsis "Simple application for viewing and editing tags in audio files")
612 (description
613 "EasyTAG is an application for viewing and editing tags in audio files.
614It supports MP3, MP2, MP4/AAC, FLAC, Ogg Opus, Ogg Speex, Ogg Vorbis,
615MusePack, Monkey's Audio, and WavPack files.")
616 (license license:gpl2+)))
617
91595624
RW
618(define-public extempore
619 (package
620 (name "extempore")
621 (version "0.7.0")
622 (source (origin
8b0f6917
RW
623 (method git-fetch)
624 (uri (git-reference
625 (url "https://github.com/digego/extempore.git")
626 (commit version)))
91595624
RW
627 (sha256
628 (base32
8b0f6917
RW
629 "12fsp7zkfxb9kykwq46l88kcbbici9arczrrsl4qn87m6vm5349l"))
630 (file-name (string-append name "-" version "-checkout"))))
91595624
RW
631 (build-system cmake-build-system)
632 (arguments
633 `(;; The default target also includes ahead-of-time compilation of the
634 ;; standard libraries. However, during the "install" phase this would
635 ;; happen *again* for unknown reasons. Hence we only build the
636 ;; extempore executable during the build phase.
637 #:make-flags '("extempore")
638 #:configure-flags '("-DJACK=ON"
639 ;; We want to distribute.
640 "-DIN_TREE=OFF"
641 ;; Don't download any dependencies.
642 "-DBUILD_DEPS=OFF")
643 #:modules ((ice-9 match)
644 (guix build cmake-build-system)
645 (guix build utils))
646 #:phases
647 (modify-phases %standard-phases
648 (add-after 'unpack 'patch-directories
649 (lambda* (#:key outputs #:allow-other-keys)
650 ;; Rewrite default path to runtime directory
651 (substitute* "src/Extempore.cpp"
652 (("runtimedir \\+= \"runtime\"")
653 (string-append "runtimedir = \""
654 (assoc-ref outputs "out")
655 "/lib/extempore/runtime\"")))
656 (substitute* "extras/extempore.el"
657 (("\\(runtime-directory \\(concat default-directory \"runtime\"\\)\\)")
658 (string-append "(runtime-directory \""
659 (assoc-ref outputs "out")
660 "/lib/extempore/runtime"
661 "\")")))
662 #t))
663 (add-after 'unpack 'link-with-additional-libs
664 (lambda _
665 ;; The executable must be linked with libffi and zlib.
666 (substitute* "CMakeLists.txt"
667 (("add_dependencies\\(aot_extended extended_deps\\)") "")
668 (("target_link_libraries\\(extempore PRIVATE dl" line)
669 (string-append line " ffi z")))
670 #t))
671 ;; FIXME: AOT compilation of the nanovg bindings fail with the error:
672 ;; "Compiler Error could not bind _nvgLinearGradient"
673 (add-after 'unpack 'disable-nanovg
674 (lambda _
675 (substitute* "CMakeLists.txt"
676 (("aotcompile_lib\\(libs/external/nanovg.xtm.*") ""))
677 #t))
678 ;; FIXME: All examples that are used as tests segfault for some
679 ;; unknown reason.
680 (add-after 'unpack 'disable-broken-tests
681 (lambda _
682 (substitute* "CMakeLists.txt"
683 (("extempore_add_example_as_test\\(.*") ""))
684 #t))
685 (add-after 'unpack 'hardcode-external-lib-paths
686 (lambda* (#:key inputs #:allow-other-keys)
687 (use-modules (ice-9 match))
688 (for-each
689 (match-lambda
690 ((file-name lib pkg-name)
691 (substitute* (string-append "libs/external/" file-name ".xtm")
692 ((lib) (string-append (assoc-ref inputs pkg-name)
693 "/lib/" lib)))))
694 '(("assimp" "libassimp.so" "assimp")
695 ("portmidi" "libportmidi.so" "portmidi")
696 ("sndfile" "libsndfile.so" "libsndfile")
697 ("fft" "libkiss_fft.so" "kiss-fft")
698 ("stb_image" "libstb_image.so" "stb-image")
699 ("nanovg" "libnanovg.so" "nanovg")
700 ("glext" "libGL.so" "mesa")
701 ("glfw3" "libglfw.so" "glfw")
702 ("gl/glcore-directbind" "libGL.so" "mesa")
703 ("gl/glcompat-directbind" "libGL.so" "mesa")))
704 #t))
705 (add-after 'unpack 'use-own-llvm
706 (lambda* (#:key inputs #:allow-other-keys)
707 (setenv "EXT_LLVM_DIR" (assoc-ref inputs "llvm"))
708 ;; Our LLVM builds shared libraries, so Extempore should use
709 ;; those.
710 (substitute* "CMakeLists.txt"
711 (("CMAKE_STATIC_LIBRARY") "CMAKE_SHARED_LIBRARY"))
712 #t))
713 (add-after 'unpack 'fix-aot-compilation
714 (lambda* (#:key outputs #:allow-other-keys)
715 (substitute* "CMakeLists.txt"
716 ;; EXT_SHARE_DIR does not exist before installation, so the
717 ;; working directory should be the source directory instead.
718 (("WORKING_DIRECTORY \\$\\{EXT_SHARE_DIR\\}")
719 "WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}")
720 ;; Extempore needs to be told where the runtime is to be found.
721 ;; While we're at it we disable automatic tuning for a specific
722 ;; CPU to make binary substitution possible.
723 (("COMMAND extempore" prefix)
724 (string-append prefix " --sharedir " (getcwd)
725 " --mcpu=generic --attr=none")))
726 #t)))))
727 (inputs
728 `(("llvm" ,llvm-for-extempore)
729 ("libffi" ,libffi)
730 ("jack" ,jack-1)
731 ("libsndfile" ,libsndfile)
732 ("glfw" ,glfw)
733 ("apr" ,apr)
734 ("stb-image" ,stb-image-for-extempore)
735 ("kiss-fft" ,kiss-fft-for-extempore)
736 ("nanovg" ,nanovg-for-extempore)
737 ("portmidi" ,portmidi-for-extempore)
738 ("assimp" ,assimp)
739 ("alsa-lib" ,alsa-lib)
740 ("portaudio" ,portaudio)
741 ("mesa" ,mesa)
742 ("pcre" ,pcre)
743 ("zlib" ,zlib)))
744 (native-inputs
745 `(("perl" ,perl)
746 ("emacs" ,emacs-no-x)))
39162ee4
RW
747 ;; Extempore refuses to build on architectures other than x86_64
748 (supported-systems '("x86_64-linux"))
95708ed8 749 (home-page "http://digego.github.io/extempore/")
91595624
RW
750 (synopsis "Programming environment for live coding of multimedia")
751 (description
752 "Extempore is a programming language and runtime environment designed
753with live programming in mind. It supports interactive programming in a REPL
754style, compiling and binding code just-in-time. Although Extempore has its
755roots in 'live coding' of audiovisual media art, it is suitable for any task
756domain where dynamic run-time modifiability and good numerical performance are
757required. Extempore also has strong timing and concurrency semantics, which
758are helpful when working in problem spaces where timing is important (such as
759audio and video).")
760 (license license:bsd-2)))
761
8c454dcd
RW
762(define-public klick
763 (package
764 (name "klick")
765 (version "0.12.2")
766 (source (origin
767 (method url-fetch)
768 (uri (string-append "http://das.nasophon.de/download/klick-"
769 version ".tar.gz"))
770 (sha256
771 (base32
772 "0hmcaywnwzjci3pp4xpvbijnnwvibz7gf9xzcdjbdca910y5728j"))))
bc27eb3b 773 (build-system scons-build-system)
8c454dcd 774 (arguments
bc27eb3b 775 `(#:scons-flags (list (string-append "PREFIX=" %output))
ecc604ba 776 #:scons ,scons-python2
f00067db
RW
777 #:tests? #f ; no "check" target
778 #:phases
779 (modify-phases %standard-phases
fb1d8d2b
RW
780 (add-after 'unpack 'be-permissive
781 (lambda _
782 (substitute* "SConstruct"
783 (("'-Wall'") "'-Wall', '-fpermissive'"))
784 #t))
f00067db
RW
785 (add-after 'unpack 'replace-removed-scons-syntax
786 (lambda _
787 (substitute* "SConstruct"
788 (("BoolOption") "BoolVariable")
789 (("PathOption") "PathVariable")
790 (("Options") "Variables"))
791 #t)))))
8c454dcd
RW
792 (inputs
793 `(("boost" ,boost)
794 ("jack" ,jack-1)
795 ("libsndfile" ,libsndfile)
796 ("libsamplerate" ,libsamplerate)
797 ("liblo" ,liblo)
798 ("rubberband" ,rubberband)))
799 (native-inputs
bc27eb3b 800 `(("pkg-config" ,pkg-config)))
8c454dcd
RW
801 (home-page "http://das.nasophon.de/klick/")
802 (synopsis "Metronome for JACK")
803 (description
804 "klick is an advanced command-line based metronome for JACK. It allows
805you to define complex tempo maps for entire songs or performances.")
806 (license license:gpl2+)))
807
048bfba1
RW
808(define-public gtklick
809 (package
810 (name "gtklick")
811 (version "0.6.4")
812 (source (origin
813 (method url-fetch)
814 (uri (string-append "http://das.nasophon.de/download/gtklick-"
815 version ".tar.gz"))
816 (sha256
817 (base32
818 "0dq1km6njnzsqdqyf6wzir9g733z0mc9vmxfg2383k3c2a2di6bp"))))
819 (build-system python-build-system)
820 (arguments
821 `(#:tests? #f ; no tests
822 #:python ,python-2
823 #:phases
824 (modify-phases %standard-phases
825 (add-before 'build 'add-sitedirs
826 ;; .pth files are not automatically interpreted unless the
827 ;; directories containing them are added as "sites". The directories
828 ;; are then added to those in the PYTHONPATH. This is required for
829 ;; the operation of pygtk.
830 (lambda _
831 (substitute* "gtklick/gtklick.py"
832 (("import pygtk")
833 "import pygtk, site, sys
834for path in [path for path in sys.path if 'site-packages' in path]: site.addsitedir(path)"))))
835 (add-after 'unpack 'inject-store-path-to-klick
836 (lambda* (#:key inputs #:allow-other-keys)
837 (substitute* "gtklick/klick_backend.py"
838 (("KLICK_PATH = 'klick'")
839 (string-append "KLICK_PATH = '"
840 (assoc-ref inputs "klick")
841 "/bin/klick'")))
842 #t)))))
843 (inputs
844 `(("klick" ,klick)
845 ("python2-pyliblo" ,python2-pyliblo)
846 ("python2-pygtk" ,python2-pygtk)))
847 (native-inputs
b94a6ca0 848 `(("gettext" ,gettext-minimal)))
048bfba1
RW
849 (home-page "http://das.nasophon.de/gtklick/")
850 (synopsis "Simple metronome with an easy-to-use graphical interface")
851 (description
852 "Gtklick is a simple metronome with an easy-to-use graphical user
853interface. It is implemented as a frontend to @code{klick}.")
854 (license license:gpl2+)))
855
a3b10217
KK
856(define-public libgme
857 (package
858 (name "libgme")
21f5f351 859 (version "0.6.2")
a3b10217
KK
860 (source (origin
861 (method url-fetch)
862 (uri (string-append "https://bitbucket.org/mpyne/game-music-emu/"
863 "downloads/game-music-emu-" version
21f5f351 864 ".tar.xz"))
a3b10217
KK
865 (sha256
866 (base32
21f5f351 867 "0hkkmxbaas2sirlb5i4r10mgbbiaapjx8pazifabwba23m3wnijh"))))
a3b10217
KK
868 (build-system cmake-build-system)
869 (arguments
870 '(#:tests? #f)) ; no check target
21f5f351
KK
871 (native-inputs
872 `(;; Use gcc-4.9 to work around an internal compiler error that happens
873 ;; when using gcc-5.5.0. FIXME: Try removing this when the default
874 ;; compiler is no longer gcc-5.5.0.
875 ("gcc" ,gcc-4.9)))
a3b10217
KK
876 (home-page "https://bitbucket.org/mpyne/game-music-emu")
877 (synopsis "Video game music file playback library")
878 (description
879 "Game-music-emu is a collection of video game music file emulators that
880support the following formats and systems:
881@table @code
882@item AY
883ZX Spectrum/Asmtrad CPC
884@item GBS
885Nintendo Game Boy
886@item GYM
887Sega Genesis/Mega Drive
888@item HES
889NEC TurboGrafx-16/PC Engine
890@item KSS
891MSX Home Computer/other Z80 systems (doesn't support FM sound)
892@item NSF/NSFE
893Nintendo NES/Famicom (with VRC 6, Namco 106, and FME-7 sound)
894@item SAP
895Atari systems using POKEY sound chip
896@item SPC
897Super Nintendo/Super Famicom
898@item VGM/VGZ
899Sega Master System/Mark III, Sega Genesis/Mega Drive, BBC Micro
900@end table")
901 (license (list license:lgpl2.1+
902 ;; demo and player directories are under the Expat license
903 license:expat))))
904
1b6826d3
RW
905(define-public lilypond
906 (package
907 (name "lilypond")
85f075a0 908 (version "2.19.80")
1b6826d3
RW
909 (source (origin
910 (method url-fetch)
911 (uri (string-append
912 "http://download.linuxaudio.org/lilypond/sources/v"
913 (version-major+minor version) "/"
914 name "-" version ".tar.gz"))
915 (sha256
916 (base32
85f075a0 917 "0lql4q946gna2pl1g409mmmsvn2qvnq2z5cihrkfhk7plcqdny9n"))))
1b6826d3
RW
918 (build-system gnu-build-system)
919 (arguments
127b04d7 920 `(#:tests? #f ; out-test/collated-files.html fails
1b6826d3 921 #:out-of-source? #t
409be57b 922 #:make-flags '("conf=www") ;to generate images for info manuals
127b04d7 923 #:configure-flags
409be57b
RW
924 (list "CONFIGURATION=www"
925 (string-append "--with-texgyre-dir="
127b04d7
RW
926 (assoc-ref %build-inputs "font-tex-gyre")
927 "/share/fonts/opentype/"))
1b6826d3 928 #:phases
a8bc747a 929 (modify-phases %standard-phases
9cc823f5
RW
930 (add-after 'unpack 'use-texlive-union
931 (lambda _
932 ;; FIXME: fonts are not found and have to be generated in HOME.
933 (setenv "HOME" "/tmp")
934 ;; The test for the "lh" package fails, even though it is among
935 ;; the inputs.
936 (substitute* "configure"
937 (("TEX_FIKPARM=.*") "TEX_FIKPARM=found\n"))
938 #t))
409be57b
RW
939 (add-after 'unpack 'fix-path-references
940 (lambda _
a8bc747a
RW
941 (substitute* "scm/backend-library.scm"
942 (("\\(search-executable '\\(\"gs\"\\)\\)")
409be57b
RW
943 (string-append "\"" (which "gs") "\""))
944 (("\"/bin/sh\"")
945 (string-append "\"" (which "sh") "\"")))
a8bc747a
RW
946 #t))
947 (add-before 'configure 'prepare-configuration
948 (lambda _
949 (substitute* "configure"
7affb2c1
RW
950 (("SHELL=/bin/sh") "SHELL=sh")
951 ;; When checking the fontforge version do not consider the
952 ;; version string that's part of the directory.
31ec5228
EF
953 (("head -n") "tail -n")
954 ;; Also allow for SOURCE_DATE_EPOCH = 0 in fontforge.
955 (("20110222") "19700101"))
409be57b
RW
956 (setenv "out" "www")
957 (setenv "conf" "www")
958 #t))
959 (add-after 'install 'install-info
960 (lambda _
88659738
RW
961 (invoke "make"
962 "-j" (number->string (parallel-job-count))
963 "conf=www" "install-info")
964 #t)))))
1b6826d3
RW
965 (inputs
966 `(("guile" ,guile-1.8)
967 ("font-dejavu" ,font-dejavu)
127b04d7 968 ("font-tex-gyre" ,font-tex-gyre)
1b6826d3
RW
969 ("fontconfig" ,fontconfig)
970 ("freetype" ,freetype)
fb0b9ff1 971 ("ghostscript" ,ghostscript)
1b6826d3
RW
972 ("pango" ,pango)
973 ("python" ,python-2)))
974 (native-inputs
975 `(("bison" ,bison)
976 ("perl" ,perl)
977 ("flex" ,flex)
978 ("fontforge" ,fontforge)
979 ("dblatex" ,dblatex)
b94a6ca0 980 ("gettext" ,gettext-minimal)
1b6826d3
RW
981 ("imagemagick" ,imagemagick)
982 ("netpbm" ,netpbm) ;for pngtopnm
9cc823f5
RW
983 ("texlive" ,(texlive-union (list texlive-metapost
984 texlive-generic-epsf
985 texlive-latex-lh
986 texlive-latex-cyrillic)))
1b6826d3
RW
987 ("texinfo" ,texinfo)
988 ("texi2html" ,texi2html)
989 ("rsync" ,rsync)
990 ("pkg-config" ,pkg-config)
991 ("zip" ,zip)))
992 (home-page "http://www.lilypond.org/")
993 (synopsis "Music typesetting")
994 (description
995 "GNU LilyPond is a music typesetter, which produces high-quality sheet
996music. Music is input in a text file containing control sequences which are
997interpreted by LilyPond to produce the final document. It is extendable with
998Guile.")
55ca5e80
LC
999 (license license:gpl3+)
1000
1001 ;; On armhf and mips64el, building the documentation sometimes leads to
1002 ;; more than an hour of silence, so double the max silent time.
1003 (properties `((max-silent-time . 7200)))))
c267cc15 1004
8e80244a
RW
1005(define-public non-sequencer
1006 ;; The latest tagged release is three years old and uses a custom build
1bbe7959 1007 ;; system, so we take the last commit.
a6b5e1fb
RW
1008 (let ((commit "5ae43bb27c42387052a73e5ffc5d33efb9d946a9")
1009 (revision "4"))
8e80244a
RW
1010 (package
1011 (name "non-sequencer")
1bbe7959 1012 (version (string-append "1.9.5-" revision "." (string-take commit 7)))
8e80244a
RW
1013 (source (origin
1014 (method git-fetch)
1015 (uri (git-reference
1016 (url "git://git.tuxfamily.org/gitroot/non/non.git")
1017 (commit commit)))
1018 (sha256
1019 (base32
a6b5e1fb 1020 "1cljkkyi9dxqpqhx8y6l2ja4zjmlya26m26kqxml8gx08vyvddhx"))
8e80244a
RW
1021 (file-name (string-append name "-" version "-checkout"))))
1022 (build-system waf-build-system)
1023 (arguments
1024 `(#:tests? #f ;no "check" target
e591a4d6
RW
1025 #:configure-flags
1026 (list "--project=sequencer"
1027 ;; Disable the use of SSE unless on x86_64.
1028 ,@(if (not (string-prefix? "x86_64" (or (%current-target-system)
1029 (%current-system))))
1030 '("--disable-sse")
1031 '()))
8e80244a
RW
1032 #:python ,python-2))
1033 (inputs
1034 `(("jack" ,jack-1)
1035 ("libsigc++" ,libsigc++)
1036 ("liblo" ,liblo)
1037 ("ntk" ,ntk)))
1038 (native-inputs
1039 `(("pkg-config" ,pkg-config)))
1040 (home-page "http://non.tuxfamily.org/wiki/Non%20Sequencer")
1041 (synopsis "Pattern-based MIDI sequencer")
1042 (description
1043 "The Non Sequencer is a powerful, lightweight, real-time,
1044pattern-based MIDI sequencer. It utilizes the JACK Audio Connection Kit for
1045MIDI I/O and the NTK GUI toolkit for its user interface. Everything in Non
1046Sequencer happens on-line, in real-time. Music can be composed live, while the
1047transport is rolling.")
1048 (license license:gpl2+))))
1049
ded69d6f
RW
1050(define-public non-session-manager
1051 (package (inherit non-sequencer)
1052 (name "non-session-manager")
1053 (arguments
1054 (substitute-keyword-arguments (package-arguments non-sequencer)
1055 ((#:configure-flags flags)
1056 `(cons "--project=session-manager"
1057 (delete "--project=sequencer" ,flags)))))
1058 (inputs
1059 `(("jack" ,jack-1)
1060 ("liblo" ,liblo)
1061 ("ntk" ,ntk)))
1062 (native-inputs
1063 `(("pkg-config" ,pkg-config)))
1064 (home-page "http://non.tuxfamily.org/nsm/")
1065 (synopsis "Audio session management")
1066 (description
1067 "The Non Session Manager is an API and an implementation for audio
1068session management. NSM clients use a well-specified OSC protocol to
1069communicate with the session management daemon.")
1070 (license license:gpl2+)))
1071
46bb58b8
RW
1072(define-public non-mixer
1073 (package (inherit non-sequencer)
1074 (name "non-mixer")
1075 (arguments
1076 (substitute-keyword-arguments (package-arguments non-sequencer)
1077 ((#:configure-flags flags)
1078 `(cons "--project=mixer"
1079 (delete "--project=sequencer" ,flags)))))
1080 (inputs
1081 `(("jack" ,jack-1)
1082 ("liblo" ,liblo)
1083 ("ladspa" ,ladspa)
1084 ("lrdf" ,lrdf)
1085 ("ntk" ,ntk)))
1086 (native-inputs
1087 `(("pkg-config" ,pkg-config)))
1088 (home-page "http://non.tuxfamily.org/wiki/Non%20Mixer")
1089 (synopsis "Modular digital audio mixer")
1090 (description
1091 "The Non Mixer is a powerful, reliable and fast modular digital audio
1092mixer. It utilizes JACK for inter-application audio I/O and the NTK GUI
1093toolkit for a fast and lightweight user interface. Non Mixer can be used
1094alone or in concert with Non Timeline and Non Sequencer to form a complete
1095studio.")
1096 (license license:gpl2+)))
1097
4511e0db
RW
1098(define-public non-timeline
1099 (package (inherit non-sequencer)
1100 (name "non-timeline")
1101 (arguments
1102 (substitute-keyword-arguments (package-arguments non-sequencer)
1103 ((#:configure-flags flags)
1104 `(cons "--project=timeline"
1105 (delete "--project=sequencer" ,flags)))))
1106 (inputs
1107 `(("jack" ,jack-1)
1108 ("liblo" ,liblo)
1109 ("libsndfile" ,libsndfile)
1110 ("ntk" ,ntk)))
1111 (native-inputs
1112 `(("pkg-config" ,pkg-config)))
1113 (home-page "http://non.tuxfamily.org/wiki/Non%20Timeline")
1114 (synopsis "Modular digital audio timeline arranger")
1115 (description
1116 "The Non Timeline is a powerful, reliable and fast modular digital audio
1117timeline arranger. It utilizes JACK for inter-application audio I/O and the
1118NTK GUI toolkit for a fast and lightweight user interface. Non Timeline can
1119be used alone or in concert with Non Mixer and Non Sequencer to form a
1120complete studio.")
1121 (license license:gpl2+)))
1122
c267cc15
RW
1123(define-public solfege
1124 (package
1125 (name "solfege")
1126 (version "3.22.2")
1127 (source (origin
1128 (method url-fetch)
1129 (uri (string-append
1130 "mirror://gnu/solfege/solfege-"
1131 version ".tar.xz"))
1132 (sha256
1133 (base32
1134 "1w25rxdbj907nsx285k9nm480pvy12w3yknfh4n1dfv17cwy072i"))))
1135 (build-system gnu-build-system)
1136 (arguments
1137 `(#:tests? #f ; xmllint attempts to download DTD
1138 #:test-target "test"
1139 #:phases
dc1d3cde
KK
1140 (modify-phases %standard-phases
1141 (add-after 'unpack 'fix-configuration
1142 (lambda* (#:key inputs #:allow-other-keys)
1143 (substitute* "default.config"
20c65aa1 1144 (("/usr/bin/aplay") "aplay")
95e545a4
NG
1145 (("/usr/bin/timidity") "timidity")
1146 (("/usr/bin/mpg123") "mpg123")
1147 (("/usr/bin/ogg123") "ogg123"))
dc1d3cde
KK
1148 #t))
1149 (add-before 'build 'patch-python-shebangs
1150 (lambda _
1151 ;; Two python scripts begin with a Unicode BOM, so patch-shebang
1152 ;; has no effect.
1153 (substitute* '("solfege/parsetree.py"
1154 "solfege/presetup.py")
1155 (("#!/usr/bin/python") (string-append "#!" (which "python"))))
1156 #t))
1157 (add-before 'build 'add-sitedirs
1158 ;; .pth files are not automatically interpreted unless the
1159 ;; directories containing them are added as "sites". The directories
1160 ;; are then added to those in the PYTHONPATH. This is required for
1161 ;; the operation of pygtk and pygobject.
1162 (lambda _
1163 (substitute* "run-solfege.py"
1164 (("import os")
1165 "import os, site
1166for path in [path for path in sys.path if 'site-packages' in path]: site.addsitedir(path)"))
1167 #t))
1168 (add-before 'build 'adjust-config-file-prefix
c267cc15
RW
1169 (lambda* (#:key outputs #:allow-other-keys)
1170 (substitute* "run-solfege.py"
1171 (("prefix = os.path.*$")
dc1d3cde
KK
1172 (string-append "prefix = " (assoc-ref outputs "out"))))
1173 #t))
1174 (add-after 'install 'wrap-program
1175 (lambda* (#:key inputs outputs #:allow-other-keys)
1176 ;; Make sure 'solfege' runs with the correct PYTHONPATH.
1177 (let* ((out (assoc-ref outputs "out"))
1178 (path (getenv "PYTHONPATH")))
1179 (wrap-program (string-append out "/bin/solfege")
1180 `("PYTHONPATH" ":" prefix (,path))))
1181 #t)))))
c267cc15
RW
1182 (inputs
1183 `(("python" ,python-2)
1184 ("pygtk" ,python2-pygtk)
b94a6ca0 1185 ("gettext" ,gettext-minimal)
c267cc15 1186 ("gtk" ,gtk+)
95e545a4 1187 ("lilypond" ,lilypond)))
c267cc15
RW
1188 (native-inputs
1189 `(("pkg-config" ,pkg-config)
1190 ("txt2man" ,txt2man)
1191 ("libxml2" ,libxml2) ; for tests
1192 ("ghostscript" ,ghostscript)
c267cc15
RW
1193 ("texinfo" ,texinfo)))
1194 (home-page "https://www.gnu.org/software/solfege/")
1195 (synopsis "Ear training")
1196 (description
1197 "GNU Solfege is a program for practicing musical ear-training. With it,
1198you can practice your recognition of various musical intervals and chords. It
1199features a statistics overview so you can monitor your progress across several
1200sessions. Solfege is also designed to be extensible so you can easily write
1201your own lessons.")
1202 (license license:gpl3+)))
6260d1a8 1203
8b9ec354
RW
1204(define-public powertabeditor
1205 (package
1206 (name "powertabeditor")
92a1cb92 1207 (version "2.0.0-alpha10")
8b9ec354 1208 (source (origin
1b12b572
RW
1209 (method git-fetch)
1210 (uri (git-reference
1211 (url "https://github.com/powertab/powertabeditor.git")
1212 (commit version)))
1213 (file-name (git-file-name name version))
8b9ec354
RW
1214 (sha256
1215 (base32
1b12b572 1216 "1z4fhdp71ck9synr12rg1p6365xnypd8ih40c5icj4si36khvksk"))
8b9ec354
RW
1217 (modules '((guix build utils)))
1218 (snippet
1219 '(begin
1220 ;; Remove bundled sources for external libraries
1221 (delete-file-recursively "external")
40effef7 1222 ;; Use only system libraries
8b9ec354 1223 (substitute* "CMakeLists.txt"
40effef7
RW
1224 (("include\\( PTE_ThirdParty \\)")
1225 "\
1226include(third_party/Qt)
1227include(third_party/boost)
1228add_library( Catch INTERFACE IMPORTED )
1229add_library( rapidjson INTERFACE IMPORTED )"))
8b9ec354
RW
1230 #t))))
1231 (build-system cmake-build-system)
1232 (arguments
7e11d113 1233 `(#:modules ((guix build cmake-build-system)
8b9ec354
RW
1234 (guix build utils)
1235 (ice-9 match))
1236 #:configure-flags
1237 ;; CMake appears to lose the RUNPATH for some reason, so it has to be
1238 ;; explicitly set with CMAKE_INSTALL_RPATH.
7e11d113 1239 (list "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE"
7e11d113 1240 (string-append "-DCMAKE_INSTALL_RPATH="
8b9ec354
RW
1241 (string-join (map (match-lambda
1242 ((name . directory)
1243 (string-append directory "/lib")))
40effef7
RW
1244 %build-inputs) ";"))
1245 "-DPTE_DATA_DIR=share/powertabeditor")
8b9ec354
RW
1246 #:phases
1247 (modify-phases %standard-phases
40effef7
RW
1248 (replace 'check
1249 (lambda _
b1b82aed
RW
1250 (invoke "bin/pte_tests"
1251 ;; FIXME: these tests fail
1252 "exclude:Actions/EditStaff"
1253 "exclude:Formats/PowerTabOldImport/MergeMultiBarRests"
1254 "exclude:Score/ViewFilter/FilterRule"
1255 "exclude:Score/ViewFilter/ViewFilter"
1256 "exclude:Formats/PowerTabOldImport/Directions")
1257 #t))
04ba7a9d
RW
1258 ;; FIXME: This bug has been fixed upstream, but no release has been
1259 ;; made yet. See https://github.com/powertab/powertabeditor/issues/257
1260 (add-after 'unpack 'fix-boost-bug
1261 (lambda _
1262 (substitute* "source/score/voiceutils.cpp"
1263 (("boost::rational<int> duration\\(4, pos.getDurationType\\(\\)\\);")
1264 "boost::rational<int> duration(4, static_cast<int>(pos.getDurationType()));"))
1265 #t))
1e341fa5
RW
1266 ;; Fix build with Qt 5.11.
1267 (add-after 'unpack 'add-missing-headers
1268 (lambda _
1269 (substitute* (find-files "source/dialogs/" "\\.h$")
1270 (("#include <QDialog>" m)
1271 (string-append m "\n#include <QButtonGroup>")))
1272 (substitute* "source/widgets/mixer/mixeritem.h"
1273 (("#include <QWidget>" m)
1274 (string-append m "\n#include <QStyle>")))
1275 (substitute* "source/widgets/playback/playbackwidget.h"
1276 (("#include <QWidget>" m)
1277 (string-append m "\n#include <QButtonGroup>\n#include <QAction>")))
1278 #t))
40effef7
RW
1279 (add-before 'configure 'remove-third-party-libs
1280 (lambda* (#:key inputs #:allow-other-keys)
1281 ;; Link with required static libraries, because we're not
1282 ;; using the bundled version of withershins.
c3913fac 1283 ;; Also add pthread for fixing a linker error.
40effef7
RW
1284 (substitute* "source/build/CMakeLists.txt"
1285 (("withershins" line)
1286 (string-append line "\n"
1287 (assoc-ref inputs "binutils")
1288 "/lib/libbfd.a\n"
1289 (assoc-ref inputs "libiberty")
1290 "/lib/libiberty.a\n"
1291 "dl\n"
c3913fac 1292 "pthread\n"
40effef7
RW
1293 "z\n")))
1294 #t)))))
8b9ec354
RW
1295 (inputs
1296 `(("boost" ,boost)
1297 ("alsa-lib" ,alsa-lib)
0a0bfd68 1298 ("qtbase" ,qtbase)
8b9ec354 1299 ("withershins" ,withershins)
d6902798 1300 ("libiberty" ,libiberty) ;for withershins
8b9ec354
RW
1301 ("binutils" ,binutils) ;for -lbfd and -liberty (for withershins)
1302 ("timidity" ,timidity++)
1303 ("pugixml" ,pugixml)
1304 ("rtmidi" ,rtmidi)
1305 ("rapidjson" ,rapidjson)
1306 ("zlib" ,zlib)))
1307 (native-inputs
1308 `(("catch" ,catch-framework)
1309 ("pkg-config" ,pkg-config)))
1310 (home-page "http://powertabs.net")
1311 (synopsis "Guitar tablature editor")
1312 (description
1313 "Power Tab Editor 2.0 is the successor to the famous original Power Tab
1314Editor. It is compatible with Power Tab Editor 1.7 and Guitar Pro.")
1315 (license license:gpl3+)))
1316
3d4b1bb9
RW
1317(define-public jalv-select
1318 (package
1319 (name "jalv-select")
fc1ff7fc 1320 (version "1.3")
3d4b1bb9 1321 (source (origin
ca364e7a
RW
1322 (method git-fetch)
1323 (uri (git-reference
1324 (url "https://github.com/brummer10/jalv_select.git")
fc1ff7fc 1325 (commit (string-append "v" version))))
ca364e7a 1326 (file-name (git-file-name name version))
3d4b1bb9
RW
1327 (sha256
1328 (base32
fc1ff7fc 1329 "15yanq1wra0hyh6x72ji7pk562iddg476g3vksj495x91zhnl6vm"))))
3d4b1bb9
RW
1330 (build-system gnu-build-system)
1331 (arguments
1332 `(#:make-flags
1333 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
1334 #:phases
1335 (modify-phases %standard-phases
1336 (delete 'configure)
1337 (add-after 'unpack 'ignore-PATH
1338 (lambda* (#:key inputs #:allow-other-keys)
1339 (substitute* "jalv.select.cpp"
ad7f6e5f 1340 (("echo \\$PATH.*tr ':'.*xargs ls")
3d4b1bb9 1341 (string-append "ls -1 " (assoc-ref inputs "jalv") "/bin")))
ca364e7a
RW
1342 #t))
1343 (add-before 'reset-gzip-timestamps 'make-manpages-writable
1344 (lambda* (#:key outputs #:allow-other-keys)
1345 (for-each make-file-writable
1346 (find-files (string-append (assoc-ref outputs "out")
1347 "/share/man")
1348 ".*\\.gz$"))
3d4b1bb9
RW
1349 #t)))))
1350 (inputs
1351 `(("lilv" ,lilv)
1352 ("lv2" ,lv2)
1353 ("jalv" ,jalv)
1354 ("gtkmm" ,gtkmm-2)))
1355 (native-inputs
1356 `(("pkg-config" ,pkg-config)))
1357 (home-page "https://github.com/brummer10/jalv_select")
1358 (synopsis "GUI to select LV2 plugins and run them with jalv")
1359 (description
1360 "The jalv.select package provides a graphical user interface allowing
1361users to select LV2 plugins and run them with jalv.")
1362 (license license:public-domain)))
1363
b095e762
RW
1364(define-public synthv1
1365 (package
1366 (name "synthv1")
8c7c7687 1367 (version "0.9.8")
b095e762
RW
1368 (source (origin
1369 (method url-fetch)
1370 (uri
de67e922
LF
1371 (string-append "mirror://sourceforge/synthv1/synthv1/" version
1372 "/synthv1-" version ".tar.gz"))
b095e762
RW
1373 (sha256
1374 (base32
8c7c7687 1375 "15kabmxp38wqvavs5hr1dqasjjf1j977kzqggxfmzyi3y5fan3hj"))))
b095e762 1376 (build-system gnu-build-system)
69008d73 1377 (arguments
8c7c7687 1378 `(#:tests? #f)) ; there are no tests
b095e762
RW
1379 (inputs
1380 `(("jack" ,jack-1)
1381 ("lv2" ,lv2)
1382 ("alsa-lib" ,alsa-lib)
b45aa39b 1383 ("non-session-manager" ,non-session-manager)
b095e762 1384 ("liblo" ,liblo)
e5f2afdb
EF
1385 ("qtbase" ,qtbase)
1386 ("qttools" ,qttools)))
b45aa39b
RW
1387 (native-inputs
1388 `(("pkg-config" ,pkg-config)))
9459216a 1389 (home-page "https://synthv1.sourceforge.io")
b095e762
RW
1390 (synopsis "Polyphonic subtractive synthesizer")
1391 (description
1392 "Synthv1 is an old-school subtractive polyphonic synthesizer with four
1393oscillators and stereo effects.")
1394 (license license:gpl2+)))
2bb00612 1395
cf9af706
RW
1396(define-public drumkv1
1397 (package
1398 (name "drumkv1")
8b78ba2b 1399 (version "0.9.8")
cf9af706
RW
1400 (source (origin
1401 (method url-fetch)
1402 (uri
1403 (string-append "mirror://sourceforge/drumkv1/drumkv1/" version
1404 "/drumkv1-" version ".tar.gz"))
1405 (sha256
1406 (base32
8b78ba2b 1407 "010p8nwnmqgj5mw324psig3hxi1g2gylxrigd6sj6sgcpy3kdm23"))))
cf9af706
RW
1408 (build-system gnu-build-system)
1409 (arguments
8b78ba2b 1410 `(#:tests? #f)) ; there are no tests
cf9af706
RW
1411 (inputs
1412 `(("jack" ,jack-1)
1413 ("lv2" ,lv2)
1414 ("libsndfile" ,libsndfile)
1415 ("alsa-lib" ,alsa-lib)
41e2a731 1416 ("non-session-manager" ,non-session-manager)
cf9af706
RW
1417 ("liblo" ,liblo)
1418 ("qtbase" ,qtbase)))
1419 (native-inputs
1420 `(("pkg-config" ,pkg-config)
1421 ("qttools" ,qttools)))
9459216a 1422 (home-page "https://drumkv1.sourceforge.io")
cf9af706
RW
1423 (synopsis "Drum-kit sampler synthesizer with stereo effects")
1424 (description
1425 "Drumkv1 is an old-school drum-kit sampler synthesizer with stereo
1426effects.")
1427 (license license:gpl2+)))
1428
18675264
RW
1429(define-public samplv1
1430 (package
1431 (name "samplv1")
d32f2aa3 1432 (version "0.9.8")
18675264
RW
1433 (source (origin
1434 (method url-fetch)
1435 (uri
1436 (string-append "mirror://sourceforge/samplv1/samplv1/" version
1437 "/samplv1-" version ".tar.gz"))
1438 (sha256
1439 (base32
d32f2aa3 1440 "138kd9szgn3b97s7crhsyj8pgwb0bn4l9knd4zliqjgj2f1bs9x0"))))
18675264
RW
1441 (build-system gnu-build-system)
1442 (arguments
d32f2aa3 1443 `(#:tests? #f)) ; there are no tests
18675264
RW
1444 (inputs
1445 `(("jack" ,jack-1)
1446 ("lv2" ,lv2)
1447 ("libsndfile" ,libsndfile)
1448 ("alsa-lib" ,alsa-lib)
92b70c6f 1449 ("non-session-manager" ,non-session-manager)
18675264
RW
1450 ("liblo" ,liblo)
1451 ("qtbase" ,qtbase)))
1452 (native-inputs
1453 `(("pkg-config" ,pkg-config)
1454 ("qttools" ,qttools)))
9459216a 1455 (home-page "https://samplv1.sourceforge.io")
18675264
RW
1456 (synopsis "Polyphonic sampler synthesizer with stereo effects")
1457 (description
1458 "Samplv1 is an old-school polyphonic sampler synthesizer with stereo
1459effects.")
1460 (license license:gpl2+)))
1461
2702e12e
RW
1462(define-public padthv1
1463 (package
1464 (name "padthv1")
0246bfc0 1465 (version "0.9.8")
2702e12e
RW
1466 (source (origin
1467 (method url-fetch)
1468 (uri
1469 (string-append "mirror://sourceforge/padthv1/padthv1/" version
1470 "/padthv1-" version ".tar.gz"))
1471 (sha256
1472 (base32
0246bfc0 1473 "1k4p2ir12qjcs62knvw2s6qyvb46203yx22fnwp341cjk171cxji"))))
2702e12e
RW
1474 (build-system gnu-build-system)
1475 (arguments
0246bfc0 1476 `(#:tests? #f)) ; there are no tests
2702e12e
RW
1477 (inputs
1478 `(("jack" ,jack-1)
1479 ("lv2" ,lv2)
1480 ("alsa-lib" ,alsa-lib)
1481 ("non-session-manager" ,non-session-manager)
1482 ("liblo" ,liblo)
1483 ("fftw" ,fftw)
1484 ("qtbase" ,qtbase)))
1485 (native-inputs
1486 `(("pkg-config" ,pkg-config)
1487 ("qttools" ,qttools)))
9459216a 1488 (home-page "https://padthv1.sourceforge.io")
2702e12e
RW
1489 (synopsis "Polyphonic additive synthesizer")
1490 (description
1491 "Padthv1 is an old-school polyphonic additive synthesizer with stereo
1492effects. Padthv1 is based on the PADsynth algorithm by Paul Nasca, as a
1493special variant of additive synthesis.")
1494 (license license:gpl2+)))
1495
2bb00612
RW
1496(define-public amsynth
1497 (package
1498 (name "amsynth")
7e0befd4 1499 (version "1.7.1")
2bb00612
RW
1500 (source
1501 (origin
1502 (method url-fetch)
1503 (uri (string-append "https://github.com/amsynth/amsynth/releases/"
1504 "download/release-" version
1505 "/amsynth-" version ".tar.bz2"))
1506 (sha256
1507 (base32
7e0befd4 1508 "1882pfcmf3rqg3vd4qflzkppcv158d748i603spqjbxqi8z7x7w0"))))
2bb00612
RW
1509 (build-system gnu-build-system)
1510 (arguments
1511 `(#:phases
1512 (modify-phases %standard-phases
1513 (add-before 'configure 'set-flags
1514 (lambda _
1515 ;; Compile with C++11, required by gtkmm.
1516 (setenv "CXXFLAGS" "-std=c++11")
1517 #t)))))
1518 (inputs
1519 `(("alsa-lib" ,alsa-lib)
1520 ("jack" ,jack-1)
1521 ("lv2" ,lv2)
7175f4c2 1522 ("lash" ,lash)
2bb00612
RW
1523 ("libsndfile" ,libsndfile)
1524 ("gtk+" ,gtk+-2)
1525 ("gtkmm" ,gtkmm-2)))
1526 (native-inputs
7e0befd4
RW
1527 `(("pkg-config" ,pkg-config)
1528 ("intltool" ,intltool)))
2bb00612
RW
1529 (home-page "http://amsynth.github.io")
1530 (synopsis "Analog modeling synthesizer")
1531 (description
1532 "amsynth is an easy-to-use software synthesizer with a classic
1533subtractive synthesizer topology. Its features include: dual
1534oscillators (sine, saw, square, noise) with hard sync; 12 and 24 dB/oct
1535resonant filters (low-pass, high-pass, band-pass, notch); mono, poly, legato
1536keyboard modes; dual ADSR envelope generators for filter and amplitude; LFO
1537which can modulate the oscillators, filter, and amplitude; distortion and
1538reverb effects.")
1539 (license license:gpl2+)))
b095e762 1540
ec8da0e2
RW
1541(define-public setbfree
1542 (package
1543 (name "setbfree")
8ce1b78b 1544 (version "0.8.9")
ec8da0e2 1545 (source (origin
e0674840
TGR
1546 (method git-fetch)
1547 (uri (git-reference
1548 (url "https://github.com/pantherb/setBfree")
1549 (commit (string-append "v" version))))
1550 (file-name (git-file-name name version))
ec8da0e2
RW
1551 (sha256
1552 (base32
8ce1b78b 1553 "1lpsa64xvwa9xbbp8zcwxy5w0daffc7fziny2pizabqh7m9xqjl2"))))
ec8da0e2
RW
1554 (build-system gnu-build-system)
1555 (arguments
d7caf8b8 1556 `(#:tests? #f ; no "check" target
ec8da0e2
RW
1557 #:make-flags
1558 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
1559 (string-append "FONTFILE="
1560 (assoc-ref %build-inputs "font-bitstream-vera")
b42d4508
RW
1561 "/share/fonts/truetype/VeraBd.ttf")
1562 ;; Disable unsupported optimization flags on non-x86
1563 ,@(let ((system (or (%current-target-system)
1564 (%current-system))))
1565 (if (or (string-prefix? "x86_64" system)
1566 (string-prefix? "i686" system))
1567 '()
1568 '("OPTIMIZATIONS=-ffast-math -fomit-frame-pointer -O3"))))
ec8da0e2
RW
1569 #:phases
1570 (modify-phases %standard-phases
1571 (add-before 'build 'set-CC-variable
d7caf8b8 1572 (lambda _ (setenv "CC" "gcc") #t))
ec8da0e2
RW
1573 (delete 'configure))))
1574 (inputs
1575 `(("jack" ,jack-1)
1576 ("lv2" ,lv2)
1577 ("zita-convolver" ,zita-convolver)
1578 ("glu" ,glu)
1579 ("ftgl" ,ftgl)
1580 ("font-bitstream-vera" ,font-bitstream-vera)))
1581 (native-inputs
1582 `(("help2man" ,help2man)
1583 ("pkg-config" ,pkg-config)))
1584 (home-page "http://setbfree.org")
1585 (synopsis "Tonewheel organ")
1586 (description
1587 "setBfree is a MIDI-controlled, software synthesizer designed to imitate
1588the sound and properties of the electromechanical organs and sound
1589modification devices that brought world-wide fame to the names and products of
1590Laurens Hammond and Don Leslie.")
1591 (license license:gpl2+)))
1592
770305f4
RW
1593(define-public beast
1594 (package
1595 (name "beast")
1596 (version "0.10.0")
1597 (source (origin
1598 (method url-fetch)
1599 (uri (string-append "https://testbit.eu/pub/dists/beast/beast-"
1600 version ".tar.xz"))
1601 (sha256
1602 (base32
1603 "1jzzmfwssklzw8fvvil04n8csc0zm99fnd9p2xa7c0xchg37lvhn"))))
1604 (build-system gnu-build-system)
844f4f6e
EF
1605 (arguments
1606 '(#:parallel-build? #f)) ; Race conditions cause build failures
770305f4
RW
1607 (inputs
1608 `(("rapicorn" ,rapicorn)
1609 ("guile" ,guile-1.8)
1610 ("python" ,python-2)
770305f4
RW
1611 ("libgnomecanvas" ,libgnomecanvas)
1612 ("libogg" ,libogg)
1613 ("libmad" ,libmad)
1614 ("flac" ,flac)
1615 ("alsa-lib" ,alsa-lib)
1616 ("libvorbis" ,libvorbis)
b94a6ca0 1617 ("gettext" ,gettext-minimal)))
770305f4
RW
1618 (native-inputs
1619 `(("pkg-config" ,pkg-config)
1620 ("glib:bin" ,glib "bin")
f2516de2 1621 ("cython" ,python2-cython)
770305f4
RW
1622 ("perl" ,perl)
1623 ("perl-xml-parser" ,perl-xml-parser)))
1624 (home-page "https://testbit.eu/wiki/Beast_Home")
1625 (synopsis "Music composition and modular synthesis environment")
1626 (description
1627 "Beast is a music composition and modular synthesis application. It
1628supports a wide range of standards in the field, such as MIDI, various audio
1629file formats and LADSPA modules. It allows for multitrack editing, real-time
1630synthesis, 32bit audio rendering, precise timing down to sample granularity,
1631on-demand and partial loading of wave files, on the fly decoding, stereo
1632mixing, FFT scopes, MIDI automation and full scriptability in Scheme.")
1633 (license license:gpl3+)))
1634
96250294
RW
1635(define-public bristol
1636 (package
1637 (name "bristol")
1638 (version "0.60.11")
1639 (source (origin
1640 (method url-fetch)
1641 (uri (string-append "mirror://sourceforge/bristol/bristol/"
1642 (version-major+minor version)
1643 "/bristol-" version ".tar.gz"))
1644 (sha256
1645 (base32
1646 "1fi2m4gmvxdi260821y09lxsimq82yv4k5bbgk3kyc3x1nyhn7vx"))))
1647 (build-system gnu-build-system)
18ef998b
RW
1648 (arguments
1649 `(#:phases
1650 (modify-phases %standard-phases
1651 (add-after 'unpack 'remove-sse-flags
1652 (lambda* (#:key system #:allow-other-keys)
1653 (when (not (or (string-prefix? "x86_64" system)
1654 (string-prefix? "i686" system)))
1655 (substitute* "bristol/Makefile.in"
1656 (("-msse -mfpmath=sse") "")))
73124d34 1657 #t))
bd0c6231
RW
1658 ;; alsa-lib 1.1.x no longer provides iatomic.h. That's okay because
1659 ;; bristol actually doesn't use it.
1660 (add-after 'unpack 'do-not-use-alsa-iatomic
1661 (lambda _
1662 (substitute* "libbristolaudio/audioEngineJack.c"
1663 (("#include <alsa/iatomic.h>") ""))
1664 #t))
73124d34
RW
1665 ;; We know that Bristol has been linked with JACK and we don't have
1666 ;; ldd, so we can just skip this check.
1667 (add-after 'unpack 'do-not-grep-for-jack
1668 (lambda _
1669 (substitute* "bin/startBristol.in"
1670 (("ldd `which bristol` | grep jack") "echo guix"))
18ef998b 1671 #t)))))
96250294
RW
1672 (inputs
1673 `(("alsa-lib" ,alsa-lib)
1674 ("jack" ,jack-1)
1675 ("liblo" ,liblo)
1676 ("libx11" ,libx11)))
1677 (native-inputs
1678 `(("pkg-config" ,pkg-config)))
1679 (home-page "http://bristol.sourceforge.net/")
1680 (synopsis "Synthesizer emulator")
1681 (description
36a4366d 1682 "Bristol is an emulation package for a number of different @code{classic}
96250294
RW
1683synthesizers including additive and subtractive and a few organs. The
1684application consists of the engine, which is called bristol, and its own GUI
1685library called brighton that represents all the emulations. There are
1686currently more than twenty different emulations; each does sound different
1687although the author maintains that the quality and accuracy of each emulation
1688is subjective.")
1689 (license license:gpl3+)))
1690
6260d1a8
RW
1691(define-public tuxguitar
1692 (package
1693 (name "tuxguitar")
a0a7e425 1694 (version "1.5.2")
6260d1a8
RW
1695 (source (origin
1696 (method url-fetch)
1697 (uri (string-append
1698 "mirror://sourceforge/tuxguitar/TuxGuitar/TuxGuitar-"
f467c352 1699 version "/tuxguitar-" version "-src.tar.gz"))
6260d1a8
RW
1700 (sha256
1701 (base32
a0a7e425 1702 "10arfpgm2pw7mn922klklzn05lw5ifqx070shdrar81afmkfbbd9"))))
f467c352 1703 (build-system ant-build-system)
6260d1a8 1704 (arguments
f467c352 1705 `(#:build-target "build"
40f372af 1706 #:jdk ,icedtea-8
a0a7e425 1707 #:tests? #f ; no tests
6260d1a8 1708 #:phases
5f1c9498 1709 (modify-phases %standard-phases
f467c352
RW
1710 (add-after 'unpack 'enter-dir
1711 (lambda _ (chdir "TuxGuitar-lib") #t))
750e54ec 1712 (add-after 'build 'build-libraries
f467c352 1713 (lambda* (#:key inputs outputs #:allow-other-keys)
750e54ec
RW
1714 (let* ((initial-classpath (getenv "CLASSPATH"))
1715 (build-dir (lambda (dir)
1716 (chdir "..")
1717 (setenv "CLASSPATH"
1718 (string-join (cons initial-classpath
1719 (find-files (getcwd) "\\.jar$"))
1720 ":"))
1721 (chdir dir)
1722 (if (file-exists? "build.xml")
1723 ((assoc-ref %standard-phases 'build)
1724 #:build-target "build")
1725 (begin
a0a7e425 1726 ;; Generate default build.xml.
750e54ec
RW
1727 ((@@ (guix build ant-build-system) default-build.xml)
1728 (string-append (string-downcase dir) ".jar")
1729 (string-append (assoc-ref outputs "out")
1730 "/share/java"))
1731 ((assoc-ref %standard-phases 'build)))))))
1732 (map build-dir '("TuxGuitar-editor-utils"
1733 "TuxGuitar-ui-toolkit"
1734 "TuxGuitar-ui-toolkit-swt"
1735 "TuxGuitar-awt-graphics")))))
1736 (add-after 'build-libraries 'build-application
f467c352
RW
1737 (lambda _
1738 (chdir "../TuxGuitar")
1739 ((assoc-ref %standard-phases 'build)
1740 #:build-target "build")))
1741 (replace 'install
1742 (lambda* (#:key inputs outputs #:allow-other-keys)
1743 (let* ((out (assoc-ref outputs "out"))
1744 (bin (string-append out "/bin"))
1745 (share (string-append out "/share"))
1746 (lib (string-append share "/java"))
1747 (swt (assoc-ref inputs "java-swt")))
1748 (mkdir-p bin)
a0a7e425 1749 ;; Install all jars.
f467c352
RW
1750 (for-each (lambda (file)
1751 (install-file file lib))
1752 (find-files ".." "\\.jar$"))
750e54ec 1753
a0a7e425 1754 ;; Install all resources.
750e54ec
RW
1755 (copy-recursively "share" share)
1756
a0a7e425 1757 ;; Create wrapper.
f467c352
RW
1758 (call-with-output-file (string-append bin "/tuxguitar")
1759 (lambda (port)
1760 (let ((classpath (string-join (append (find-files lib "\\.jar$")
1761 (find-files swt "\\.jar$"))
1762 ":")))
1763 (format
1764 port
1765 (string-append "#!/bin/sh\n"
1766 (which "java")
1767 " -cp " classpath
1768 " -Dtuxguitar.home.path=" out
1769 " -Dtuxguitar.share.path=" out "/share"
1770 " -Dswt.library.path=" swt "/lib"
1771 " org.herac.tuxguitar.app.TGMainSingleton"
1772 " \"$1\" \"$2\"")))))
1773 (chmod (string-append bin "/tuxguitar") #o555)
1774 #t))))))
6260d1a8 1775 (inputs
1ad15c16 1776 `(("java-swt" ,java-swt)))
d4eae3f7 1777 (home-page "http://tuxguitar.com.ar/")
6260d1a8
RW
1778 (synopsis "Multitrack tablature editor and player")
1779 (description
1780 "TuxGuitar is a guitar tablature editor with player support through midi.
1781It can display scores and multitrack tabs. TuxGuitar provides various
1782additional features, including autoscrolling while playing, note duration
1783management, bend/slide/vibrato/hammer-on/pull-off effects, support for
1784tuplets, time signature management, tempo management, gp3/gp4/gp5 import and
1785export.")
1786 (license license:lgpl2.1+)))
2d0fd07b
RW
1787
1788(define-public pd
1789 (package
1790 (name "pd")
4bad41e0 1791 (version "0.50-0")
2d0fd07b
RW
1792 (source (origin
1793 (method url-fetch)
1794 (uri
037bf4f4
RW
1795 (string-append "http://msp.ucsd.edu/Software/pd-"
1796 version ".src.tar.gz"))
2d0fd07b
RW
1797 (sha256
1798 (base32
4bad41e0 1799 "0hg4n5b55f650qsc0mjx559072dp7vfza7w0pvk6rk2l831cvsps"))))
2d0fd07b
RW
1800 (build-system gnu-build-system)
1801 (arguments
4bad41e0 1802 `(#:tests? #f ; no "check" target
96808b39
SB
1803 #:configure-flags
1804 (list
1805 "--enable-jack"
1806 (string-append "--with-wish=" (string-append
1807 (assoc-ref %build-inputs "tk")
1808 "/bin/wish8.6")))
2d0fd07b
RW
1809 #:phases
1810 (modify-phases %standard-phases
96808b39 1811 (add-before 'configure 'fix-with-path
4712cbb0 1812 (lambda _
4712cbb0
RW
1813 (substitute* "tcl/pd-gui.tcl"
1814 (("exec wish ") (string-append "exec " (which "wish8.6") " ")))
9ab90ead 1815 #t)))))
2d0fd07b
RW
1816 (native-inputs
1817 `(("autoconf" ,autoconf)
1818 ("automake" ,automake)
1819 ("libtool" ,libtool)
b94a6ca0 1820 ("gettext" ,gettext-minimal)
2d0fd07b
RW
1821 ("pkg-config" ,pkg-config)))
1822 (inputs
1823 `(("tk" ,tk)
1824 ("alsa-lib" ,alsa-lib)
1825 ("jack" ,jack-1)))
1826 (home-page "http://puredata.info")
1827 (synopsis "Visual programming language for artistic performances")
1828 (description
1829 "Pure Data (aka Pd) is a visual programming language. Pd enables
1830musicians, visual artists, performers, researchers, and developers to create
1831software graphically, without writing lines of code. Pd is used to process
1832and generate sound, video, 2D/3D graphics, and interface sensors, input
1833devices, and MIDI. Pd can easily work over local and remote networks to
1834integrate wearable technology, motor systems, lighting rigs, and other
1835equipment. Pd is suitable for learning basic multimedia processing and visual
1836programming methods as well as for realizing complex systems for large-scale
1837projects.")
1838 (license license:bsd-3)))
821664f1 1839
6826f1e1
SB
1840(define-public libpd
1841 (package
1842 (name "libpd")
1843 (version "0.11.0")
1844 (source (origin
1845 (method git-fetch)
1846 (uri (git-reference
1847 (url "https://github.com/libpd/libpd.git")
1848 (commit version)
1849 (recursive? #t))) ; for the 'pure-data' submodule
1850 (file-name (string-append name "-" version "-checkout"))
1851 (sha256
1852 (base32
1853 "1bcg1d9iyf9n37hwwphmih0c8rd1xcqykil5z1cax6xfs76552nk"))))
1854 (build-system gnu-build-system)
1855 (arguments
1856 '(#:tests? #f ; no tests
1857 #:make-flags '("CC=gcc")
1858 #:phases
1859 (modify-phases %standard-phases
1860 (delete 'configure) ; no configure script
1861 (replace 'install
1862 (lambda* (#:key outputs #:allow-other-keys)
1863 (let ((out (assoc-ref outputs "out")))
1864 (invoke "make" "install"
1865 (string-append "prefix=" out)
1866 ;; XXX: Fix the last 2 lines of 'install' target.
1867 "LIBPD_IMPLIB=NO"
1868 "LIBPD_DEF=NO")))))))
1869 (home-page "http://libpd.cc/")
1870 (synopsis "Pure Data as an embeddable audio synthesis library")
1871 (description
1872 "Libpd provides Pure Data as an embeddable audio synthesis library. Its
1873main purpose is to liberate raw audio rendering from audio and MIDI drivers.")
1874 (license license:bsd-3)))
1875
aacb52fb
RW
1876(define-public portmidi
1877 (package
1878 (name "portmidi")
1879 (version "217")
1880 (source (origin
1881 (method url-fetch)
1882 (uri (string-append "mirror://sourceforge/portmedia/portmidi/"
1883 version "/portmidi-src-" version ".zip"))
1884 (sha256
1885 (base32
1886 "03rfsk7z6rdahq2ihy5k13qjzgx757f75yqka88v3gc0pn9ais88"))
1887 (patches (list (search-patch "portmidi-modular-build.patch")))))
1888 (build-system cmake-build-system)
1889 (arguments
3def739d
TGR
1890 `(#:tests? #f ; tests cannot be linked
1891 #:build-type "Release" ; needed to have PMALSA set
aacb52fb
RW
1892 #:configure-flags
1893 (list "-DPORTMIDI_ENABLE_JAVA=Off"
a374d9c9
NG
1894 "-DPORTMIDI_ENABLE_TEST=Off") ; tests fail linking
1895 #:phases
1896 (modify-phases %standard-phases
1897 ;; Some packages, e.g., MuseScore, expect "libporttime.so" instead of
1898 ;; "libportmidi.so". Distributions get away with it by creating an
1899 ;; appropriate symlink.
1900 (add-after 'install 'add-porttime
1901 (lambda* (#:key outputs #:allow-other-keys)
1902 (let* ((out (assoc-ref outputs "out"))
1903 (lib (string-append out "/lib")))
1904 (with-directory-excursion lib
1905 (symlink "libportmidi.so" "libporttime.so")))
1906 #t)))))
aacb52fb
RW
1907 (inputs
1908 `(("alsa-lib" ,alsa-lib)))
1909 (native-inputs
1910 `(("unzip" ,unzip)))
1911 (home-page "http://portmedia.sourceforge.net/portmidi/")
1912 (synopsis "Library for MIDI I/O")
1913 (description
1914 "PortMidi is a library supporting real-time input and output of MIDI data
1915using a system-independent interface.")
1916 (license license:expat)))
f65d59fc 1917
38098bf7
RW
1918(define-public portmidi-for-extempore
1919 (package (inherit portmidi)
1920 (name "portmidi-for-extempore")
1921 (version "217")
1922 (source (origin
57906fad
RW
1923 (method git-fetch)
1924 (uri (git-reference
1925 (url "https://github.com/extemporelang/portmidi.git")
1926 (commit version)))
1927 (file-name (git-file-name name version))
38098bf7
RW
1928 (sha256
1929 (base32
57906fad 1930 "1inriyrjf7xx2b7r54x0vmf9ngyqgr7g5060c22bwkbsgg53apzv"))))
38098bf7
RW
1931 (build-system cmake-build-system)
1932 (arguments `(#:tests? #f)) ; no tests
1933 (native-inputs '())
39162ee4
RW
1934 ;; Extempore refuses to build on architectures other than x86_64
1935 (supported-systems '("x86_64-linux"))
38098bf7
RW
1936 (home-page "https://github.com/extemporelang/portmidi/")))
1937
f65d59fc
RW
1938(define-public python-pyportmidi
1939 (package
1940 (name "python-pyportmidi")
1941 (version (package-version portmidi))
1942 (source (package-source portmidi))
1943 (build-system python-build-system)
1944 (arguments
1945 `(#:tests? #f ; no tests included
1946 #:phases
1947 (modify-phases %standard-phases
1948 (add-after 'unpack 'enter-dir
1949 (lambda _ (chdir "pm_python") #t))
1950 (add-after 'enter-dir 'fix-setup.py
1951 (lambda _
1952 (substitute* "setup.py"
1953 ;; Use Python 3 syntax
1954 (("print (\".*\")" _ text)
1955 (string-append "print(" text ")\n"))
1956 ;; TODO.txt and CHANGES.txt don't exist
1957 (("CHANGES =.*") "CHANGES = \"\"\n")
1958 (("TODO =.*") "TODO = \"\"\n"))
1959 #t)))))
1960 (inputs
1961 `(("portmidi" ,portmidi)
f2516de2 1962 ("alsa-lib" ,alsa-lib)))
f65d59fc 1963 (native-inputs
f2516de2
HG
1964 `(("python-cython" ,python-cython)
1965 ("unzip" ,unzip)))
f65d59fc
RW
1966 (home-page "http://portmedia.sourceforge.net/portmidi/")
1967 (synopsis "Python bindings to PortMidi")
1968 (description
1969 "This package provides Python bindings to the PortMidi library.")
1970 (license license:expat)))
aacb52fb 1971
821664f1
RW
1972(define-public frescobaldi
1973 (package
1974 (name "frescobaldi")
e40335b2 1975 (version "3.0.0")
821664f1
RW
1976 (source (origin
1977 (method url-fetch)
1978 (uri (string-append
1979 "https://github.com/wbsoft/frescobaldi/releases/download/v"
1980 version "/frescobaldi-" version ".tar.gz"))
1981 (sha256
1982 (base32
e40335b2 1983 "15cqhbjbjikr7ljgiq56bz2gxrr38j8p0f78p2vhyzydaviy9a2z"))))
821664f1 1984 (build-system python-build-system)
a19a6d3a 1985 (arguments `(#:tests? #f)) ; no tests included
821664f1
RW
1986 (inputs
1987 `(("lilypond" ,lilypond)
6855b347 1988 ("portmidi" ,portmidi)
e40335b2 1989 ("python-pyqt" ,python-pyqt)
821664f1 1990 ("python-ly" ,python-ly)
6855b347 1991 ("python-pyportmidi" ,python-pyportmidi)
821664f1 1992 ("poppler" ,poppler)
e40335b2 1993 ("python-poppler-qt5" ,python-poppler-qt5)
821664f1
RW
1994 ("python-sip" ,python-sip)))
1995 (home-page "http://www.frescobaldi.org/")
1996 (synopsis "LilyPond sheet music text editor")
1997 (description
1998 "Frescobaldi is a LilyPond sheet music text editor with syntax
1999highlighting and automatic completion. Among other things, it can render
2000scores next to the source, can capture input from MIDI or read MusicXML and
2001ABC files, has a MIDI player for proof-listening, and includes a documentation
2002browser.")
2003 (license license:gpl2+)))
ddfddb0c 2004
bf76d780
RW
2005(define-public drumstick
2006 (package
2007 (name "drumstick")
6fd7e0cc 2008 (version "1.1.3")
bf76d780
RW
2009 (source (origin
2010 (method url-fetch)
2011 (uri (string-append "mirror://sourceforge/drumstick/"
2012 version "/drumstick-" version ".tar.bz2"))
2013 (sha256
2014 (base32
6fd7e0cc 2015 "1n9wvg79yvkygrkc8xd8pgrd3d7hqmr7gh24dccf0px23lla9b3m"))))
bf76d780
RW
2016 (build-system cmake-build-system)
2017 (arguments
7adaf5b5 2018 `(#:tests? #f ; no test target
bf76d780
RW
2019 #:configure-flags '("-DLIB_SUFFIX=")
2020 #:phases
2021 (modify-phases %standard-phases
2022 (add-before 'configure 'fix-docbook
2023 (lambda* (#:key inputs #:allow-other-keys)
2024 (substitute* "cmake_admin/CreateManpages.cmake"
2025 (("http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl")
2026 (string-append (assoc-ref inputs "docbook-xsl")
2027 "/xml/xsl/docbook-xsl-"
2028 ,(package-version docbook-xsl)
2029 "/manpages/docbook.xsl")))
2030 #t)))))
2031 (inputs
ca1cab82
EF
2032 `(("qtbase" ,qtbase)
2033 ("qtsvg" ,qtsvg)
7adaf5b5 2034 ("alsa-lib" ,alsa-lib)))
bf76d780
RW
2035 (native-inputs
2036 `(("pkg-config" ,pkg-config)
7adaf5b5 2037 ("libxslt" ,libxslt) ; for xsltproc
bf76d780
RW
2038 ("docbook-xsl" ,docbook-xsl)
2039 ("doxygen" ,doxygen)))
2040 (home-page "http://drumstick.sourceforge.net/")
2041 (synopsis "C++ MIDI library")
2042 (description
2043 "Drumstick is a set of MIDI libraries using C++/Qt5 idioms and style. It
2044includes a C++ wrapper around the ALSA library sequencer interface. A
2045complementary library provides classes for processing SMF (Standard MIDI
2046files: .MID/.KAR), Cakewalk (.WRK), and Overture (.OVE) file formats. A
2047multiplatform realtime MIDI I/O library is also provided with various output
2048backends, including ALSA, OSS, Network and FluidSynth.")
2049 (license license:gpl2+)))
2050
14b9203d
RW
2051(define-public vmpk
2052 (package
2053 (name "vmpk")
2054 (version "0.7.2")
2055 (source (origin
2056 (method url-fetch)
2057 (uri (string-append "mirror://sourceforge/vmpk/vmpk/"
2058 version "/vmpk-" version ".tar.bz2"))
2059 (sha256
2060 (base32
2061 "1i3hnvdgz46n4k5v0q4jhgh7nkh0s390ix4nqr69z0q3026yp0p6"))))
2062 (build-system cmake-build-system)
2063 (arguments
2064 `(#:tests? #f ; no test target
2065 #:phases
2066 (modify-phases %standard-phases
2067 (add-before 'configure 'fix-docbook
2068 (lambda* (#:key inputs #:allow-other-keys)
2069 (substitute* "cmake_admin/CreateManpages.cmake"
2070 (("http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl")
2071 (string-append (assoc-ref inputs "docbook-xsl")
2072 "/xml/xsl/docbook-xsl-"
2073 ,(package-version docbook-xsl)
2074 "/manpages/docbook.xsl")))
2075 #t)))))
2076 (inputs
2077 `(("drumstick" ,drumstick)
2078 ("qtbase" ,qtbase)
2079 ("qtsvg" ,qtsvg)
2080 ("qttools" ,qttools)
2081 ("qtx11extras" ,qtx11extras)))
2082 (native-inputs
2083 `(("libxslt" ,libxslt) ;for xsltproc
2084 ("docbook-xsl" ,docbook-xsl)
2085 ("pkg-config" ,pkg-config)))
2086 (home-page "http://vmpk.sourceforge.net")
2087 (synopsis "Virtual MIDI piano keyboard")
2088 (description
2089 "Virtual MIDI Piano Keyboard is a MIDI events generator and receiver. It
2090doesn't produce any sound by itself, but can be used to drive a MIDI
2091synthesizer (either hardware or software, internal or external). You can use
2092the computer's keyboard to play MIDI notes, and also the mouse. You can use
2093the Virtual MIDI Piano Keyboard to display the played MIDI notes from another
2094instrument or MIDI file player.")
2095 (license license:gpl3+)))
2096
ddfddb0c
RW
2097(define-public zynaddsubfx
2098 (package
2099 (name "zynaddsubfx")
5f88d81f 2100 (version "3.0.5")
ddfddb0c
RW
2101 (source (origin
2102 (method url-fetch)
2103 (uri (string-append
2104 "mirror://sourceforge/zynaddsubfx/zynaddsubfx/"
138e7697 2105 version "/zynaddsubfx-" version ".tar.bz2"))
ddfddb0c
RW
2106 (sha256
2107 (base32
5f88d81f 2108 "0qwzg14h043rmyf9jqdylxhyfy4sl0vsr0gjql51wjhid0i34ivl"))))
ddfddb0c 2109 (build-system cmake-build-system)
00dfc97c
RW
2110 (arguments
2111 `(#:phases
2112 (modify-phases %standard-phases
2113 ;; Move SSE compiler optimization flags from generic target to
2114 ;; athlon64 and core2 targets, because otherwise the build would fail
2115 ;; on non-Intel machines.
2116 (add-after 'unpack 'remove-sse-flags-from-generic-target
2117 (lambda _
2118 (substitute* "src/CMakeLists.txt"
2119 (("-msse -msse2 -mfpmath=sse") "")
2120 (("-march=(athlon64|core2)" flag)
2121 (string-append flag " -msse -msse2 -mfpmath=sse")))
2122 #t)))))
ddfddb0c
RW
2123 (inputs
2124 `(("liblo" ,liblo)
2125 ("ntk" ,ntk)
1ea7969f 2126 ("mesa" ,mesa)
ddfddb0c
RW
2127 ("alsa-lib" ,alsa-lib)
2128 ("jack" ,jack-1)
2129 ("fftw" ,fftw)
2130 ("minixml" ,minixml)
2131 ("libxpm" ,libxpm)
2132 ("zlib" ,zlib)))
2133 (native-inputs
2134 `(("pkg-config" ,pkg-config)))
2135 (home-page "http://zynaddsubfx.sf.net/")
2136 (synopsis "Software synthesizer")
2137 (description
2138 "ZynAddSubFX is a feature heavy realtime software synthesizer. It offers
2139three synthesizer engines, multitimbral and polyphonic synths, microtonal
2140capabilities, custom envelopes, effects, etc.")
2141 (license license:gpl2)))
c493679f
RW
2142
2143(define-public yoshimi
2144 (package
2145 (name "yoshimi")
886534b4 2146 (version "1.6.0.1")
c493679f
RW
2147 (source (origin
2148 (method url-fetch)
2149 (uri (string-append "mirror://sourceforge/yoshimi/"
2150 (version-major+minor version)
2151 "/yoshimi-" version ".tar.bz2"))
2152 (sha256
2153 (base32
886534b4 2154 "140f2k4akj39pny8c7i794q125415gyvmy4rday0il5ncp3glik4"))))
c493679f
RW
2155 (build-system cmake-build-system)
2156 (arguments
886534b4 2157 `(#:tests? #f ; there are no tests
c493679f
RW
2158 #:configure-flags
2159 (list (string-append "-DCMAKE_INSTALL_DATAROOTDIR="
2160 (assoc-ref %outputs "out") "/share"))
2161 #:phases
2162 (modify-phases %standard-phases
2163 (add-before 'configure 'enter-dir
2164 (lambda _ (chdir "src") #t))
2165 ;; Move SSE compiler optimization flags from generic target to
2166 ;; athlon64 and core2 targets, because otherwise the build would fail
2167 ;; on non-Intel machines.
2168 (add-after 'unpack 'remove-sse-flags-from-generic-target
2169 (lambda _
2170 (substitute* "src/CMakeLists.txt"
2171 (("-msse -msse2 -mfpmath=sse") "")
2172 (("-march=(athlon64|core2)" flag)
2173 (string-append flag " -msse -msse2 -mfpmath=sse")))
5edc8682 2174 #t)))))
c493679f
RW
2175 (inputs
2176 `(("boost" ,boost)
2177 ("fftwf" ,fftwf)
2178 ("alsa-lib" ,alsa-lib)
2179 ("jack" ,jack-1)
2180 ("fontconfig" ,fontconfig)
2181 ("minixml" ,minixml)
2182 ("mesa" ,mesa)
2183 ("fltk" ,fltk)
2184 ("lv2" ,lv2)
2185 ("readline" ,readline)
2186 ("ncurses" ,ncurses)
2187 ("cairo" ,cairo)
2188 ("zlib" ,zlib)))
2189 (native-inputs
2190 `(("pkg-config" ,pkg-config)))
2191 (home-page "http://yoshimi.sourceforge.net/")
2192 (synopsis "Multi-paradigm software synthesizer")
2193 (description
edfa2eee 2194 "Yoshimi is a fork of ZynAddSubFX, a feature-heavy real-time software
c493679f
RW
2195synthesizer. It offers three synthesizer engines, multitimbral and polyphonic
2196synths, microtonal capabilities, custom envelopes, effects, etc. Yoshimi
2197improves on support for JACK features, such as JACK MIDI.")
2198 (license license:gpl2)))
658212eb 2199
e87cb754
RW
2200(define-public libgig
2201 (package
2202 (name "libgig")
38146797 2203 (version "4.1.0")
e87cb754
RW
2204 (source (origin
2205 (method url-fetch)
2206 (uri (string-append "http://download.linuxsampler.org/packages/"
2207 "libgig-" version ".tar.bz2"))
2208 (sha256
2209 (base32
38146797 2210 "02xx6bqxzgkvrawwnzrnxx1ypk244q4kpwfd58266f9ji8kq18h6"))))
e87cb754
RW
2211 (build-system gnu-build-system)
2212 (inputs
2213 `(("libuuid" ,util-linux)
2214 ("libsndfile" ,libsndfile)))
2215 (native-inputs
2216 `(("pkg-config" ,pkg-config)))
2217 (home-page "http://linuxsampler.org/libgig/")
2218 (synopsis "C++ library for working with Gigasampler (.gig) files")
2219 (description
2220 "Libgig is a C++ library for loading, modifying existing and creating new
2221Gigasampler (.gig) files and DLS (Downloadable Sounds) Level 1/2 files, KORG
2222sample based instruments (.KSF and .KMP files), SoundFont v2 (.sf2) files and
2223AKAI sampler data. The package includes a couple of command line tools based
2224on the library.")
2225 ;; The library and tools are released under the GPL, except the AKAI
2226 ;; classes which are released under the LGPL.
2227 (license (list license:gpl2+ license:lgpl2.1+))))
2228
a9f55bf2
RW
2229(define-public jack-keyboard
2230 (package
2231 (name "jack-keyboard")
2232 (version "2.5")
2233 (source
2234 (origin
2235 (method url-fetch)
2236 (uri (string-append "mirror://sourceforge/jack-keyboard/jack-keyboard/"
2237 version "/jack-keyboard-" version ".tar.gz"))
2238 (sha256
2239 (base32
2240 "0mzmg8aavybcfdlq2yd9d0vscqd6is5p6jzrgfpfm5j3xdcvh2s3"))))
2241 (build-system gnu-build-system)
2242 (inputs
2243 `(("jack" ,jack-1)
2244 ("lash" ,lash)
2245 ("gtk+" ,gtk+-2)))
2246 (native-inputs
2247 `(("pkg-config" ,pkg-config)))
2248 (home-page "http://jack-keyboard.sourceforge.net/")
2249 (synopsis "Virtual MIDI keyboard")
2250 (description "Jack-keyboard is a virtual MIDI keyboard, a program that
2251allows you to send JACK MIDI events (i.e. play) using your PC keyboard.")
2252 (license license:bsd-2)))
2253
39b33584
RW
2254(define-public jack-capture
2255 (package
2256 (name "jack-capture")
2257 (version "0.9.73")
2258 (source (origin
2259 (method git-fetch)
2260 (uri (git-reference
2261 (url "https://github.com/kmatheussen/jack_capture.git")
2262 (commit version)))
2263 (file-name (string-append name "-" version "-checkout"))
2264 (sha256
2265 (base32
2266 "0jcqky96q8xgya6wqv1p8pj9fkf2wh7ynl67ah7x5bn3basgfclf"))))
2267 (build-system gnu-build-system)
2268 (arguments
2269 `(#:make-flags
2270 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
2271 #:tests? #f ; there are none
2272 #:phases
2273 (modify-phases %standard-phases
2274 (delete 'configure))))
2275 (native-inputs
2276 `(("pkg-config" ,pkg-config)
2277 ("which" ,which)))
2278 (inputs
2279 `(("gtk+" ,gtk+-2)
2280 ("jack" ,jack-1)
2281 ("libogg" ,libogg)
2282 ("liblo" ,liblo)
2283 ("lame" ,lame)
2284 ("libsndfile" ,libsndfile)))
2285 (home-page "https://github.com/kmatheussen/jack_capture")
2286 (synopsis "Program for recording sound files with JACK")
2287 (description "This is a program for recording sound files with JACK. It
2288can connect to any JACK port and record the output into a stereo WAV file.")
2289 (license license:gpl2+)))
2290
658212eb
LF
2291(define-public cursynth
2292 (package
2293 (name "cursynth")
2294 (version "1.5")
2295 (source
2296 (origin
2297 (method url-fetch)
2298 (uri (string-append "mirror://gnu/cursynth/cursynth-"
2299 version ".tar.gz"))
2300 (sha256
2301 (base32 "1dhphsya41rv8z6yqcv9l6fwbslsds4zh1y56zizi39nd996d40v"))
fc1adab1 2302 (patches (search-patches "cursynth-wave-rand.patch"))))
658212eb
LF
2303 (build-system gnu-build-system)
2304 (native-inputs `(("pkg-config" ,pkg-config)))
2305 ;; TODO: See https://github.com/iyoko/cursynth/issues/4 which currently
2306 ;; prevents us from using pulseaudio
2307 (inputs `(("ncurses" ,ncurses)
2308 ("alsa" ,alsa-lib)))
6fd52309 2309 (home-page "https://www.gnu.org/software/cursynth/")
658212eb
LF
2310 (synopsis "Polyphonic and MIDI subtractive music synthesizer using curses")
2311 (description "GNU cursynth is a polyphonic synthesizer that runs
2312graphically in the terminal. It is built on a full-featured subtractive
2313synthesis engine. Notes and parameter changes may be entered via MIDI or the
2314computer's keyboard.")
2315 (license license:gpl3+)))
a763ce7d 2316
13edf1b9
RW
2317(define-public aj-snapshot
2318 (package
2319 (name "aj-snapshot")
bc03fe69 2320 (version "0.9.9")
13edf1b9
RW
2321 (source (origin
2322 (method url-fetch)
2323 (uri (string-append "mirror://sourceforge/aj-snapshot/"
2324 "aj-snapshot-" version ".tar.bz2"))
2325 (sha256
2326 (base32
bc03fe69 2327 "0z8wd5yvxdmw1h1rj6km9h01xd4xmp4d86gczlix7hsc7zrf0wil"))))
13edf1b9
RW
2328 (build-system gnu-build-system)
2329 (inputs
2330 `(("minixml" ,minixml)
2331 ("jack" ,jack-1)
2332 ("alsa-lib" ,alsa-lib)))
2333 (native-inputs
2334 `(("pkg-config" ,pkg-config)))
2335 (home-page "http://aj-snapshot.sourceforge.net/")
2336 (synopsis "Snapshot connections between ALSA and JACK clients")
2337 (description "Aj-snapshot is a small program that can be used to make
2338snapshots of the connections made between JACK and/or ALSA clients. Because
2339JACK can provide both audio and MIDI support to programs, aj-snapshot can
2340store both types of connections for JACK. ALSA, on the other hand, only
2341provides routing facilities for MIDI clients. Aj-snapshot is meant to be used
2342from the command line.")
2343 (license license:gpl3+)))
2344
a763ce7d
RW
2345(define-public qtractor
2346 (package
2347 (name "qtractor")
95bf4508 2348 (version "0.9.6")
a763ce7d
RW
2349 (source (origin
2350 (method url-fetch)
2351 (uri (string-append "http://downloads.sourceforge.net/qtractor/"
2352 "qtractor-" version ".tar.gz"))
2353 (sha256
2354 (base32
95bf4508 2355 "06sa4wl8zr0k8dnjiil0gjwnhrkq95h50xv56ih1y8jgyzxchaxp"))))
a763ce7d 2356 (build-system gnu-build-system)
42639cc9 2357 (arguments
d56eee86 2358 `(#:tests? #f)) ; no "check" target
a763ce7d 2359 (inputs
523544d3
RW
2360 `(("qt" ,qtbase)
2361 ("qtx11extras" ,qtx11extras)
a763ce7d
RW
2362 ("alsa-lib" ,alsa-lib)
2363 ("jack" ,jack-1)
2364 ("libsndfile" ,libsndfile)
2365 ("ladspa" ,ladspa)
2366 ("lv2" ,lv2)
2367 ("lilv" ,lilv)
2368 ("suil" ,suil)
2369 ("libsamplerate" ,libsamplerate)
2370 ("libvorbis" ,libvorbis)
2371 ("libmad" ,libmad)
2372 ("rubberband" ,rubberband)
2373 ("liblo" ,liblo)
2374 ("zlib" ,zlib)))
2375 (native-inputs
523544d3
RW
2376 `(("pkg-config" ,pkg-config)
2377 ("qttools" ,qttools)))
8071bbbc 2378 (home-page "http://qtractor.org/")
a763ce7d
RW
2379 (synopsis "Audio/MIDI multi-track sequencer")
2380 (description
2381 "Qtractor is an Audio/MIDI multi-track sequencer application. It uses
2382JACK for audio and ALSA sequencer for MIDI as multimedia infrastructures and
2383follows a traditional multi-track tape recorder control paradigm.")
2384 (license license:gpl2+)))
aa0edd3f 2385
849c3d03 2386(define-public ams-lv2
e029d90f
BH
2387 ;; Version 1.2.1 built with Python 3.7 raises an error in the waf-script.
2388 ;; Therefore, we take two more commmits than 1.2.1 that introduce an updated
2389 ;; waf-script and fix one error.
2390 (let ((commit "377d166db54a787b48979171c5652d2eb4f1bbb5")
2391 (revision "1"))
2392 (package
2393 (name "ams-lv2")
2394 (version (git-version "1.2.1" revision commit))
2395 (source
2396 (origin
2397 (method git-fetch)
2398 (uri (git-reference
2399 (url "https://github.com/blablack/ams-lv2.git")
2400 (commit commit)))
2401 (file-name (git-file-name name version))
2402 (sha256
2403 (base32
2404 "1ndgxcxjxwidg7436k0nb5clxkyi878k1j999sbbd1gk2fm0kcqm"))))
2405 (build-system waf-build-system)
2406 (arguments
2407 `(#:phases
2408 (modify-phases %standard-phases
2409 (add-after 'unpack 'remove-sse-flags
2410 (lambda* (#:key system #:allow-other-keys)
6cbb2c87
BH
2411 (unless (or (string-prefix? "x86_64" system)
2412 (string-prefix? "i686" system))
e029d90f 2413 (substitute* "wscript"
6cbb2c87
BH
2414 (("'-msse', '-mfpmath=sse', ") "")))
2415 #t)))
e029d90f
BH
2416 #:tests? #f)) ; no tests
2417 (inputs
2418 `(("lv2" ,lv2)
2419 ("lvtk" ,lvtk)
2420 ("gtkmm" ,gtkmm-2)
2421 ("gtk" ,gtk+-2)
2422 ("cairo" ,cairo)
2423 ("fftw" ,fftw)))
2424 (native-inputs
2425 `(("pkg-config" ,pkg-config)))
2426 (home-page "https://objectivewave.wordpress.com/ams-lv2/")
2427 (synopsis "Port of Alsa Modular Synth internal modules into LV2")
2428 (description "This set of LV2 plugins is a port of the internal modules
849c3d03
RW
2429found in Alsa Modular Synth. These plugins are used to create modular
2430synthesizers and contain: VCO, VCF, VCA, LFO, slew limiter, envelopes, sample
2431and hold, etc.")
e029d90f 2432 (license license:gpl2))))
849c3d03 2433
aed023ff
RW
2434(define-public gxtuner
2435 (package
2436 (name "gxtuner")
f5e0ff0f 2437 (version "2.4")
aed023ff 2438 (source (origin
bed4eb37
RW
2439 (method git-fetch)
2440 (uri (git-reference
2441 (url "https://github.com/brummer10/gxtuner.git")
2442 (commit (string-append "v" version))))
2443 (file-name (git-file-name name version))
aed023ff
RW
2444 (sha256
2445 (base32
bed4eb37 2446 "1fxd2akan2njlr7fpkh84830783qhh1gg7yakswqk5dd466dcn96"))))
aed023ff
RW
2447 (build-system gnu-build-system)
2448 (arguments
2449 `(#:make-flags
2450 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
2451 (string-append "INCLUDE_L_DIR="
2452 (assoc-ref %build-inputs "zita-resampler")
2453 "/include/"))
2454 #:phases
2455 (modify-phases %standard-phases
2456 (delete 'configure))))
2457 (inputs
f5e0ff0f 2458 `(("gtk+" ,gtk+)
aed023ff
RW
2459 ("jack" ,jack-1)
2460 ("fftwf" ,fftwf)
2461 ("cairo" ,cairo)
2462 ("zita-resampler" ,zita-resampler)))
2463 (native-inputs
2464 `(("pkg-config" ,pkg-config)))
2465 (home-page "https://github.com/brummer10/gxtuner")
2466 (synopsis "Guitar tuner")
2467 (description "GXtuner is a simple guitar tuner for JACK with an
2468analogue-like user interface.")
2469 (license license:gpl2+)))
2470
c2c9e748 2471(define-public mod-host
9f1ac4fa 2472 ;; The last release was in 2014 but since then hundreds of commits have
c2c9e748 2473 ;; been made.
9f1ac4fa
RW
2474 (let ((commit "1726ad06b11323da7e1aaed690ff8aef91f702b5")
2475 (revision "3"))
c2c9e748
RW
2476 (package
2477 (name "mod-host")
2478 (version (string-append "0.10.6-" revision "." (string-take commit 9)))
2479 (source (origin
2480 (method git-fetch)
2481 (uri (git-reference
2482 (url "https://github.com/moddevices/mod-host")
2483 (commit commit)))
2484 (sha256
2485 (base32
9f1ac4fa 2486 "1nrd37c35w6z6ldczgrwmmd9hx1n3zyvcjcgb3mi4cygqdanvspv"))
c2c9e748
RW
2487 (file-name (string-append name "-" version "-checkout"))))
2488 (build-system gnu-build-system)
2489 (arguments
2490 `(#:tests? #f ; no tests included
2491 #:make-flags
2492 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
2493 "CC=gcc")
2494 #:phases
2495 (modify-phases %standard-phases
2496 (delete 'configure)
2497 (add-after 'unpack 'fix-jack-installation-directory
2498 (lambda _
2499 ;; Do not attempt to install files to output of "jack" package.
2500 (substitute* "Makefile"
2501 (("\\$\\(shell pkg-config --variable=libdir jack\\)")
2502 "lib"))
2503 #t)))))
2504 (inputs
2505 `(("lilv" ,lilv)
c96cb01a
DC
2506 ("fftw" ,fftw)
2507 ("fftwf" ,fftwf)
c2c9e748
RW
2508 ("lv2" ,lv2)
2509 ("jack" ,jack-1)
2510 ("readline" ,readline)))
2511 (native-inputs
2512 `(("pkg-config" ,pkg-config)
2513 ("python" ,python-2)))
2514 (home-page "https://github.com/moddevices/mod-host")
2515 (synopsis "LV2 host for Jack controllable via socket or command line")
2516 (description "mod-host is an LV2 plugin host for JACK, controllable via
2517socket or command line.")
2518 (license license:gpl3+))))
2519
19d93ef5
SR
2520(define-public curseradio
2521 (let ((commit "1bd4bd0faeec675e0647bac9a100b526cba19f8d")
2522 (revision "1"))
2523 (package
2524 (name "curseradio")
2525 (version (git-version "0" revision commit))
2526 (source (origin
2527 (method git-fetch)
2528 (uri (git-reference
2529 (url "https://github.com/chronitis/curseradio.git")
2530 (commit commit)))
2531 (file-name (git-file-name name version))
2532 (sha256
2533 (base32
2534 "11bf0jnj8h2fxhpdp498189r4s6b47vy4wripv0z4nx7lxajl88i"))))
2535 (build-system python-build-system)
2536 (propagated-inputs
2537 `(("python-lxml" ,python-lxml)
2538 ("python-requests" ,python-requests)
2539 ("python-pyxdg" ,python-pyxdg)
2540 ("mpv" ,mpv)))
2541 (home-page "https://github.com/chronitis/curseradio")
2542 (synopsis "Command-line Internet radio player")
2543 (description "Curseradio is a Curses-based radio player that uses a
2544tune-in sender list from @url{http://opml.radiotime.com}.")
2545 (license license:expat))))
2546
aa0edd3f
AM
2547(define-public pianobar
2548 (package
2549 (name "pianobar")
3999b664 2550 (version "2016.06.02")
aa0edd3f 2551 (source (origin
1410e178
RW
2552 (method git-fetch)
2553 (uri (git-reference
2554 (url "https://github.com/PromyLOPh/pianobar.git")
2555 (commit version)))
2556 (file-name (git-file-name name version))
aa0edd3f
AM
2557 (sha256
2558 (base32
1410e178 2559 "058fbdxp7n35hxwy3b8slfy4pb4n63cb173vfmywqa06wh1dv6f6"))))
aa0edd3f
AM
2560 (build-system gnu-build-system)
2561 (arguments
2562 `(#:tests? #f ; no tests
2563 #:make-flags (list "CC=gcc" "CFLAGS=-std=c99"
2564 (string-append "PREFIX=" %output))
2565 #:phases (modify-phases %standard-phases
2566 (delete 'configure))))
2567 (inputs
2568 `(("ao" ,ao)
2569 ("curl" ,curl)
2570 ("libgcrypt" ,libgcrypt)
2571 ("json-c" ,json-c)
bb5c508c 2572 ("ffmpeg" ,ffmpeg-3.4)))
aa0edd3f
AM
2573 (native-inputs
2574 `(("pkg-config" ,pkg-config)))
2575 (home-page "http://6xq.net/projects/pianobar/")
2576 (synopsis "Console-based pandora.com player")
2577 (description "pianobar is a console-based music player for the
2578personalized online radio pandora.com. It has configurable keys for playing
2579and managing stations, can be controlled remotely via fifo, and can run
2580event-based scripts for scrobbling, notifications, etc.")
2581 (license license:expat)))
3f7a182d 2582
1deab8cb
CB
2583(define-public picard
2584 (package
2585 (name "picard")
b421e915 2586 (version "2.1.3")
1deab8cb
CB
2587 (source (origin
2588 (method url-fetch)
2589 (uri (string-append
2590 "https://musicbrainz.osuosl.org/pub/musicbrainz/"
2591 "picard/picard-" version ".tar.gz"))
2592 (sha256
2593 (base32
b421e915 2594 "19w5k3bf4886gdycxjds9nkjvir0gwy2r5cqkz0lbls4ikk4y14f"))))
1deab8cb
CB
2595 (build-system python-build-system)
2596 (arguments
251448f7
TGR
2597 '(#:use-setuptools? #f
2598 #:configure-flags
e28b0798
TGR
2599 (list "--root=/"
2600 ;; Don't phone home or show ‘Check for Update…’ in the Help menu.
2601 "--disable-autoupdate")
251448f7 2602 #:phases
1deab8cb
CB
2603 (modify-phases %standard-phases
2604 (add-after 'unpack 'patch-source
2605 (lambda* (#:key inputs #:allow-other-keys)
2606 (substitute* "picard/const/__init__.py"
2607 (("pyfpcalc")
2608 (string-append
2609 "pyfpcalc', '"
e247244e
TGR
2610 (assoc-ref inputs "chromaprint") "/bin/fpcalc")))
2611 #t)))))
1deab8cb
CB
2612 (native-inputs
2613 `(("gettext" ,gettext-minimal)))
2614 (inputs
2615 `(("chromaprint" ,chromaprint)
7d9fa5f3 2616 ("python-discid" ,python-discid)
1deab8cb
CB
2617 ("python-pyqt" ,python-pyqt)
2618 ("python-mutagen" ,python-mutagen)))
2619 (home-page "https://picard.musicbrainz.org/")
2620 (synopsis "Graphical music tagging application")
2621 (description
2622 "MusicBrainz Picard is a music tagging application, supporting multiple
2623formats, looking up tracks through metadata and audio fingerprints.")
2624 (license license:gpl2+)))
2625
3f7a182d
LF
2626(define-public python-mutagen
2627 (package
2628 (name "python-mutagen")
e39aae4f 2629 (version "1.38")
3f7a182d
LF
2630 (source (origin
2631 (method url-fetch)
2632 (uri (pypi-uri "mutagen" version))
2633 (sha256
2634 (base32
e39aae4f 2635 "0rl7sxn1rcjl48fwga3dqf9f6pzspsny4ngxyf6pp337mrq0z693"))))
3f7a182d 2636 (build-system python-build-system)
4228a79e
LF
2637 (native-inputs
2638 `(("python-pytest" ,python-pytest)))
3f7a182d
LF
2639 (home-page "https://bitbucket.org/lazka/mutagen")
2640 (synopsis "Read and write audio tags")
2641 (description "Mutagen is a Python module to handle audio metadata. It
2642supports ASF, FLAC, M4A, Monkey’s Audio, MP3, Musepack, Ogg FLAC, Ogg Speex, Ogg
2643Theora, Ogg Vorbis, True Audio, WavPack and OptimFROG audio files. All versions
2644of ID3v2 are supported, and all standard ID3v2.4 frames are parsed. It can read
2645Xing headers to accurately calculate the bitrate and length of MP3s. ID3 and
2646APEv2 tags can be edited regardless of audio format. It can also manipulate Ogg
2647streams on an individual packet/page level.")
2648 (license license:gpl2))) ; "later version" never mentioned
2649
2650(define-public python2-mutagen
2651 (package-with-python2 python-mutagen))
8975de88
LF
2652
2653(define-public python-musicbrainzngs
2654 (package
2655 (name "python-musicbrainzngs")
daedf34d 2656 (version "0.6")
8975de88
LF
2657 (source (origin
2658 (method url-fetch)
2659 (uri (pypi-uri "musicbrainzngs" version))
2660 (sha256
2661 (base32
daedf34d 2662 "1dddarpjawryll2wss65xq3v9q8ln8dan7984l5dxzqx88d2dvr8"))))
8975de88 2663 (build-system python-build-system)
daedf34d
LF
2664 (arguments
2665 '(;; The tests fail suffer from race conditions:
2666 ;; https://github.com/alastair/python-musicbrainzngs/issues/211
2667 #:tests? #f))
8975de88
LF
2668 (home-page "https://python-musicbrainzngs.readthedocs.org/")
2669 (synopsis "Python bindings for MusicBrainz NGS webservice")
2670 (description "Musicbrainzngs implements Python bindings of the MusicBrainz
2671web service. This library can be used to retrieve music metadata from the
2672MusicBrainz database.")
2673 ;; 'musicbrainzngs/compat.py' is ISC licensed.
2674 (license (list license:bsd-2 license:isc))))
2675
2676(define-public python2-musicbrainzngs
2677 (package-with-python2 python-musicbrainzngs))
e8fee648 2678
07c82daa
GH
2679(define-public python-isrcsubmit
2680 (package
2681 (name "python-isrcsubmit")
2682 (version "2.0.1")
2683 (source
2684 (origin
2685 (method url-fetch)
2686 (uri (pypi-uri "isrcsubmit" version))
2687 (sha256
2688 (base32
2689 "0jh4cni8qhri6dh83cmp0i0m0384vv0vznlygv49wj9xzh1d99qv"))))
2690 (build-system python-build-system)
2691 (propagated-inputs
2692 `(("python-discid" ,python-discid)
2693 ("python-musicbrainzngs" ,python-musicbrainzngs)))
2694 (home-page "https://github.com/JonnyJD/musicbrainz-isrcsubmit")
2695 (synopsis "Submit ISRCs from CDs to MusicBrainz")
2696 (description "@code{isrcsubmit} is a tool to extract @dfn{International
2697Standard Recording Code} (ISRCs) from audio CDs and submit them to
2698@url{https://musicbrainz.org/, MusicBrainz}.")
2699 (license license:gpl3+)))
2700
a2eab422 2701(define-public python2-pyechonest
e8fee648 2702 (package
a2eab422 2703 (name "python2-pyechonest")
e8fee648
LF
2704 (version "9.0.0")
2705 (source (origin
2706 (method url-fetch)
2707 (uri (pypi-uri "pyechonest" version))
2708 (sha256
2709 (base32
2710 "1584nira3rkiman9dm81kdshihmkj21s8navndz2l8spnjwb790x"))))
2711 (build-system python-build-system)
a2eab422
LF
2712 (arguments
2713 `(;; Python 3 is not supported:
2714 ;; https://github.com/echonest/pyechonest/issues/42
2715 #:python ,python-2))
e8fee648
LF
2716 (home-page "https://github.com/echonest/pyechonest")
2717 (synopsis "Python interface to The Echo Nest APIs")
d3e3468f
LF
2718 (description "Pyechonest is a Python library for the Echo Nest API. With
2719Pyechonest you have Python access to the entire set of API methods including:
e8fee648
LF
2720
2721@enumerate
2722@item artist - search for artists by name, description, or attribute, and get
2723back detailed information about any artist including audio, similar artists,
2724blogs, familiarity, hotttnesss, news, reviews, urls and video.
2725@item song - search songs by artist, title, description, or attribute (tempo,
2726duration, etc) and get detailed information back about each song, such as
2727hotttnesss, audio_summary, or tracks.
2728@item track - upload a track to the Echo Nest and receive summary information
2729about the track including key, duration, mode, tempo, time signature along with
2730detailed track info including timbre, pitch, rhythm and loudness information.
2731@end enumerate\n")
a2eab422 2732 (license license:bsd-3)))
acd7351f
LF
2733
2734(define-public python-pylast
2735 (package
2736 (name "python-pylast")
653f2b92 2737 (version "2.0.0")
acd7351f
LF
2738 (source (origin
2739 (method url-fetch)
2740 (uri (pypi-uri "pylast" version))
2741 (sha256
2742 (base32
653f2b92 2743 "0r9h7g8i8l2mgqjwkda3v6prfbkb2im5kap1az9ppmhjm9i4jkcf"))))
acd7351f 2744 (build-system python-build-system)
653f2b92
RW
2745 ;; Tests require network access. See
2746 ;; https://github.com/pylast/pylast/issues/105
2747 (arguments '(#:tests? #f))
acd7351f
LF
2748 (native-inputs
2749 `(("python-coverage" ,python-coverage)
653f2b92 2750 ("python-pycodestyle" ,python-pycodestyle)
acd7351f
LF
2751 ("python-mock" ,python-mock)
2752 ("python-pep8" ,python-pep8)
2753 ("python-pytest" ,python-pytest)
653f2b92 2754 ("python-flaky" ,python-flaky)
acd7351f
LF
2755 ("python-pyflakes" ,python-pyflakes)
2756 ("python-pyyaml" ,python-pyyaml)))
2757 (propagated-inputs
2758 `(("python-six" ,python-six)))
2759 (home-page "https://github.com/pylast/pylast")
2760 (synopsis "Python interface to Last.fm and Libre.fm")
2761 (description "A Python interface to Last.fm and other API-compatible
2762websites such as Libre.fm.")
5c31f4aa 2763 (license license:asl2.0)))
acd7351f
LF
2764
2765(define-public python2-pylast
5c31f4aa 2766 (package-with-python2 python-pylast))
3bf429af 2767
b0dea60c
SR
2768(define-public instantmusic
2769 (let ((commit "300891d09c703525215fa5a116b9294af1c923c8")
2770 (revision "1"))
2771 (package
2772 (name "instantmusic")
2773 (version (git-version "1.0" revision commit))
2774 (source (origin
2775 (method git-fetch)
2776 (uri (git-reference
2777 (url "https://github.com/yask123/Instant-Music-Downloader.git")
2778 (commit commit)))
2779 (file-name (git-file-name name version))
2780 (sha256
2781 (base32
2782 "0j7qivaa04bpdz3anmgci5833dgiyfqqwq9fdrpl9m68b34gl773"))))
2783 (build-system python-build-system)
2784 (propagated-inputs
2785 `(("python-requests" ,python-requests)
c695fb76 2786 ("eyed3" ,eyed3)
b0dea60c
SR
2787 ("python-beautifulsoup4" ,python-beautifulsoup4)
2788 ("youtube-dl" ,youtube-dl)))
2789 (arguments
2790 '(#:modules ((guix build python-build-system)
2791 (guix build utils)
2792 (srfi srfi-26))
2793 #:phases (modify-phases %standard-phases
2794 (add-before 'build 'change-directory
2795 (lambda _
2796 (chdir "instantmusic-0.1") #t))
2797 (add-before 'check 'fix-file-permissions
2798 (lambda _
2799 ;; Fix some read-only files that would cause a build failure
2800 (for-each (cut chmod <> #o644)
2801 (find-files "instantmusic.egg-info"
2802 "PKG-INFO|.*\\.txt"))
2803 #t)))))
2804 (home-page "http://iyask.me/Instant-Music-Downloader/")
2805 (synopsis "Command-line program to download a song from YouTube")
2806 (description "InstantMusic downloads a song from YouTube in MP3 format.
2807Songs can be searched by artist, name or even by a part of the song text.")
2808 (license license:expat))))
2809
3bf429af
LF
2810(define-public beets
2811 (package
2812 (name "beets")
191c439e 2813 (version "1.4.7")
3bf429af
LF
2814 (source (origin
2815 (method url-fetch)
23319ed6 2816 (uri (pypi-uri "beets" version))
c05c1910 2817 (patches (search-patches "beets-python-3.7-fix.patch"))
3bf429af
LF
2818 (sha256
2819 (base32
191c439e 2820 "0w3gz69s9gf5ih69d4sddgh7ndj7658m621bp742zldvjakdncrs"))))
3bf429af
LF
2821 (build-system python-build-system)
2822 (arguments
0d48ff81 2823 `(#:phases
3bf429af
LF
2824 (modify-phases %standard-phases
2825 (add-after 'unpack 'set-HOME
46fce968
TGR
2826 (lambda _
2827 (setenv "HOME" (string-append (getcwd) "/tmp"))
2828 #t))
aa007978
DM
2829 (add-after 'unpack 'make-python3.7-compatible
2830 (lambda _
2831 ;; See <https://github.com/beetbox/beets/issues/2978>.
2832 (substitute* "beets/autotag/hooks.py"
2833 (("re\\._pattern_type") "re.Pattern"))
2834 #t))
36c2c8c8 2835 (replace 'check
46fce968
TGR
2836 (lambda _
2837 (invoke "nosetests" "-v"))))))
3bf429af 2838 (native-inputs
0d48ff81
LF
2839 `(("python-beautifulsoup4" ,python-beautifulsoup4)
2840 ("python-flask" ,python-flask)
2841 ("python-mock" ,python-mock)
2842 ("python-mpd2" ,python-mpd2)
2843 ("python-nose" ,python-nose)
2844 ("python-pathlib" ,python-pathlib)
2845 ("python-pyxdg" ,python-pyxdg)
2846 ("python-pylast" ,python-pylast)
2847 ("python-rarfile" ,python-rarfile)
2848 ("python-responses" ,python-responses)))
3bf429af 2849 ;; TODO: Install optional plugins and dependencies.
b3470031 2850 (inputs
0d48ff81 2851 `(("python-discogs-client" ,python-discogs-client)
0d48ff81
LF
2852 ("python-jellyfish" ,python-jellyfish)
2853 ("python-munkres" ,python-munkres)
2854 ("python-musicbrainzngs" ,python-musicbrainzngs)
2855 ("python-mutagen" ,python-mutagen)
2856 ("python-pyyaml" ,python-pyyaml)
2857 ("python-unidecode" ,python-unidecode)))
3bf429af
LF
2858 (home-page "http://beets.io")
2859 (synopsis "Music organizer")
2860 (description "The purpose of beets is to get your music collection right
2861once and for all. It catalogs your collection, automatically improving its
2862metadata as it goes using the MusicBrainz database. Then it provides a variety
2863of tools for manipulating and accessing your music.")
2864 (license license:expat)))
21d18113 2865
4ee2cce3
JK
2866(define-public beets-bandcamp
2867 (package
2868 (name "beets-bandcamp")
2869 (version "0.1.3")
2870 (source (origin
2871 (method url-fetch)
2872 (uri (pypi-uri "beets-bandcamp" version))
2873 (sha256
2874 (base32
2875 "04awg0zdhhg5h510fc1p3qkvr2l1qm6nf85hlr9z8im8a7xlka0i"))))
2876 (build-system python-build-system)
2877 (arguments '(#:tests? #f)) ; there are no tests
2878 (propagated-inputs
2879 `(("beets" ,beets)
2880 ("python-isodate" ,python-isodate)))
2881 (inputs
2882 `(("python-beautifulsoup4" ,python-beautifulsoup4)
2883 ("python-requests" ,python-requests)
2884 ("python-six" ,python-six)))
2885 (home-page "https://github.com/unrblt/beets-bandcamp")
2886 (synopsis "Bandcamp plugin for beets")
2887 (description
2888 "This plugin for beets automatically obtains tag data from @uref{Bandcamp,
2889https://bandcamp.com/}. It's also capable of getting song lyrics and album art
2890using the beets FetchArt plugin.")
2891 (license license:gpl2)))
2892
21d18113
KY
2893(define-public milkytracker
2894 (package
2895 (name "milkytracker")
b7e2fcf0 2896 (version "1.02.00")
21d18113 2897 (source (origin
caa39e56
RW
2898 (method git-fetch)
2899 (uri (git-reference
2900 (url "https://github.com/milkytracker/MilkyTracker.git")
2901 (commit (string-append "v" version))))
2902 (file-name (git-file-name name version))
21d18113
KY
2903 (sha256
2904 (base32
caa39e56 2905 "05a6d7l98k9i82dwrgi855dnccm3f2lkb144gi244vhk1156n0ca"))
e3b2e943
KK
2906 (modules '((guix build utils)))
2907 ;; Remove non-FSDG compliant sample songs.
2908 (snippet
2909 '(begin
2910 (delete-file-recursively "resources/music")
2911 (substitute* "CMakeLists.txt"
6cbee49d
MW
2912 (("add_subdirectory\\(resources/music\\)") ""))
2913 #t))))
e3b2e943 2914 (build-system cmake-build-system)
21d18113 2915 (arguments
7f2f8345
KK
2916 '(#:tests? #f ; no check target
2917 ;; This flag ensures that MilkyTracker links with the JACK library.
2918 #:configure-flags '("-DCMAKE_CXX_FLAGS=-ljack")))
21d18113
KY
2919 (inputs
2920 `(("alsa-lib" ,alsa-lib)
ba259bad 2921 ("lhasa" ,lhasa)
21d18113 2922 ("jack" ,jack-1)
f1618a0f 2923 ("rtmidi" ,rtmidi)
e3b2e943 2924 ("sdl" ,sdl2)
f1618a0f
KK
2925 ("zlib" ,zlib)
2926 ("zziplib" ,zziplib)))
21d18113
KY
2927 (native-inputs
2928 `(("pkg-config" ,pkg-config)))
2929 (synopsis "Music tracker for working with .MOD/.XM module files")
2930 (description "MilkyTracker is a music application for creating .MOD and .XM
2931module files. It attempts to recreate the module replay and user experience of
2932the popular DOS program Fasttracker II, with special playback modes available
2933for improved Amiga ProTracker 2/3 compatibility.")
1b35fea1 2934 (home-page "http://milkytracker.titandemo.org/")
21d18113
KY
2935 ;; 'src/milkyplay' is under Modified BSD, the rest is under GPL3 or later.
2936 (license (list license:bsd-3 license:gpl3+))))
13416a10 2937
89bcf3fc
KK
2938(define-public schismtracker
2939 (package
2940 (name "schismtracker")
e526db51 2941 (version "20190614")
89bcf3fc 2942 (source (origin
3b9e9415
RW
2943 (method git-fetch)
2944 (uri (git-reference
2945 (url "https://github.com/schismtracker/schismtracker.git")
2946 (commit version)))
2947 (file-name (git-file-name name version))
89bcf3fc
KK
2948 (sha256
2949 (base32
e526db51 2950 "0cg0q5bkn8a06v03vmj69xyhi4xxpl729k4008q4hiakh9gy2x49"))
89bcf3fc
KK
2951 (modules '((guix build utils)))
2952 (snippet
2953 ;; Remove use of __DATE__ and __TIME__ for reproducibility.
6cbee49d
MW
2954 `(begin
2955 (substitute* "schism/version.c"
2956 (("Schism Tracker built %s %s.*$")
2957 (string-append "Schism Tracker version " ,version "\");")))
2958 #t))))
89bcf3fc
KK
2959 (build-system gnu-build-system)
2960 (arguments
2961 `(#:phases
2962 (modify-phases %standard-phases
89bcf3fc
KK
2963 (add-before 'configure 'link-libm
2964 (lambda _ (setenv "LIBS" "-lm") #t)))))
2965 (native-inputs
2966 `(("autoconf" ,autoconf)
2967 ("automake" ,automake)
2968 ("python" ,python)))
2969 (inputs
e526db51 2970 `(("alsa-lib" ,alsa-lib) ; for asound dependency
89bcf3fc
KK
2971 ("libx11" ,libx11)
2972 ("libxext" ,libxext)
2973 ("sdl" ,sdl)))
2974 (home-page "http://schismtracker.org")
2975 (synopsis "Oldschool sample-based music composition tool")
2976 (description
2977 "Schism Tracker is a reimplementation of Impulse Tracker, a program used to
2978create high quality music without the requirements of specialized, expensive
2979equipment, and with a unique \"finger feel\" that is difficult to replicate in
2980part. The player is based on a highly modified version of the ModPlug engine,
2981with a number of bugfixes and changes to improve IT playback.")
2982 (license license:gpl2+)))
2983
5beecc32
RW
2984(define-public sooperlooper
2985 (package
2986 (name "sooperlooper")
2987 (version "1.7.3")
2988 (source (origin
2989 (method url-fetch)
2990 (uri (string-append "http://essej.net/sooperlooper/sooperlooper-"
2991 version ".tar.gz"))
2992 (sha256
2993 (base32
2994 "0n2gdxw1fx8nxxnpzf4sj0kp6k6zi1yq59cbz6qqzcnsnpnvszbs"))
2995 (patches (search-patches "sooperlooper-build-with-wx-30.patch"))))
2996 (build-system gnu-build-system)
2997 (arguments
e6e09dc9 2998 `(#:phases
5beecc32
RW
2999 (modify-phases %standard-phases
3000 (add-after 'unpack 'add-sigc++-includes
3001 (lambda* (#:key inputs #:allow-other-keys)
3002 (let ((sig (assoc-ref inputs "libsigc++"))
3003 (xml (assoc-ref inputs "libxml2"))
3004 (cwd (getcwd)))
3005 (setenv "CPATH"
3006 (string-append sig "/include/sigc++-2.0:"
3007 sig "/lib/sigc++-2.0/include:"
3008 xml "/include/libxml2/:"
3009 cwd "/libs/pbd:"
e6e09dc9
MB
3010 cwd "/libs/midi++:"
3011 (or (getenv "CPATH") ""))))
5beecc32
RW
3012 (substitute* '("src/control_osc.hpp"
3013 "src/gui/app_frame.hpp"
3014 "src/gui/config_panel.hpp"
3015 "src/gui/keys_panel.hpp"
3016 "src/gui/latency_panel.hpp"
3017 "src/gui/main_panel.hpp"
3018 "src/gui/midi_bind_panel.hpp"
3019 "src/gui/prefs_dialog.hpp")
3020 (("sigc\\+\\+/object.h")
3021 "sigc++/sigc++.h"))
3022 (substitute* '("src/engine.cpp"
3023 "src/gui/latency_panel.cpp"
3024 "src/gui/looper_panel.cpp"
3025 "src/gui/main_panel.cpp")
3026 (("(\\(| )bind " _ pre)
3027 (string-append pre "sigc::bind ")))
3028 #t))
3029 (add-after 'unpack 'fix-xpm-warnings
3030 (lambda _
3031 (substitute* (find-files "." "\\.xpm$")
3032 (("static char") "static const char"))
3033 #t)))))
3034 (inputs
3035 `(("jack" ,jack-1)
3036 ("alsa-lib" ,alsa-lib)
3037 ("wxwidgets" ,wxwidgets-gtk2)
3038 ("libsndfile" ,libsndfile)
3039 ("libsamplerate" ,libsamplerate)
3040 ("liblo" ,liblo)
3041 ("rubberband" ,rubberband)
3042 ("libxml2" ,libxml2)
3043 ("libsigc++" ,libsigc++)
3044 ("ncurses" ,ncurses)))
3045 (native-inputs
3046 `(("pkg-config" ,pkg-config)))
3047 (home-page "http://essej.net/sooperlooper/")
3048 (synopsis "Live looping sampler")
3049 (description
3050 "SooperLooper is a live looping sampler capable of immediate loop
3051recording, overdubbing, multiplying, reversing and more. It allows for
3052multiple simultaneous multi-channel loops limited only by your computer's
3053available memory.")
3054 (license license:gpl2+)))
3055
13416a10
KY
3056(define-public moc
3057 (package
3058 (name "moc")
2fbc004f 3059 (version "2.5.2")
13416a10
KY
3060 (source (origin
3061 (method url-fetch)
3062 (uri (string-append "http://ftp.daper.net/pub/soft/"
3063 name "/stable/"
3064 name "-" version ".tar.bz2"))
3065 (sha256
3066 (base32
2784b35f 3067 "026v977kwb0wbmlmf6mnik328plxg8wykfx9ryvqhirac0aq39pk"))))
13416a10
KY
3068 (build-system gnu-build-system)
3069 (inputs
3070 `(("alsa-lib" ,alsa-lib)
3071 ("curl" ,curl)
3072 ("faad2" ,faad2)
bb5c508c 3073 ("ffmpeg" ,ffmpeg-3.4)
13416a10
KY
3074 ("file" ,file)
3075 ("jack" ,jack-1)
3076 ("libid3tag" ,libid3tag)
3077 ("libltdl" ,libltdl)
3078 ("libmodplug" ,libmodplug)
3079 ("libmpcdec" ,libmpcdec)
3080 ("libmad" ,libmad)
6beaa5a0
MM
3081 ("libogg" ,libogg)
3082 ("libvorbis" ,libvorbis)
13416a10
KY
3083 ("ncurses" ,ncurses)
3084 ("openssl" ,openssl)
3085 ("sasl" ,cyrus-sasl)
3086 ("speex" ,speex)
3087 ("taglib" ,taglib)
3088 ("wavpack" ,wavpack)
3089 ("zlib" ,zlib)))
3090 (native-inputs
3091 `(("pkg-config" ,pkg-config)))
3092 (synopsis "Console audio player designed to be powerful and easy to use")
3093 (description
3094 "Music on Console is a console audio player that supports many file
3095formats, including most audio formats recognized by FFMpeg.")
3096 (home-page "http://moc.daper.net")
3097 (license license:gpl2+)))
6d3ef286
JF
3098
3099(define-public midicsv
3100 (package
3101 (name "midicsv")
3102 (version "1.1")
3103 (source (origin
3104 (method url-fetch)
3105 (uri (string-append "http://www.fourmilab.ch/webtools/midicsv/"
3106 name "-" version ".tar.gz"))
3107 (sha256
3108 (base32
3109 "1vvhk2nf9ilfw0wchmxy8l13hbw9cnpz079nsx5srsy4nnd78nkw"))))
3110 (build-system gnu-build-system)
3111 (arguments
3112 `(#:phases (modify-phases %standard-phases (delete 'configure))
3113 #:make-flags (list "CC=gcc" (string-append "INSTALL_DEST=" %output))))
3114 (synopsis "Convert MIDI files to and from CSV")
3115 (description
3116 "Midicsv reads a standard MIDI file and decodes it into a comma-separated
3117value file (CSV), which preserves all the information in the MIDI file. The
3118ASCII CSV file may be loaded into a spreadsheet or database application, or
3119processed by a program to transform the MIDI data (for example, to key
3120transpose a composition or extract a track from a multi-track sequence). A
3121CSV file in the format created by midicsv may be converted back into a
3122standard MIDI file with the csvmidi program.")
3123 (home-page "http://www.fourmilab.ch/webtools/midicsv/")
3124 (license license:public-domain)))
49604680
RW
3125
3126(define-public gx-guvnor-lv2
35f909d4
RW
3127 (package
3128 (name "gx-guvnor-lv2")
3129 (version "0.1")
3130 (source (origin
6ac8c78c
RW
3131 (method git-fetch)
3132 (uri (git-reference
3133 (url "https://github.com/brummer10/GxGuvnor.lv2.git")
3134 (commit (string-append "v" version))))
3135 (file-name (string-append name "-" version "-checkout"))
35f909d4
RW
3136 (sha256
3137 (base32
6ac8c78c 3138 "1wa5070j40p7f0b3kr259pzm99xb6cf2badr2capayjvgayd6gnm"))))
35f909d4
RW
3139 (build-system gnu-build-system)
3140 (arguments
3141 `(;; The check target is used only to output a warning.
3142 #:tests? #f
3143 #:make-flags
3144 (list (string-append "DESTDIR=" (assoc-ref %outputs "out")))
3145 #:phases
3146 (modify-phases %standard-phases
3147 (replace 'configure
3148 (lambda _
3149 (substitute* "Makefile"
6ac8c78c
RW
3150 (("INSTALL_DIR = .*") "INSTALL_DIR=/lib/lv2\n")
3151 (("install : all") "install :"))
35f909d4
RW
3152 #t)))))
3153 (inputs
3154 `(("lv2" ,lv2)))
3155 (home-page "https://github.com/brummer10/GxGuvnor.lv2")
3156 (synopsis "Overdrive/distortion pedal simulation")
3157 (description "This package provides the LV2 plugin \"GxGuvnor\", a
49604680 3158simulation of an overdrive or distortion pedal for guitars.")
35f909d4 3159 ;; The LICENSE file says GPLv3 but the license headers in the files say
4b359532
RW
3160 ;; GPLv2 or later. The whole project is released under GPLv3 or later
3161 ;; according to https://github.com/brummer10/GxGuvnor.lv2/issues/1
3162 (license license:gpl3+)))
85ae347e
RW
3163
3164(define-public gx-vbass-preamp-lv2
1b74b126
RW
3165 (let ((commit "eb999b0ca0ef4da40a59e458a9ab6e7042b96c99")
3166 (revision "2"))
85ae347e
RW
3167 (package (inherit gx-guvnor-lv2)
3168 (name "gx-vbass-preamp-lv2")
3169 (version (string-append "0-" revision "." (string-take commit 9)))
3170 (source (origin
3171 (method git-fetch)
3172 (uri (git-reference
3173 (url "https://github.com/brummer10/GxVBassPreAmp.lv2")
3174 (commit commit)))
3175 (sha256
3176 (base32
1b74b126 3177 "0firap073ldw4nrykkd7jvyyj0jbl1nslxyzjj4kswazp99x7d9h"))
85ae347e 3178 (file-name (string-append name "-" version "-checkout"))))
1b74b126
RW
3179 (inputs
3180 `(("lv2" ,lv2)
3181 ("gtk+" ,gtk+-2)))
3182 (native-inputs
3183 `(("pkg-config" ,pkg-config)))
85ae347e
RW
3184 (home-page "https://github.com/brummer10/GxVBassPreAmp.lv2")
3185 (synopsis "Simulation of the Vox Venue Bass 100 Pre Amp Section")
3186 (description "This package provides the LV2 plugin \"GxVBassPreAmp\", a
3187pre-amplifier simulation modelled after the 1984 Vox Venue Bass 100 Pre Amp
3188Section."))))
cdc7a021
RW
3189
3190(define-public gx-overdriver-lv2
3191 (let ((commit "ed71801987449414bf3adaa0dbfac68e8775f1ce")
3192 (revision "1"))
1b74b126 3193 (package (inherit gx-guvnor-lv2)
cdc7a021
RW
3194 (name "gx-overdriver-lv2")
3195 (version (string-append "0-" revision "." (string-take commit 9)))
3196 (source (origin
3197 (method git-fetch)
3198 (uri (git-reference
3199 (url "https://github.com/brummer10/GxOverDriver.lv2")
3200 (commit commit)))
3201 (sha256
3202 (base32
3203 "13j614jh525fbkby79nnzwj0z1ac0c9wclyn5pfqvkmx6a7j24r8"))
3204 (file-name (string-append name "-" version "-checkout"))))
3205 (home-page "https://github.com/brummer10/GxOverDriver.lv2")
3206 (synopsis "Overdrive effect with level and tone control")
3207 (description "This package provides the LV2 plugin \"GxOverDriver\", an
3208overdrive effect."))))
4d95cd30
RW
3209
3210(define-public gx-tone-mender-lv2
3211 (let ((commit "b6780b4a3e4782b3ed0e5882d6788f178aed138f")
3212 (revision "1"))
1b74b126 3213 (package (inherit gx-guvnor-lv2)
4d95cd30
RW
3214 (name "gx-tone-mender-lv2")
3215 (version (string-append "0-" revision "." (string-take commit 9)))
3216 (source (origin
3217 (method git-fetch)
3218 (uri (git-reference
3219 (url "https://github.com/brummer10/GxToneMender.lv2")
3220 (commit commit)))
3221 (sha256
3222 (base32
3223 "07qdcfsvv2vdnfnjh91pfgvjdcs5y91nvwfm8c0z8fp6b4bk7a9q"))
3224 (file-name (string-append name "-" version "-checkout"))))
3225 (home-page "https://github.com/brummer10/GxToneMender.lv2")
3226 (synopsis "Clean boost with a 3-knob tonestack")
3227 (description "This package provides the LV2 plugin \"GxToneMender\", a
3228clean boost effect with a 3-knob tonestack."))))
4d4bfdc2
RW
3229
3230(define-public gx-push-pull-lv2
3231 (let ((commit "7f76ae2068498643ac8671ee0930b13ee3fd8eb5")
3232 (revision "1"))
1b74b126 3233 (package (inherit gx-guvnor-lv2)
4d4bfdc2
RW
3234 (name "gx-push-pull-lv2")
3235 (version (string-append "0-" revision "." (string-take commit 9)))
3236 (source (origin
3237 (method git-fetch)
3238 (uri (git-reference
3239 (url "https://github.com/brummer10/GxPushPull.lv2")
3240 (commit commit)))
3241 (sha256
3242 (base32
3243 "12f5hwck2irph0gjbj8xy8jqcqdwb8l1hlwf29k0clz52h1jhb5q"))
3244 (file-name (string-append name "-" version "-checkout"))))
3245 (home-page "https://github.com/brummer10/GxPushPull.lv2")
3246 (synopsis "Octave up push pull transistor fuzz simulation")
3247 (description "This package provides the LV2 plugin \"GxPushPull\", a
3248simulation of a push pull transistor fuzz effect with added high octave."))))
3eb1a964
RW
3249
3250(define-public gx-suppa-tone-bender-lv2
f959991d
RW
3251 (package (inherit gx-guvnor-lv2)
3252 (name "gx-suppa-tone-bender-lv2")
3253 (version "0.1")
3254 (source (origin
48b95a19
RW
3255 (method git-fetch)
3256 (uri (git-reference
3257 (url "https://github.com/brummer10/GxSuppaToneBender.lv2.git")
3258 (commit (string-append "v" version))))
3259 (file-name (string-append name "-" version "-checkout"))
f959991d
RW
3260 (sha256
3261 (base32
48b95a19 3262 "01x6bjmllkmvxfzc5xwdix7w021j26js71awv728cxsmkxgqw0zy"))))
f959991d
RW
3263 (home-page "https://github.com/brummer10/GxSuppaToneBender.lv2")
3264 (synopsis "Simulation of the Vox Suppa Tone Bender pedal")
3265 (description "This package provides the LV2 plugin
3eb1a964 3266\"GxSuppaToneBender\", a simulation modelled after the Vox Suppa Tone Bender
f959991d 3267pedal.")))
664f677f
RW
3268
3269(define-public gx-saturator-lv2
d9f65bd3
RW
3270 (let ((commit "605330f432c94b6eb3f8203cbe472befae959532")
3271 (revision "3"))
ad67ca3d 3272 (package (inherit gx-vbass-preamp-lv2)
664f677f
RW
3273 (name "gx-saturator-lv2")
3274 (version (string-append "0-" revision "." (string-take commit 9)))
3275 (source (origin
3276 (method git-fetch)
3277 (uri (git-reference
3278 (url "https://github.com/brummer10/GxSaturator.lv2")
3279 (commit commit)))
3280 (sha256
3281 (base32
d9f65bd3 3282 "1w4nvh0rmxrv3s3hmh4fs74f3hc0jn31v00j769j7v68mqr7kawy"))
664f677f
RW
3283 (file-name (string-append name "-" version "-checkout"))))
3284 (home-page "https://github.com/brummer10/GxSaturator.lv2")
3285 (synopsis "Saturation effect")
3286 (description "This package provides the LV2 plugin \"GxSaturator\", a
3287saturation effect."))))
89412238
RW
3288
3289(define-public gx-hyperion-lv2
4396e9b5
RW
3290 (package (inherit gx-guvnor-lv2)
3291 (name "gx-hyperion-lv2")
3292 (version "0.1")
3293 (source (origin
37519239
RW
3294 (method git-fetch)
3295 (uri (git-reference
3296 (url "https://github.com/brummer10/GxHyperion.lv2.git")
3297 (commit (string-append "v" version))))
3298 (file-name (string-append name "-" version "-checkout"))
4396e9b5
RW
3299 (sha256
3300 (base32
37519239 3301 "1vx79s6s9if117y2g0ppdja2sv2wcny6xcfl3j1z4cipahnildxf"))))
4396e9b5
RW
3302 (home-page "https://github.com/brummer10/GxHyperion.lv2")
3303 (synopsis "Simulation of the Hyperion Fuzz pedal")
3304 (description "This package provides the LV2 plugin \"GxHyperion\", a
3305simulation of the Hyperion Fuzz pedal.")))
32536f00
RW
3306
3307(define-public gx-voodoo-fuzz-lv2
cf44ebeb
RW
3308 (package (inherit gx-guvnor-lv2)
3309 (name "gx-voodoo-fuzz-lv2")
3310 (version "0.1")
3311 (source (origin
d42c6613
RW
3312 (method git-fetch)
3313 (uri (git-reference
3314 (url "https://github.com/brummer10/GxVoodoFuzz.lv2.git")
3315 (commit (string-append "v" version))))
3316 (file-name (string-append name "-" version "-checkout"))
cf44ebeb
RW
3317 (sha256
3318 (base32
d42c6613 3319 "1v0scphivri1fk4hl20j13f92i48mnx1zsil4hgnadsmm4nsfw43"))))
cf44ebeb
RW
3320 (home-page "https://github.com/brummer10/GxVoodoFuzz.lv2")
3321 (synopsis "Fuzz effect modelled after the Voodoo Lab SuperFuzz")
3322 (description "This package provides the LV2 plugin \"GxVoodooFuzz\", a
32536f00
RW
3323simulation modelled after the Voodoo Lab SuperFuzz pedal. It's basically a
3324Bosstone circuit, followed by the tone control of the FoxToneMachine in
cf44ebeb 3325parallel with a DarkBooster, followed by a volume control.")))
29f63222
RW
3326
3327(define-public gx-super-fuzz-lv2
34a3ecfe
RW
3328 (package (inherit gx-guvnor-lv2)
3329 (name "gx-super-fuzz-lv2")
3330 (version "0.1")
3331 (source (origin
5057535f
RW
3332 (method git-fetch)
3333 (uri (git-reference
3334 (url "https://github.com/brummer10/GxSuperFuzz.lv2.git")
3335 (commit (string-append "v" version))))
3336 (file-name (string-append name "-" version "-checkout"))
34a3ecfe
RW
3337 (sha256
3338 (base32
5057535f 3339 "1jlljd9hlgfflbiizq47lv1xbbgjyx3v835mf24zmh1q5zsw4np4"))))
34a3ecfe
RW
3340 (home-page "https://github.com/brummer10/GxSuperFuzz.lv2")
3341 (synopsis "Fuzz effect modelled after the UniVox SuperFuzz")
a6f39d7c 3342 (description "This package provides the LV2 plugin \"GxSuperFuzz\", an
29f63222 3343analog simulation of the UniVox SuperFuzz pedal. In this simulation the trim
d1e4ad1b 3344pot, which is usually in the housing, is exposed as a control parameter. It
34a3ecfe 3345adjusts the amount of harmonics.")))
40bffdfa
RW
3346
3347(define-public gx-vintage-fuzz-master-lv2
38050923
RW
3348 (package (inherit gx-guvnor-lv2)
3349 (name "gx-vintage-fuzz-master-lv2")
3350 (version "0.1")
3351 (source (origin
0febd673
RW
3352 (method git-fetch)
3353 (uri (git-reference
3354 (url "https://github.com/brummer10/GxVintageFuzzMaster.lv2.git")
3355 (commit (string-append "v" version))))
3356 (file-name (string-append name "-" version "-checkout"))
38050923
RW
3357 (sha256
3358 (base32
0febd673 3359 "02jb211z8rw2qr5r1z5mdxlqgiw6cbc319xpqplvn6k21c59mskv"))))
38050923
RW
3360 (home-page "https://github.com/brummer10/GxVintageFuzzMaster.lv2")
3361 (synopsis "Fuzz effect simulation of the vintage Fuzz Master")
3362 (description "This package provides the LV2 plugin
3363\"GxVintageFuzzMaster\", a simulation of the vintage Fuzz Master pedal.")))
631f8175
RW
3364
3365(define-public gx-slow-gear-lv2
d921a1f4
RW
3366 (let ((commit "5d37e775b0feef1d82feee94e2a7a2d7e57efe2d")
3367 (revision "3"))
ad67ca3d 3368 (package (inherit gx-vbass-preamp-lv2)
631f8175
RW
3369 (name "gx-slow-gear-lv2")
3370 (version (string-append "0-" revision "." (string-take commit 9)))
3371 (source (origin
3372 (method git-fetch)
3373 (uri (git-reference
3374 (url "https://github.com/brummer10/GxSlowGear.lv2")
3375 (commit commit)))
3376 (sha256
3377 (base32
d921a1f4 3378 "141mz69zkhk3lm54bb6wgpnghb92zm1ig7fv07240cmhydqji1q1"))
631f8175
RW
3379 (file-name (string-append name "-" version "-checkout"))))
3380 (home-page "https://github.com/brummer10/GxSlowGear.lv2")
3381 (synopsis "Slow gear audio effect")
3382 (description "This package provides the LV2 plugin \"GxSlowGear\", a
3383slow gear audio effect to produce volume swells."))))
d75e8f5a
RW
3384
3385(define-public gx-switchless-wah-lv2
cfcef2c2
RW
3386 (let ((commit "7b08691203314612999f0ce2328cdc1161cd6665")
3387 (revision "2"))
1b74b126 3388 (package (inherit gx-guvnor-lv2)
d75e8f5a
RW
3389 (name "gx-switchless-wah-lv2")
3390 (version (string-append "0-" revision "." (string-take commit 9)))
3391 (source (origin
3392 (method git-fetch)
3393 (uri (git-reference
3394 (url "https://github.com/brummer10/GxSwitchlessWah.lv2")
3395 (commit commit)))
3396 (sha256
3397 (base32
cfcef2c2 3398 "04jqfpncmrrqn34p21w4v9m2x5a5wsqwbm4f3byxvq4vcibwxzk2"))
d75e8f5a
RW
3399 (file-name (string-append name "-" version "-checkout"))))
3400 (home-page "https://github.com/brummer10/GxSwitchlessWah.lv2")
3401 (synopsis "Wah emulation with switchless activation")
3402 (description "This package provides the LV2 plugin \"GxSwitchlessWah\",
3403a simulation of an analog Wah pedal with switchless activation."))))
84d53724 3404
a734da86
RW
3405(define-public rkrlv2
3406 (let ((commit "d8c17d3c976107e5c012970276d7cf0aa059f15b")
3407 (revision "1"))
3408 (package
3409 (name "rkrlv2")
3410 (version (git-version "0" revision commit))
3411 (source (origin
3412 (method git-fetch)
3413 (uri (git-reference
3414 (url "https://github.com/ssj71/rkrlv2.git")
3415 (commit commit)))
3416 (sha256
3417 (base32
3418 "035z068rlafb7ibgqf34ck2lm4fab8yzlx41qh061x2xi4hxkvp0"))
3419 (file-name (git-file-name name version))))
3420 (build-system cmake-build-system)
3421 (arguments '(#:tests? #f)) ; there are no tests
3422 (inputs
3423 `(("fftw" ,fftw)
3424 ("libsamplerate" ,libsamplerate)
3425 ("lv2" ,lv2)))
3426 (native-inputs
3427 `(("pkg-config" ,pkg-config)))
3428 (home-page "https://github.com/ssj71/rkrlv2")
3429 (synopsis "Rakarrack effects ported to LV2 plugins")
3430 (description "This package provides the Rakarrack effects as LV2
3431plugins. The ports are done such that hopefully when Rakarrack gets an active
3432maintainer these will get merged into the original project.")
3433 (license license:gpl2))))
3434
84d53724 3435(define-public mod-utilities
fe049d21
RW
3436 (let ((commit "80ea3ea9f52fab7f191671f4810bf90fc955a046")
3437 (revision "2"))
84d53724
RW
3438 (package
3439 (name "mod-utilities")
3440 (version (string-append "0-" revision "." (string-take commit 9)))
3441 (source (origin
3442 (method git-fetch)
3443 (uri (git-reference
3444 (url "https://github.com/moddevices/mod-utilities.git")
3445 (commit commit)))
fe049d21 3446 (file-name (string-append name "-" version "-checkout"))
84d53724
RW
3447 (sha256
3448 (base32
fe049d21 3449 "1v55zmzmlg0ka7341x5lsvb44amy17vk27s669ps1basd1bk5s5v"))))
84d53724
RW
3450 (build-system gnu-build-system)
3451 (arguments
3452 `(#:tests? #f ; there are no tests
3453 #:make-flags
3454 (list (string-append "INSTALL_PATH="
3455 (assoc-ref %outputs "out")
fe049d21
RW
3456 "/lib/lv2")
3457 (string-append "PREFIX=" (assoc-ref %outputs "out"))
3458 "CC=gcc")
84d53724
RW
3459 #:phases
3460 (modify-phases %standard-phases
3461 (delete 'configure))))
3462 (inputs
3463 `(("lv2" ,lv2)))
3464 (home-page "https://github.com/moddevices/mod-utilities")
3465 (synopsis "LV2 utility plugins")
3466 (description "This package provides LV2 audio utility plugins, such as
3467filters, crossovers, simple gain plugins without zipper noise, switch box
3468plugins, a switch trigger, a toggle switch, and a peakmeter.")
3469 (license license:gpl2+))))
d3db5efb 3470
951581a2 3471(define-public ingen
19748414
RW
3472 (let ((commit "cc4a4db33f4d126a07a4a498e053c5fb9a883be3")
3473 (revision "2"))
951581a2
RW
3474 (package
3475 (name "ingen")
3476 (version (string-append "0.0.0-" revision "."
3477 (string-take commit 9)))
3478 (source
3479 (origin
3480 (method git-fetch)
3481 (uri (git-reference
0d0252e4 3482 (url "https://git.drobilla.net/ingen.git")
951581a2
RW
3483 (commit commit)))
3484 (file-name (string-append name "-" version "-checkout"))
3485 (sha256
3486 (base32
19748414 3487 "1wg47vjw9djn99gbnsl2bcwj4xhdid61m4wrbn2nlp797flj91ic"))))
951581a2
RW
3488 (build-system waf-build-system)
3489 (arguments
f9dcf79f
RW
3490 `(#:python ,python-2
3491 #:tests? #f ; no "check" target
951581a2
RW
3492 #:configure-flags (list "--no-webkit")
3493 #:phases
3494 (modify-phases %standard-phases
3495 (add-after 'unpack 'patch-wscript
3496 (lambda* (#:key outputs #:allow-other-keys)
3497 (let ((out (assoc-ref outputs "out")))
3498 (substitute* "wscript"
3499 ;; FIXME: Our version of lv2specgen.py does not behave as
3500 ;; expected. Maybe this requires a development version of
3501 ;; LV2.
3502 (("lv2specgen.py") "touch ingen.lv2/ingen.html; echo")
3503 ;; Add libraries to RUNPATH.
3504 (("^(.+)target.*= 'src/ingen/ingen'," line prefix)
3505 (string-append prefix
3506 "linkflags=[\"-Wl,-rpath="
3507 out "/lib" "\"]," line)))
3508 (substitute* '("src/wscript"
3509 "src/server/wscript")
3510 ;; Add libraries to RUNPATH.
3511 (("bld.env.PTHREAD_LINKFLAGS" line)
3512 (string-append line
3513 " + [\"-Wl,-rpath=" out "/lib" "\"]")))
3514 (substitute* "src/client/wscript"
3515 ;; Add libraries to RUNPATH.
3516 (("^(.+)target.*= 'ingen_client'," line prefix)
3517 (string-append prefix
3518 "linkflags=[\"-Wl,-rpath="
3519 out "/lib" "\"]," line)))
3520 (substitute* "src/gui/wscript"
3521 ;; Add libraries to RUNPATH.
3522 (("^(.+)target.* = 'ingen_gui.*" line prefix)
3523 (string-append prefix
3524 "linkflags=[\"-Wl,-rpath="
3525 out "/lib" "\"]," line))))
3526 #t)))))
3527 (inputs
3528 `(("boost" ,boost)
3529 ("python-rdflib" ,python-rdflib)
3530 ("python" ,python)
3531 ("jack" ,jack-1)
a2467954 3532 ("lv2" ,lv2)
951581a2
RW
3533 ("lilv" ,lilv)
3534 ("raul" ,raul-devel)
3535 ("ganv" ,ganv-devel)
3536 ("suil" ,suil)
3537 ("serd" ,serd)
3538 ("sord" ,sord)
3539 ("sratom" ,sratom)
3540 ("gtkmm" ,gtkmm-2)))
3541 (native-inputs
3542 `(("pkg-config" ,pkg-config)
3543 ("python-pygments" ,python-pygments)))
0d0252e4 3544 (home-page "https://drobilla.net/software/ingen")
951581a2
RW
3545 (synopsis "Modular audio processing system")
3546 (description "Ingen is a modular audio processing system for JACK and
3547LV2 based systems. Ingen is built around LV2 technology and a strict
3548separation of engine from user interface. The engine is controlled
3549exclusively through a protocol, and can execute as a headless process, with an
3550in-process GUI, or as an LV2 plugin. The GUI can run as a program which
3551communicates over a Unix or TCP/IP socket, or as an embeddable LV2 GUI which
3552communicates via LV2 ports. Any saved Ingen graph can be loaded as an LV2
3553plugin on any system where Ingen is installed. This allows users to visually
3554develop custom plugins for use in other applications without programming.")
3555 (license license:agpl3+))))
3556
b3410b44
RW
3557(define-public qmidiarp
3558 (package
3559 (name "qmidiarp")
b6313997 3560 (version "0.6.5")
b3410b44
RW
3561 (source (origin
3562 (method url-fetch)
3563 (uri (string-append "mirror://sourceforge/qmidiarp/qmidiarp/"
3564 version "/qmidiarp-" version ".tar.bz2"))
3565 (sha256
3566 (base32
b6313997 3567 "043yh1p0rrbj1v840y27529m9260g55gvh1km8az4jxy7mns58r2"))))
b3410b44
RW
3568 (build-system gnu-build-system)
3569 (arguments
3570 `(#:configure-flags
3571 (list "--enable-qt5"
3572 "CXXFLAGS=-std=gnu++11")))
3573 (inputs
3574 `(("qtbase" ,qtbase)
3575 ("alsa-lib" ,alsa-lib)
3576 ("jack" ,jack-1)
3577 ("liblo" ,liblo)
3578 ("lv2" ,lv2)))
3579 (native-inputs
3580 `(("pkg-config" ,pkg-config)
3581 ("qttools" ,qttools)))
3582 (home-page "http://qmidiarp.sourceforge.net/")
3583 (synopsis "MIDI arpeggiator")
3584 (description "QMidiArp is an advanced MIDI arpeggiator, programmable step
3585sequencer and LFO. It can hold any number of arpeggiator, sequencer, or LFO
3586modules running in parallel.")
3587 (license license:gpl2+)))
3588
ff49437d
RW
3589(define-public qmidiroute
3590 (package
3591 (name "qmidiroute")
3592 (version "0.4.0")
3593 (source (origin
3594 (method url-fetch)
3595 (uri (string-append "mirror://sourceforge/alsamodular/QMidiRoute/"
3596 version "/qmidiroute-" version ".tar.bz2"))
3597 (sha256
3598 (base32
3599 "19v1ppbglgl3z9v7xdqc0k33w71cqq8a7d6ihvfs7iz77dygrih9"))))
3600 (build-system gnu-build-system)
3601 (arguments
3602 `(#:configure-flags
3603 (list "--enable-qt5"
3604 "CXXFLAGS=-std=gnu++11")))
3605 (inputs
3606 `(("qtbase" ,qtbase)
3607 ("alsa-lib" ,alsa-lib)))
3608 (native-inputs
3609 `(("pkg-config" ,pkg-config)
3610 ("qttools" ,qttools)))
3611 (home-page "http://alsamodular.sourceforge.net/")
3612 (synopsis "MIDI event router and filter")
3613 (description "QMidiRoute is a MIDI event router and filter. MIDI note,
3614control change, program change and pitch bend events are logged, and can be
3615filtered, redirected and transformed into other events according to MIDI maps
3616defined as tabs in the main control surface.")
3617 (license license:gpl2+)))
3618
5a66e25c
RW
3619(define-public seq24
3620 (package
3621 (name "seq24")
3622 (version "0.9.3")
3623 (source (origin
3624 (method url-fetch)
3625 (uri (string-append "https://launchpad.net/seq24/trunk/"
3626 version "/+download/seq24-"
3627 version ".tar.bz2"))
3628 (sha256
3629 (base32
3630 "12dphdhnvfk1k0vmagi1v2lhyxjyj1j3cz6ksjw0ydcvid1x8ap2"))
3631 (patches (search-patches "seq24-rename-mutex.patch"))))
3632 (build-system gnu-build-system)
3633 (arguments
3634 `(#:configure-flags
3635 (list "CXXFLAGS=-std=gnu++11")))
3636 (inputs
3637 `(("gtkmm" ,gtkmm-2)
3638 ("alsa-lib" ,alsa-lib)
3639 ("jack" ,jack-1)
3640 ("lash" ,lash)))
3641 (native-inputs
3642 `(("pkg-config" ,pkg-config)))
3643 (home-page "https://edge.launchpad.net/seq24/")
3644 (synopsis "Real-time MIDI sequencer")
3645 (description "Seq24 is a real-time MIDI sequencer. It was created to
3646provide a very simple interface for editing and playing MIDI loops.")
3647 (license license:gpl2+)))
3648
d3db5efb
LF
3649(define-public python-discogs-client
3650 (package
3651 (name "python-discogs-client")
3652 (version "2.2.1")
3653 (source (origin
3654 (method url-fetch)
3655 (uri (pypi-uri "discogs-client" version))
3656 (sha256
3657 (base32
3658 "053ld2psh0yj3z0kg6z5bn4y3cr562m727494n0ayhgzbkjbacly"))))
3659 (build-system python-build-system)
3660 (propagated-inputs
3661 `(("python-oauthlib" ,python-oauthlib)
3662 ("python-requests" ,python-requests)))
3663 (native-inputs
3664 `(("python-six" ,python-six)))
3665 (home-page "https://github.com/discogs/discogs_client")
3666 (synopsis "Official Python client for the Discogs API")
3667 (description "This is the official Discogs API client for Python. It enables
3668you to query the Discogs database for information on artists, releases, labels,
3669users, Marketplace listings, and more. It also supports OAuth 1.0a
3670authorization, which allows you to change user data such as profile information,
3671collections and wantlists, inventory, and orders.")
80983df3 3672 (license license:bsd-2)))
d3db5efb
LF
3673
3674(define-public python2-discogs-client
80983df3 3675 (package-with-python2 python-discogs-client))
a4f05b46 3676
3677(define-public libsmf
3678 (package
3679 (name "libsmf")
3680 (version "1.3")
3681 (source
3682 (origin
3683 (method url-fetch)
3684 ;; SF download page says development moved, but the link it points to
3685 ;; is gone (https://github.com/nilsgey/libsmf). Someone else adopted
3686 ;; it but made no release so far (https://github.com/stump/libsmf).
3687 (uri (string-append "mirror://sourceforge/libsmf/libsmf/"
3688 version "/libsmf-" version ".tar.gz"))
3689 (sha256
3690 (base32
3691 "16c0n40h0r56gzbh5ypxa4dwp296dan3jminml2qkb4lvqarym6k"))))
3692 (build-system gnu-build-system)
3693 (outputs '("out"
3694 "static")) ; 88KiB of .a files
3695 (arguments
3696 `(#:phases
3697 (modify-phases %standard-phases
3698 (add-after 'install 'move-static-libraries
3699 (lambda* (#:key outputs #:allow-other-keys)
3700 ;; Move static libraries to the "static" output.
3701 (let* ((out (assoc-ref outputs "out"))
3702 (lib (string-append out "/lib"))
3703 (static (assoc-ref outputs "static"))
3704 (slib (string-append static "/lib")))
3705 (mkdir-p slib)
3706 (for-each (lambda (file)
3707 (install-file file slib)
3708 (delete-file file))
3709 (find-files lib "\\.a$"))
3710 #t))))))
3711 (inputs
3712 `(("readline" ,readline)
3713 ("glib" ,glib)))
3714 (native-inputs
3715 `(("doxygen" ,doxygen)
3716 ("pkg-config" ,pkg-config)))
3717 (home-page "http://libsmf.sourceforge.net/")
3718 (synopsis "Standard MIDI File format library")
3719 (description
3720 "LibSMF is a C library for handling SMF (\"*.mid\") files. It transparently handles
3721conversions between time and pulses, tempo map handling and more. The only dependencies
3722are a C compiler and glib. Full API documentation and examples are included.")
3723 (license license:bsd-2)))
a42619e5
RF
3724
3725(define-public lmms
3726 (package
3727 (name "lmms")
3728 (version "1.1.3")
3729 (source
3730 (origin
3a0592ae
RW
3731 (method git-fetch)
3732 (uri (git-reference
3733 (url "https://github.com/LMMS/lmms.git")
3734 (commit (string-append "v" version))))
3735 (file-name (git-file-name name version))
a42619e5
RF
3736 (sha256
3737 (base32
3a0592ae 3738 "03hhymc6d73fa3wbcqb7rm1l03zkw605k5i9kvkvjmv488bqh3pd"))))
a42619e5
RF
3739 (build-system cmake-build-system)
3740 (arguments
3741 `(#:tests? #f ; no tests
3742 #:phases
3743 (modify-phases %standard-phases
ab2ccf4c
KK
3744 (add-before 'configure 'set-ldflags
3745 (lambda* (#:key outputs #:allow-other-keys)
3746 (setenv "LDFLAGS"
3747 (string-append
3748 "-Wl,-rpath=\""
3749 (assoc-ref outputs "out") "/lib/lmms"
3750 ":"
3751 (assoc-ref outputs "out") "/lib/lmms/ladspa"
3752 "\""))
3753 #t))
3754 (add-before 'configure 'remove-Werror
3755 (lambda _
3756 (substitute* "CMakeLists.txt"
3757 (("SET\\(WERROR_FLAGS \"\\$\\{WERROR_FLAGS\\} -Werror")
3758 "SET(WERROR_FLAGS \"${WERROR_FLAGS}"))
3759 #t))
3760 (add-before 'reset-gzip-timestamps 'make-manpages-writable
3761 (lambda* (#:key outputs #:allow-other-keys)
3762 (map (lambda (file)
3763 (make-file-writable file))
3764 (find-files (string-append (assoc-ref outputs "out")
3765 "/share/man")
3766 ".*\\.gz$"))
3767 #t)))))
a42619e5
RF
3768 (native-inputs
3769 `(("pkg-config" ,pkg-config)))
3770 (inputs
3771 `(("sdl" ,sdl)
3772 ("qt" ,qt-4)
3773 ("fltk" ,fltk)
3774 ("libogg" ,libogg)
3775 ("libsamplerate" ,libsamplerate)
9b6dc31b 3776 ("fluidsynth" ,fluidsynth-1) ;XXX: try using 2.x when updating
a42619e5
RF
3777 ("libvorbis" ,libvorbis)
3778 ("alsa-lib" ,alsa-lib)
3779 ("portaudio" ,portaudio)
3780 ("ladspa" ,ladspa)
3781 ("libsndfile1" ,libsndfile)
3782 ("libxft" ,libxft)
3783 ("freetype2" ,freetype)
3784 ("fftw3f" ,fftwf)))
3785 (home-page "https://lmms.io/")
3786 (synopsis "Music composition tool")
3787 (description "LMMS is a digital audio workstation. It includes tools for sequencing
3788melodies and beats and for mixing and arranging songs. LMMS includes instruments based on
3789audio samples and various soft sythesizers. It can receive input from a MIDI keyboard.")
3790 (license license:gpl2+)))
a7a7186c
NG
3791
3792(define-public musescore
3793 (package
3794 (name "musescore")
032ca4ba 3795 (version "3.2.3")
a7a7186c 3796 (source (origin
545ceac8
NG
3797 (method git-fetch)
3798 (uri (git-reference
3799 (url "https://github.com/musescore/MuseScore.git")
3800 (commit (string-append "v" version))))
3801 (file-name (git-file-name name version))
a7a7186c
NG
3802 (sha256
3803 (base32
032ca4ba 3804 "17wx1wl8ns2k31qvrr888dxnrsa13vazg04zh2sn2q4vzd869a7v"))
a7a7186c
NG
3805 (modules '((guix build utils)))
3806 (snippet
3807 ;; Un-bundle OpenSSL and remove unused libraries.
3808 '(begin
3809 (substitute* "thirdparty/kQOAuth/CMakeLists.txt"
3810 (("-I \\$\\{PROJECT_SOURCE_DIR\\}/thirdparty/openssl/include ")
3811 ""))
3812 (substitute* "thirdparty/kQOAuth/kqoauthutils.cpp"
3813 (("#include <openssl/.*") ""))
3814 (for-each delete-file-recursively
3815 '("thirdparty/freetype"
3816 "thirdparty/openssl"
3817 "thirdparty/portmidi"))
8d611ef0 3818 #t))))
11d44d0b 3819 (build-system cmake-build-system)
a7a7186c 3820 (arguments
11d44d0b 3821 `(#:configure-flags
8d611ef0 3822 `("-DBUILD_CRASH_REPORTER=OFF"
11d44d0b 3823 "-DBUILD_WEBENGINE=OFF"
8d611ef0
NG
3824 "-DDOWNLOAD_SOUNDFONT=OFF"
3825 "-DUSE_SYSTEM_FREETYPE=ON")
11d44d0b
NG
3826 ;; There are tests, but no simple target to run. The command used to
3827 ;; run them is:
a7a7186c
NG
3828 ;;
3829 ;; make debug && sudo make installdebug && cd \
3830 ;; build.debug/mtest && make && ctest
3831 ;;
3832 ;; Basically, it requires to start a whole new build process.
3833 ;; So we simply skip them.
11d44d0b 3834 #:tests? #f))
a7a7186c
NG
3835 (inputs
3836 `(("alsa-lib" ,alsa-lib)
3837 ("freetype" ,freetype)
3838 ("gtk+-bin" ,gtk+ "bin") ;for gtk-update-icon-cache
3839 ("jack" ,jack-1)
3840 ("lame" ,lame)
3841 ("libogg" ,libogg)
3842 ("libsndfile" ,libsndfile)
3843 ("libvorbis" ,libvorbis)
3844 ("portaudio" ,portaudio)
b3891a25 3845 ("portmidi" ,portmidi)
a7a7186c
NG
3846 ("pulseaudio" ,pulseaudio)
3847 ("qtbase" ,qtbase)
3848 ("qtdeclarative" ,qtdeclarative)
3849 ("qtscript" ,qtscript)
3850 ("qtsvg" ,qtsvg)
a7a7186c
NG
3851 ("qtxmlpatterns" ,qtxmlpatterns)))
3852 (native-inputs
11d44d0b 3853 `(("pkg-config" ,pkg-config)
a7a7186c
NG
3854 ("qttools" ,qttools)))
3855 (synopsis "Music composition and notation software")
3856 (description "MuseScore is a music score typesetter. Its main purpose is
3857the creation of high-quality engraved musical scores in a WYSIWYG environment.
3858
3859It supports unlimited staves, linked parts and part extraction, tablature,
3860MIDI input, percussion notation, cross-staff beaming, automatic transposition,
3861lyrics (multiple verses), fretboard diagrams, and in general everything
3862commonly used in sheet music. Style options and style sheets to change the
3863appearance and layout are provided.
3864
3865MuseScore can also play back scores through the built-in sequencer and SoundFont
3866sample library.")
3867 (home-page "https://musescore.org")
3868 (license license:gpl2)))
2434f5ce 3869
43188faf
RW
3870(define-public muse-sequencer
3871 (package
3872 (name "muse-sequencer")
3873 (version "3.0.0")
3874 (source (origin
3875 (method git-fetch)
3876 (uri (git-reference
3877 (url "https://github.com/muse-sequencer/muse.git")
3878 (commit (string-append "muse_"
3879 (string-map (lambda (c)
3880 (if (char=? c #\.)
3881 #\_ c)) version)))))
3882 (file-name (string-append name "-" version "-checkout"))
3883 (sha256
3884 (base32
3885 "1nninz8qyqlxxjdnrm79y3gr3056pga9l2fsqh674jd3cjvafya3"))))
3886 (build-system cmake-build-system)
3887 (arguments
3888 `(#:tests? #f ; there is no test target
3889 #:configure-flags
3890 (list "-DENABLE_LV2_SUPPLIED=OFF"
3891 "-DENABLE_RTAUDIO=OFF" ; FIXME: not packaged
3892 "-DENABLE_INSTPATCH=OFF" ; FIXME: not packaged
3893 "-DENABLE_VST_NATIVE=OFF")
3894 #:phases
3895 (modify-phases %standard-phases
3896 (add-after 'unpack 'chdir
3897 (lambda _ (chdir "muse3"))))))
3898 (inputs
3899 `(("alsa-lib" ,alsa-lib)
3900 ("lash" ,lash)
3901 ("jack" ,jack-1)
3902 ("liblo" ,liblo)
3903 ("dssi" ,dssi)
3904 ("ladspa" ,ladspa)
3905 ("lv2" ,lv2)
3906 ("lilv" ,lilv)
3907 ("sord" ,sord)
3908 ("libsndfile" ,libsndfile)
3909 ("libsamplerate" ,libsamplerate)
3910 ("fluidsynth" ,fluidsynth)
3911 ("pcre" ,pcre)
3912 ("qtbase" ,qtbase)
3913 ("qtsvg" ,qtsvg)))
3914 (native-inputs
3915 `(("pkg-config" ,pkg-config)
3916 ("qttools" ,qttools)))
3917 (home-page "http://muse-sequencer.org")
3918 (synopsis "MIDI/Audio sequencer")
3919 (description "MusE is a MIDI/Audio sequencer with recording and editing
3920capabilities. Its audio sequencer supports the LADSPA, DSSI, and LV2 audio
3921plugin formats; the MIDI sequencer provides a piano roll, a drum editor, a
3922list view, and a score editor. MusE aims to be a complete multitrack virtual
3923studio.")
3924 (license license:gpl2+)))
3925
2434f5ce
DM
3926(define-public dssi
3927 (package
3928 (name "dssi")
3929 (version "1.1.1")
3930 (source (origin
3931 (method url-fetch)
3932 (uri (string-append
3933 "mirror://sourceforge/dssi/dssi/" version
3934 "/dssi-" version ".tar.gz"))
3935 (sha256
3936 (base32
3937 "0kl1hzhb7cykzkrqcqgq1dk4xcgrcxv0jja251aq4z4l783jpj7j"))))
3938 (build-system gnu-build-system)
3939 (inputs
3940 `(("alsa-lib" ,alsa-lib)
0e78801a 3941 ("jack" ,jack-1)
2434f5ce
DM
3942 ("ladspa" ,ladspa)
3943 ("libsamplerate" ,libsamplerate)
3944 ("libsndfile" ,libsndfile)
3945 ("liblo" ,liblo)))
3946 (native-inputs
3947 `(("pkg-config" ,pkg-config)))
3948 (synopsis "Audio plugin API for soft synths and effects")
3949 (description "DSSI is a plugin API for software instruments with user
3950interfaces, permitting them to be hosted in-process by audio applications.
3951It is intended to be simple, GUI-toolkit-agnostic, and slightly biased
3952towards familiarity with MIDI. The DSSI distribution package contains
3953a JACK/ALSA-sequencer reference host and some plugins as well as the
3954specification and header.")
3955 (home-page "http://dssi.sourceforge.net/")
3956 ;; The DSSI interface is LGPL2.1+, some tests and examples are GPL2+.
3957 ;; The vast majority of examples are in the public domain.
3958 (license (list license:lgpl2.1+ license:gpl2+))))
9bc38f28
DM
3959
3960(define-public rosegarden
3961 (package
3962 (name "rosegarden")
0d5101c3 3963 (version "18.12")
9bc38f28
DM
3964 (source (origin
3965 (method url-fetch)
3966 (uri (string-append
3967 "mirror://sourceforge/rosegarden/rosegarden/"
3968 version "/rosegarden-" version ".tar.bz2"))
3969 (sha256
3970 (base32
0d5101c3 3971 "15i9fm0vkn3wsgahaxqi1j5zs0wc0j3wdwml0x49084gk2p328vb"))))
9bc38f28
DM
3972 (build-system cmake-build-system)
3973 (arguments
0d5101c3 3974 `(#:configure-flags '("-DCMAKE_BUILD_TYPE=Release")
9bc38f28
DM
3975 #:phases
3976 (modify-phases %standard-phases
3977 (add-after 'unpack 'patch-tests
3978 (lambda _
3979 (substitute* "CMakeLists.txt"
3980 (("BUILD_TESTING OFF") "BUILD_TESTING ON")
3981 ;; Make tests work.
3982 ((" -fvisibility=hidden") ""))
3983 #t))
3984 (add-after 'unpack 'fix-references
3985 (lambda* (#:key inputs #:allow-other-keys)
3986 (substitute* "src/gui/general/ProjectPackager.cpp"
3987 (("\"flac\\>")
3988 (string-append "\"" (assoc-ref inputs "flac") "/bin/flac"))
3989 (("\"wavpack\\>")
3990 (string-append "\"" (assoc-ref inputs "wavpack") "/bin/wavpack"))
3991 (("\"wvunpack\\>")
3992 (string-append "\"" (assoc-ref inputs "wavpack") "/bin/wvunpack"))
3993 (("\"bash\\>")
3994 (string-append "\"" (assoc-ref inputs "bash") "/bin/bash"))
3995 (("\"tar\\>")
3996 (string-append "\"" (assoc-ref inputs "tar") "/bin/tar")))
3997 (substitute* "src/gui/general/LilyPondProcessor.cpp"
3998 (("\"convert-ly\\>")
3999 (string-append "\"" (assoc-ref inputs "lilypond") "/bin/convert-ly"))
4000 (("\"lilypond\\>")
4001 (string-append "\"" (assoc-ref inputs "lilypond") "/bin/lilypond")))
4002 #t))
4003 (add-after 'unpack 'make-reproducible
4004 (lambda _
4005 ;; Prevent Last-Modified from being written.
4006 ;; The "*.qm" files that are used in locale.qrc would have a new
4007 ;; mtime otherwise that is written into qrc_locale.cpp in the
4008 ;; end - except when we disable it.
4009 (substitute* "src/CMakeLists.txt"
4010 (("COMMAND [$][{]QT_RCC_EXECUTABLE[}]")
4011 "COMMAND ${QT_RCC_EXECUTABLE} --format-version 1")
4012 ;; Extraneous.
4013 ;(("qt5_add_resources[(]rg_SOURCES ../data/data.qrc[)]")
4014 ; "qt5_add_resources(rg_SOURCES ../data/data.qrc OPTIONS --format-version 1)")
4015 )
4016 ;; Make hashtable traversal order predicable.
4017 (setenv "QT_RCC_TEST" "1") ; important
4018 #t))
4019 (add-before 'check 'prepare-check
4020 (lambda _
4021 (setenv "QT_QPA_PLATFORM" "offscreen")
4022 ;; Tests create files in $HOME/.local/share/rosegarden .
4023 (mkdir-p "/tmp/foo")
4024 (setenv "HOME" "/tmp/foo")
9bf98520 4025 (setenv "XDG_RUNTIME_DIR" "/tmp/foo")
9bc38f28
DM
4026 #t)))))
4027 (inputs
4028 `(("alsa-lib" ,alsa-lib)
4029 ("bash" ,bash)
4030 ("dssi" ,dssi)
4031 ("flac" ,flac)
4032 ("fftwf" ,fftwf)
b94f250e 4033 ("jack" ,jack-1)
9bc38f28
DM
4034 ("ladspa" ,ladspa)
4035 ("liblo" ,liblo)
4036 ("libsamplerate" ,libsamplerate)
4037 ("lilypond" ,lilypond)
4038 ("lrdf" ,lrdf)
4039 ("qtbase" ,qtbase)
4040 ("tar" ,tar)
4041 ("lirc" ,lirc)
4042 ("wavpack" ,wavpack)
4043 ("zlib" ,zlib)))
4044 (native-inputs
4045 `(("pkg-config" ,pkg-config)
4046 ("qtlinguist" ,qttools)))
4047 (synopsis "Music composition and editing environment based around a MIDI
4048sequencer")
4049 (description "Rosegarden is a music composition and editing environment
4050based around a MIDI sequencer that features a rich understanding of music
4051notation and includes basic support for digital audio.")
9bf98520 4052 (home-page "https://www.rosegardenmusic.com/")
9bc38f28 4053 (license license:gpl2)))
30655652 4054
643817e4 4055(define-public patchmatrix
2394afa4
RW
4056 ;; There have been no releases for more than a year.
4057 (let ((commit "a0b0b1e791f4574d5abd059cfe1819c71e8b18d5")
4058 (revision "1"))
4059 (package
4060 (name "patchmatrix")
4061 (version (git-version "0.12.0" revision commit))
4062 (source (origin
4063 (method git-fetch)
4064 (uri (git-reference
4065 (url "https://github.com/OpenMusicKontrollers/patchmatrix.git")
4066 (commit commit)))
4067 (file-name (string-append "patchmatrix-" version "-checkout"))
4068 (sha256
4069 (base32
4070 "0pph4ra7aci3rbpqvvr564pi16vxrk448bmvp8985cd9lbjlrp3m"))))
4071 (build-system meson-build-system)
4072 (arguments
4073 '(#:tests? #f ; no test target
4074 #:phases
4075 (modify-phases %standard-phases
4076 (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
4077 (lambda* (#:key outputs #:allow-other-keys)
4078 (map make-file-writable
4079 (find-files (assoc-ref outputs "out") ".*\\.gz$"))
4080 #t)))))
4081 (inputs
4082 `(("jack" ,jack-1)
4083 ("lv2" ,lv2)
4084 ("mesa" ,mesa)))
4085 (native-inputs
4086 `(("pkg-config" ,pkg-config)))
4087 (home-page "https://github.com/OpenMusicKontrollers/patchmatrix")
4088 (synopsis "Simple JACK patch bay")
4089 (description "PatchMatrix is a patch bay for the JACK audio connection
643817e4
RW
4090kit. It provides a patch bay in flow matrix style for audio, MIDI, CV, and
4091OSC connections.")
2394afa4 4092 (license license:artistic2.0))))
643817e4 4093
30655652
RW
4094(define-public sorcer
4095 (package
4096 (name "sorcer")
4097 (version "1.1.3")
4098 (source (origin
4099 (method url-fetch)
4100 (uri (string-append "https://github.com/openAVproductions/"
4101 "openAV-Sorcer/archive/release-"
4102 version ".tar.gz"))
4103 (file-name (string-append name "-" version ".tar.gz"))
4104 (sha256
4105 (base32
4106 "07iyqj28wm0xc4arrq893bm12xjpz65db7ynrlmf6w8krg8wjmd0"))))
4107 (build-system cmake-build-system)
4108 (arguments
4109 `(#:tests? #f ; no tests included
4110 #:phases
4111 (modify-phases %standard-phases
e5af1f4a
EF
4112 (add-after 'unpack 'remove-architecture-specific-flags
4113 (lambda _
4114 (substitute* "CMakeLists.txt"
4115 (("-msse2 -mfpmath=sse") ""))
4116 #t))
30655652
RW
4117 (add-after 'unpack 'build-faust-sources
4118 (lambda* (#:key inputs #:allow-other-keys)
4119 (with-directory-excursion "faust"
4120 (delete-file "main.cpp")
d7e24652
RW
4121 (invoke "faust" "-i"
4122 "-a" "lv2synth.cpp"
4123 "-o" "main.cpp" "main.dsp")))))))
30655652
RW
4124 (inputs
4125 `(("boost" ,boost)
4126 ("lv2" ,lv2)
4127 ("ntk" ,ntk)))
4128 (native-inputs
4129 `(("faust" ,faust)
4130 ("pkg-config" ,pkg-config)))
4131 (home-page "http://openavproductions.com/sorcer/")
4132 (synopsis "Wavetable LV2 plugin synth")
4133 (description "Sorcer is a wavetable LV2 plugin synthesizer, targeted at
4134the electronic or dubstep genre.")
4135 (license license:gpl3+)))
60b7ed9c 4136
f7ce2134
RW
4137(define-public sonivox-eas
4138 (package
4139 (name "sonivox-eas")
4140 (version "1.1.0")
4141 (source (origin
4142 (method git-fetch)
4143 (uri (git-reference
4144 (url "https://github.com/pedrolcl/Linux-SonivoxEas.git")
4145 (commit (string-append "v" version))))
4146 (file-name (string-append name "-" version "-checkout"))
4147 (sha256
4148 (base32
4149 "0l9gs00p5g4k4qy6i7nv1mfi2n2wnsycwjrgrh9hxzam4irf2mw2"))))
4150 (build-system cmake-build-system)
4151 (arguments '(#:tests? #f)) ; there are no tests
4152 (inputs
4153 `(("alsa-lib" ,alsa-lib)
4154 ("drumstick" ,drumstick)
4155 ("pulseaudio" ,pulseaudio)
4156 ("qtbase" ,qtbase)))
4157 (native-inputs
4158 `(("pkg-config" ,pkg-config)))
4159 (home-page "https://github.com/pedrolcl/Linux-SonivoxEas")
4160 (synopsis "MIDI synthesizer library")
4161 (description "This project is a real time General MIDI synthesizer based
4162on the Sonivox EAS Synthesizer by Google. It does not need external
4163soundfonts, using embedded samples instead.")
4164 ;; Sonivox is released under the ASL2.0; the rest of the code is under
4165 ;; GPLv2+.
4166 (license (list license:gpl2+ license:asl2.0))))
92b36e3a
RW
4167
4168(define-public whysynth
4169 (package
4170 (name "whysynth")
4171 (version "20170701")
4172 (source (origin
4173 (method url-fetch)
4174 (uri (string-append "http://smbolton.com/whysynth/whysynth-"
4175 version ".tar.bz2"))
4176 (sha256
4177 (base32
4178 "02qbn0hbvn1iym4zxv35b201blg31yjpgh71h8db0j5zls2xc0m6"))))
4179 (build-system gnu-build-system)
4180 (inputs
4181 `(("dssi" ,dssi)
4182 ("liblo" ,liblo)
4183 ("fftwf" ,fftwf)
4184 ("gtk+" ,gtk+-2)
4185 ("ladspa" ,ladspa)
4186 ("alsa-lib" ,alsa-lib)))
4187 (native-inputs
4188 `(("pkg-config" ,pkg-config)))
4189 (home-page "http://smbolton.com/whysynth.html")
4190 (synopsis "DSSI software synthesizer")
4191 (description "WhySynth is a versatile softsynth which operates as a plugin
4192for the DSSI Soft Synth Interface. A brief list of features:
4193
4194@enumerate
4195@item 4 oscillators, 2 filters, 3 LFOs, and 5 envelope generators per voice.
4196@item 11 oscillator modes: minBLEP, wavecycle, chorused wavecycle,
4197 asynchronous granular, three FM modes, waveshaper, noise, PADsynth, and phase
4198 distortion.
4199@item 10 filter modes.
4200@item flexible modulation and mixdown options, plus effects.
4201@end enumerate
4202")
4203 (license license:gpl2+)))
6b445c57 4204
4205(define-public libdiscid
4206 (package
4207 (name "libdiscid")
4208 (version "0.6.2")
4209 (source
4210 (origin
4211 (method url-fetch)
4212 (uri (string-append
4213 "http://ftp.musicbrainz.org/pub/musicbrainz/libdiscid/libdiscid-"
4214 version ".tar.gz"))
4215 (sha256
4216 (base32
4217 "1f9irlj3dpb5gyfdnb1m4skbjvx4d4hwiz2152f83m0d9jn47r7r"))))
4218 (arguments `(#:test-target "check"))
4219 (build-system cmake-build-system)
4220 (home-page "https://musicbrainz.org/doc/libdiscid")
4221 (synopsis "Disc id reader library")
4222 (description "libdiscid is a C library for creating MusicBrainz and freedb
4223disc IDs from audio CDs. It reads a CD's table of contents (TOC) and generates
4224an identifier which can be used to lookup the CD at MusicBrainz. Additionally,
4225it provides a submission URL for adding the disc ID to the database and gathers
4226ISRCs and the MCN (=UPC/EAN) from disc.")
4227 (license license:lgpl2.1+)))
1ea29aa0 4228
1331a6c0
GH
4229(define-public python-discid
4230 (package
4231 (name "python-discid")
4232 (version "1.1.1")
4233 (source
4234 (origin
4235 (method url-fetch)
4236 (uri (pypi-uri "discid" version))
4237 (sha256
4238 (base32
4239 "1fgp67nhqlbvhhwrcxq5avil7alpzw4s4579hlyvxzbphdnbz8vq"))))
4240 (build-system python-build-system)
4241 (inputs
4242 `(("libdiscid" ,libdiscid)))
4243 (arguments
4244 `(#:phases
4245 (modify-phases %standard-phases
4246 (add-before 'build 'set-libdiscid
4247 ;; Set path of libdiscid
4248 (lambda* (#:key inputs #:allow-other-keys)
4249 (let ((discid (assoc-ref inputs "libdiscid")))
4250 (substitute* "discid/libdiscid.py"
4251 (("lib_name = (.*)$" all name)
4252 (string-append "lib_name = \"" discid
4253 "/lib/libdiscid.so.0\"\n")))
4254 #t))))))
4255 (home-page "https://python-discid.readthedocs.io/")
4256 (synopsis "Python bindings for Libdiscid")
4257 (description
4258 "This package provides Python bindings for the Libdiscid library. The
4259main purpose is the calculation of @url{https://musicbrainz.org/doc/Disc%20ID,
4260Disc IDs} for use with the MusicBrainz database. Additionally the disc
4261@dfn{Media Catalog Number} (MCN) and track @dfn{International Standard
4262Recording Code} (ISRC) can be extracted.}")
4263 (license license:lgpl3+)))
4264
1ea29aa0 4265(define-public libmusicbrainz
4266 (package
4267 (name "libmusicbrainz")
4268 (version "5.1.0")
4269 (source
4270 (origin
4271 (method url-fetch)
4272 (uri (string-append
4273 "https://github.com/metabrainz/libmusicbrainz/releases/download/release-"
4274 version "/libmusicbrainz-" version ".tar.gz"))
4275 (sha256
4276 (base32
8c71a52c 4277 "0ikb9igyyk28jm34raxfzkw2qyn4nzzwsymdyprp7cmvi6g2ajb7"))))
1ea29aa0 4278 (build-system cmake-build-system)
69cb939e
RW
4279 (arguments
4280 `(#:phases
4281 (modify-phases %standard-phases
4282 (replace 'check
4283 (lambda _
4284 ;; requires network connections
4285 ;; (invoke "tests/mbtest")
4286 (invoke "tests/ctest")
4287 #t)))))
1ea29aa0 4288 (inputs `(("neon" ,neon)
4289 ("libxml2" ,libxml2)))
4290 (native-inputs `(("pkg-config" ,pkg-config)))
4291 (home-page "https://musicbrainz.org/doc/libmusicbrainz")
4292 (synopsis "MusicBrainz client library")
4293 (description "The MusicBrainz Client Library (libmusicbrainz), also known as
4294mb_client, is a development library geared towards developers who wish to add
4295MusicBrainz lookup capabilities to their applications.")
4296 (license license:lgpl2.1+)))
87d1b7b0 4297
b0c2c5ab
LC
4298(define-public perl-musicbrainz-discid
4299 (package
4300 (name "perl-musicbrainz-discid")
4301 (version "0.04")
4302 (source (origin
4303 (method url-fetch)
4304 (uri (string-append
4305 "mirror://cpan/authors/id/N/NJ/NJH/MusicBrainz-DiscID-"
4306 version ".tar.gz"))
4307 (sha256
4308 (base32
4309 "1i4qk1qfcmxdibqkyfjrrjdq2zk42vjcz590qgiyc47fi9p6xx1j"))))
4310 (build-system perl-build-system)
4311 (native-inputs `(("pkg-config" ,pkg-config)
4312 ("which" ,which)))
4313 (inputs `(("libdiscid" ,libdiscid)))
4314 (home-page "https://metacpan.org/release/MusicBrainz-DiscID")
4315 (synopsis "Perl interface to the MusicBrainz libdiscid library")
4316 (description
4317 "The @code{MusicBrainz::DiscID} module is a Perl interface to the
4318MusicBrainz libdiscid library, allowing you to manipulate digital audio
4319compact disc (CDDA) identifiers.")
4320 (license license:gpl2)))
4321
b2961dda
LC
4322(define-public perl-webservice-musicbrainz
4323 (package
4324 (name "perl-webservice-musicbrainz")
b0842a8e 4325 (version "1.0.5")
b2961dda
LC
4326 (source (origin
4327 (method url-fetch)
4328 (uri (string-append
4329 "mirror://cpan/authors/id/B/BF/BFAIST/WebService-MusicBrainz-"
4330 version ".tar.gz"))
4331 (sha256
4332 (base32
b0842a8e 4333 "16chs1l58cf000d5kalkyph3p31ci73p1rlyx98mfv10d2cq6fsj"))))
b2961dda
LC
4334 (build-system perl-build-system)
4335 (arguments
4336 ;; Tests try to connect to http://musicbrainz.org.
4337 '(#:tests? #f))
4338 (native-inputs
4339 `(("perl-module-build" ,perl-module-build)))
4340 (propagated-inputs
4341 `(("perl-mojolicious" ,perl-mojolicious)))
4342 (home-page "https://metacpan.org/release/WebService-MusicBrainz")
4343 (synopsis "Web service API to the MusicBrainz database")
4344 (description
4345 "This module searches the MusicBrainz database through their web service
4346at @code{musicbrainz.org}.")
4347 (license license:perl-license)))
4348
87d1b7b0
PN
4349(define-public clyrics
4350 (package
4351 (name "clyrics")
7f56f107 4352 (version "0.11")
87d1b7b0
PN
4353 (source
4354 (origin
234a1825
RW
4355 (method git-fetch)
4356 (uri (git-reference
4357 (url "https://github.com/trizen/clyrics.git")
4358 (commit version)))
4359 (file-name (git-file-name name version))
87d1b7b0
PN
4360 (sha256
4361 (base32
7f56f107 4362 "0vfjy555achgi5zwa34x4q7r692nc6bq4jx518a5w4m7k5fvm71j"))))
87d1b7b0 4363 (build-system trivial-build-system)
87d1b7b0 4364 (inputs
7f56f107 4365 `(("bash" ,bash) ; for the wrapped program
87d1b7b0
PN
4366 ("perl" ,perl)
4367 ("perl-www-mechanize" ,perl-www-mechanize)
4368 ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
4369 ;; Required or else LWP will fail with "GET https://www.google.com/ ==>
4370 ;; 500 Can't verify SSL peers without knowing which Certificate
4371 ;; Authorities to trust".
4372 ("perl-mozilla-ca" ,perl-mozilla-ca)))
4373 (arguments
4374 `(#:modules ((guix build utils))
4375 #:builder (begin
4376 (use-modules (guix build utils)
4377 (ice-9 match)
4378 (srfi srfi-26))
4379 (let* ((source (assoc-ref %build-inputs "source"))
87d1b7b0
PN
4380 (output (assoc-ref %outputs "out")))
4381 (setenv "PATH"
4382 (string-append
87d1b7b0
PN
4383 (assoc-ref %build-inputs "bash") "/bin" ":"
4384 (assoc-ref %build-inputs "perl") "/bin" ":"))
234a1825 4385 (copy-recursively source (getcwd))
87d1b7b0
PN
4386 (patch-shebang "clyrics")
4387 (substitute* "clyrics"
4388 (("/usr/share") output))
4389 (install-file "clyrics" (string-append output "/bin"))
4390 (wrap-program (string-append output "/bin/clyrics")
4391 `("PERL5LIB" ":" =
4392 ,(delete
4393 ""
4394 (map (match-lambda
7f56f107
TGR
4395 (((? (cut string-prefix? "perl-" <>) name) . dir)
4396 (string-append dir "/lib/perl5/site_perl"))
4397 (_ ""))
87d1b7b0
PN
4398 %build-inputs))))
4399 (copy-recursively "plugins" (string-append output "/clyrics"))
4400 #t))))
4401 (home-page "https://github.com/trizen/clyrics")
4402 (synopsis "Extensible lyrics fetcher")
4403 (description
4404 "Clyrics is an extensible command-line tool to fetch the lyrics of songs.
4405It can be used in daemon mode along with the Music-on-Console (MOC) and cmus
4406console music players.")
4407 (license license:gpl3+)))
5703380b
PN
4408
4409(define-public demlo
4410 (let ((commit "fe9ec4c8ac2fa995ec18e6ac86d50d46df06ec01")
4411 (revision "0"))
4412 (package
4413 (name "demlo")
4414 (version (git-version "3.8" revision commit))
4415 (source
4416 (origin
4417 (method git-fetch)
4418 (uri (git-reference
4419 (url
4420 "https://gitlab.com/ambrevar/demlo")
4421 (commit commit)))
4422 (file-name (git-file-name name version))
4423 (sha256
4424 (base32
4425 "1afkbqhzn6da7zaf5ab7dvyqj1izqhzprwfb4hw448fllda9bdvk"))))
4426 (build-system go-build-system)
4427 (native-inputs
4428 `(("lua" ,lua)
4429 ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
4430 ("go-github-com-mattn-go-colorable" ,go-github-com-mattn-go-colorable)
4431 ("go-github-com-aarzilli-golua" ,go-github-com-aarzilli-golua)
4432 ("go-gitlab-com-ambrevar-damerau" ,go-gitlab-com-ambrevar-damerau)
4433 ("go-gitlab-com-ambrevar-golua-unicode" ,go-gitlab-com-ambrevar-golua-unicode)
4434 ("go-github-com-mgutz-ansi" ,go-github-com-mgutz-ansi)
4435 ("go-github-com-michiwend-gomusicbrainz" ,go-github-com-michiwend-gomusicbrainz)
4436 ("go-github-com-stevedonovan-luar" ,go-github-com-stevedonovan-luar)
4437 ("go-github-com-wtolson-go-taglib" ,go-github-com-wtolson-go-taglib)
4438 ("go-github-com-yookoala-realpath" ,go-github-com-yookoala-realpath)))
4439 (inputs
4440 `(("chromaprint" ,chromaprint)
4441 ("ffmpeg" ,ffmpeg)))
4442 (arguments
4443 `(#:import-path "gitlab.com/ambrevar/demlo"
4444 #:phases
4445 (modify-phases %standard-phases
4446 (add-after 'install 'wrap-program
4447 (lambda* (#:key inputs outputs #:allow-other-keys)
4448 (let ((out (assoc-ref outputs "out"))
4449 (ffmpeg (assoc-ref inputs "ffmpeg"))
4450 (chromaprint (assoc-ref inputs "chromaprint")))
4451 (wrap-program (string-append out "/bin/demlo")
4452 `("XDG_DATA_DIRS" ":" prefix (,out))
4453 `("PATH" ":" prefix
4454 ,(map (lambda (dir)
4455 (string-append dir "/bin:"
4456 dir "/sbin"))
4457 (list ffmpeg chromaprint))))
4458 #t)))
e3900a4d 4459 (add-after 'install 'install-scripts
5703380b
PN
4460 (lambda* (#:key outputs #:allow-other-keys)
4461 (let* ((out (assoc-ref outputs "out"))
4462 (root (string-append out "/src/gitlab.com/ambrevar/demlo"))
4463 (xdg-data-dirs (string-append out "/demlo")))
4464 (copy-recursively (string-append root "/actions")
4465 (string-append xdg-data-dirs "/actions"))
4466 (copy-recursively (string-append root "/scripts")
4467 (string-append xdg-data-dirs "/scripts"))
4468 (install-file (string-append root "/config.lua") xdg-data-dirs)
4469 ;; TODO: Test fish completion.
4470 (install-file (string-append root "/completion/demlo.fish")
4471 (string-append out "/share/fish/vendor_completions.d"))
4472 #t))))))
4473 (home-page "https://gitlab.com/ambrevar/demlo")
4474 (synopsis "Dynamic and extensible music library organizer")
4475 (description "Demlo is a music library organizer. It can encode, fix
4476case, change folder hierarchy according to tags or file properties, tag from
4477an online database, copy covers while ignoring duplicates or those below a
4478quality threshold, and much more. It makes it possible to manage your
4479libraries uniformly and dynamically. You can write your own rules to fit your
4480needs best.
4481
4482Demlo can address any of these recurring music library issues (and much more):
4483
4484@itemize
4485@item Fix the lack of folder structure.
4486@item Normalize tags, fix their case, chose which tags to keep and which to
4487discard.
4488@item Handle lossy and lossless audio differently.
4489@item Handle mp3 id3tags hell...
4490@item Handle multiple covers, whether embedded and/or external, resize covers,
4491discard bad quality ones.
4492@end itemize\n")
4493 (license license:expat))))
e42ba3da
LF
4494
4495(define-public lpd8editor
4496 (package
4497 (name "lpd8editor")
83b9ba26 4498 (version "0.0.13")
e42ba3da
LF
4499 (source (origin
4500 (method git-fetch)
4501 (uri (git-reference
4502 (url "https://github.com/charlesfleche/lpd8editor.git")
4503 (commit (string-append "v" version))))
4504 (file-name (git-file-name name version))
4505 (sha256
4506 (base32
83b9ba26 4507 "0lsz3v493ilq2zr016m7kvymrplxd0n3pqv1pjglpq1h7sjw9764"))))
e42ba3da
LF
4508 (build-system gnu-build-system)
4509 (arguments
4510 '(#:phases
4511 (modify-phases %standard-phases
4512 (add-after 'unpack 'setenv
4513 (lambda _
4514 (setenv "INSTALL_PREFIX"
4515 (assoc-ref %outputs "out"))))
4516 (delete 'configure) ; no configure script
4517 (add-before 'build 'qmake
4518 (lambda _ (invoke "qmake"))))))
4519 (native-inputs
4520 `(("pkg-config" ,pkg-config)))
4521 (inputs
4522 `(("alsa" ,alsa-lib)
4523 ("qtbase" ,qtbase)
4524 ("qtsvg" ,qtsvg)))
4525 (synopsis "Graphical editor for the Akai LPD8 MIDI controller")
4526 (description "lpd8editor is a graphical patch editor for the Akai LPD8 MIDI
4527controller.")
4528 (home-page "https://github.com/charlesfleche/lpd8editor")
4529 (license license:expat)))
7fcc2f93 4530
4531(define-public fmit
4532 (package
4533 (name "fmit")
4534 (version "1.2.6")
4535 (source (origin
4536 (method git-fetch)
4537 (uri (git-reference
4538 (url "https://github.com/gillesdegottex/fmit/")
4539 (commit (string-append "v" version))))
4540 (file-name (git-file-name name version))
4541 (sha256
4542 (base32
4543 "03nzkig5mw2rqwhwmg0qvc5cnk9bwh2wp13jh0mdrr935w0587mz"))))
4544 (build-system gnu-build-system)
4545 (arguments
4546 '(#:phases
4547 (modify-phases %standard-phases
4548 (delete 'configure)
4549 (add-before 'build 'qmake
4550 (lambda _
4551 (let ((out (assoc-ref %outputs "out")))
4552 (invoke "qmake"
4553 "fmit.pro"
4554 (string-append "PREFIX=" out)
4555 (string-append "PREFIXSHORTCUT=" out)
4556 "CONFIG+=acs_qt acs_alsa acs_jack acs_portaudio"))))
4557 (add-after 'install 'wrap-executable
4558 (lambda* (#:key inputs outputs #:allow-other-keys)
4559 (let ((out (assoc-ref outputs "out")))
4560 (wrap-program (string-append out "/bin/fmit")
4561 `("QT_PLUGIN_PATH" ":" prefix
4562 ,(map (lambda (label)
4563 (string-append (assoc-ref inputs label)
4564 "/lib/qt5/plugins"))
4565 '("qtbase" "qtmultimedia" "qtsvg")))
4566 `("QML2_IMPORT_PATH" ":" prefix
4567 ,(map (lambda (label)
4568 (string-append (assoc-ref inputs label)
4569 "/lib/qt5/qml"))
4570 '("qtmultimedia"))))
4571 #t))))))
4572 (inputs
4573 `(("alsa-lib" ,alsa-lib)
4574 ("fftw" ,fftw)
4575 ("jack" ,jack-1)
4576 ("portaudio" ,portaudio)
4577 ("qtbase" ,qtbase)
4578 ("qtmultimedia" ,qtmultimedia)
4579 ("qtsvg" ,qtsvg)))
4580 (native-inputs
4581 `(("gettext" ,gnu-gettext)
4582 ("hicolor-icon-theme" ,hicolor-icon-theme)
4583 ("itstool" ,itstool)
4584 ("qttools" ,qttools)))
4585 (synopsis "Musical instrument tuner")
4586 (description "FMIT is a graphical utility for tuning musical instruments,
4587with error and volume history, and advanced features.")
4588 (home-page "https://gillesdegottex.github.io/fmit/")
4589 ;; Most of the code is under GPL2+, but some abstract or helper classes
4590 ;; are under LGPL2.1.
4591 (license (list license:gpl2+ license:lgpl2.1))))