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