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