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