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