gnu: yoshimi: Update to 1.3.8.2.
[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 Ricardo Wurmus <rekado@elephly.net>
4 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
5 ;;;
6 ;;; This file is part of GNU Guix.
7 ;;;
8 ;;; GNU Guix is free software; you can redistribute it and/or modify it
9 ;;; under the terms of the GNU General Public License as published by
10 ;;; the Free Software Foundation; either version 3 of the License, or (at
11 ;;; your option) any later version.
12 ;;;
13 ;;; GNU Guix is distributed in the hope that it will be useful, but
14 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
15 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 ;;; GNU General Public License for more details.
17 ;;;
18 ;;; You should have received a copy of the GNU General Public License
19 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
20
21 (define-module (gnu packages music)
22 #:use-module (guix utils)
23 #:use-module (guix packages)
24 #:use-module (guix download)
25 #:use-module (guix git-download)
26 #:use-module ((guix licenses) #:prefix license:)
27 #:use-module (guix build-system gnu)
28 #:use-module (guix build-system cmake)
29 #:use-module (guix build-system python)
30 #:use-module (guix build-system waf)
31 #:use-module (gnu packages)
32 #:use-module (gnu packages algebra)
33 #:use-module (gnu packages audio)
34 #:use-module (gnu packages autotools)
35 #:use-module (gnu packages base) ;libbdf
36 #:use-module (gnu packages boost)
37 #:use-module (gnu packages bison)
38 #:use-module (gnu packages cdrom)
39 #:use-module (gnu packages code)
40 #:use-module (gnu packages check)
41 #:use-module (gnu packages compression)
42 #:use-module (gnu packages docbook)
43 #:use-module (gnu packages doxygen)
44 #:use-module (gnu packages flex)
45 #:use-module (gnu packages fltk)
46 #:use-module (gnu packages fonts)
47 #:use-module (gnu packages fontutils)
48 #:use-module (gnu packages gcc)
49 #:use-module (gnu packages gettext)
50 #:use-module (gnu packages ghostscript)
51 #:use-module (gnu packages gl)
52 #:use-module (gnu packages glib)
53 #:use-module (gnu packages gnome)
54 #:use-module (gnu packages gtk)
55 #:use-module (gnu packages guile)
56 #:use-module (gnu packages image)
57 #:use-module (gnu packages imagemagick)
58 #:use-module (gnu packages java)
59 #:use-module (gnu packages linux) ; for alsa-utils
60 #:use-module (gnu packages man)
61 #:use-module (gnu packages mp3)
62 #:use-module (gnu packages ncurses)
63 #:use-module (gnu packages netpbm)
64 #:use-module (gnu packages pdf)
65 #:use-module (gnu packages perl)
66 #:use-module (gnu packages pkg-config)
67 #:use-module (gnu packages pulseaudio) ;libsndfile
68 #:use-module (gnu packages python)
69 #:use-module (gnu packages qt)
70 #:use-module (gnu packages rdf)
71 #:use-module (gnu packages readline)
72 #:use-module (gnu packages rsync)
73 #:use-module (gnu packages tcl)
74 #:use-module (gnu packages texinfo)
75 #:use-module (gnu packages texlive)
76 #:use-module (gnu packages video)
77 #:use-module (gnu packages web)
78 #:use-module (gnu packages xml)
79 #:use-module (gnu packages xorg)
80 #:use-module (gnu packages xiph)
81 #:use-module (gnu packages zip)
82 #:use-module ((srfi srfi-1) #:select (last)))
83
84 (define-public cmus
85 (package
86 (name "cmus")
87 (version "2.7.1")
88 (source (origin
89 (method url-fetch)
90 (uri (string-append
91 "https://github.com/" name "/" name "/archive/v"
92 version ".tar.gz"))
93 (file-name (string-append name "-" version ".tar.gz"))
94 (sha256
95 (base32
96 "0raixgjavkm7hxppzsc5zqbfbh2bhjcmbiplhnsxsmyj8flafyc1"))))
97 (build-system gnu-build-system)
98 (arguments
99 `(#:tests? #f ; cmus does not include tests
100 #:phases
101 (modify-phases %standard-phases
102 (replace
103 'configure
104 (lambda* (#:key outputs #:allow-other-keys)
105 (let ((out (assoc-ref outputs "out")))
106
107 ;; It's an idiosyncratic configure script that doesn't
108 ;; understand --prefix=..; it wants prefix=.. instead.
109 (zero?
110 (system* "./configure"
111 (string-append "prefix=" out)))))))))
112 ;; TODO: cmus optionally supports the following formats, which haven't yet
113 ;; been added to Guix:
114 ;;
115 ;; - Roar, libroar
116 ;;
117 ;; - DISCID_LIBS, apparently different from cd-discid which is included in
118 ;; Guix. See <http://sourceforge.net/projects/discid/>
119 (native-inputs
120 `(("pkg-config" ,pkg-config)))
121 (inputs
122 `(("alsa-lib" ,alsa-lib)
123 ("ao" ,ao)
124 ("ffmpeg" ,ffmpeg)
125 ("flac" ,flac)
126 ("jack" ,jack-1)
127 ("libcddb" ,libcddb)
128 ("libcdio-paranoia" ,libcdio-paranoia)
129 ("libcue" ,libcue)
130 ("libmad" ,libmad)
131 ("libmodplug" ,libmodplug)
132 ("libmpcdec" ,libmpcdec)
133 ("libsamplerate" ,libsamplerate)
134 ("libvorbis" ,libvorbis)
135 ("ncurses" ,ncurses)
136 ("opusfile" ,opusfile)
137 ("pulseaudio" ,pulseaudio)
138 ("wavpack" ,wavpack)))
139 (home-page "https://cmus.github.io/")
140 (synopsis "Small console music player")
141 (description "Cmus is a small and fast console music player. It supports
142 many input formats and provides a customisable Vi-style user interface.")
143 (license license:gpl2+)))
144
145 (define-public hydrogen
146 (package
147 (name "hydrogen")
148 (version "0.9.5.1")
149 (source (origin
150 (method url-fetch)
151 (uri (string-append
152 "mirror://sourceforge/hydrogen/Hydrogen/"
153 (version-prefix version 3) "%20Sources/"
154 "hydrogen-" version ".tar.gz"))
155 (sha256
156 (base32
157 "1fvyp6gfzcqcc90dmaqbm11p272zczz5pfz1z4lj33nfr7z0bqgb"))))
158 (build-system gnu-build-system)
159 (arguments
160 `(#:tests? #f ;no "check" target
161 #:phases
162 ;; TODO: Add scons-build-system and use it here.
163 (modify-phases %standard-phases
164 (delete 'configure)
165 (add-after 'unpack 'scons-propagate-environment
166 (lambda _
167 ;; By design, SCons does not, by default, propagate
168 ;; environment variables to subprocesses. See:
169 ;; <http://comments.gmane.org/gmane.linux.distributions.nixos/4969>
170 ;; Here, we modify the Sconstruct file to arrange for
171 ;; environment variables to be propagated.
172 (substitute* "Sconstruct"
173 (("^env = Environment\\(")
174 "env = Environment(ENV=os.environ, "))))
175 (replace 'build
176 (lambda* (#:key inputs outputs #:allow-other-keys)
177 (let ((out (assoc-ref outputs "out")))
178 (zero? (system* "scons"
179 (string-append "prefix=" out)
180 "lrdf=0" ; cannot be found
181 "lash=1")))))
182 (add-before
183 'install
184 'fix-img-install
185 (lambda _
186 ;; The whole ./data/img directory is copied to the target first.
187 ;; Scons complains about existing files when we try to install all
188 ;; images a second time.
189 (substitute* "Sconstruct"
190 (("os.path.walk\\(\"./data/img/\",install_images,env\\)") ""))
191 #t))
192 (replace 'install (lambda _ (zero? (system* "scons" "install")))))))
193 (native-inputs
194 `(("scons" ,scons)
195 ("python" ,python-2)
196 ("pkg-config" ,pkg-config)))
197 (inputs
198 `(("zlib" ,zlib)
199 ("libtar" ,libtar)
200 ("alsa-lib" ,alsa-lib)
201 ("jack" ,jack-1)
202 ("lash" ,lash)
203 ;;("lrdf" ,lrdf) ;FIXME: cannot be found by scons
204 ("qt" ,qt-4)
205 ("libsndfile" ,libsndfile)))
206 (home-page "http://www.hydrogen-music.org")
207 (synopsis "Drum machine")
208 (description
209 "Hydrogen is an advanced drum machine for GNU/Linux. Its main goal is to
210 enable professional yet simple and intuitive pattern-based drum programming.")
211 (license license:gpl2+)))
212
213 (define-public klick
214 (package
215 (name "klick")
216 (version "0.12.2")
217 (source (origin
218 (method url-fetch)
219 (uri (string-append "http://das.nasophon.de/download/klick-"
220 version ".tar.gz"))
221 (sha256
222 (base32
223 "0hmcaywnwzjci3pp4xpvbijnnwvibz7gf9xzcdjbdca910y5728j"))))
224 (build-system gnu-build-system)
225 (arguments
226 `(#:tests? #f ;no "check" target
227 #:phases
228 ;; TODO: Add scons-build-system and use it here.
229 (modify-phases %standard-phases
230 (delete 'configure)
231 (replace 'build
232 (lambda* (#:key inputs outputs #:allow-other-keys)
233 (let ((out (assoc-ref outputs "out")))
234 (mkdir-p out)
235 (zero? (system* "scons" (string-append "PREFIX=" out))))))
236 (replace 'install (lambda _ (zero? (system* "scons" "install")))))))
237 (inputs
238 `(("boost" ,boost)
239 ("jack" ,jack-1)
240 ("libsndfile" ,libsndfile)
241 ("libsamplerate" ,libsamplerate)
242 ("liblo" ,liblo)
243 ("rubberband" ,rubberband)))
244 (native-inputs
245 `(("scons" ,scons)
246 ("python" ,python-2)
247 ("pkg-config" ,pkg-config)))
248 (home-page "http://das.nasophon.de/klick/")
249 (synopsis "Metronome for JACK")
250 (description
251 "klick is an advanced command-line based metronome for JACK. It allows
252 you to define complex tempo maps for entire songs or performances.")
253 (license license:gpl2+)))
254
255 (define-public lilypond
256 (package
257 (name "lilypond")
258 (version "2.19.33")
259 (source (origin
260 (method url-fetch)
261 (uri (string-append
262 "http://download.linuxaudio.org/lilypond/sources/v"
263 (version-major+minor version) "/"
264 name "-" version ".tar.gz"))
265 (sha256
266 (base32
267 "0s4vbbfy4xwq4da4kmlnndalmcyx2jaz7y8praah2146qbnr90xh"))))
268 (build-system gnu-build-system)
269 (arguments
270 `(#:tests? #f ; out-test/collated-files.html fails
271 #:out-of-source? #t
272 #:make-flags '("conf=www") ;to generate images for info manuals
273 #:configure-flags
274 (list "CONFIGURATION=www"
275 (string-append "--with-texgyre-dir="
276 (assoc-ref %build-inputs "font-tex-gyre")
277 "/share/fonts/opentype/"))
278 #:phases
279 (modify-phases %standard-phases
280 (add-after 'unpack 'fix-path-references
281 (lambda _
282 (substitute* "scm/backend-library.scm"
283 (("\\(search-executable '\\(\"gs\"\\)\\)")
284 (string-append "\"" (which "gs") "\""))
285 (("\"/bin/sh\"")
286 (string-append "\"" (which "sh") "\"")))
287 #t))
288 (add-before 'configure 'prepare-configuration
289 (lambda _
290 (substitute* "configure"
291 (("SHELL=/bin/sh") "SHELL=sh"))
292 (setenv "out" "www")
293 (setenv "conf" "www")
294 #t))
295 (add-after 'install 'install-info
296 (lambda _
297 (zero? (system* "make"
298 "-j" (number->string (parallel-job-count))
299 "conf=www" "install-info")))))))
300 (inputs
301 `(("guile" ,guile-1.8)
302 ("font-dejavu" ,font-dejavu)
303 ("font-tex-gyre" ,font-tex-gyre)
304 ("fontconfig" ,fontconfig)
305 ("freetype" ,freetype)
306 ("ghostscript" ,ghostscript)
307 ("pango" ,pango)
308 ("python" ,python-2)))
309 (native-inputs
310 `(("bison" ,bison)
311 ("perl" ,perl)
312 ("flex" ,flex)
313 ("fontforge" ,fontforge)
314 ("dblatex" ,dblatex)
315 ("gettext" ,gnu-gettext)
316 ("imagemagick" ,imagemagick)
317 ("netpbm" ,netpbm) ;for pngtopnm
318 ("texlive" ,texlive) ;metafont and metapost
319 ("texinfo" ,texinfo)
320 ("texi2html" ,texi2html)
321 ("rsync" ,rsync)
322 ("pkg-config" ,pkg-config)
323 ("zip" ,zip)))
324 (home-page "http://www.lilypond.org/")
325 (synopsis "Music typesetting")
326 (description
327 "GNU LilyPond is a music typesetter, which produces high-quality sheet
328 music. Music is input in a text file containing control sequences which are
329 interpreted by LilyPond to produce the final document. It is extendable with
330 Guile.")
331 (license license:gpl3+)
332
333 ;; On armhf and mips64el, building the documentation sometimes leads to
334 ;; more than an hour of silence, so double the max silent time.
335 (properties `((max-silent-time . 7200)))))
336
337 (define-public non-sequencer
338 ;; The latest tagged release is three years old and uses a custom build
339 ;; system, so we take the last commit affecting the "sequencer" directory.
340 (let ((commit "1d9bd576"))
341 (package
342 (name "non-sequencer")
343 (version (string-append "1.9.5-" commit))
344 (source (origin
345 (method git-fetch)
346 (uri (git-reference
347 (url "git://git.tuxfamily.org/gitroot/non/non.git")
348 (commit commit)))
349 (sha256
350 (base32
351 "0pkkw8q6d55j38xm7r4rwpdv1wy00a44h8c4wrn7vbgpq9nij46y"))
352 (file-name (string-append name "-" version "-checkout"))))
353 (build-system waf-build-system)
354 (arguments
355 `(#:tests? #f ;no "check" target
356 #:configure-flags
357 (list "--project=sequencer"
358 ;; Disable the use of SSE unless on x86_64.
359 ,@(if (not (string-prefix? "x86_64" (or (%current-target-system)
360 (%current-system))))
361 '("--disable-sse")
362 '()))
363 #:phases
364 (modify-phases %standard-phases
365 (add-before
366 'configure 'set-flags
367 (lambda _
368 ;; Compile with C++11, required by libsigc++.
369 (setenv "CXXFLAGS" "-std=c++11")
370 #t)))
371 #:python ,python-2))
372 (inputs
373 `(("jack" ,jack-1)
374 ("libsigc++" ,libsigc++)
375 ("liblo" ,liblo)
376 ("ntk" ,ntk)))
377 (native-inputs
378 `(("pkg-config" ,pkg-config)))
379 (home-page "http://non.tuxfamily.org/wiki/Non%20Sequencer")
380 (synopsis "Pattern-based MIDI sequencer")
381 (description
382 "The Non Sequencer is a powerful, lightweight, real-time,
383 pattern-based MIDI sequencer. It utilizes the JACK Audio Connection Kit for
384 MIDI I/O and the NTK GUI toolkit for its user interface. Everything in Non
385 Sequencer happens on-line, in real-time. Music can be composed live, while the
386 transport is rolling.")
387 (license license:gpl2+))))
388
389 (define-public solfege
390 (package
391 (name "solfege")
392 (version "3.22.2")
393 (source (origin
394 (method url-fetch)
395 (uri (string-append
396 "mirror://gnu/solfege/solfege-"
397 version ".tar.xz"))
398 (sha256
399 (base32
400 "1w25rxdbj907nsx285k9nm480pvy12w3yknfh4n1dfv17cwy072i"))))
401 (build-system gnu-build-system)
402 (arguments
403 `(#:tests? #f ; xmllint attempts to download DTD
404 #:test-target "test"
405 #:phases
406 (alist-cons-after
407 'unpack 'fix-configuration
408 (lambda* (#:key inputs #:allow-other-keys)
409 (substitute* "default.config"
410 (("csound=csound")
411 (string-append "csound="
412 (assoc-ref inputs "csound")
413 "/bin/csound"))
414 (("/usr/bin/aplay")
415 (string-append (assoc-ref inputs "aplay")
416 "/bin/aplay"))
417 (("/usr/bin/timidity")
418 (string-append (assoc-ref inputs "timidity")
419 "/bin/timidity"))
420 (("/usr/bin/mpg123")
421 (string-append (assoc-ref inputs "mpg123")
422 "/bin/mpg123"))
423 (("/usr/bin/ogg123")
424 (string-append (assoc-ref inputs "ogg123")
425 "/bin/ogg123"))))
426 (alist-cons-before
427 'build 'patch-python-shebangs
428 (lambda _
429 ;; Two python scripts begin with a Unicode BOM, so patch-shebang
430 ;; has no effect.
431 (substitute* '("solfege/parsetree.py"
432 "solfege/presetup.py")
433 (("#!/usr/bin/python") (string-append "#!" (which "python")))))
434 (alist-cons-before
435 'build 'add-sitedirs
436 ;; .pth files are not automatically interpreted unless the
437 ;; directories containing them are added as "sites". The directories
438 ;; are then added to those in the PYTHONPATH. This is required for
439 ;; the operation of pygtk and pygobject.
440 (lambda _
441 (substitute* "run-solfege.py"
442 (("import os")
443 "import os, site
444 for path in [path for path in sys.path if 'site-packages' in path]: site.addsitedir(path)")))
445 (alist-cons-before
446 'build 'adjust-config-file-prefix
447 (lambda* (#:key outputs #:allow-other-keys)
448 (substitute* "run-solfege.py"
449 (("prefix = os.path.*$")
450 (string-append "prefix = " (assoc-ref outputs "out")))))
451 (alist-cons-after
452 'install 'wrap-program
453 (lambda* (#:key inputs outputs #:allow-other-keys)
454 ;; Make sure 'solfege' runs with the correct PYTHONPATH. We
455 ;; also need to modify GDK_PIXBUF_MODULE_FILE for SVG support.
456 (let* ((out (assoc-ref outputs "out"))
457 (path (getenv "PYTHONPATH"))
458 (rsvg (assoc-ref inputs "librsvg"))
459 (pixbuf (find-files rsvg "^loaders\\.cache$")))
460 (wrap-program (string-append out "/bin/solfege")
461 `("PYTHONPATH" ":" prefix (,path))
462 `("GDK_PIXBUF_MODULE_FILE" ":" prefix ,pixbuf))))
463 %standard-phases)))))))
464 (inputs
465 `(("python" ,python-2)
466 ("pygtk" ,python2-pygtk)
467 ("gettext" ,gnu-gettext)
468 ("gtk" ,gtk+)
469 ("lilypond" ,lilypond)
470 ("librsvg" ,librsvg) ; needed at runtime for icons
471 ("libpng" ,libpng) ; needed at runtime for icons
472 ;; players needed at runtime
473 ("aplay" ,alsa-utils)
474 ("csound" ,csound) ; optional, needed for some exercises
475 ("mpg123" ,mpg123)
476 ("ogg123" ,vorbis-tools)
477 ("timidity" ,timidity++)))
478 (native-inputs
479 `(("pkg-config" ,pkg-config)
480 ("txt2man" ,txt2man)
481 ("libxml2" ,libxml2) ; for tests
482 ("ghostscript" ,ghostscript)
483 ("texinfo" ,texinfo)))
484 (home-page "https://www.gnu.org/software/solfege/")
485 (synopsis "Ear training")
486 (description
487 "GNU Solfege is a program for practicing musical ear-training. With it,
488 you can practice your recognition of various musical intervals and chords. It
489 features a statistics overview so you can monitor your progress across several
490 sessions. Solfege is also designed to be extensible so you can easily write
491 your own lessons.")
492 (license license:gpl3+)))
493
494 (define-public powertabeditor
495 (package
496 (name "powertabeditor")
497 (version "2.0.0-alpha8")
498 (source (origin
499 (method url-fetch)
500 (uri (string-append
501 "https://github.com/powertab/powertabeditor/archive/"
502 version ".tar.gz"))
503 (file-name (string-append name "-" version ".tar.gz"))
504 (sha256
505 (base32
506 "0gaa2x209v3azql8ak3r1n9a9qbxjx2ssirvwdxwklv2lmfqkm82"))
507 (modules '((guix build utils)))
508 (snippet
509 '(begin
510 ;; Remove bundled sources for external libraries
511 (delete-file-recursively "external")
512 (substitute* "CMakeLists.txt"
513 (("include_directories\\(\\$\\{PROJECT_SOURCE_DIR\\}/external/.*") "")
514 (("add_subdirectory\\(external\\)") ""))
515 (substitute* "test/CMakeLists.txt"
516 (("include_directories\\(\\$\\{PROJECT_SOURCE_DIR\\}/external/.*") ""))
517
518 ;; Add install target
519 (substitute* "source/CMakeLists.txt"
520 (("qt5_use_modules")
521 (string-append
522 "install(TARGETS powertabeditor "
523 "RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)\n"
524 "install(FILES data/tunings.json DESTINATION "
525 "${CMAKE_INSTALL_PREFIX}/share/powertabeditor/)\n"
526 "qt5_use_modules")))
527 #t))))
528 (build-system cmake-build-system)
529 (arguments
530 `(#:modules ((guix build cmake-build-system)
531 (guix build utils)
532 (ice-9 match))
533 #:configure-flags
534 ;; CMake appears to lose the RUNPATH for some reason, so it has to be
535 ;; explicitly set with CMAKE_INSTALL_RPATH.
536 (list "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE"
537 "-DCMAKE_ENABLE_PRECOMPILED_HEADERS=OFF" ; if ON pte_tests cannot be built
538 (string-append "-DCMAKE_INSTALL_RPATH="
539 (string-join (map (match-lambda
540 ((name . directory)
541 (string-append directory "/lib")))
542 %build-inputs) ";")))
543 #:phases
544 (modify-phases %standard-phases
545 (replace
546 'check
547 (lambda _
548 (zero? (system* "bin/pte_tests"
549 ;; Exclude this failing test
550 "~Formats/PowerTabOldImport/Directions"))))
551 (add-before
552 'configure 'fix-tests
553 (lambda _
554 ;; Tests cannot be built with precompiled headers
555 (substitute* "test/CMakeLists.txt"
556 (("cotire\\(pte_tests\\)") ""))
557 #t))
558 (add-before
559 'configure 'remove-third-party-libs
560 (lambda* (#:key inputs #:allow-other-keys)
561 ;; Link with required static libraries, because we're not
562 ;; using the bundled version of withershins.
563 (substitute* '("source/CMakeLists.txt"
564 "test/CMakeLists.txt")
565 (("target_link_libraries\\((powertabeditor|pte_tests)" _ target)
566 (string-append "target_link_libraries(" target " "
567 (assoc-ref inputs "binutils")
568 "/lib/libbfd.a "
569 (assoc-ref inputs "libiberty")
570 "/lib/libiberty.a "
571 "dl")))
572 #t)))))
573 (inputs
574 `(("boost" ,boost)
575 ("alsa-lib" ,alsa-lib)
576 ("qt" ,qt)
577 ("withershins" ,withershins)
578 ("libiberty" ,libiberty) ;for withershins
579 ("binutils" ,binutils) ;for -lbfd and -liberty (for withershins)
580 ("timidity" ,timidity++)
581 ("pugixml" ,pugixml)
582 ("rtmidi" ,rtmidi)
583 ("rapidjson" ,rapidjson)
584 ("zlib" ,zlib)))
585 (native-inputs
586 `(("catch" ,catch-framework)
587 ("pkg-config" ,pkg-config)))
588 (home-page "http://powertabs.net")
589 (synopsis "Guitar tablature editor")
590 (description
591 "Power Tab Editor 2.0 is the successor to the famous original Power Tab
592 Editor. It is compatible with Power Tab Editor 1.7 and Guitar Pro.")
593 (license license:gpl3+)))
594
595 (define-public setbfree
596 (package
597 (name "setbfree")
598 (version "0.8.0")
599 (source (origin
600 (method url-fetch)
601 (uri
602 (string-append
603 "https://github.com/pantherb/setBfree/releases/download/v"
604 version "/setbfree-" version ".tar.gz"))
605 (sha256
606 (base32
607 "045bgp7qsigpbrhk7qvgvliwiy26sajifwn7f2jvk90ckfqnlw4b"))))
608 (build-system gnu-build-system)
609 (arguments
610 `(#:tests? #f ; no "check" target
611 #:make-flags
612 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
613 (string-append "FONTFILE="
614 (assoc-ref %build-inputs "font-bitstream-vera")
615 "/share/fonts/truetype/VeraBd.ttf")
616 ;; Disable unsupported optimization flags on non-x86
617 ,@(let ((system (or (%current-target-system)
618 (%current-system))))
619 (if (or (string-prefix? "x86_64" system)
620 (string-prefix? "i686" system))
621 '()
622 '("OPTIMIZATIONS=-ffast-math -fomit-frame-pointer -O3"))))
623 #:phases
624 (modify-phases %standard-phases
625 (add-before 'build 'set-CC-variable
626 (lambda _ (setenv "CC" "gcc") #t))
627 (delete 'configure))))
628 (inputs
629 `(("jack" ,jack-1)
630 ("lv2" ,lv2)
631 ("zita-convolver" ,zita-convolver)
632 ("glu" ,glu)
633 ("ftgl" ,ftgl)
634 ("font-bitstream-vera" ,font-bitstream-vera)))
635 (native-inputs
636 `(("help2man" ,help2man)
637 ("pkg-config" ,pkg-config)))
638 (home-page "http://setbfree.org")
639 (synopsis "Tonewheel organ")
640 (description
641 "setBfree is a MIDI-controlled, software synthesizer designed to imitate
642 the sound and properties of the electromechanical organs and sound
643 modification devices that brought world-wide fame to the names and products of
644 Laurens Hammond and Don Leslie.")
645 (license license:gpl2+)))
646
647 (define-public bristol
648 (package
649 (name "bristol")
650 (version "0.60.11")
651 (source (origin
652 (method url-fetch)
653 (uri (string-append "mirror://sourceforge/bristol/bristol/"
654 (version-major+minor version)
655 "/bristol-" version ".tar.gz"))
656 (sha256
657 (base32
658 "1fi2m4gmvxdi260821y09lxsimq82yv4k5bbgk3kyc3x1nyhn7vx"))))
659 (build-system gnu-build-system)
660 (arguments
661 `(#:phases
662 (modify-phases %standard-phases
663 (add-after 'unpack 'remove-sse-flags
664 (lambda* (#:key system #:allow-other-keys)
665 (when (not (or (string-prefix? "x86_64" system)
666 (string-prefix? "i686" system)))
667 (substitute* "bristol/Makefile.in"
668 (("-msse -mfpmath=sse") "")))
669 #t)))))
670 (inputs
671 `(("alsa-lib" ,alsa-lib)
672 ("jack" ,jack-1)
673 ("liblo" ,liblo)
674 ("libx11" ,libx11)))
675 (native-inputs
676 `(("pkg-config" ,pkg-config)))
677 (home-page "http://bristol.sourceforge.net/")
678 (synopsis "Synthesizer emulator")
679 (description
680 "Bristol is an emulation package for a number of different 'classic'
681 synthesizers including additive and subtractive and a few organs. The
682 application consists of the engine, which is called bristol, and its own GUI
683 library called brighton that represents all the emulations. There are
684 currently more than twenty different emulations; each does sound different
685 although the author maintains that the quality and accuracy of each emulation
686 is subjective.")
687 (license license:gpl3+)))
688
689 (define-public tuxguitar
690 (package
691 (name "tuxguitar")
692 (version "1.2")
693 (source (origin
694 (method url-fetch)
695 (uri (string-append
696 "mirror://sourceforge/tuxguitar/TuxGuitar/TuxGuitar-"
697 version "/tuxguitar-src-" version ".tar.gz"))
698 (sha256
699 (base32
700 "1g1yf2gd06fzdhqb8kb8dmdcmr602s9y24f01kyl4940wimgr944"))))
701 (build-system gnu-build-system)
702 (arguments
703 `(#:make-flags (list (string-append "LDFLAGS=-Wl,-rpath="
704 (assoc-ref %outputs "out") "/lib")
705 (string-append "PREFIX="
706 (assoc-ref %outputs "out"))
707 (string-append "SWT_PATH="
708 (assoc-ref %build-inputs "swt")
709 "/share/java/swt.jar"))
710 #:tests? #f ;no "check" target
711 #:parallel-build? #f ;not supported
712 #:phases
713 (modify-phases %standard-phases
714 (delete 'configure)
715 (add-before 'build 'enter-dir-and-set-flags
716 (lambda* (#:key inputs #:allow-other-keys)
717 (chdir "TuxGuitar")
718 (substitute* "GNUmakefile"
719 (("GCJFLAGS\\+=(.*)" _ rest)
720 (string-append "GCJFLAGS=-fsource=1.4 -fPIC " rest))
721 (("PROPERTIES\\?=")
722 (string-append "PROPERTIES?= -Dswt.library.path="
723 (assoc-ref inputs "swt") "/lib"))
724 (("\\$\\(GCJ\\) -o") "$(GCJ) $(LDFLAGS) -o"))
725 #t)))))
726 (inputs
727 `(("swt" ,swt)))
728 (native-inputs
729 `(("gcj" ,gcj)
730 ("pkg-config" ,pkg-config)))
731 (home-page "http://tuxguitar.com.ar")
732 (synopsis "Multitrack tablature editor and player")
733 (description
734 "TuxGuitar is a guitar tablature editor with player support through midi.
735 It can display scores and multitrack tabs. TuxGuitar provides various
736 additional features, including autoscrolling while playing, note duration
737 management, bend/slide/vibrato/hammer-on/pull-off effects, support for
738 tuplets, time signature management, tempo management, gp3/gp4/gp5 import and
739 export.")
740 (license license:lgpl2.1+)))
741
742 (define-public pd
743 (package
744 (name "pd")
745 (version "0.45.4")
746 (source (origin
747 (method url-fetch)
748 (uri
749 (string-append "mirror://sourceforge/pure-data/pure-data/"
750 version "/pd-" (version-major+minor version)
751 "-" (last (string-split version #\.))
752 ".src.tar.gz"))
753 (sha256
754 (base32
755 "1ls2ap5yi2zxvmr247621g4jx0hhfds4j5704a050bn2n3l0va2p"))))
756 (build-system gnu-build-system)
757 (arguments
758 `(#:tests? #f ; no "check" target
759 #:phases
760 (modify-phases %standard-phases
761 (add-before
762 'configure 'fix-wish-path
763 (lambda _
764 (substitute* "src/s_inter.c"
765 ((" wish ") (string-append " " (which "wish8.6") " ")))
766 (substitute* "tcl/pd-gui.tcl"
767 (("exec wish ") (string-append "exec " (which "wish8.6") " ")))
768 #t))
769 (add-after
770 'unpack 'autoconf
771 (lambda _ (zero? (system* "autoreconf" "-vfi")))))))
772 (native-inputs
773 `(("autoconf" ,autoconf)
774 ("automake" ,automake)
775 ("libtool" ,libtool)
776 ("gettext" ,gnu-gettext)
777 ("pkg-config" ,pkg-config)))
778 (inputs
779 `(("tk" ,tk)
780 ("alsa-lib" ,alsa-lib)
781 ("jack" ,jack-1)))
782 (home-page "http://puredata.info")
783 (synopsis "Visual programming language for artistic performances")
784 (description
785 "Pure Data (aka Pd) is a visual programming language. Pd enables
786 musicians, visual artists, performers, researchers, and developers to create
787 software graphically, without writing lines of code. Pd is used to process
788 and generate sound, video, 2D/3D graphics, and interface sensors, input
789 devices, and MIDI. Pd can easily work over local and remote networks to
790 integrate wearable technology, motor systems, lighting rigs, and other
791 equipment. Pd is suitable for learning basic multimedia processing and visual
792 programming methods as well as for realizing complex systems for large-scale
793 projects.")
794 (license license:bsd-3)))
795
796 (define-public frescobaldi
797 (package
798 (name "frescobaldi")
799 (version "2.18.1")
800 (source (origin
801 (method url-fetch)
802 (uri (string-append
803 "https://github.com/wbsoft/frescobaldi/releases/download/v"
804 version "/frescobaldi-" version ".tar.gz"))
805 (sha256
806 (base32
807 "1hflc6gck6dn17czc2ldai5j0ynfg3df8lqcggdry06qxsdbnns7"))))
808 (build-system python-build-system)
809 (inputs
810 `(("lilypond" ,lilypond)
811 ("python-pyqt-4" ,python-pyqt-4)
812 ("python-ly" ,python-ly)
813 ("poppler" ,poppler)
814 ("python-poppler-qt4" ,python-poppler-qt4)
815 ("python-sip" ,python-sip)))
816 (home-page "http://www.frescobaldi.org/")
817 (synopsis "LilyPond sheet music text editor")
818 (description
819 "Frescobaldi is a LilyPond sheet music text editor with syntax
820 highlighting and automatic completion. Among other things, it can render
821 scores next to the source, can capture input from MIDI or read MusicXML and
822 ABC files, has a MIDI player for proof-listening, and includes a documentation
823 browser.")
824 (license license:gpl2+)))
825
826 (define-public drumstick
827 (package
828 (name "drumstick")
829 (version "1.0.2")
830 (source (origin
831 (method url-fetch)
832 (uri (string-append "mirror://sourceforge/drumstick/"
833 version "/drumstick-" version ".tar.bz2"))
834 (sha256
835 (base32
836 "0l47gy9yywrc860db5g3wdqg8yc8qdb2lqq6wvw1dfim5j0vbail"))))
837 (build-system cmake-build-system)
838 (arguments
839 `(#:tests? #f ; no test target
840 #:configure-flags '("-DLIB_SUFFIX=")
841 #:phases
842 (modify-phases %standard-phases
843 (add-before 'configure 'fix-docbook
844 (lambda* (#:key inputs #:allow-other-keys)
845 (substitute* "cmake_admin/CreateManpages.cmake"
846 (("http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl")
847 (string-append (assoc-ref inputs "docbook-xsl")
848 "/xml/xsl/docbook-xsl-"
849 ,(package-version docbook-xsl)
850 "/manpages/docbook.xsl")))
851 #t)))))
852 (inputs
853 `(("qt" ,qt)
854 ("alsa-lib" ,alsa-lib)
855 ("fluidsynth" ,fluidsynth)))
856 (native-inputs
857 `(("pkg-config" ,pkg-config)
858 ("libxslt" ,libxslt) ;for xsltproc
859 ("docbook-xsl" ,docbook-xsl)
860 ("doxygen" ,doxygen)))
861 (home-page "http://drumstick.sourceforge.net/")
862 (synopsis "C++ MIDI library")
863 (description
864 "Drumstick is a set of MIDI libraries using C++/Qt5 idioms and style. It
865 includes a C++ wrapper around the ALSA library sequencer interface. A
866 complementary library provides classes for processing SMF (Standard MIDI
867 files: .MID/.KAR), Cakewalk (.WRK), and Overture (.OVE) file formats. A
868 multiplatform realtime MIDI I/O library is also provided with various output
869 backends, including ALSA, OSS, Network and FluidSynth.")
870 (license license:gpl2+)))
871
872 (define-public vmpk
873 (package
874 (name "vmpk")
875 (version "0.6.2a")
876 (source (origin
877 (method url-fetch)
878 (uri (string-append "mirror://sourceforge/vmpk/vmpk/"
879 (string-drop-right version 1)
880 "/vmpk-" version ".tar.bz2"))
881 (sha256
882 (base32
883 "0259iikvxnfdiifrh02g8xgcxikrkca4nhd3an8xzx0bd6bk8ifi"))))
884 (build-system cmake-build-system)
885 (arguments
886 `(#:tests? #f ; no test target
887 #:phases
888 (modify-phases %standard-phases
889 (add-before 'configure 'fix-docbook
890 (lambda* (#:key inputs #:allow-other-keys)
891 (substitute* "cmake_admin/CreateManpages.cmake"
892 (("http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl")
893 (string-append (assoc-ref inputs "docbook-xsl")
894 "/xml/xsl/docbook-xsl-"
895 ,(package-version docbook-xsl)
896 "/manpages/docbook.xsl")))
897 #t)))))
898 (inputs
899 `(("drumstick" ,drumstick)
900 ("qt" ,qt)))
901 (native-inputs
902 `(("libxslt" ,libxslt) ;for xsltproc
903 ("docbook-xsl" ,docbook-xsl)
904 ("pkg-config" ,pkg-config)))
905 (home-page "http://vmpk.sourceforge.net")
906 (synopsis "Virtual MIDI piano keyboard")
907 (description
908 "Virtual MIDI Piano Keyboard is a MIDI events generator and receiver. It
909 doesn't produce any sound by itself, but can be used to drive a MIDI
910 synthesizer (either hardware or software, internal or external). You can use
911 the computer's keyboard to play MIDI notes, and also the mouse. You can use
912 the Virtual MIDI Piano Keyboard to display the played MIDI notes from another
913 instrument or MIDI file player.")
914 (license license:gpl3+)))
915
916 (define-public zynaddsubfx
917 (package
918 (name "zynaddsubfx")
919 (version "2.5.2")
920 (source (origin
921 (method url-fetch)
922 (uri (string-append
923 "mirror://sourceforge/zynaddsubfx/zynaddsubfx/"
924 version "/zynaddsubfx-" version ".tar.gz"))
925 (sha256
926 (base32
927 "11yrady7xwfrzszkk2fvq81ymv99mq474h60qnirk27khdygk24m"))))
928 (build-system cmake-build-system)
929 (arguments
930 `(#:phases
931 (modify-phases %standard-phases
932 ;; Move SSE compiler optimization flags from generic target to
933 ;; athlon64 and core2 targets, because otherwise the build would fail
934 ;; on non-Intel machines.
935 (add-after 'unpack 'remove-sse-flags-from-generic-target
936 (lambda _
937 (substitute* "src/CMakeLists.txt"
938 (("-msse -msse2 -mfpmath=sse") "")
939 (("-march=(athlon64|core2)" flag)
940 (string-append flag " -msse -msse2 -mfpmath=sse")))
941 #t)))))
942 (inputs
943 `(("liblo" ,liblo)
944 ("ntk" ,ntk)
945 ("alsa-lib" ,alsa-lib)
946 ("jack" ,jack-1)
947 ("fftw" ,fftw)
948 ("minixml" ,minixml)
949 ("libxpm" ,libxpm)
950 ("zlib" ,zlib)))
951 (native-inputs
952 `(("pkg-config" ,pkg-config)))
953 (home-page "http://zynaddsubfx.sf.net/")
954 (synopsis "Software synthesizer")
955 (description
956 "ZynAddSubFX is a feature heavy realtime software synthesizer. It offers
957 three synthesizer engines, multitimbral and polyphonic synths, microtonal
958 capabilities, custom envelopes, effects, etc.")
959 (license license:gpl2)))
960
961 (define-public yoshimi
962 (package
963 (name "yoshimi")
964 (version "1.3.8.2")
965 (source (origin
966 (method url-fetch)
967 (uri (string-append "mirror://sourceforge/yoshimi/"
968 (version-major+minor version)
969 "/yoshimi-" version ".tar.bz2"))
970 (sha256
971 (base32
972 "0wl4ln6v1nkkx56kfah23chyrhga2vi93i82g0s200c4s4184xr8"))))
973 (build-system cmake-build-system)
974 (arguments
975 `(#:tests? #f ; there are no tests
976 #:configure-flags
977 (list (string-append "-DCMAKE_INSTALL_DATAROOTDIR="
978 (assoc-ref %outputs "out") "/share"))
979 #:phases
980 (modify-phases %standard-phases
981 (add-before 'configure 'enter-dir
982 (lambda _ (chdir "src") #t))
983 ;; Move SSE compiler optimization flags from generic target to
984 ;; athlon64 and core2 targets, because otherwise the build would fail
985 ;; on non-Intel machines.
986 (add-after 'unpack 'remove-sse-flags-from-generic-target
987 (lambda _
988 (substitute* "src/CMakeLists.txt"
989 (("-msse -msse2 -mfpmath=sse") "")
990 (("-march=(athlon64|core2)" flag)
991 (string-append flag " -msse -msse2 -mfpmath=sse")))
992 #t)))))
993 (inputs
994 `(("boost" ,boost)
995 ("fftwf" ,fftwf)
996 ("alsa-lib" ,alsa-lib)
997 ("jack" ,jack-1)
998 ("fontconfig" ,fontconfig)
999 ("minixml" ,minixml)
1000 ("mesa" ,mesa)
1001 ("fltk" ,fltk)
1002 ("lv2" ,lv2)
1003 ("readline" ,readline)
1004 ("ncurses" ,ncurses)
1005 ("cairo" ,cairo)
1006 ("zlib" ,zlib)))
1007 (native-inputs
1008 `(("pkg-config" ,pkg-config)))
1009 (home-page "http://yoshimi.sourceforge.net/")
1010 (synopsis "Multi-paradigm software synthesizer")
1011 (description
1012 "Yoshimi is a fork of ZynAddSubFX, a feature heavy realtime software
1013 synthesizer. It offers three synthesizer engines, multitimbral and polyphonic
1014 synths, microtonal capabilities, custom envelopes, effects, etc. Yoshimi
1015 improves on support for JACK features, such as JACK MIDI.")
1016 (license license:gpl2)))
1017
1018 (define-public cursynth
1019 (package
1020 (name "cursynth")
1021 (version "1.5")
1022 (source
1023 (origin
1024 (method url-fetch)
1025 (uri (string-append "mirror://gnu/cursynth/cursynth-"
1026 version ".tar.gz"))
1027 (sha256
1028 (base32 "1dhphsya41rv8z6yqcv9l6fwbslsds4zh1y56zizi39nd996d40v"))
1029 (patches (list (search-patch "cursynth-wave-rand.patch")))))
1030 (build-system gnu-build-system)
1031 (native-inputs `(("pkg-config" ,pkg-config)))
1032 ;; TODO: See https://github.com/iyoko/cursynth/issues/4 which currently
1033 ;; prevents us from using pulseaudio
1034 (inputs `(("ncurses" ,ncurses)
1035 ("alsa" ,alsa-lib)))
1036 (home-page "http://www.gnu.org/software/cursynth")
1037 (synopsis "Polyphonic and MIDI subtractive music synthesizer using curses")
1038 (description "GNU cursynth is a polyphonic synthesizer that runs
1039 graphically in the terminal. It is built on a full-featured subtractive
1040 synthesis engine. Notes and parameter changes may be entered via MIDI or the
1041 computer's keyboard.")
1042 (license license:gpl3+)))