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