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