gnu: frescobaldi: Add MIDI support.
[jackhill/guix/guix.git] / gnu / packages / music.scm
CommitLineData
1b6826d3 1;;; GNU Guix --- Functional package management for GNU
658212eb 2;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
a763ce7d 3;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
e8069d01 4;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
aa0edd3f 5;;; Copyright © 2016 Al McElrath <hello@yrns.org>
b7367762 6;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
3f7a182d 7;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
21d18113 8;;; Copyright © 2016 Kei Yamashita <kei@openmailbox.org>
1b6826d3
RW
9;;;
10;;; This file is part of GNU Guix.
11;;;
12;;; GNU Guix is free software; you can redistribute it and/or modify it
13;;; under the terms of the GNU General Public License as published by
14;;; the Free Software Foundation; either version 3 of the License, or (at
15;;; your option) any later version.
16;;;
17;;; GNU Guix is distributed in the hope that it will be useful, but
18;;; WITHOUT ANY WARRANTY; without even the implied warranty of
19;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20;;; GNU General Public License for more details.
21;;;
22;;; You should have received a copy of the GNU General Public License
23;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
24
25(define-module (gnu packages music)
26 #:use-module (guix utils)
27 #:use-module (guix packages)
28 #:use-module (guix download)
8e80244a 29 #:use-module (guix git-download)
1b6826d3
RW
30 #:use-module ((guix licenses) #:prefix license:)
31 #:use-module (guix build-system gnu)
8b9ec354 32 #:use-module (guix build-system cmake)
821664f1 33 #:use-module (guix build-system python)
8e80244a 34 #:use-module (guix build-system waf)
1b6826d3 35 #:use-module (gnu packages)
ddfddb0c 36 #:use-module (gnu packages algebra)
c267cc15 37 #:use-module (gnu packages audio)
2d0fd07b 38 #:use-module (gnu packages autotools)
b7367762 39 #:use-module (gnu packages backup)
8b9ec354 40 #:use-module (gnu packages base) ;libbdf
1b6826d3 41 #:use-module (gnu packages bison)
b7367762 42 #:use-module (gnu packages boost)
e8069d01 43 #:use-module (gnu packages cdrom)
8b9ec354
RW
44 #:use-module (gnu packages code)
45 #:use-module (gnu packages check)
46 #:use-module (gnu packages compression)
aa0edd3f 47 #:use-module (gnu packages curl)
1b6826d3 48 #:use-module (gnu packages docbook)
bf76d780 49 #:use-module (gnu packages doxygen)
1b6826d3 50 #:use-module (gnu packages flex)
8e80244a 51 #:use-module (gnu packages fltk)
1b6826d3
RW
52 #:use-module (gnu packages fonts)
53 #:use-module (gnu packages fontutils)
3bf429af 54 #:use-module (gnu packages freedesktop)
6260d1a8 55 #:use-module (gnu packages gcc)
aa0edd3f 56 #:use-module (gnu packages gnupg)
1b6826d3
RW
57 #:use-module (gnu packages gettext)
58 #:use-module (gnu packages ghostscript)
ec8da0e2 59 #:use-module (gnu packages gl)
8e80244a 60 #:use-module (gnu packages glib)
c267cc15 61 #:use-module (gnu packages gnome)
770305f4 62 #:use-module (gnu packages graphics)
1b6826d3
RW
63 #:use-module (gnu packages gtk)
64 #:use-module (gnu packages guile)
c267cc15 65 #:use-module (gnu packages image)
1b6826d3 66 #:use-module (gnu packages imagemagick)
6260d1a8 67 #:use-module (gnu packages java)
c267cc15
RW
68 #:use-module (gnu packages linux) ; for alsa-utils
69 #:use-module (gnu packages man)
70 #:use-module (gnu packages mp3)
3bf429af 71 #:use-module (gnu packages mpd)
e8069d01 72 #:use-module (gnu packages ncurses)
1b6826d3 73 #:use-module (gnu packages netpbm)
821664f1 74 #:use-module (gnu packages pdf)
1b6826d3
RW
75 #:use-module (gnu packages perl)
76 #:use-module (gnu packages pkg-config)
d231bb35 77 #:use-module (gnu packages pulseaudio) ;libsndfile
1b6826d3 78 #:use-module (gnu packages python)
8b9ec354 79 #:use-module (gnu packages qt)
d231bb35 80 #:use-module (gnu packages rdf)
c493679f 81 #:use-module (gnu packages readline)
1b6826d3 82 #:use-module (gnu packages rsync)
21d18113 83 #:use-module (gnu packages sdl)
2d0fd07b 84 #:use-module (gnu packages tcl)
1b6826d3
RW
85 #:use-module (gnu packages texinfo)
86 #:use-module (gnu packages texlive)
e8069d01 87 #:use-module (gnu packages video)
8b9ec354 88 #:use-module (gnu packages web)
c30a66de 89 #:use-module (gnu packages wxwidgets)
c267cc15 90 #:use-module (gnu packages xml)
ddfddb0c 91 #:use-module (gnu packages xorg)
c267cc15 92 #:use-module (gnu packages xiph)
2d0fd07b
RW
93 #:use-module (gnu packages zip)
94 #:use-module ((srfi srfi-1) #:select (last)))
1b6826d3 95
c30a66de
RW
96(define-public aria-maestosa
97 (package
98 (name "aria-maestosa")
99 (version "1.4.11")
100 (source (origin
101 (method url-fetch)
102 (uri (string-append "mirror://sourceforge/ariamaestosa/ariamaestosa/"
103 version "/AriaSrc-" version ".tar.bz2"))
104 (sha256
105 (base32
106 "0gf9z96z83jiabxhpl856j15vl9flfgs6x1r0r6hc7g2xvwag0vy"))))
107 (build-system gnu-build-system)
108 (arguments
109 `(#:tests? #f ;no tests
110 #:phases
111 ;; TODO: Add scons-build-system and use it here.
112 (modify-phases %standard-phases
113 (delete 'configure)
114 (add-after 'unpack 'scons-propagate-environment
115 (lambda _
116 ;; By design, SCons does not, by default, propagate
117 ;; environment variables to subprocesses. See:
118 ;; <http://comments.gmane.org/gmane.linux.distributions.nixos/4969>
119 ;; Here, we modify the SConstruct file to arrange for
120 ;; environment variables to be propagated.
121 (substitute* "SConstruct"
122 (("env = Environment\\(\\)")
123 "env = Environment(ENV=os.environ)")
124 ;; Scons errors out when copying subdirectories from Resources,
125 ;; so we move them instead.
126 (("Copy") "Move")
127 ;; We move the "score" and "Documentation" directories at once,
128 ;; so we have to ignore files contained therein.
129 (("if \".svn\" in file" line)
130 (string-append line
131 " or \"score/\" in file"
132 " or \"Documentation/\" in file")))
133 #t))
134 (replace 'build (lambda _ (zero? (system* "scons"))))
135 (replace 'install
136 (lambda* (#:key outputs #:allow-other-keys)
137 (let ((out (assoc-ref outputs "out")))
138 (and
139 (zero? (system* "scons"
140 (string-append "prefix=" out)
141 "install"))
142 ;; Fix directory permissions
143 (begin
144 (chmod (string-append out "/share/Aria/Documentation") #o555)
145 (chmod (string-append out "/share/Aria/score") #o555)
146 #t))))))))
147 (inputs
148 `(("wxwidgets" ,wxwidgets)
149 ("glib" ,glib)
150 ("alsa-lib" ,alsa-lib)))
151 (native-inputs
152 `(("scons" ,scons)
153 ("pkg-config" ,pkg-config)))
154 (home-page "http://ariamaestosa.sourceforge.net/")
155 (synopsis "MIDI sequencer and editor")
156 (description
157 "Aria Maestosa is a MIDI sequencer and editor. It lets you compose, edit
158and play MIDI files with a few clicks in a user-friendly interface offering
159score, keyboard, guitar, drum and controller views.")
160 (license license:gpl3+)))
161
e8069d01
PW
162(define-public cmus
163 (package
164 (name "cmus")
165 (version "2.7.1")
166 (source (origin
167 (method url-fetch)
168 (uri (string-append
169 "https://github.com/" name "/" name "/archive/v"
170 version ".tar.gz"))
566fc7fa 171 (file-name (string-append name "-" version ".tar.gz"))
e8069d01
PW
172 (sha256
173 (base32
174 "0raixgjavkm7hxppzsc5zqbfbh2bhjcmbiplhnsxsmyj8flafyc1"))))
175 (build-system gnu-build-system)
176 (arguments
177 `(#:tests? #f ; cmus does not include tests
178 #:phases
179 (modify-phases %standard-phases
180 (replace
181 'configure
182 (lambda* (#:key outputs #:allow-other-keys)
183 (let ((out (assoc-ref outputs "out")))
184
185 ;; It's an idiosyncratic configure script that doesn't
186 ;; understand --prefix=..; it wants prefix=.. instead.
187 (zero?
188 (system* "./configure"
189 (string-append "prefix=" out)))))))))
190 ;; TODO: cmus optionally supports the following formats, which haven't yet
191 ;; been added to Guix:
192 ;;
193 ;; - Roar, libroar
194 ;;
195 ;; - DISCID_LIBS, apparently different from cd-discid which is included in
196 ;; Guix. See <http://sourceforge.net/projects/discid/>
197 (native-inputs
198 `(("pkg-config" ,pkg-config)))
199 (inputs
200 `(("alsa-lib" ,alsa-lib)
201 ("ao" ,ao)
202 ("ffmpeg" ,ffmpeg)
203 ("flac" ,flac)
204 ("jack" ,jack-1)
205 ("libcddb" ,libcddb)
206 ("libcdio-paranoia" ,libcdio-paranoia)
207 ("libcue" ,libcue)
208 ("libmad" ,libmad)
209 ("libmodplug" ,libmodplug)
210 ("libmpcdec" ,libmpcdec)
211 ("libsamplerate" ,libsamplerate)
212 ("libvorbis" ,libvorbis)
213 ("ncurses" ,ncurses)
214 ("opusfile" ,opusfile)
215 ("pulseaudio" ,pulseaudio)
216 ("wavpack" ,wavpack)))
217 (home-page "https://cmus.github.io/")
218 (synopsis "Small console music player")
219 (description "Cmus is a small and fast console music player. It supports
220many input formats and provides a customisable Vi-style user interface.")
221 (license license:gpl2+)))
222
d231bb35
RW
223(define-public hydrogen
224 (package
225 (name "hydrogen")
b7367762 226 (version "0.9.6.1")
d231bb35
RW
227 (source (origin
228 (method url-fetch)
229 (uri (string-append
b7367762
EF
230 "https://github.com/hydrogen-music/hydrogen/archive/"
231 version ".tar.gz"))
d231bb35
RW
232 (sha256
233 (base32
b7367762
EF
234 "0vxnaqfmcv7hhk0cj67imdcqngspnck7f0wfmvhfgfqa7x1xznll"))))
235 (build-system cmake-build-system)
d231bb35 236 (arguments
b7367762 237 `(#:test-target "tests"))
d231bb35 238 (native-inputs
b7367762 239 `(("cppunit" ,cppunit)
d231bb35
RW
240 ("pkg-config" ,pkg-config)))
241 (inputs
b7367762 242 `(("alsa-lib" ,alsa-lib)
d231bb35 243 ("jack" ,jack-1)
b7367762 244 ;; ("ladspa" ,ladspa) ; cannot find during configure
d231bb35 245 ("lash" ,lash)
b7367762
EF
246 ("libarchive" ,libarchive)
247 ("libsndfile" ,libsndfile)
248 ("libtar" ,libtar)
249 ("lrdf" ,lrdf)
d231bb35 250 ("qt" ,qt-4)
b7367762 251 ("zlib" ,zlib)))
d231bb35
RW
252 (home-page "http://www.hydrogen-music.org")
253 (synopsis "Drum machine")
254 (description
255 "Hydrogen is an advanced drum machine for GNU/Linux. Its main goal is to
256enable professional yet simple and intuitive pattern-based drum programming.")
257 (license license:gpl2+)))
258
8c454dcd
RW
259(define-public klick
260 (package
261 (name "klick")
262 (version "0.12.2")
263 (source (origin
264 (method url-fetch)
265 (uri (string-append "http://das.nasophon.de/download/klick-"
266 version ".tar.gz"))
267 (sha256
268 (base32
269 "0hmcaywnwzjci3pp4xpvbijnnwvibz7gf9xzcdjbdca910y5728j"))))
270 (build-system gnu-build-system)
271 (arguments
272 `(#:tests? #f ;no "check" target
273 #:phases
274 ;; TODO: Add scons-build-system and use it here.
275 (modify-phases %standard-phases
276 (delete 'configure)
277 (replace 'build
278 (lambda* (#:key inputs outputs #:allow-other-keys)
279 (let ((out (assoc-ref outputs "out")))
280 (mkdir-p out)
281 (zero? (system* "scons" (string-append "PREFIX=" out))))))
282 (replace 'install (lambda _ (zero? (system* "scons" "install")))))))
283 (inputs
284 `(("boost" ,boost)
285 ("jack" ,jack-1)
286 ("libsndfile" ,libsndfile)
287 ("libsamplerate" ,libsamplerate)
288 ("liblo" ,liblo)
289 ("rubberband" ,rubberband)))
290 (native-inputs
291 `(("scons" ,scons)
292 ("python" ,python-2)
293 ("pkg-config" ,pkg-config)))
294 (home-page "http://das.nasophon.de/klick/")
295 (synopsis "Metronome for JACK")
296 (description
297 "klick is an advanced command-line based metronome for JACK. It allows
298you to define complex tempo maps for entire songs or performances.")
299 (license license:gpl2+)))
300
048bfba1
RW
301(define-public gtklick
302 (package
303 (name "gtklick")
304 (version "0.6.4")
305 (source (origin
306 (method url-fetch)
307 (uri (string-append "http://das.nasophon.de/download/gtklick-"
308 version ".tar.gz"))
309 (sha256
310 (base32
311 "0dq1km6njnzsqdqyf6wzir9g733z0mc9vmxfg2383k3c2a2di6bp"))))
312 (build-system python-build-system)
313 (arguments
314 `(#:tests? #f ; no tests
315 #:python ,python-2
316 #:phases
317 (modify-phases %standard-phases
318 (add-before 'build 'add-sitedirs
319 ;; .pth files are not automatically interpreted unless the
320 ;; directories containing them are added as "sites". The directories
321 ;; are then added to those in the PYTHONPATH. This is required for
322 ;; the operation of pygtk.
323 (lambda _
324 (substitute* "gtklick/gtklick.py"
325 (("import pygtk")
326 "import pygtk, site, sys
327for path in [path for path in sys.path if 'site-packages' in path]: site.addsitedir(path)"))))
328 (add-after 'unpack 'inject-store-path-to-klick
329 (lambda* (#:key inputs #:allow-other-keys)
330 (substitute* "gtklick/klick_backend.py"
331 (("KLICK_PATH = 'klick'")
332 (string-append "KLICK_PATH = '"
333 (assoc-ref inputs "klick")
334 "/bin/klick'")))
335 #t)))))
336 (inputs
337 `(("klick" ,klick)
338 ("python2-pyliblo" ,python2-pyliblo)
339 ("python2-pygtk" ,python2-pygtk)))
340 (native-inputs
341 `(("gettext" ,gnu-gettext)))
342 (home-page "http://das.nasophon.de/gtklick/")
343 (synopsis "Simple metronome with an easy-to-use graphical interface")
344 (description
345 "Gtklick is a simple metronome with an easy-to-use graphical user
346interface. It is implemented as a frontend to @code{klick}.")
347 (license license:gpl2+)))
348
1b6826d3
RW
349(define-public lilypond
350 (package
351 (name "lilypond")
398abcf8 352 (version "2.19.33")
1b6826d3
RW
353 (source (origin
354 (method url-fetch)
355 (uri (string-append
356 "http://download.linuxaudio.org/lilypond/sources/v"
357 (version-major+minor version) "/"
358 name "-" version ".tar.gz"))
359 (sha256
360 (base32
398abcf8 361 "0s4vbbfy4xwq4da4kmlnndalmcyx2jaz7y8praah2146qbnr90xh"))))
1b6826d3
RW
362 (build-system gnu-build-system)
363 (arguments
127b04d7 364 `(#:tests? #f ; out-test/collated-files.html fails
1b6826d3 365 #:out-of-source? #t
409be57b 366 #:make-flags '("conf=www") ;to generate images for info manuals
127b04d7 367 #:configure-flags
409be57b
RW
368 (list "CONFIGURATION=www"
369 (string-append "--with-texgyre-dir="
127b04d7
RW
370 (assoc-ref %build-inputs "font-tex-gyre")
371 "/share/fonts/opentype/"))
1b6826d3 372 #:phases
a8bc747a 373 (modify-phases %standard-phases
409be57b
RW
374 (add-after 'unpack 'fix-path-references
375 (lambda _
a8bc747a
RW
376 (substitute* "scm/backend-library.scm"
377 (("\\(search-executable '\\(\"gs\"\\)\\)")
409be57b
RW
378 (string-append "\"" (which "gs") "\""))
379 (("\"/bin/sh\"")
380 (string-append "\"" (which "sh") "\"")))
a8bc747a
RW
381 #t))
382 (add-before 'configure 'prepare-configuration
383 (lambda _
384 (substitute* "configure"
7affb2c1
RW
385 (("SHELL=/bin/sh") "SHELL=sh")
386 ;; When checking the fontforge version do not consider the
387 ;; version string that's part of the directory.
388 (("head -n") "tail -n"))
409be57b
RW
389 (setenv "out" "www")
390 (setenv "conf" "www")
391 #t))
392 (add-after 'install 'install-info
393 (lambda _
394 (zero? (system* "make"
395 "-j" (number->string (parallel-job-count))
396 "conf=www" "install-info")))))))
1b6826d3
RW
397 (inputs
398 `(("guile" ,guile-1.8)
399 ("font-dejavu" ,font-dejavu)
127b04d7 400 ("font-tex-gyre" ,font-tex-gyre)
1b6826d3
RW
401 ("fontconfig" ,fontconfig)
402 ("freetype" ,freetype)
403 ("ghostscript" ,ghostscript)
404 ("pango" ,pango)
405 ("python" ,python-2)))
406 (native-inputs
407 `(("bison" ,bison)
408 ("perl" ,perl)
409 ("flex" ,flex)
410 ("fontforge" ,fontforge)
411 ("dblatex" ,dblatex)
412 ("gettext" ,gnu-gettext)
413 ("imagemagick" ,imagemagick)
414 ("netpbm" ,netpbm) ;for pngtopnm
415 ("texlive" ,texlive) ;metafont and metapost
416 ("texinfo" ,texinfo)
417 ("texi2html" ,texi2html)
418 ("rsync" ,rsync)
419 ("pkg-config" ,pkg-config)
420 ("zip" ,zip)))
421 (home-page "http://www.lilypond.org/")
422 (synopsis "Music typesetting")
423 (description
424 "GNU LilyPond is a music typesetter, which produces high-quality sheet
425music. Music is input in a text file containing control sequences which are
426interpreted by LilyPond to produce the final document. It is extendable with
427Guile.")
55ca5e80
LC
428 (license license:gpl3+)
429
430 ;; On armhf and mips64el, building the documentation sometimes leads to
431 ;; more than an hour of silence, so double the max silent time.
432 (properties `((max-silent-time . 7200)))))
c267cc15 433
8e80244a
RW
434(define-public non-sequencer
435 ;; The latest tagged release is three years old and uses a custom build
436 ;; system, so we take the last commit affecting the "sequencer" directory.
437 (let ((commit "1d9bd576"))
438 (package
439 (name "non-sequencer")
440 (version (string-append "1.9.5-" commit))
441 (source (origin
442 (method git-fetch)
443 (uri (git-reference
444 (url "git://git.tuxfamily.org/gitroot/non/non.git")
445 (commit commit)))
446 (sha256
447 (base32
448 "0pkkw8q6d55j38xm7r4rwpdv1wy00a44h8c4wrn7vbgpq9nij46y"))
449 (file-name (string-append name "-" version "-checkout"))))
450 (build-system waf-build-system)
451 (arguments
452 `(#:tests? #f ;no "check" target
e591a4d6
RW
453 #:configure-flags
454 (list "--project=sequencer"
455 ;; Disable the use of SSE unless on x86_64.
456 ,@(if (not (string-prefix? "x86_64" (or (%current-target-system)
457 (%current-system))))
458 '("--disable-sse")
459 '()))
d8c317df
SB
460 #:phases
461 (modify-phases %standard-phases
462 (add-before
463 'configure 'set-flags
464 (lambda _
465 ;; Compile with C++11, required by libsigc++.
466 (setenv "CXXFLAGS" "-std=c++11")
467 #t)))
8e80244a
RW
468 #:python ,python-2))
469 (inputs
470 `(("jack" ,jack-1)
471 ("libsigc++" ,libsigc++)
472 ("liblo" ,liblo)
473 ("ntk" ,ntk)))
474 (native-inputs
475 `(("pkg-config" ,pkg-config)))
476 (home-page "http://non.tuxfamily.org/wiki/Non%20Sequencer")
477 (synopsis "Pattern-based MIDI sequencer")
478 (description
479 "The Non Sequencer is a powerful, lightweight, real-time,
480pattern-based MIDI sequencer. It utilizes the JACK Audio Connection Kit for
481MIDI I/O and the NTK GUI toolkit for its user interface. Everything in Non
482Sequencer happens on-line, in real-time. Music can be composed live, while the
483transport is rolling.")
484 (license license:gpl2+))))
485
c267cc15
RW
486(define-public solfege
487 (package
488 (name "solfege")
489 (version "3.22.2")
490 (source (origin
491 (method url-fetch)
492 (uri (string-append
493 "mirror://gnu/solfege/solfege-"
494 version ".tar.xz"))
495 (sha256
496 (base32
497 "1w25rxdbj907nsx285k9nm480pvy12w3yknfh4n1dfv17cwy072i"))))
498 (build-system gnu-build-system)
499 (arguments
500 `(#:tests? #f ; xmllint attempts to download DTD
501 #:test-target "test"
502 #:phases
503 (alist-cons-after
504 'unpack 'fix-configuration
505 (lambda* (#:key inputs #:allow-other-keys)
506 (substitute* "default.config"
507 (("csound=csound")
508 (string-append "csound="
509 (assoc-ref inputs "csound")
510 "/bin/csound"))
511 (("/usr/bin/aplay")
512 (string-append (assoc-ref inputs "aplay")
513 "/bin/aplay"))
514 (("/usr/bin/timidity")
515 (string-append (assoc-ref inputs "timidity")
516 "/bin/timidity"))
517 (("/usr/bin/mpg123")
518 (string-append (assoc-ref inputs "mpg123")
519 "/bin/mpg123"))
520 (("/usr/bin/ogg123")
521 (string-append (assoc-ref inputs "ogg123")
522 "/bin/ogg123"))))
523 (alist-cons-before
524 'build 'patch-python-shebangs
525 (lambda _
526 ;; Two python scripts begin with a Unicode BOM, so patch-shebang
527 ;; has no effect.
528 (substitute* '("solfege/parsetree.py"
529 "solfege/presetup.py")
530 (("#!/usr/bin/python") (string-append "#!" (which "python")))))
531 (alist-cons-before
532 'build 'add-sitedirs
533 ;; .pth files are not automatically interpreted unless the
534 ;; directories containing them are added as "sites". The directories
535 ;; are then added to those in the PYTHONPATH. This is required for
536 ;; the operation of pygtk and pygobject.
537 (lambda _
538 (substitute* "run-solfege.py"
539 (("import os")
540 "import os, site
541for path in [path for path in sys.path if 'site-packages' in path]: site.addsitedir(path)")))
542 (alist-cons-before
543 'build 'adjust-config-file-prefix
544 (lambda* (#:key outputs #:allow-other-keys)
545 (substitute* "run-solfege.py"
546 (("prefix = os.path.*$")
547 (string-append "prefix = " (assoc-ref outputs "out")))))
548 (alist-cons-after
549 'install 'wrap-program
550 (lambda* (#:key inputs outputs #:allow-other-keys)
551 ;; Make sure 'solfege' runs with the correct PYTHONPATH. We
552 ;; also need to modify GDK_PIXBUF_MODULE_FILE for SVG support.
553 (let* ((out (assoc-ref outputs "out"))
554 (path (getenv "PYTHONPATH"))
555 (rsvg (assoc-ref inputs "librsvg"))
556 (pixbuf (find-files rsvg "^loaders\\.cache$")))
557 (wrap-program (string-append out "/bin/solfege")
558 `("PYTHONPATH" ":" prefix (,path))
559 `("GDK_PIXBUF_MODULE_FILE" ":" prefix ,pixbuf))))
560 %standard-phases)))))))
561 (inputs
562 `(("python" ,python-2)
563 ("pygtk" ,python2-pygtk)
564 ("gettext" ,gnu-gettext)
565 ("gtk" ,gtk+)
e8309291 566 ("lilypond" ,lilypond)
c267cc15
RW
567 ("librsvg" ,librsvg) ; needed at runtime for icons
568 ("libpng" ,libpng) ; needed at runtime for icons
569 ;; players needed at runtime
570 ("aplay" ,alsa-utils)
571 ("csound" ,csound) ; optional, needed for some exercises
572 ("mpg123" ,mpg123)
573 ("ogg123" ,vorbis-tools)
574 ("timidity" ,timidity++)))
575 (native-inputs
576 `(("pkg-config" ,pkg-config)
577 ("txt2man" ,txt2man)
578 ("libxml2" ,libxml2) ; for tests
579 ("ghostscript" ,ghostscript)
c267cc15
RW
580 ("texinfo" ,texinfo)))
581 (home-page "https://www.gnu.org/software/solfege/")
582 (synopsis "Ear training")
583 (description
584 "GNU Solfege is a program for practicing musical ear-training. With it,
585you can practice your recognition of various musical intervals and chords. It
586features a statistics overview so you can monitor your progress across several
587sessions. Solfege is also designed to be extensible so you can easily write
588your own lessons.")
589 (license license:gpl3+)))
6260d1a8 590
8b9ec354
RW
591(define-public powertabeditor
592 (package
593 (name "powertabeditor")
d19cf783 594 (version "2.0.0-alpha8")
8b9ec354
RW
595 (source (origin
596 (method url-fetch)
597 (uri (string-append
598 "https://github.com/powertab/powertabeditor/archive/"
599 version ".tar.gz"))
600 (file-name (string-append name "-" version ".tar.gz"))
601 (sha256
602 (base32
d19cf783 603 "0gaa2x209v3azql8ak3r1n9a9qbxjx2ssirvwdxwklv2lmfqkm82"))
8b9ec354
RW
604 (modules '((guix build utils)))
605 (snippet
606 '(begin
607 ;; Remove bundled sources for external libraries
608 (delete-file-recursively "external")
609 (substitute* "CMakeLists.txt"
610 (("include_directories\\(\\$\\{PROJECT_SOURCE_DIR\\}/external/.*") "")
8b9ec354
RW
611 (("add_subdirectory\\(external\\)") ""))
612 (substitute* "test/CMakeLists.txt"
613 (("include_directories\\(\\$\\{PROJECT_SOURCE_DIR\\}/external/.*") ""))
614
615 ;; Add install target
616 (substitute* "source/CMakeLists.txt"
617 (("qt5_use_modules")
618 (string-append
619 "install(TARGETS powertabeditor "
620 "RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)\n"
621 "install(FILES data/tunings.json DESTINATION "
622 "${CMAKE_INSTALL_PREFIX}/share/powertabeditor/)\n"
623 "qt5_use_modules")))
624 #t))))
625 (build-system cmake-build-system)
626 (arguments
7e11d113 627 `(#:modules ((guix build cmake-build-system)
8b9ec354
RW
628 (guix build utils)
629 (ice-9 match))
630 #:configure-flags
631 ;; CMake appears to lose the RUNPATH for some reason, so it has to be
632 ;; explicitly set with CMAKE_INSTALL_RPATH.
7e11d113
RW
633 (list "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE"
634 "-DCMAKE_ENABLE_PRECOMPILED_HEADERS=OFF" ; if ON pte_tests cannot be built
635 (string-append "-DCMAKE_INSTALL_RPATH="
8b9ec354
RW
636 (string-join (map (match-lambda
637 ((name . directory)
638 (string-append directory "/lib")))
639 %build-inputs) ";")))
640 #:phases
641 (modify-phases %standard-phases
7e11d113
RW
642 (replace
643 'check
644 (lambda _
645 (zero? (system* "bin/pte_tests"
646 ;; Exclude this failing test
647 "~Formats/PowerTabOldImport/Directions"))))
648 (add-before
649 'configure 'fix-tests
650 (lambda _
651 ;; Tests cannot be built with precompiled headers
652 (substitute* "test/CMakeLists.txt"
653 (("cotire\\(pte_tests\\)") ""))
654 #t))
8b9ec354
RW
655 (add-before
656 'configure 'remove-third-party-libs
657 (lambda* (#:key inputs #:allow-other-keys)
658 ;; Link with required static libraries, because we're not
659 ;; using the bundled version of withershins.
660 (substitute* '("source/CMakeLists.txt"
661 "test/CMakeLists.txt")
7e11d113 662 (("target_link_libraries\\((powertabeditor|pte_tests)" _ target)
8b9ec354
RW
663 (string-append "target_link_libraries(" target " "
664 (assoc-ref inputs "binutils")
665 "/lib/libbfd.a "
d6902798 666 (assoc-ref inputs "libiberty")
8b9ec354
RW
667 "/lib/libiberty.a "
668 "dl")))
669 #t)))))
670 (inputs
671 `(("boost" ,boost)
672 ("alsa-lib" ,alsa-lib)
673 ("qt" ,qt)
674 ("withershins" ,withershins)
d6902798 675 ("libiberty" ,libiberty) ;for withershins
8b9ec354
RW
676 ("binutils" ,binutils) ;for -lbfd and -liberty (for withershins)
677 ("timidity" ,timidity++)
678 ("pugixml" ,pugixml)
679 ("rtmidi" ,rtmidi)
680 ("rapidjson" ,rapidjson)
681 ("zlib" ,zlib)))
682 (native-inputs
683 `(("catch" ,catch-framework)
684 ("pkg-config" ,pkg-config)))
685 (home-page "http://powertabs.net")
686 (synopsis "Guitar tablature editor")
687 (description
688 "Power Tab Editor 2.0 is the successor to the famous original Power Tab
689Editor. It is compatible with Power Tab Editor 1.7 and Guitar Pro.")
690 (license license:gpl3+)))
691
a66a60f2
RW
692(define-public synthv1
693 (package
694 (name "synthv1")
695 (version "0.7.4")
696 (source (origin
697 (method url-fetch)
698 (uri
699 (string-append "mirror://sourceforge/synthv1/synthv1-"
700 version ".tar.gz"))
701 (sha256
702 (base32
703 "16n0v4jk0ilirq84rrildvdwqxgxav78rk58ilhl622v5n893c7w"))))
704 (build-system gnu-build-system)
705 ;; There are no tests.
706 (arguments `(#:tests? #f))
707 (inputs
708 `(("jack" ,jack-1)
709 ("lv2" ,lv2)
710 ("alsa-lib" ,alsa-lib)
711 ("liblo" ,liblo)
712 ("qt" ,qt)))
713 (home-page "http://synthv1.sourceforge.net")
714 (synopsis "Polyphonic subtractive synthesizer")
715 (description
716 "Synthv1 is an old-school subtractive polyphonic synthesizer with four
717oscillators and stereo effects.")
718 (license license:gpl2+)))
719
ec8da0e2
RW
720(define-public setbfree
721 (package
722 (name "setbfree")
a39f48b8 723 (version "0.8.1")
ec8da0e2
RW
724 (source (origin
725 (method url-fetch)
726 (uri
a39f48b8
RW
727 (string-append "https://github.com/pantherb/setBfree/archive/v"
728 version ".tar.gz"))
729 (file-name (string-append name "-" version ".tar.gz"))
ec8da0e2
RW
730 (sha256
731 (base32
a39f48b8 732 "0hj0rqk5yd4fzs7bwy6a6nhqgrmcggkjcr4il76rxy92r7nwabf3"))))
ec8da0e2
RW
733 (build-system gnu-build-system)
734 (arguments
735 `(#:tests? #f ; no "check" target
736 #:make-flags
737 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
738 (string-append "FONTFILE="
739 (assoc-ref %build-inputs "font-bitstream-vera")
b42d4508
RW
740 "/share/fonts/truetype/VeraBd.ttf")
741 ;; Disable unsupported optimization flags on non-x86
742 ,@(let ((system (or (%current-target-system)
743 (%current-system))))
744 (if (or (string-prefix? "x86_64" system)
745 (string-prefix? "i686" system))
746 '()
747 '("OPTIMIZATIONS=-ffast-math -fomit-frame-pointer -O3"))))
ec8da0e2
RW
748 #:phases
749 (modify-phases %standard-phases
750 (add-before 'build 'set-CC-variable
751 (lambda _ (setenv "CC" "gcc") #t))
752 (delete 'configure))))
753 (inputs
754 `(("jack" ,jack-1)
755 ("lv2" ,lv2)
756 ("zita-convolver" ,zita-convolver)
757 ("glu" ,glu)
758 ("ftgl" ,ftgl)
759 ("font-bitstream-vera" ,font-bitstream-vera)))
760 (native-inputs
761 `(("help2man" ,help2man)
762 ("pkg-config" ,pkg-config)))
763 (home-page "http://setbfree.org")
764 (synopsis "Tonewheel organ")
765 (description
766 "setBfree is a MIDI-controlled, software synthesizer designed to imitate
767the sound and properties of the electromechanical organs and sound
768modification devices that brought world-wide fame to the names and products of
769Laurens Hammond and Don Leslie.")
770 (license license:gpl2+)))
771
770305f4
RW
772(define-public beast
773 (package
774 (name "beast")
775 (version "0.10.0")
776 (source (origin
777 (method url-fetch)
778 (uri (string-append "https://testbit.eu/pub/dists/beast/beast-"
779 version ".tar.xz"))
780 (sha256
781 (base32
782 "1jzzmfwssklzw8fvvil04n8csc0zm99fnd9p2xa7c0xchg37lvhn"))))
783 (build-system gnu-build-system)
784 (inputs
785 `(("rapicorn" ,rapicorn)
786 ("guile" ,guile-1.8)
787 ("python" ,python-2)
788 ("cython" ,python2-cython)
789 ("libgnomecanvas" ,libgnomecanvas)
790 ("libogg" ,libogg)
791 ("libmad" ,libmad)
792 ("flac" ,flac)
793 ("alsa-lib" ,alsa-lib)
794 ("libvorbis" ,libvorbis)
795 ("gettext" ,gnu-gettext)))
796 (native-inputs
797 `(("pkg-config" ,pkg-config)
798 ("glib:bin" ,glib "bin")
799 ("perl" ,perl)
800 ("perl-xml-parser" ,perl-xml-parser)))
801 (home-page "https://testbit.eu/wiki/Beast_Home")
802 (synopsis "Music composition and modular synthesis environment")
803 (description
804 "Beast is a music composition and modular synthesis application. It
805supports a wide range of standards in the field, such as MIDI, various audio
806file formats and LADSPA modules. It allows for multitrack editing, real-time
807synthesis, 32bit audio rendering, precise timing down to sample granularity,
808on-demand and partial loading of wave files, on the fly decoding, stereo
809mixing, FFT scopes, MIDI automation and full scriptability in Scheme.")
810 (license license:gpl3+)))
811
96250294
RW
812(define-public bristol
813 (package
814 (name "bristol")
815 (version "0.60.11")
816 (source (origin
817 (method url-fetch)
818 (uri (string-append "mirror://sourceforge/bristol/bristol/"
819 (version-major+minor version)
820 "/bristol-" version ".tar.gz"))
821 (sha256
822 (base32
823 "1fi2m4gmvxdi260821y09lxsimq82yv4k5bbgk3kyc3x1nyhn7vx"))))
824 (build-system gnu-build-system)
18ef998b
RW
825 (arguments
826 `(#:phases
827 (modify-phases %standard-phases
828 (add-after 'unpack 'remove-sse-flags
829 (lambda* (#:key system #:allow-other-keys)
830 (when (not (or (string-prefix? "x86_64" system)
831 (string-prefix? "i686" system)))
832 (substitute* "bristol/Makefile.in"
833 (("-msse -mfpmath=sse") "")))
834 #t)))))
96250294
RW
835 (inputs
836 `(("alsa-lib" ,alsa-lib)
837 ("jack" ,jack-1)
838 ("liblo" ,liblo)
839 ("libx11" ,libx11)))
840 (native-inputs
841 `(("pkg-config" ,pkg-config)))
842 (home-page "http://bristol.sourceforge.net/")
843 (synopsis "Synthesizer emulator")
844 (description
845 "Bristol is an emulation package for a number of different 'classic'
846synthesizers including additive and subtractive and a few organs. The
847application consists of the engine, which is called bristol, and its own GUI
848library called brighton that represents all the emulations. There are
849currently more than twenty different emulations; each does sound different
850although the author maintains that the quality and accuracy of each emulation
851is subjective.")
852 (license license:gpl3+)))
853
6260d1a8
RW
854(define-public tuxguitar
855 (package
856 (name "tuxguitar")
857 (version "1.2")
858 (source (origin
859 (method url-fetch)
860 (uri (string-append
861 "mirror://sourceforge/tuxguitar/TuxGuitar/TuxGuitar-"
862 version "/tuxguitar-src-" version ".tar.gz"))
863 (sha256
864 (base32
865 "1g1yf2gd06fzdhqb8kb8dmdcmr602s9y24f01kyl4940wimgr944"))))
866 (build-system gnu-build-system)
867 (arguments
868 `(#:make-flags (list (string-append "LDFLAGS=-Wl,-rpath="
869 (assoc-ref %outputs "out") "/lib")
870 (string-append "PREFIX="
871 (assoc-ref %outputs "out"))
872 (string-append "SWT_PATH="
1ad15c16 873 (assoc-ref %build-inputs "java-swt")
6260d1a8
RW
874 "/share/java/swt.jar"))
875 #:tests? #f ;no "check" target
876 #:parallel-build? #f ;not supported
877 #:phases
5f1c9498
RW
878 (modify-phases %standard-phases
879 (delete 'configure)
880 (add-before 'build 'enter-dir-and-set-flags
881 (lambda* (#:key inputs #:allow-other-keys)
882 (chdir "TuxGuitar")
883 (substitute* "GNUmakefile"
6da2e99e
RW
884 (("GCJFLAGS\\+=(.*)" _ rest)
885 (string-append "GCJFLAGS=-fsource=1.4 -fPIC " rest))
5f1c9498
RW
886 (("PROPERTIES\\?=")
887 (string-append "PROPERTIES?= -Dswt.library.path="
1ad15c16 888 (assoc-ref inputs "java-swt") "/lib"))
5f1c9498
RW
889 (("\\$\\(GCJ\\) -o") "$(GCJ) $(LDFLAGS) -o"))
890 #t)))))
6260d1a8 891 (inputs
1ad15c16 892 `(("java-swt" ,java-swt)))
6260d1a8 893 (native-inputs
397dbde8 894 `(("gcj" ,gcj)
6260d1a8
RW
895 ("pkg-config" ,pkg-config)))
896 (home-page "http://tuxguitar.com.ar")
897 (synopsis "Multitrack tablature editor and player")
898 (description
899 "TuxGuitar is a guitar tablature editor with player support through midi.
900It can display scores and multitrack tabs. TuxGuitar provides various
901additional features, including autoscrolling while playing, note duration
902management, bend/slide/vibrato/hammer-on/pull-off effects, support for
903tuplets, time signature management, tempo management, gp3/gp4/gp5 import and
904export.")
905 (license license:lgpl2.1+)))
2d0fd07b
RW
906
907(define-public pd
908 (package
909 (name "pd")
910 (version "0.45.4")
911 (source (origin
912 (method url-fetch)
913 (uri
914 (string-append "mirror://sourceforge/pure-data/pure-data/"
915 version "/pd-" (version-major+minor version)
916 "-" (last (string-split version #\.))
917 ".src.tar.gz"))
918 (sha256
919 (base32
920 "1ls2ap5yi2zxvmr247621g4jx0hhfds4j5704a050bn2n3l0va2p"))))
921 (build-system gnu-build-system)
922 (arguments
923 `(#:tests? #f ; no "check" target
924 #:phases
925 (modify-phases %standard-phases
926 (add-before
927 'configure 'fix-wish-path
928 (lambda _
929 (substitute* "src/s_inter.c"
930 ((" wish ") (string-append " " (which "wish8.6") " ")))
931 (substitute* "tcl/pd-gui.tcl"
932 (("exec wish ") (string-append "exec " (which "wish8.6") " ")))
933 #t))
934 (add-after
935 'unpack 'autoconf
936 (lambda _ (zero? (system* "autoreconf" "-vfi")))))))
937 (native-inputs
938 `(("autoconf" ,autoconf)
939 ("automake" ,automake)
940 ("libtool" ,libtool)
941 ("gettext" ,gnu-gettext)
942 ("pkg-config" ,pkg-config)))
943 (inputs
944 `(("tk" ,tk)
945 ("alsa-lib" ,alsa-lib)
946 ("jack" ,jack-1)))
947 (home-page "http://puredata.info")
948 (synopsis "Visual programming language for artistic performances")
949 (description
950 "Pure Data (aka Pd) is a visual programming language. Pd enables
951musicians, visual artists, performers, researchers, and developers to create
952software graphically, without writing lines of code. Pd is used to process
953and generate sound, video, 2D/3D graphics, and interface sensors, input
954devices, and MIDI. Pd can easily work over local and remote networks to
955integrate wearable technology, motor systems, lighting rigs, and other
956equipment. Pd is suitable for learning basic multimedia processing and visual
957programming methods as well as for realizing complex systems for large-scale
958projects.")
959 (license license:bsd-3)))
821664f1 960
aacb52fb
RW
961(define-public portmidi
962 (package
963 (name "portmidi")
964 (version "217")
965 (source (origin
966 (method url-fetch)
967 (uri (string-append "mirror://sourceforge/portmedia/portmidi/"
968 version "/portmidi-src-" version ".zip"))
969 (sha256
970 (base32
971 "03rfsk7z6rdahq2ihy5k13qjzgx757f75yqka88v3gc0pn9ais88"))
972 (patches (list (search-patch "portmidi-modular-build.patch")))))
973 (build-system cmake-build-system)
974 (arguments
975 `(#:tests? #f ; tests cannot be linked
976 #:configure-flags
977 (list "-DPORTMIDI_ENABLE_JAVA=Off"
978 "-DCMAKE_BUILD_TYPE=Release" ; needed to have PMALSA set
979 "-DPORTMIDI_ENABLE_TEST=Off"))) ; tests fail linking
980 (inputs
981 `(("alsa-lib" ,alsa-lib)))
982 (native-inputs
983 `(("unzip" ,unzip)))
984 (home-page "http://portmedia.sourceforge.net/portmidi/")
985 (synopsis "Library for MIDI I/O")
986 (description
987 "PortMidi is a library supporting real-time input and output of MIDI data
988using a system-independent interface.")
989 (license license:expat)))
f65d59fc
RW
990
991(define-public python-pyportmidi
992 (package
993 (name "python-pyportmidi")
994 (version (package-version portmidi))
995 (source (package-source portmidi))
996 (build-system python-build-system)
997 (arguments
998 `(#:tests? #f ; no tests included
999 #:phases
1000 (modify-phases %standard-phases
1001 (add-after 'unpack 'enter-dir
1002 (lambda _ (chdir "pm_python") #t))
1003 (add-after 'enter-dir 'fix-setup.py
1004 (lambda _
1005 (substitute* "setup.py"
1006 ;; Use Python 3 syntax
1007 (("print (\".*\")" _ text)
1008 (string-append "print(" text ")\n"))
1009 ;; TODO.txt and CHANGES.txt don't exist
1010 (("CHANGES =.*") "CHANGES = \"\"\n")
1011 (("TODO =.*") "TODO = \"\"\n"))
1012 #t)))))
1013 (inputs
1014 `(("portmidi" ,portmidi)
1015 ("alsa-lib" ,alsa-lib)
1016 ("python-cython" ,python-cython)))
1017 (native-inputs
1018 `(("unzip" ,unzip)))
1019 (home-page "http://portmedia.sourceforge.net/portmidi/")
1020 (synopsis "Python bindings to PortMidi")
1021 (description
1022 "This package provides Python bindings to the PortMidi library.")
1023 (license license:expat)))
aacb52fb 1024
821664f1
RW
1025(define-public frescobaldi
1026 (package
1027 (name "frescobaldi")
4b2eede4 1028 (version "2.19.0")
821664f1
RW
1029 (source (origin
1030 (method url-fetch)
1031 (uri (string-append
1032 "https://github.com/wbsoft/frescobaldi/releases/download/v"
1033 version "/frescobaldi-" version ".tar.gz"))
1034 (sha256
1035 (base32
4b2eede4 1036 "1rnk8i8dlshzx16n2qxcsqcs7kywgyazzyzw2vy4vp2gsm9vs9ml"))))
821664f1
RW
1037 (build-system python-build-system)
1038 (inputs
1039 `(("lilypond" ,lilypond)
6855b347 1040 ("portmidi" ,portmidi)
821664f1
RW
1041 ("python-pyqt-4" ,python-pyqt-4)
1042 ("python-ly" ,python-ly)
6855b347 1043 ("python-pyportmidi" ,python-pyportmidi)
821664f1
RW
1044 ("poppler" ,poppler)
1045 ("python-poppler-qt4" ,python-poppler-qt4)
1046 ("python-sip" ,python-sip)))
1047 (home-page "http://www.frescobaldi.org/")
1048 (synopsis "LilyPond sheet music text editor")
1049 (description
1050 "Frescobaldi is a LilyPond sheet music text editor with syntax
1051highlighting and automatic completion. Among other things, it can render
1052scores next to the source, can capture input from MIDI or read MusicXML and
1053ABC files, has a MIDI player for proof-listening, and includes a documentation
1054browser.")
1055 (license license:gpl2+)))
ddfddb0c 1056
bf76d780
RW
1057(define-public drumstick
1058 (package
1059 (name "drumstick")
cfac1272 1060 (version "1.0.2")
bf76d780
RW
1061 (source (origin
1062 (method url-fetch)
1063 (uri (string-append "mirror://sourceforge/drumstick/"
1064 version "/drumstick-" version ".tar.bz2"))
1065 (sha256
1066 (base32
cfac1272 1067 "0l47gy9yywrc860db5g3wdqg8yc8qdb2lqq6wvw1dfim5j0vbail"))))
bf76d780
RW
1068 (build-system cmake-build-system)
1069 (arguments
1070 `(#:tests? #f ; no test target
1071 #:configure-flags '("-DLIB_SUFFIX=")
1072 #:phases
1073 (modify-phases %standard-phases
1074 (add-before 'configure 'fix-docbook
1075 (lambda* (#:key inputs #:allow-other-keys)
1076 (substitute* "cmake_admin/CreateManpages.cmake"
1077 (("http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl")
1078 (string-append (assoc-ref inputs "docbook-xsl")
1079 "/xml/xsl/docbook-xsl-"
1080 ,(package-version docbook-xsl)
1081 "/manpages/docbook.xsl")))
1082 #t)))))
1083 (inputs
1084 `(("qt" ,qt)
1085 ("alsa-lib" ,alsa-lib)
1086 ("fluidsynth" ,fluidsynth)))
1087 (native-inputs
1088 `(("pkg-config" ,pkg-config)
1089 ("libxslt" ,libxslt) ;for xsltproc
1090 ("docbook-xsl" ,docbook-xsl)
1091 ("doxygen" ,doxygen)))
1092 (home-page "http://drumstick.sourceforge.net/")
1093 (synopsis "C++ MIDI library")
1094 (description
1095 "Drumstick is a set of MIDI libraries using C++/Qt5 idioms and style. It
1096includes a C++ wrapper around the ALSA library sequencer interface. A
1097complementary library provides classes for processing SMF (Standard MIDI
1098files: .MID/.KAR), Cakewalk (.WRK), and Overture (.OVE) file formats. A
1099multiplatform realtime MIDI I/O library is also provided with various output
1100backends, including ALSA, OSS, Network and FluidSynth.")
1101 (license license:gpl2+)))
1102
8e92cfb1
RW
1103(define-public vmpk
1104 (package
1105 (name "vmpk")
fb492b9a 1106 (version "0.6.2a")
8e92cfb1
RW
1107 (source (origin
1108 (method url-fetch)
1109 (uri (string-append "mirror://sourceforge/vmpk/vmpk/"
fb492b9a
RW
1110 (string-drop-right version 1)
1111 "/vmpk-" version ".tar.bz2"))
8e92cfb1
RW
1112 (sha256
1113 (base32
fb492b9a 1114 "0259iikvxnfdiifrh02g8xgcxikrkca4nhd3an8xzx0bd6bk8ifi"))))
8e92cfb1
RW
1115 (build-system cmake-build-system)
1116 (arguments
1117 `(#:tests? #f ; no test target
1118 #:phases
1119 (modify-phases %standard-phases
1120 (add-before 'configure 'fix-docbook
1121 (lambda* (#:key inputs #:allow-other-keys)
1122 (substitute* "cmake_admin/CreateManpages.cmake"
1123 (("http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl")
1124 (string-append (assoc-ref inputs "docbook-xsl")
1125 "/xml/xsl/docbook-xsl-"
1126 ,(package-version docbook-xsl)
1127 "/manpages/docbook.xsl")))
1128 #t)))))
1129 (inputs
1130 `(("drumstick" ,drumstick)
1131 ("qt" ,qt)))
1132 (native-inputs
1133 `(("libxslt" ,libxslt) ;for xsltproc
1134 ("docbook-xsl" ,docbook-xsl)
1135 ("pkg-config" ,pkg-config)))
1136 (home-page "http://vmpk.sourceforge.net")
1137 (synopsis "Virtual MIDI piano keyboard")
1138 (description
1139 "Virtual MIDI Piano Keyboard is a MIDI events generator and receiver. It
1140doesn't produce any sound by itself, but can be used to drive a MIDI
1141synthesizer (either hardware or software, internal or external). You can use
1142the computer's keyboard to play MIDI notes, and also the mouse. You can use
1143the Virtual MIDI Piano Keyboard to display the played MIDI notes from another
1144instrument or MIDI file player.")
1145 (license license:gpl3+)))
1146
ddfddb0c
RW
1147(define-public zynaddsubfx
1148 (package
1149 (name "zynaddsubfx")
acf2320b 1150 (version "2.5.4")
ddfddb0c
RW
1151 (source (origin
1152 (method url-fetch)
1153 (uri (string-append
1154 "mirror://sourceforge/zynaddsubfx/zynaddsubfx/"
138e7697 1155 version "/zynaddsubfx-" version ".tar.bz2"))
ddfddb0c
RW
1156 (sha256
1157 (base32
acf2320b 1158 "16llaa2wg2gbgjhwp3632b2vx9jvanj4csv7d41k233ms6d1sjq1"))))
ddfddb0c 1159 (build-system cmake-build-system)
00dfc97c
RW
1160 (arguments
1161 `(#:phases
1162 (modify-phases %standard-phases
1163 ;; Move SSE compiler optimization flags from generic target to
1164 ;; athlon64 and core2 targets, because otherwise the build would fail
1165 ;; on non-Intel machines.
1166 (add-after 'unpack 'remove-sse-flags-from-generic-target
1167 (lambda _
1168 (substitute* "src/CMakeLists.txt"
1169 (("-msse -msse2 -mfpmath=sse") "")
1170 (("-march=(athlon64|core2)" flag)
1171 (string-append flag " -msse -msse2 -mfpmath=sse")))
1172 #t)))))
ddfddb0c
RW
1173 (inputs
1174 `(("liblo" ,liblo)
1175 ("ntk" ,ntk)
1176 ("alsa-lib" ,alsa-lib)
1177 ("jack" ,jack-1)
1178 ("fftw" ,fftw)
1179 ("minixml" ,minixml)
1180 ("libxpm" ,libxpm)
1181 ("zlib" ,zlib)))
1182 (native-inputs
1183 `(("pkg-config" ,pkg-config)))
1184 (home-page "http://zynaddsubfx.sf.net/")
1185 (synopsis "Software synthesizer")
1186 (description
1187 "ZynAddSubFX is a feature heavy realtime software synthesizer. It offers
1188three synthesizer engines, multitimbral and polyphonic synths, microtonal
1189capabilities, custom envelopes, effects, etc.")
1190 (license license:gpl2)))
c493679f
RW
1191
1192(define-public yoshimi
1193 (package
1194 (name "yoshimi")
8ddc5d57 1195 (version "1.3.8.2")
c493679f
RW
1196 (source (origin
1197 (method url-fetch)
1198 (uri (string-append "mirror://sourceforge/yoshimi/"
1199 (version-major+minor version)
1200 "/yoshimi-" version ".tar.bz2"))
1201 (sha256
1202 (base32
8ddc5d57 1203 "0wl4ln6v1nkkx56kfah23chyrhga2vi93i82g0s200c4s4184xr8"))))
c493679f
RW
1204 (build-system cmake-build-system)
1205 (arguments
1206 `(#:tests? #f ; there are no tests
1207 #:configure-flags
1208 (list (string-append "-DCMAKE_INSTALL_DATAROOTDIR="
1209 (assoc-ref %outputs "out") "/share"))
1210 #:phases
1211 (modify-phases %standard-phases
1212 (add-before 'configure 'enter-dir
1213 (lambda _ (chdir "src") #t))
1214 ;; Move SSE compiler optimization flags from generic target to
1215 ;; athlon64 and core2 targets, because otherwise the build would fail
1216 ;; on non-Intel machines.
1217 (add-after 'unpack 'remove-sse-flags-from-generic-target
1218 (lambda _
1219 (substitute* "src/CMakeLists.txt"
1220 (("-msse -msse2 -mfpmath=sse") "")
1221 (("-march=(athlon64|core2)" flag)
1222 (string-append flag " -msse -msse2 -mfpmath=sse")))
1223 #t)))))
1224 (inputs
1225 `(("boost" ,boost)
1226 ("fftwf" ,fftwf)
1227 ("alsa-lib" ,alsa-lib)
1228 ("jack" ,jack-1)
1229 ("fontconfig" ,fontconfig)
1230 ("minixml" ,minixml)
1231 ("mesa" ,mesa)
1232 ("fltk" ,fltk)
1233 ("lv2" ,lv2)
1234 ("readline" ,readline)
1235 ("ncurses" ,ncurses)
1236 ("cairo" ,cairo)
1237 ("zlib" ,zlib)))
1238 (native-inputs
1239 `(("pkg-config" ,pkg-config)))
1240 (home-page "http://yoshimi.sourceforge.net/")
1241 (synopsis "Multi-paradigm software synthesizer")
1242 (description
1243 "Yoshimi is a fork of ZynAddSubFX, a feature heavy realtime software
1244synthesizer. It offers three synthesizer engines, multitimbral and polyphonic
1245synths, microtonal capabilities, custom envelopes, effects, etc. Yoshimi
1246improves on support for JACK features, such as JACK MIDI.")
1247 (license license:gpl2)))
658212eb
LF
1248
1249(define-public cursynth
1250 (package
1251 (name "cursynth")
1252 (version "1.5")
1253 (source
1254 (origin
1255 (method url-fetch)
1256 (uri (string-append "mirror://gnu/cursynth/cursynth-"
1257 version ".tar.gz"))
1258 (sha256
1259 (base32 "1dhphsya41rv8z6yqcv9l6fwbslsds4zh1y56zizi39nd996d40v"))
fc1adab1 1260 (patches (search-patches "cursynth-wave-rand.patch"))))
658212eb
LF
1261 (build-system gnu-build-system)
1262 (native-inputs `(("pkg-config" ,pkg-config)))
1263 ;; TODO: See https://github.com/iyoko/cursynth/issues/4 which currently
1264 ;; prevents us from using pulseaudio
1265 (inputs `(("ncurses" ,ncurses)
1266 ("alsa" ,alsa-lib)))
1267 (home-page "http://www.gnu.org/software/cursynth")
1268 (synopsis "Polyphonic and MIDI subtractive music synthesizer using curses")
1269 (description "GNU cursynth is a polyphonic synthesizer that runs
1270graphically in the terminal. It is built on a full-featured subtractive
1271synthesis engine. Notes and parameter changes may be entered via MIDI or the
1272computer's keyboard.")
1273 (license license:gpl3+)))
a763ce7d
RW
1274
1275(define-public qtractor
1276 (package
1277 (name "qtractor")
dfc9d18e 1278 (version "0.7.7")
a763ce7d
RW
1279 (source (origin
1280 (method url-fetch)
1281 (uri (string-append "http://downloads.sourceforge.net/qtractor/"
1282 "qtractor-" version ".tar.gz"))
1283 (sha256
1284 (base32
dfc9d18e 1285 "0q8kvy1ynlg64v1w7jxix1rpq0lp2ixgb2y8cbbwxd2b28r3r2vl"))))
a763ce7d
RW
1286 (build-system gnu-build-system)
1287 (arguments `(#:tests? #f)) ; no "check" target
1288 (inputs
1289 `(("qt" ,qt)
1290 ("alsa-lib" ,alsa-lib)
1291 ("jack" ,jack-1)
1292 ("libsndfile" ,libsndfile)
1293 ("ladspa" ,ladspa)
1294 ("lv2" ,lv2)
1295 ("lilv" ,lilv)
1296 ("suil" ,suil)
1297 ("libsamplerate" ,libsamplerate)
1298 ("libvorbis" ,libvorbis)
1299 ("libmad" ,libmad)
1300 ("rubberband" ,rubberband)
1301 ("liblo" ,liblo)
1302 ("zlib" ,zlib)))
1303 (native-inputs
1304 `(("pkg-config" ,pkg-config)))
1305 (home-page "http://qtractor.sourceforge.net/")
1306 (synopsis "Audio/MIDI multi-track sequencer")
1307 (description
1308 "Qtractor is an Audio/MIDI multi-track sequencer application. It uses
1309JACK for audio and ALSA sequencer for MIDI as multimedia infrastructures and
1310follows a traditional multi-track tape recorder control paradigm.")
1311 (license license:gpl2+)))
aa0edd3f
AM
1312
1313(define-public pianobar
1314 (package
1315 (name "pianobar")
1316 (version "2015.11.22")
1317 (source (origin
1318 (method url-fetch)
1319 (uri (string-append "https://github.com/PromyLOPh/"
1320 name "/archive/" version ".tar.gz"))
1321 (file-name (string-append name "-" version ".tar.gz"))
1322 (sha256
1323 (base32
1324 "022df19bhxqvkhy0qy21xahba5s1fm17b13y0p9p9dnf2yl44wfv"))))
1325 (build-system gnu-build-system)
1326 (arguments
1327 `(#:tests? #f ; no tests
1328 #:make-flags (list "CC=gcc" "CFLAGS=-std=c99"
1329 (string-append "PREFIX=" %output))
1330 #:phases (modify-phases %standard-phases
1331 (delete 'configure))))
1332 (inputs
1333 `(("ao" ,ao)
1334 ("curl" ,curl)
1335 ("libgcrypt" ,libgcrypt)
1336 ("json-c" ,json-c)
1337 ("ffmpeg" ,ffmpeg)))
1338 (native-inputs
1339 `(("pkg-config" ,pkg-config)))
1340 (home-page "http://6xq.net/projects/pianobar/")
1341 (synopsis "Console-based pandora.com player")
1342 (description "pianobar is a console-based music player for the
1343personalized online radio pandora.com. It has configurable keys for playing
1344and managing stations, can be controlled remotely via fifo, and can run
1345event-based scripts for scrobbling, notifications, etc.")
1346 (license license:expat)))
3f7a182d
LF
1347
1348(define-public python-mutagen
1349 (package
1350 (name "python-mutagen")
1351 (version "1.31")
1352 (source (origin
1353 (method url-fetch)
1354 (uri (pypi-uri "mutagen" version))
1355 (sha256
1356 (base32
1357 "16fnnhspniac2i7qswxafawsh2x2a803hmc6bn9k1zl5fxq1380a"))))
1358 (build-system python-build-system)
1359 (home-page "https://bitbucket.org/lazka/mutagen")
1360 (synopsis "Read and write audio tags")
1361 (description "Mutagen is a Python module to handle audio metadata. It
1362supports ASF, FLAC, M4A, Monkey’s Audio, MP3, Musepack, Ogg FLAC, Ogg Speex, Ogg
1363Theora, Ogg Vorbis, True Audio, WavPack and OptimFROG audio files. All versions
1364of ID3v2 are supported, and all standard ID3v2.4 frames are parsed. It can read
1365Xing headers to accurately calculate the bitrate and length of MP3s. ID3 and
1366APEv2 tags can be edited regardless of audio format. It can also manipulate Ogg
1367streams on an individual packet/page level.")
1368 (license license:gpl2))) ; "later version" never mentioned
1369
1370(define-public python2-mutagen
1371 (package-with-python2 python-mutagen))
8975de88
LF
1372
1373(define-public python-musicbrainzngs
1374 (package
1375 (name "python-musicbrainzngs")
1376 (version "0.5")
1377 (source (origin
1378 (method url-fetch)
1379 (uri (pypi-uri "musicbrainzngs" version))
1380 (sha256
1381 (base32
1382 "12f48llmdf5rkiqxcb70k2k1dmhm8byq0ifazvlrca8dfnmqh4r8"))))
1383 (build-system python-build-system)
1384 (home-page "https://python-musicbrainzngs.readthedocs.org/")
1385 (synopsis "Python bindings for MusicBrainz NGS webservice")
1386 (description "Musicbrainzngs implements Python bindings of the MusicBrainz
1387web service. This library can be used to retrieve music metadata from the
1388MusicBrainz database.")
1389 ;; 'musicbrainzngs/compat.py' is ISC licensed.
1390 (license (list license:bsd-2 license:isc))))
1391
1392(define-public python2-musicbrainzngs
1393 (package-with-python2 python-musicbrainzngs))
e8fee648
LF
1394
1395(define-public python-pyechonest
1396 (package
1397 (name "python-pyechonest")
1398 (version "9.0.0")
1399 (source (origin
1400 (method url-fetch)
1401 (uri (pypi-uri "pyechonest" version))
1402 (sha256
1403 (base32
1404 "1584nira3rkiman9dm81kdshihmkj21s8navndz2l8spnjwb790x"))))
1405 (build-system python-build-system)
1406 (home-page "https://github.com/echonest/pyechonest")
1407 (synopsis "Python interface to The Echo Nest APIs")
d3e3468f
LF
1408 (description "Pyechonest is a Python library for the Echo Nest API. With
1409Pyechonest you have Python access to the entire set of API methods including:
e8fee648
LF
1410
1411@enumerate
1412@item artist - search for artists by name, description, or attribute, and get
1413back detailed information about any artist including audio, similar artists,
1414blogs, familiarity, hotttnesss, news, reviews, urls and video.
1415@item song - search songs by artist, title, description, or attribute (tempo,
1416duration, etc) and get detailed information back about each song, such as
1417hotttnesss, audio_summary, or tracks.
1418@item track - upload a track to the Echo Nest and receive summary information
1419about the track including key, duration, mode, tempo, time signature along with
1420detailed track info including timbre, pitch, rhythm and loudness information.
1421@end enumerate\n")
1422 (license license:bsd-3)
1423 (properties `((python2-variant . ,(delay python2-pyechonest))))))
1424
1425(define-public python2-pyechonest
1426 (package (inherit (package-with-python2
1427 (strip-python2-variant python-pyechonest)))
1428 (native-inputs `(("python2-setuptools" ,python2-setuptools)))))
acd7351f
LF
1429
1430(define-public python-pylast
1431 (package
1432 (name "python-pylast")
1433 (version "1.5.1")
1434 (source (origin
1435 (method url-fetch)
1436 (uri (pypi-uri "pylast" version))
1437 (sha256
1438 (base32
1439 "10znd9xr1vs2ix519jkz3ccm90zciaddcdr2w2wrrh2jyy3bc59a"))))
1440 (build-system python-build-system)
1441 (native-inputs
1442 `(("python-coverage" ,python-coverage)
1443 ("python-mock" ,python-mock)
1444 ("python-pep8" ,python-pep8)
1445 ("python-pytest" ,python-pytest)
1446 ("python-pyflakes" ,python-pyflakes)
1447 ("python-pyyaml" ,python-pyyaml)))
1448 (propagated-inputs
1449 `(("python-six" ,python-six)))
1450 (home-page "https://github.com/pylast/pylast")
1451 (synopsis "Python interface to Last.fm and Libre.fm")
1452 (description "A Python interface to Last.fm and other API-compatible
1453websites such as Libre.fm.")
1454 (license license:asl2.0)
1455 (properties `((python2-variant . ,(delay python2-pylast))))))
1456
1457(define-public python2-pylast
1458 (let ((pylast (package-with-python2
1459 (strip-python2-variant python-pylast))))
1460 (package (inherit pylast)
1461 (native-inputs
1462 `(("python2-setuptools" ,python2-setuptools)
1463 ,@(package-native-inputs pylast))))))
3bf429af
LF
1464
1465(define-public beets
1466 (package
1467 (name "beets")
1468 (version "1.3.17")
1469 (source (origin
1470 (method url-fetch)
1471 (uri (pypi-uri name version))
1472 (sha256
1473 (base32
1474 "0yg7sp18sdpszkinhb0bi6yinbn316jy1baxrwiw0m4byrj3rr6c"))))
1475 (build-system python-build-system)
1476 (arguments
1477 `(#:python ,python-2 ; only Python 2 is supported
1478 #:phases
1479 (modify-phases %standard-phases
1480 (add-after 'unpack 'set-HOME
36c2c8c8
LF
1481 (lambda _ (setenv "HOME" (string-append (getcwd) "/tmp"))))
1482 (replace 'check
1483 (lambda _ (zero? (system* "nosetests" "-v")))))))
3bf429af
LF
1484 (native-inputs
1485 `(("python2-beautifulsoup4" ,python2-beautifulsoup4)
1486 ("python2-flask" ,python2-flask)
1487 ("python2-setuptools" ,python2-setuptools)
1488 ("python2-mock" ,python2-mock)
1489 ("python2-mpd2" ,python2-mpd2)
36c2c8c8 1490 ("python2-nose" ,python2-nose)
3bf429af
LF
1491 ("python2-pathlib" ,python2-pathlib)
1492 ("python2-pyxdg" ,python2-pyxdg)
1493 ("python2-pyechonest" ,python2-pyechonest)
1494 ("python2-pylast" ,python2-pylast)
1495 ("python2-rarfile" ,python2-rarfile)
1496 ("python2-responses" ,python2-responses)))
1497 ;; TODO: Install optional plugins and dependencies.
1498 (propagated-inputs
1499 `(("python2-enum34" ,python2-enum34)
1500 ("python2-jellyfish" ,python2-jellyfish)
1501 ("python2-munkres" ,python2-munkres)
1502 ("python2-musicbrainzngs" ,python2-musicbrainzngs)
1503 ("python2-mutagen" ,python2-mutagen)
1504 ("python2-pyyaml" ,python2-pyyaml)
1505 ("python2-unidecode" ,python2-unidecode)))
1506 (home-page "http://beets.io")
1507 (synopsis "Music organizer")
1508 (description "The purpose of beets is to get your music collection right
1509once and for all. It catalogs your collection, automatically improving its
1510metadata as it goes using the MusicBrainz database. Then it provides a variety
1511of tools for manipulating and accessing your music.")
1512 (license license:expat)))
21d18113
KY
1513
1514(define-public milkytracker
1515 (package
1516 (name "milkytracker")
1517 (version "0.90.86")
1518 (source (origin
1519 (method url-fetch)
1520 (uri (string-append "http://milkytracker.org/files/"
1521 name "-" version ".tar.bz2"))
1522 (sha256
1523 (base32
1524 "1v9vp8vi24lkagfpr92c128whvakwgrm9pq2zf6ijpl5sh7014zb"))))
1525 (build-system gnu-build-system)
1526 (arguments
1527 `(#:make-flags '("CXXFLAGS=-lasound")))
1528 (inputs
1529 `(("alsa-lib" ,alsa-lib)
1530 ("jack" ,jack-1)
1531 ("sdl" ,sdl)
1532 ("zlib" ,zlib)))
1533 (native-inputs
1534 `(("pkg-config" ,pkg-config)))
1535 (synopsis "Music tracker for working with .MOD/.XM module files")
1536 (description "MilkyTracker is a music application for creating .MOD and .XM
1537module files. It attempts to recreate the module replay and user experience of
1538the popular DOS program Fasttracker II, with special playback modes available
1539for improved Amiga ProTracker 2/3 compatibility.")
1540 (home-page "http://milkytracker.org/")
1541 ;; 'src/milkyplay' is under Modified BSD, the rest is under GPL3 or later.
1542 (license (list license:bsd-3 license:gpl3+))))