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