gnu: guile-simple-zmq: Update to commit '1f3b7c0'.
[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>
e749ef2d 3;;; Copyright © 2015, 2016, 2017, 2018 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>
6ff5e9ba 6;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
3f7a182d 7;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
3c8ba11a 8;;; Copyright © 2016, 2017 Kei Kebreau <kkebreau@posteo.net>
6d3ef286 9;;; Copyright © 2016 John J. Foerch <jjfoerch@earthlink.net>
23319ed6 10;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
4a78fd46 11;;; Copyright © 2017 Nils Gillmann <ng0@n0.is>
a42619e5 12;;; Copyright © 2017 Rodger Fox <thylakoid@openmailbox.org>
95e545a4 13;;; Copyright © 2017, 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
d09e31bd 14;;; Copyright © 2017, 2018 Pierre Langlois <pierre.langlois@gmx.com>
bc27eb3b 15;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
edfa2eee 16;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
6b445c57 17;;; Copyright © 2018 nee <nee.git@hidamari.blue>
b0dea60c 18;;; Copyright © 2018 Stefan Reichör <stefan@xsteve.at>
1b6826d3
RW
19;;;
20;;; This file is part of GNU Guix.
21;;;
22;;; GNU Guix is free software; you can redistribute it and/or modify it
23;;; under the terms of the GNU General Public License as published by
24;;; the Free Software Foundation; either version 3 of the License, or (at
25;;; your option) any later version.
26;;;
27;;; GNU Guix is distributed in the hope that it will be useful, but
28;;; WITHOUT ANY WARRANTY; without even the implied warranty of
29;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30;;; GNU General Public License for more details.
31;;;
32;;; You should have received a copy of the GNU General Public License
33;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
34
35(define-module (gnu packages music)
36 #:use-module (guix utils)
37 #:use-module (guix packages)
38 #:use-module (guix download)
8e80244a 39 #:use-module (guix git-download)
1b6826d3
RW
40 #:use-module ((guix licenses) #:prefix license:)
41 #:use-module (guix build-system gnu)
f467c352 42 #:use-module (guix build-system ant)
8b9ec354 43 #:use-module (guix build-system cmake)
2394afa4 44 #:use-module (guix build-system meson)
821664f1 45 #:use-module (guix build-system python)
bc27eb3b 46 #:use-module (guix build-system scons)
58301682 47 #:use-module (guix build-system glib-or-gtk)
8e80244a 48 #:use-module (guix build-system waf)
1b6826d3 49 #:use-module (gnu packages)
ddfddb0c 50 #:use-module (gnu packages algebra)
91595624 51 #:use-module (gnu packages apr)
c267cc15 52 #:use-module (gnu packages audio)
2d0fd07b 53 #:use-module (gnu packages autotools)
b7367762 54 #:use-module (gnu packages backup)
8b9ec354 55 #:use-module (gnu packages base) ;libbdf
7bac8196 56 #:use-module (gnu packages bash)
1b6826d3 57 #:use-module (gnu packages bison)
b7367762 58 #:use-module (gnu packages boost)
e8069d01 59 #:use-module (gnu packages cdrom)
8b9ec354
RW
60 #:use-module (gnu packages code)
61 #:use-module (gnu packages check)
a7a7186c 62 #:use-module (gnu packages cmake)
8b9ec354 63 #:use-module (gnu packages compression)
d20b7384 64 #:use-module (gnu packages crypto)
aa0edd3f 65 #:use-module (gnu packages curl)
13416a10 66 #:use-module (gnu packages cyrus-sasl)
d20b7384
PL
67 #:use-module (gnu packages databases)
68 #:use-module (gnu packages datastructures)
1b6826d3 69 #:use-module (gnu packages docbook)
99828fa7 70 #:use-module (gnu packages documentation)
91595624 71 #:use-module (gnu packages emacs)
13416a10 72 #:use-module (gnu packages file)
1b6826d3 73 #:use-module (gnu packages flex)
8e80244a 74 #:use-module (gnu packages fltk)
1b6826d3
RW
75 #:use-module (gnu packages fonts)
76 #:use-module (gnu packages fontutils)
3bf429af 77 #:use-module (gnu packages freedesktop)
6260d1a8 78 #:use-module (gnu packages gcc)
aa0edd3f 79 #:use-module (gnu packages gnupg)
1b6826d3
RW
80 #:use-module (gnu packages gettext)
81 #:use-module (gnu packages ghostscript)
ec8da0e2 82 #:use-module (gnu packages gl)
8e80244a 83 #:use-module (gnu packages glib)
c267cc15 84 #:use-module (gnu packages gnome)
770305f4 85 #:use-module (gnu packages graphics)
d20b7384 86 #:use-module (gnu packages gstreamer)
1b6826d3
RW
87 #:use-module (gnu packages gtk)
88 #:use-module (gnu packages guile)
c267cc15 89 #:use-module (gnu packages image)
1b6826d3 90 #:use-module (gnu packages imagemagick)
6260d1a8 91 #:use-module (gnu packages java)
91595624 92 #:use-module (gnu packages libffi)
d20b7384 93 #:use-module (gnu packages libusb)
7bac8196
LF
94 #:use-module (gnu packages linux) ; for alsa-utils
95 #:use-module (gnu packages lirc)
91595624 96 #:use-module (gnu packages llvm)
c267cc15
RW
97 #:use-module (gnu packages man)
98 #:use-module (gnu packages mp3)
3bf429af 99 #:use-module (gnu packages mpd)
e8069d01 100 #:use-module (gnu packages ncurses)
1b6826d3 101 #:use-module (gnu packages netpbm)
91595624 102 #:use-module (gnu packages pcre)
821664f1 103 #:use-module (gnu packages pdf)
1b6826d3
RW
104 #:use-module (gnu packages perl)
105 #:use-module (gnu packages pkg-config)
d20b7384 106 #:use-module (gnu packages protobuf)
d231bb35 107 #:use-module (gnu packages pulseaudio) ;libsndfile
1b6826d3 108 #:use-module (gnu packages python)
1b2f753d 109 #:use-module (gnu packages python-web)
8b9ec354 110 #:use-module (gnu packages qt)
d231bb35 111 #:use-module (gnu packages rdf)
c493679f 112 #:use-module (gnu packages readline)
1b6826d3 113 #:use-module (gnu packages rsync)
21d18113 114 #:use-module (gnu packages sdl)
2d0fd07b 115 #:use-module (gnu packages tcl)
1b6826d3 116 #:use-module (gnu packages texinfo)
8f9ac901 117 #:use-module (gnu packages tex)
13416a10 118 #:use-module (gnu packages tls)
1ea29aa0 119 #:use-module (gnu packages version-control)
e8069d01 120 #:use-module (gnu packages video)
8b9ec354 121 #:use-module (gnu packages web)
c30a66de 122 #:use-module (gnu packages wxwidgets)
c267cc15 123 #:use-module (gnu packages xml)
ddfddb0c 124 #:use-module (gnu packages xorg)
c267cc15 125 #:use-module (gnu packages xiph)
2d0fd07b 126 #:use-module ((srfi srfi-1) #:select (last)))
1b6826d3 127
c30a66de
RW
128(define-public aria-maestosa
129 (package
130 (name "aria-maestosa")
0a151351 131 (version "1.4.13")
c30a66de
RW
132 (source (origin
133 (method url-fetch)
134 (uri (string-append "mirror://sourceforge/ariamaestosa/ariamaestosa/"
135 version "/AriaSrc-" version ".tar.bz2"))
136 (sha256
137 (base32
0a151351 138 "1cs3z6frx2ch7rm5ammx9p0rxcjrbj1vq14hvcbimpaw39rdsn3d"))))
30812446 139 (build-system scons-build-system)
c30a66de
RW
140 (arguments
141 `(#:tests? #f ;no tests
20e42d1e
DM
142 #:scons-flags
143 (list (string-append "prefix=" (assoc-ref %outputs "out")))
30812446 144 #:scons ,scons-python2
c30a66de 145 #:phases
c30a66de
RW
146 (modify-phases %standard-phases
147 (delete 'configure)
148 (add-after 'unpack 'scons-propagate-environment
149 (lambda _
150 ;; By design, SCons does not, by default, propagate
151 ;; environment variables to subprocesses. See:
152 ;; <http://comments.gmane.org/gmane.linux.distributions.nixos/4969>
153 ;; Here, we modify the SConstruct file to arrange for
154 ;; environment variables to be propagated.
155 (substitute* "SConstruct"
156 (("env = Environment\\(\\)")
157 "env = Environment(ENV=os.environ)")
158 ;; Scons errors out when copying subdirectories from Resources,
159 ;; so we move them instead.
160 (("Copy") "Move")
161 ;; We move the "score" and "Documentation" directories at once,
162 ;; so we have to ignore files contained therein.
163 (("if \".svn\" in file" line)
164 (string-append line
165 " or \"score/\" in file"
166 " or \"Documentation/\" in file")))
167 #t))
30812446 168 (add-after 'install 'fix-directory-permissions
c30a66de
RW
169 (lambda* (#:key outputs #:allow-other-keys)
170 (let ((out (assoc-ref outputs "out")))
30812446
DM
171 (chmod (string-append out "/share/Aria/Documentation") #o555)
172 (chmod (string-append out "/share/Aria/score") #o555)
173 #t))))))
c30a66de
RW
174 (inputs
175 `(("wxwidgets" ,wxwidgets)
176 ("glib" ,glib)
177 ("alsa-lib" ,alsa-lib)))
178 (native-inputs
30812446 179 `(("pkg-config" ,pkg-config)))
c30a66de
RW
180 (home-page "http://ariamaestosa.sourceforge.net/")
181 (synopsis "MIDI sequencer and editor")
182 (description
183 "Aria Maestosa is a MIDI sequencer and editor. It lets you compose, edit
184and play MIDI files with a few clicks in a user-friendly interface offering
185score, keyboard, guitar, drum and controller views.")
186 (license license:gpl3+)))
187
d20b7384
PL
188;; We don't use the latest release because it depends on Qt4. Instead we
189;; download the sources from the tip of the "qt5" branch.
190(define-public clementine
8a6d16b8
PL
191 (let ((commit "4619a4c1ab3b17b13d4b2327ad477912917eaf36")
192 (revision "2"))
d20b7384
PL
193 (package
194 (name "clementine")
8a6d16b8 195 (version (git-version "1.3.1" revision commit))
d20b7384
PL
196 (source (origin
197 (method git-fetch)
198 (uri (git-reference
199 (url "https://github.com/clementine-player/Clementine.git")
200 (commit commit)))
8a6d16b8 201 (file-name (git-file-name name version))
d20b7384
PL
202 (sha256
203 (base32
8a6d16b8 204 "1hximk3q0p8nw8is5w7215xgkb7k4flnfyr0pdz9svfwvcm05w1i"))
d20b7384
PL
205 (modules '((guix build utils)))
206 (snippet
6cbee49d
MW
207 '(begin
208 (for-each
d20b7384
PL
209 (lambda (dir)
210 (delete-file-recursively
6cbee49d 211 (string-append "3rdparty/" dir)))
d20b7384 212 (list
6cbee49d
MW
213 ;; TODO: The following dependencies are still bundled:
214 ;; - "qxt": Appears to be unmaintained upstream.
215 ;; - "qsqlite"
216 ;; - "qtsingleapplication"
217 ;; - "qocoa"
218 ;; - "qtiocompressor"
219 ;; - "gmock": The tests crash when using our googletest
220 ;; package instead of the bundled gmock.
221 "SPMediaKeyTap"
222 "fancytabwidget"
223 "google-breakpad"
224 "libmygpo-qt"
225 "libmygpo-qt5"
226 "libprojectm"
227 "qtwin"
228 "sha2" ;; Replaced by openssl.
229 "taglib"
230 "tinysvcmdns"))
231 #t))
af414f34
PL
232 (patches (search-patches "clementine-use-openssl.patch"
233 "clementine-remove-crypto++-dependency.patch"))))
d20b7384
PL
234 (build-system cmake-build-system)
235 (arguments
236 '(#:test-target "clementine_test"
237 #:configure-flags
af414f34
PL
238 (list ;; Requires unpackaged "projectm"
239 "-DENABLE_VISUALISATIONS=OFF"
240 ;; Otherwise it may try to download a non-free library at run-time.
241 ;; TODO In an origin snippet, remove the code that performs the
242 ;; download.
243 "-DHAVE_SPOTIFY_DOWNLOADER=FALSE"
244 "-DUSE_SYSTEM_SHA2=TRUE")
d20b7384
PL
245 #:phases
246 (modify-phases %standard-phases
247 (add-after 'install 'wrap-program
248 (lambda* (#:key inputs outputs #:allow-other-keys)
249 (let ((out (assoc-ref outputs "out"))
250 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
251 (wrap-program (string-append out "/bin/clementine")
252 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path)))
253 #t))))))
254 (native-inputs
255 `(("gettext" ,gettext-minimal)
256 ("pkg-config" ,pkg-config)
257 ("qtlinguist" ,qttools)))
258 (inputs
259 `(("boost" ,boost)
260 ("chromaprint" ,chromaprint)
d20b7384
PL
261 ("fftw" ,fftw)
262 ("glib" ,glib)
263 ("glu" ,glu)
264 ("gstreamer" ,gstreamer)
265 ("gst-plugins-base" ,gst-plugins-base)
266 ("libcdio" ,libcdio)
267 ("libmygpo-qt" ,libmygpo-qt)
d20b7384
PL
268 ;; TODO: Package libgpod.
269 ("libmtp" ,libmtp)
270 ("libxml2" ,libxml2)
271 ("openssl" ,openssl)
272 ("protobuf" ,protobuf)
273 ("pulseaudio" ,pulseaudio)
274 ("qtbase" ,qtbase)
275 ("qtx11extras" ,qtx11extras)
276 ("qtwebkit" ,qtwebkit)
277 ("sqlite" ,sqlite-with-fts3)
278 ("sparsehash" ,sparsehash)
279 ("taglib" ,taglib)))
280 (home-page "http://clementine-player.org")
281 (synopsis "Music player and library organizer")
282 (description "Clementine is a multiplatform music player. It is inspired
283by Amarok 1.4, focusing on a fast and easy-to-use interface for searching and
284playing your music.")
285 (license (list
286 ;; clementine and qtiocompressor are under GPLv3.
287 license:gpl3+
288 ;; gmock is under BSD-3.
289 license:bsd-3
290 ;; qxt is under CPL1.0.
291 license:cpl1.0
292 ;; qsqlite and qtsingleapplication are under LGPL2.1+.
293 license:lgpl2.1+
294 ;; qocoa is under MIT and CC by-sa for the icons.
295 license:cc-by-sa3.0)))))
296
e8069d01
PW
297(define-public cmus
298 (package
299 (name "cmus")
300 (version "2.7.1")
301 (source (origin
302 (method url-fetch)
303 (uri (string-append
304 "https://github.com/" name "/" name "/archive/v"
305 version ".tar.gz"))
566fc7fa 306 (file-name (string-append name "-" version ".tar.gz"))
e8069d01
PW
307 (sha256
308 (base32
309 "0raixgjavkm7hxppzsc5zqbfbh2bhjcmbiplhnsxsmyj8flafyc1"))))
310 (build-system gnu-build-system)
311 (arguments
312 `(#:tests? #f ; cmus does not include tests
313 #:phases
314 (modify-phases %standard-phases
315 (replace
316 'configure
317 (lambda* (#:key outputs #:allow-other-keys)
318 (let ((out (assoc-ref outputs "out")))
319
320 ;; It's an idiosyncratic configure script that doesn't
321 ;; understand --prefix=..; it wants prefix=.. instead.
322 (zero?
323 (system* "./configure"
324 (string-append "prefix=" out)))))))))
325 ;; TODO: cmus optionally supports the following formats, which haven't yet
326 ;; been added to Guix:
327 ;;
328 ;; - Roar, libroar
329 ;;
330 ;; - DISCID_LIBS, apparently different from cd-discid which is included in
331 ;; Guix. See <http://sourceforge.net/projects/discid/>
332 (native-inputs
333 `(("pkg-config" ,pkg-config)))
334 (inputs
335 `(("alsa-lib" ,alsa-lib)
336 ("ao" ,ao)
337 ("ffmpeg" ,ffmpeg)
338 ("flac" ,flac)
339 ("jack" ,jack-1)
340 ("libcddb" ,libcddb)
341 ("libcdio-paranoia" ,libcdio-paranoia)
342 ("libcue" ,libcue)
343 ("libmad" ,libmad)
344 ("libmodplug" ,libmodplug)
345 ("libmpcdec" ,libmpcdec)
346 ("libsamplerate" ,libsamplerate)
347 ("libvorbis" ,libvorbis)
348 ("ncurses" ,ncurses)
349 ("opusfile" ,opusfile)
350 ("pulseaudio" ,pulseaudio)
351 ("wavpack" ,wavpack)))
352 (home-page "https://cmus.github.io/")
353 (synopsis "Small console music player")
354 (description "Cmus is a small and fast console music player. It supports
355many input formats and provides a customisable Vi-style user interface.")
356 (license license:gpl2+)))
357
edd1652e
KK
358(define-public denemo
359 (package
360 (name "denemo")
6ff5e9ba 361 (version "2.1")
edd1652e
KK
362 (source (origin
363 (method url-fetch)
364 (uri (string-append "mirror://gnu/denemo/denemo-"
365 version ".tar.gz"))
366 (sha256
367 (base32
6ff5e9ba 368 "0hggf8c4xcrjcxd5m00r788r7jg7g8ff54w2idfaqpj5j2ix3299"))))
edd1652e
KK
369 (build-system gnu-build-system)
370 (arguments
371 `(#:phases
372 (modify-phases %standard-phases
373 (replace 'check
374 ;; Denemo's documentation says to use this command to run its
375 ;; testsuite.
376 (lambda _
377 (zero? (system* "make" "-C" "tests" "check"))))
b43ec33b
KK
378 (add-before 'build 'set-lilypond
379 ;; This phase sets the default path for lilypond to its current
380 ;; location in the store.
381 (lambda* (#:key inputs #:allow-other-keys)
382 (let* ((lilypond (string-append (assoc-ref inputs "lilypond")
383 "/bin/lilypond")))
384 (substitute* "src/core/prefops.c"
385 (("g_string_new \\(\"lilypond\"\\);")
386 (string-append "g_string_new (\""
387 lilypond
388 "\");"))))
389 #t))
edd1652e
KK
390 (add-after 'install 'correct-filename
391 ;; "graft-derivation/shallow" from the (guix grafts) module runs in
392 ;; the C locale, expecting file names to be ASCII encoded. This
393 ;; phase renames a filename with a Unicode character in it to meet
394 ;; the aforementioned condition.
395 (lambda* (#:key outputs #:allow-other-keys)
396 (let* ((out (assoc-ref outputs "out")))
397 (chdir (string-append
398 out
399 "/share/denemo/templates/instruments/woodwind"))
400 (rename-file "Clarinet in B♭.denemo"
401 "Clarinet in Bb.denemo"))
402 #t)))))
403 (native-inputs
c695fb76 404 `(("glib:bin" ,glib "bin") ; for gtester
edd1652e
KK
405 ("pkg-config" ,pkg-config)))
406 (inputs
407 `(("alsa-lib" ,alsa-lib)
408 ("aubio" ,aubio)
409 ("evince" ,evince)
410 ("fftw" ,fftw)
411 ("fluidsynth" ,fluidsynth)
412 ("glib" ,glib)
413 ("gtk+" ,gtk+)
414 ("gtk-doc" ,gtk-doc)
415 ("gtksourceview" ,gtksourceview)
416 ("guile" ,guile-2.0)
417 ("intltool" ,intltool)
418 ("librsvg" ,librsvg)
419 ("libsndfile" ,libsndfile)
420 ("libtool" ,libtool)
421 ("libxml2" ,libxml2)
c695fb76 422 ("lilypond" ,lilypond)
edd1652e
KK
423 ("portaudio" ,portaudio)
424 ("portmidi" ,portmidi)
425 ("rubberband" ,rubberband)))
edd1652e
KK
426 (synopsis "Graphical music notation, front-end to GNU Lilypond")
427 (description
428 "GNU Denemo is a music notation editor that provides a convenient
429interface to the powerful music engraving program Lilypond. Music can be
430typed in using the computer keyboard, played in using a MIDI keyboard, or
431even input via a microphone connected to the sound card. The final product
432is publication-quality music notation that is continuously generated in the
433background while you work.")
434 (home-page "http://www.denemo.org")
435 (license license:gpl3+)))
436
d231bb35
RW
437(define-public hydrogen
438 (package
439 (name "hydrogen")
80808d67 440 (version "1.0.0-beta1")
d231bb35 441 (source (origin
80808d67
RW
442 (method git-fetch)
443 (uri (git-reference
444 (url "https://github.com/hydrogen-music/hydrogen.git")
445 (commit version)))
446 (file-name (string-append name "-" version "-checkout"))
d231bb35
RW
447 (sha256
448 (base32
80808d67 449 "0nv83l70j5bjz2wd6n3a8cq3bmgrvdvg6g2hjhc1g5h6xnbqsh9x"))))
b7367762 450 (build-system cmake-build-system)
d231bb35 451 (arguments
80808d67
RW
452 `(#:test-target "tests"
453 #:phases
454 (modify-phases %standard-phases
455 (add-after 'unpack 'fix-data-directory
456 (lambda* (#:key outputs #:allow-other-keys)
457 (substitute* "CMakeLists.txt"
458 (("/usr/share/pixmaps")
459 (string-append (assoc-ref outputs "out")
460 "/share/pixmaps")))
461 #t)))))
d231bb35 462 (native-inputs
b7367762 463 `(("cppunit" ,cppunit)
d231bb35
RW
464 ("pkg-config" ,pkg-config)))
465 (inputs
b7367762 466 `(("alsa-lib" ,alsa-lib)
d231bb35 467 ("jack" ,jack-1)
b7367762 468 ;; ("ladspa" ,ladspa) ; cannot find during configure
d231bb35 469 ("lash" ,lash)
b7367762
EF
470 ("libarchive" ,libarchive)
471 ("libsndfile" ,libsndfile)
472 ("libtar" ,libtar)
473 ("lrdf" ,lrdf)
80808d67
RW
474 ("qtbase" ,qtbase)
475 ("qtxmlpatterns" ,qtxmlpatterns)
b7367762 476 ("zlib" ,zlib)))
d231bb35
RW
477 (home-page "http://www.hydrogen-music.org")
478 (synopsis "Drum machine")
479 (description
480 "Hydrogen is an advanced drum machine for GNU/Linux. Its main goal is to
481enable professional yet simple and intuitive pattern-based drum programming.")
482 (license license:gpl2+)))
483
58301682
PL
484(define-public easytag
485 (package
486 (name "easytag")
487 (version "2.4.3")
488 (source (origin
489 (method url-fetch)
490 (uri (string-append "mirror://gnome/sources/easytag/2.4/easytag-"
491 version ".tar.xz"))
492 (sha256
493 (base32
494 "1mbxnqrw1fwcgraa1bgik25vdzvf97vma5pzknbwbqq5ly9fwlgw"))))
495 (build-system glib-or-gtk-build-system)
496 (native-inputs
497 `(("desktop-file-utils" ,desktop-file-utils)
498 ("glib" ,glib "bin")
499 ("intltool" ,intltool)
500 ("itstool" ,itstool)
501 ("pkg-config" ,pkg-config)
502 ("xmllint" ,libxml2)))
503 (inputs
504 `(("flac" ,flac)
505 ("gtk+" ,gtk+)
506 ("id3lib" ,id3lib)
507 ("libid3tag" ,libid3tag)
508 ("libvorbis" ,libvorbis)
509 ("opusfile" ,opusfile)
510 ("speex" ,speex)
511 ("taglib" ,taglib)
512 ("wavpack" ,wavpack)
513 ("yelp" ,yelp)))
514 (arguments
515 '(#:phases
516 (modify-phases %standard-phases
517 (add-before 'configure 'configure-libid3tag
518 (lambda* (#:key inputs #:allow-other-keys)
519 ;; libid3tag does not provide a .pc file and EasyTAG's configure
520 ;; script healivy relies on pkg-config. Providing a temporary
521 ;; local .pc file is easier than patching the configure script.
522 (let* ((libid3tag (assoc-ref inputs "libid3tag")))
523 (mkdir-p "pkgconfig")
524 (with-output-to-file
525 "pkgconfig/id3tag.pc"
526 (lambda _
527 (format #t
528 "prefix=~@*~a~@
529 libdir=${prefix}/lib~@
530 includedir=${prefix}/include~@
531 Libs: -L${libdir} -lid3tag -lz~@
532 Cflags: -I${includedir}~%"
533 libid3tag)))
534 (setenv "PKG_CONFIG_PATH"
535 (string-append (getenv "PKG_CONFIG_PATH")
536 ":" (getcwd) "/pkgconfig")))))
537 (add-after 'unpack 'patch-makefile
538 (lambda _
539 (substitute* "Makefile.in"
540 ;; The Makefile generates a test-desktop-file-validate.sh
541 ;; script with /bin/sh hard-coded.
542 (("/bin/sh") (which "sh"))
543 ;; Don't create 'icon-theme.cache'.
544 (("gtk-update-icon-cache") "true")))))))
545 (home-page "https://wiki.gnome.org/Apps/EasyTAG")
546 (synopsis "Simple application for viewing and editing tags in audio files")
547 (description
548 "EasyTAG is an application for viewing and editing tags in audio files.
549It supports MP3, MP2, MP4/AAC, FLAC, Ogg Opus, Ogg Speex, Ogg Vorbis,
550MusePack, Monkey's Audio, and WavPack files.")
551 (license license:gpl2+)))
552
91595624
RW
553(define-public extempore
554 (package
555 (name "extempore")
556 (version "0.7.0")
557 (source (origin
8b0f6917
RW
558 (method git-fetch)
559 (uri (git-reference
560 (url "https://github.com/digego/extempore.git")
561 (commit version)))
91595624
RW
562 (sha256
563 (base32
8b0f6917
RW
564 "12fsp7zkfxb9kykwq46l88kcbbici9arczrrsl4qn87m6vm5349l"))
565 (file-name (string-append name "-" version "-checkout"))))
91595624
RW
566 (build-system cmake-build-system)
567 (arguments
568 `(;; The default target also includes ahead-of-time compilation of the
569 ;; standard libraries. However, during the "install" phase this would
570 ;; happen *again* for unknown reasons. Hence we only build the
571 ;; extempore executable during the build phase.
572 #:make-flags '("extempore")
573 #:configure-flags '("-DJACK=ON"
574 ;; We want to distribute.
575 "-DIN_TREE=OFF"
576 ;; Don't download any dependencies.
577 "-DBUILD_DEPS=OFF")
578 #:modules ((ice-9 match)
579 (guix build cmake-build-system)
580 (guix build utils))
581 #:phases
582 (modify-phases %standard-phases
583 (add-after 'unpack 'patch-directories
584 (lambda* (#:key outputs #:allow-other-keys)
585 ;; Rewrite default path to runtime directory
586 (substitute* "src/Extempore.cpp"
587 (("runtimedir \\+= \"runtime\"")
588 (string-append "runtimedir = \""
589 (assoc-ref outputs "out")
590 "/lib/extempore/runtime\"")))
591 (substitute* "extras/extempore.el"
592 (("\\(runtime-directory \\(concat default-directory \"runtime\"\\)\\)")
593 (string-append "(runtime-directory \""
594 (assoc-ref outputs "out")
595 "/lib/extempore/runtime"
596 "\")")))
597 #t))
598 (add-after 'unpack 'link-with-additional-libs
599 (lambda _
600 ;; The executable must be linked with libffi and zlib.
601 (substitute* "CMakeLists.txt"
602 (("add_dependencies\\(aot_extended extended_deps\\)") "")
603 (("target_link_libraries\\(extempore PRIVATE dl" line)
604 (string-append line " ffi z")))
605 #t))
606 ;; FIXME: AOT compilation of the nanovg bindings fail with the error:
607 ;; "Compiler Error could not bind _nvgLinearGradient"
608 (add-after 'unpack 'disable-nanovg
609 (lambda _
610 (substitute* "CMakeLists.txt"
611 (("aotcompile_lib\\(libs/external/nanovg.xtm.*") ""))
612 #t))
613 ;; FIXME: All examples that are used as tests segfault for some
614 ;; unknown reason.
615 (add-after 'unpack 'disable-broken-tests
616 (lambda _
617 (substitute* "CMakeLists.txt"
618 (("extempore_add_example_as_test\\(.*") ""))
619 #t))
620 (add-after 'unpack 'hardcode-external-lib-paths
621 (lambda* (#:key inputs #:allow-other-keys)
622 (use-modules (ice-9 match))
623 (for-each
624 (match-lambda
625 ((file-name lib pkg-name)
626 (substitute* (string-append "libs/external/" file-name ".xtm")
627 ((lib) (string-append (assoc-ref inputs pkg-name)
628 "/lib/" lib)))))
629 '(("assimp" "libassimp.so" "assimp")
630 ("portmidi" "libportmidi.so" "portmidi")
631 ("sndfile" "libsndfile.so" "libsndfile")
632 ("fft" "libkiss_fft.so" "kiss-fft")
633 ("stb_image" "libstb_image.so" "stb-image")
634 ("nanovg" "libnanovg.so" "nanovg")
635 ("glext" "libGL.so" "mesa")
636 ("glfw3" "libglfw.so" "glfw")
637 ("gl/glcore-directbind" "libGL.so" "mesa")
638 ("gl/glcompat-directbind" "libGL.so" "mesa")))
639 #t))
640 (add-after 'unpack 'use-own-llvm
641 (lambda* (#:key inputs #:allow-other-keys)
642 (setenv "EXT_LLVM_DIR" (assoc-ref inputs "llvm"))
643 ;; Our LLVM builds shared libraries, so Extempore should use
644 ;; those.
645 (substitute* "CMakeLists.txt"
646 (("CMAKE_STATIC_LIBRARY") "CMAKE_SHARED_LIBRARY"))
647 #t))
648 (add-after 'unpack 'fix-aot-compilation
649 (lambda* (#:key outputs #:allow-other-keys)
650 (substitute* "CMakeLists.txt"
651 ;; EXT_SHARE_DIR does not exist before installation, so the
652 ;; working directory should be the source directory instead.
653 (("WORKING_DIRECTORY \\$\\{EXT_SHARE_DIR\\}")
654 "WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}")
655 ;; Extempore needs to be told where the runtime is to be found.
656 ;; While we're at it we disable automatic tuning for a specific
657 ;; CPU to make binary substitution possible.
658 (("COMMAND extempore" prefix)
659 (string-append prefix " --sharedir " (getcwd)
660 " --mcpu=generic --attr=none")))
661 #t)))))
662 (inputs
663 `(("llvm" ,llvm-for-extempore)
664 ("libffi" ,libffi)
665 ("jack" ,jack-1)
666 ("libsndfile" ,libsndfile)
667 ("glfw" ,glfw)
668 ("apr" ,apr)
669 ("stb-image" ,stb-image-for-extempore)
670 ("kiss-fft" ,kiss-fft-for-extempore)
671 ("nanovg" ,nanovg-for-extempore)
672 ("portmidi" ,portmidi-for-extempore)
673 ("assimp" ,assimp)
674 ("alsa-lib" ,alsa-lib)
675 ("portaudio" ,portaudio)
676 ("mesa" ,mesa)
677 ("pcre" ,pcre)
678 ("zlib" ,zlib)))
679 (native-inputs
680 `(("perl" ,perl)
681 ("emacs" ,emacs-no-x)))
39162ee4
RW
682 ;; Extempore refuses to build on architectures other than x86_64
683 (supported-systems '("x86_64-linux"))
95708ed8 684 (home-page "http://digego.github.io/extempore/")
91595624
RW
685 (synopsis "Programming environment for live coding of multimedia")
686 (description
687 "Extempore is a programming language and runtime environment designed
688with live programming in mind. It supports interactive programming in a REPL
689style, compiling and binding code just-in-time. Although Extempore has its
690roots in 'live coding' of audiovisual media art, it is suitable for any task
691domain where dynamic run-time modifiability and good numerical performance are
692required. Extempore also has strong timing and concurrency semantics, which
693are helpful when working in problem spaces where timing is important (such as
694audio and video).")
695 (license license:bsd-2)))
696
8c454dcd
RW
697(define-public klick
698 (package
699 (name "klick")
700 (version "0.12.2")
701 (source (origin
702 (method url-fetch)
703 (uri (string-append "http://das.nasophon.de/download/klick-"
704 version ".tar.gz"))
705 (sha256
706 (base32
707 "0hmcaywnwzjci3pp4xpvbijnnwvibz7gf9xzcdjbdca910y5728j"))))
bc27eb3b 708 (build-system scons-build-system)
8c454dcd 709 (arguments
bc27eb3b
AI
710 `(#:scons-flags (list (string-append "PREFIX=" %output))
711 #:tests? #f)) ;no "check" target
8c454dcd
RW
712 (inputs
713 `(("boost" ,boost)
714 ("jack" ,jack-1)
715 ("libsndfile" ,libsndfile)
716 ("libsamplerate" ,libsamplerate)
717 ("liblo" ,liblo)
718 ("rubberband" ,rubberband)))
719 (native-inputs
bc27eb3b 720 `(("pkg-config" ,pkg-config)))
8c454dcd
RW
721 (home-page "http://das.nasophon.de/klick/")
722 (synopsis "Metronome for JACK")
723 (description
724 "klick is an advanced command-line based metronome for JACK. It allows
725you to define complex tempo maps for entire songs or performances.")
726 (license license:gpl2+)))
727
048bfba1
RW
728(define-public gtklick
729 (package
730 (name "gtklick")
731 (version "0.6.4")
732 (source (origin
733 (method url-fetch)
734 (uri (string-append "http://das.nasophon.de/download/gtklick-"
735 version ".tar.gz"))
736 (sha256
737 (base32
738 "0dq1km6njnzsqdqyf6wzir9g733z0mc9vmxfg2383k3c2a2di6bp"))))
739 (build-system python-build-system)
740 (arguments
741 `(#:tests? #f ; no tests
742 #:python ,python-2
743 #:phases
744 (modify-phases %standard-phases
745 (add-before 'build 'add-sitedirs
746 ;; .pth files are not automatically interpreted unless the
747 ;; directories containing them are added as "sites". The directories
748 ;; are then added to those in the PYTHONPATH. This is required for
749 ;; the operation of pygtk.
750 (lambda _
751 (substitute* "gtklick/gtklick.py"
752 (("import pygtk")
753 "import pygtk, site, sys
754for path in [path for path in sys.path if 'site-packages' in path]: site.addsitedir(path)"))))
755 (add-after 'unpack 'inject-store-path-to-klick
756 (lambda* (#:key inputs #:allow-other-keys)
757 (substitute* "gtklick/klick_backend.py"
758 (("KLICK_PATH = 'klick'")
759 (string-append "KLICK_PATH = '"
760 (assoc-ref inputs "klick")
761 "/bin/klick'")))
762 #t)))))
763 (inputs
764 `(("klick" ,klick)
765 ("python2-pyliblo" ,python2-pyliblo)
766 ("python2-pygtk" ,python2-pygtk)))
767 (native-inputs
b94a6ca0 768 `(("gettext" ,gettext-minimal)))
048bfba1
RW
769 (home-page "http://das.nasophon.de/gtklick/")
770 (synopsis "Simple metronome with an easy-to-use graphical interface")
771 (description
772 "Gtklick is a simple metronome with an easy-to-use graphical user
773interface. It is implemented as a frontend to @code{klick}.")
774 (license license:gpl2+)))
775
a3b10217
KK
776(define-public libgme
777 (package
778 (name "libgme")
779 (version "0.6.1")
780 (source (origin
781 (method url-fetch)
782 (uri (string-append "https://bitbucket.org/mpyne/game-music-emu/"
783 "downloads/game-music-emu-" version
784 ".tar.bz2"))
785 (sha256
786 (base32
787 "08fk7zddpn7v93d0fa7fcypx7hvgwx9b5psj9l6m8b87k2hbw4fw"))))
788 (build-system cmake-build-system)
789 (arguments
790 '(#:tests? #f)) ; no check target
791 (home-page "https://bitbucket.org/mpyne/game-music-emu")
792 (synopsis "Video game music file playback library")
793 (description
794 "Game-music-emu is a collection of video game music file emulators that
795support the following formats and systems:
796@table @code
797@item AY
798ZX Spectrum/Asmtrad CPC
799@item GBS
800Nintendo Game Boy
801@item GYM
802Sega Genesis/Mega Drive
803@item HES
804NEC TurboGrafx-16/PC Engine
805@item KSS
806MSX Home Computer/other Z80 systems (doesn't support FM sound)
807@item NSF/NSFE
808Nintendo NES/Famicom (with VRC 6, Namco 106, and FME-7 sound)
809@item SAP
810Atari systems using POKEY sound chip
811@item SPC
812Super Nintendo/Super Famicom
813@item VGM/VGZ
814Sega Master System/Mark III, Sega Genesis/Mega Drive, BBC Micro
815@end table")
816 (license (list license:lgpl2.1+
817 ;; demo and player directories are under the Expat license
818 license:expat))))
819
1b6826d3
RW
820(define-public lilypond
821 (package
822 (name "lilypond")
85f075a0 823 (version "2.19.80")
1b6826d3
RW
824 (source (origin
825 (method url-fetch)
826 (uri (string-append
827 "http://download.linuxaudio.org/lilypond/sources/v"
828 (version-major+minor version) "/"
829 name "-" version ".tar.gz"))
830 (sha256
831 (base32
85f075a0 832 "0lql4q946gna2pl1g409mmmsvn2qvnq2z5cihrkfhk7plcqdny9n"))))
1b6826d3
RW
833 (build-system gnu-build-system)
834 (arguments
127b04d7 835 `(#:tests? #f ; out-test/collated-files.html fails
1b6826d3 836 #:out-of-source? #t
409be57b 837 #:make-flags '("conf=www") ;to generate images for info manuals
127b04d7 838 #:configure-flags
409be57b
RW
839 (list "CONFIGURATION=www"
840 (string-append "--with-texgyre-dir="
127b04d7
RW
841 (assoc-ref %build-inputs "font-tex-gyre")
842 "/share/fonts/opentype/"))
1b6826d3 843 #:phases
a8bc747a 844 (modify-phases %standard-phases
9cc823f5
RW
845 (add-after 'unpack 'use-texlive-union
846 (lambda _
847 ;; FIXME: fonts are not found and have to be generated in HOME.
848 (setenv "HOME" "/tmp")
849 ;; The test for the "lh" package fails, even though it is among
850 ;; the inputs.
851 (substitute* "configure"
852 (("TEX_FIKPARM=.*") "TEX_FIKPARM=found\n"))
853 #t))
409be57b
RW
854 (add-after 'unpack 'fix-path-references
855 (lambda _
a8bc747a
RW
856 (substitute* "scm/backend-library.scm"
857 (("\\(search-executable '\\(\"gs\"\\)\\)")
409be57b
RW
858 (string-append "\"" (which "gs") "\""))
859 (("\"/bin/sh\"")
860 (string-append "\"" (which "sh") "\"")))
a8bc747a
RW
861 #t))
862 (add-before 'configure 'prepare-configuration
863 (lambda _
864 (substitute* "configure"
7affb2c1
RW
865 (("SHELL=/bin/sh") "SHELL=sh")
866 ;; When checking the fontforge version do not consider the
867 ;; version string that's part of the directory.
31ec5228
EF
868 (("head -n") "tail -n")
869 ;; Also allow for SOURCE_DATE_EPOCH = 0 in fontforge.
870 (("20110222") "19700101"))
409be57b
RW
871 (setenv "out" "www")
872 (setenv "conf" "www")
873 #t))
874 (add-after 'install 'install-info
875 (lambda _
876 (zero? (system* "make"
877 "-j" (number->string (parallel-job-count))
878 "conf=www" "install-info")))))))
1b6826d3
RW
879 (inputs
880 `(("guile" ,guile-1.8)
881 ("font-dejavu" ,font-dejavu)
127b04d7 882 ("font-tex-gyre" ,font-tex-gyre)
1b6826d3
RW
883 ("fontconfig" ,fontconfig)
884 ("freetype" ,freetype)
fb0b9ff1 885 ("ghostscript" ,ghostscript)
1b6826d3
RW
886 ("pango" ,pango)
887 ("python" ,python-2)))
888 (native-inputs
889 `(("bison" ,bison)
890 ("perl" ,perl)
891 ("flex" ,flex)
892 ("fontforge" ,fontforge)
893 ("dblatex" ,dblatex)
b94a6ca0 894 ("gettext" ,gettext-minimal)
1b6826d3
RW
895 ("imagemagick" ,imagemagick)
896 ("netpbm" ,netpbm) ;for pngtopnm
9cc823f5
RW
897 ("texlive" ,(texlive-union (list texlive-metapost
898 texlive-generic-epsf
899 texlive-latex-lh
900 texlive-latex-cyrillic)))
1b6826d3
RW
901 ("texinfo" ,texinfo)
902 ("texi2html" ,texi2html)
903 ("rsync" ,rsync)
904 ("pkg-config" ,pkg-config)
905 ("zip" ,zip)))
906 (home-page "http://www.lilypond.org/")
907 (synopsis "Music typesetting")
908 (description
909 "GNU LilyPond is a music typesetter, which produces high-quality sheet
910music. Music is input in a text file containing control sequences which are
911interpreted by LilyPond to produce the final document. It is extendable with
912Guile.")
55ca5e80
LC
913 (license license:gpl3+)
914
915 ;; On armhf and mips64el, building the documentation sometimes leads to
916 ;; more than an hour of silence, so double the max silent time.
917 (properties `((max-silent-time . 7200)))))
c267cc15 918
8e80244a
RW
919(define-public non-sequencer
920 ;; The latest tagged release is three years old and uses a custom build
1bbe7959 921 ;; system, so we take the last commit.
a6b5e1fb
RW
922 (let ((commit "5ae43bb27c42387052a73e5ffc5d33efb9d946a9")
923 (revision "4"))
8e80244a
RW
924 (package
925 (name "non-sequencer")
1bbe7959 926 (version (string-append "1.9.5-" revision "." (string-take commit 7)))
8e80244a
RW
927 (source (origin
928 (method git-fetch)
929 (uri (git-reference
930 (url "git://git.tuxfamily.org/gitroot/non/non.git")
931 (commit commit)))
932 (sha256
933 (base32
a6b5e1fb 934 "1cljkkyi9dxqpqhx8y6l2ja4zjmlya26m26kqxml8gx08vyvddhx"))
8e80244a
RW
935 (file-name (string-append name "-" version "-checkout"))))
936 (build-system waf-build-system)
937 (arguments
938 `(#:tests? #f ;no "check" target
e591a4d6
RW
939 #:configure-flags
940 (list "--project=sequencer"
941 ;; Disable the use of SSE unless on x86_64.
942 ,@(if (not (string-prefix? "x86_64" (or (%current-target-system)
943 (%current-system))))
944 '("--disable-sse")
945 '()))
d8c317df
SB
946 #:phases
947 (modify-phases %standard-phases
948 (add-before
949 'configure 'set-flags
950 (lambda _
951 ;; Compile with C++11, required by libsigc++.
952 (setenv "CXXFLAGS" "-std=c++11")
953 #t)))
8e80244a
RW
954 #:python ,python-2))
955 (inputs
956 `(("jack" ,jack-1)
957 ("libsigc++" ,libsigc++)
958 ("liblo" ,liblo)
959 ("ntk" ,ntk)))
960 (native-inputs
961 `(("pkg-config" ,pkg-config)))
962 (home-page "http://non.tuxfamily.org/wiki/Non%20Sequencer")
963 (synopsis "Pattern-based MIDI sequencer")
964 (description
965 "The Non Sequencer is a powerful, lightweight, real-time,
966pattern-based MIDI sequencer. It utilizes the JACK Audio Connection Kit for
967MIDI I/O and the NTK GUI toolkit for its user interface. Everything in Non
968Sequencer happens on-line, in real-time. Music can be composed live, while the
969transport is rolling.")
970 (license license:gpl2+))))
971
ded69d6f
RW
972(define-public non-session-manager
973 (package (inherit non-sequencer)
974 (name "non-session-manager")
975 (arguments
976 (substitute-keyword-arguments (package-arguments non-sequencer)
977 ((#:configure-flags flags)
978 `(cons "--project=session-manager"
979 (delete "--project=sequencer" ,flags)))))
980 (inputs
981 `(("jack" ,jack-1)
982 ("liblo" ,liblo)
983 ("ntk" ,ntk)))
984 (native-inputs
985 `(("pkg-config" ,pkg-config)))
986 (home-page "http://non.tuxfamily.org/nsm/")
987 (synopsis "Audio session management")
988 (description
989 "The Non Session Manager is an API and an implementation for audio
990session management. NSM clients use a well-specified OSC protocol to
991communicate with the session management daemon.")
992 (license license:gpl2+)))
993
46bb58b8
RW
994(define-public non-mixer
995 (package (inherit non-sequencer)
996 (name "non-mixer")
997 (arguments
998 (substitute-keyword-arguments (package-arguments non-sequencer)
999 ((#:configure-flags flags)
1000 `(cons "--project=mixer"
1001 (delete "--project=sequencer" ,flags)))))
1002 (inputs
1003 `(("jack" ,jack-1)
1004 ("liblo" ,liblo)
1005 ("ladspa" ,ladspa)
1006 ("lrdf" ,lrdf)
1007 ("ntk" ,ntk)))
1008 (native-inputs
1009 `(("pkg-config" ,pkg-config)))
1010 (home-page "http://non.tuxfamily.org/wiki/Non%20Mixer")
1011 (synopsis "Modular digital audio mixer")
1012 (description
1013 "The Non Mixer is a powerful, reliable and fast modular digital audio
1014mixer. It utilizes JACK for inter-application audio I/O and the NTK GUI
1015toolkit for a fast and lightweight user interface. Non Mixer can be used
1016alone or in concert with Non Timeline and Non Sequencer to form a complete
1017studio.")
1018 (license license:gpl2+)))
1019
4511e0db
RW
1020(define-public non-timeline
1021 (package (inherit non-sequencer)
1022 (name "non-timeline")
1023 (arguments
1024 (substitute-keyword-arguments (package-arguments non-sequencer)
1025 ((#:configure-flags flags)
1026 `(cons "--project=timeline"
1027 (delete "--project=sequencer" ,flags)))))
1028 (inputs
1029 `(("jack" ,jack-1)
1030 ("liblo" ,liblo)
1031 ("libsndfile" ,libsndfile)
1032 ("ntk" ,ntk)))
1033 (native-inputs
1034 `(("pkg-config" ,pkg-config)))
1035 (home-page "http://non.tuxfamily.org/wiki/Non%20Timeline")
1036 (synopsis "Modular digital audio timeline arranger")
1037 (description
1038 "The Non Timeline is a powerful, reliable and fast modular digital audio
1039timeline arranger. It utilizes JACK for inter-application audio I/O and the
1040NTK GUI toolkit for a fast and lightweight user interface. Non Timeline can
1041be used alone or in concert with Non Mixer and Non Sequencer to form a
1042complete studio.")
1043 (license license:gpl2+)))
1044
c267cc15
RW
1045(define-public solfege
1046 (package
1047 (name "solfege")
1048 (version "3.22.2")
1049 (source (origin
1050 (method url-fetch)
1051 (uri (string-append
1052 "mirror://gnu/solfege/solfege-"
1053 version ".tar.xz"))
1054 (sha256
1055 (base32
1056 "1w25rxdbj907nsx285k9nm480pvy12w3yknfh4n1dfv17cwy072i"))))
1057 (build-system gnu-build-system)
1058 (arguments
1059 `(#:tests? #f ; xmllint attempts to download DTD
1060 #:test-target "test"
1061 #:phases
dc1d3cde
KK
1062 (modify-phases %standard-phases
1063 (add-after 'unpack 'fix-configuration
1064 (lambda* (#:key inputs #:allow-other-keys)
1065 (substitute* "default.config"
20c65aa1 1066 (("/usr/bin/aplay") "aplay")
95e545a4
NG
1067 (("/usr/bin/timidity") "timidity")
1068 (("/usr/bin/mpg123") "mpg123")
1069 (("/usr/bin/ogg123") "ogg123"))
dc1d3cde
KK
1070 #t))
1071 (add-before 'build 'patch-python-shebangs
1072 (lambda _
1073 ;; Two python scripts begin with a Unicode BOM, so patch-shebang
1074 ;; has no effect.
1075 (substitute* '("solfege/parsetree.py"
1076 "solfege/presetup.py")
1077 (("#!/usr/bin/python") (string-append "#!" (which "python"))))
1078 #t))
1079 (add-before 'build 'add-sitedirs
1080 ;; .pth files are not automatically interpreted unless the
1081 ;; directories containing them are added as "sites". The directories
1082 ;; are then added to those in the PYTHONPATH. This is required for
1083 ;; the operation of pygtk and pygobject.
1084 (lambda _
1085 (substitute* "run-solfege.py"
1086 (("import os")
1087 "import os, site
1088for path in [path for path in sys.path if 'site-packages' in path]: site.addsitedir(path)"))
1089 #t))
1090 (add-before 'build 'adjust-config-file-prefix
c267cc15
RW
1091 (lambda* (#:key outputs #:allow-other-keys)
1092 (substitute* "run-solfege.py"
1093 (("prefix = os.path.*$")
dc1d3cde
KK
1094 (string-append "prefix = " (assoc-ref outputs "out"))))
1095 #t))
1096 (add-after 'install 'wrap-program
1097 (lambda* (#:key inputs outputs #:allow-other-keys)
1098 ;; Make sure 'solfege' runs with the correct PYTHONPATH.
1099 (let* ((out (assoc-ref outputs "out"))
1100 (path (getenv "PYTHONPATH")))
1101 (wrap-program (string-append out "/bin/solfege")
1102 `("PYTHONPATH" ":" prefix (,path))))
1103 #t)))))
c267cc15
RW
1104 (inputs
1105 `(("python" ,python-2)
1106 ("pygtk" ,python2-pygtk)
b94a6ca0 1107 ("gettext" ,gettext-minimal)
c267cc15 1108 ("gtk" ,gtk+)
95e545a4 1109 ("lilypond" ,lilypond)))
c267cc15
RW
1110 (native-inputs
1111 `(("pkg-config" ,pkg-config)
1112 ("txt2man" ,txt2man)
1113 ("libxml2" ,libxml2) ; for tests
1114 ("ghostscript" ,ghostscript)
c267cc15
RW
1115 ("texinfo" ,texinfo)))
1116 (home-page "https://www.gnu.org/software/solfege/")
1117 (synopsis "Ear training")
1118 (description
1119 "GNU Solfege is a program for practicing musical ear-training. With it,
1120you can practice your recognition of various musical intervals and chords. It
1121features a statistics overview so you can monitor your progress across several
1122sessions. Solfege is also designed to be extensible so you can easily write
1123your own lessons.")
1124 (license license:gpl3+)))
6260d1a8 1125
8b9ec354
RW
1126(define-public powertabeditor
1127 (package
1128 (name "powertabeditor")
92a1cb92 1129 (version "2.0.0-alpha10")
8b9ec354
RW
1130 (source (origin
1131 (method url-fetch)
1132 (uri (string-append
1133 "https://github.com/powertab/powertabeditor/archive/"
1134 version ".tar.gz"))
1135 (file-name (string-append name "-" version ".tar.gz"))
1136 (sha256
1137 (base32
92a1cb92 1138 "1fr14ql0yhlqvh6y08yaanszm2nvca5i50rqym396kfvga3ky18x"))
8b9ec354
RW
1139 (modules '((guix build utils)))
1140 (snippet
1141 '(begin
1142 ;; Remove bundled sources for external libraries
1143 (delete-file-recursively "external")
40effef7 1144 ;; Use only system libraries
8b9ec354 1145 (substitute* "CMakeLists.txt"
40effef7
RW
1146 (("include\\( PTE_ThirdParty \\)")
1147 "\
1148include(third_party/Qt)
1149include(third_party/boost)
1150add_library( Catch INTERFACE IMPORTED )
1151add_library( rapidjson INTERFACE IMPORTED )"))
8b9ec354
RW
1152 #t))))
1153 (build-system cmake-build-system)
1154 (arguments
7e11d113 1155 `(#:modules ((guix build cmake-build-system)
8b9ec354
RW
1156 (guix build utils)
1157 (ice-9 match))
1158 #:configure-flags
1159 ;; CMake appears to lose the RUNPATH for some reason, so it has to be
1160 ;; explicitly set with CMAKE_INSTALL_RPATH.
7e11d113 1161 (list "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE"
7e11d113 1162 (string-append "-DCMAKE_INSTALL_RPATH="
8b9ec354
RW
1163 (string-join (map (match-lambda
1164 ((name . directory)
1165 (string-append directory "/lib")))
40effef7
RW
1166 %build-inputs) ";"))
1167 "-DPTE_DATA_DIR=share/powertabeditor")
8b9ec354
RW
1168 #:phases
1169 (modify-phases %standard-phases
40effef7
RW
1170 (replace 'check
1171 (lambda _
1172 (zero? (system* "bin/pte_tests"
92a1cb92
RW
1173 ;; FIXME: these tests fail
1174 "exclude:Actions/EditStaff"
1175 "exclude:Formats/PowerTabOldImport/MergeMultiBarRests"
1176 "exclude:Score/ViewFilter/FilterRule"
1177 "exclude:Score/ViewFilter/ViewFilter"
1178 "exclude:Formats/PowerTabOldImport/Directions"
1179 ))))
04ba7a9d
RW
1180 ;; FIXME: This bug has been fixed upstream, but no release has been
1181 ;; made yet. See https://github.com/powertab/powertabeditor/issues/257
1182 (add-after 'unpack 'fix-boost-bug
1183 (lambda _
1184 (substitute* "source/score/voiceutils.cpp"
1185 (("boost::rational<int> duration\\(4, pos.getDurationType\\(\\)\\);")
1186 "boost::rational<int> duration(4, static_cast<int>(pos.getDurationType()));"))
1187 #t))
1e341fa5
RW
1188 ;; Fix build with Qt 5.11.
1189 (add-after 'unpack 'add-missing-headers
1190 (lambda _
1191 (substitute* (find-files "source/dialogs/" "\\.h$")
1192 (("#include <QDialog>" m)
1193 (string-append m "\n#include <QButtonGroup>")))
1194 (substitute* "source/widgets/mixer/mixeritem.h"
1195 (("#include <QWidget>" m)
1196 (string-append m "\n#include <QStyle>")))
1197 (substitute* "source/widgets/playback/playbackwidget.h"
1198 (("#include <QWidget>" m)
1199 (string-append m "\n#include <QButtonGroup>\n#include <QAction>")))
1200 #t))
40effef7
RW
1201 (add-before 'configure 'remove-third-party-libs
1202 (lambda* (#:key inputs #:allow-other-keys)
1203 ;; Link with required static libraries, because we're not
1204 ;; using the bundled version of withershins.
c3913fac 1205 ;; Also add pthread for fixing a linker error.
40effef7
RW
1206 (substitute* "source/build/CMakeLists.txt"
1207 (("withershins" line)
1208 (string-append line "\n"
1209 (assoc-ref inputs "binutils")
1210 "/lib/libbfd.a\n"
1211 (assoc-ref inputs "libiberty")
1212 "/lib/libiberty.a\n"
1213 "dl\n"
c3913fac 1214 "pthread\n"
40effef7
RW
1215 "z\n")))
1216 #t)))))
8b9ec354
RW
1217 (inputs
1218 `(("boost" ,boost)
1219 ("alsa-lib" ,alsa-lib)
0a0bfd68 1220 ("qtbase" ,qtbase)
8b9ec354 1221 ("withershins" ,withershins)
d6902798 1222 ("libiberty" ,libiberty) ;for withershins
8b9ec354
RW
1223 ("binutils" ,binutils) ;for -lbfd and -liberty (for withershins)
1224 ("timidity" ,timidity++)
1225 ("pugixml" ,pugixml)
1226 ("rtmidi" ,rtmidi)
1227 ("rapidjson" ,rapidjson)
1228 ("zlib" ,zlib)))
1229 (native-inputs
1230 `(("catch" ,catch-framework)
1231 ("pkg-config" ,pkg-config)))
1232 (home-page "http://powertabs.net")
1233 (synopsis "Guitar tablature editor")
1234 (description
1235 "Power Tab Editor 2.0 is the successor to the famous original Power Tab
1236Editor. It is compatible with Power Tab Editor 1.7 and Guitar Pro.")
1237 (license license:gpl3+)))
1238
3d4b1bb9
RW
1239(define-public jalv-select
1240 (package
1241 (name "jalv-select")
eaace76c 1242 (version "0.8")
3d4b1bb9
RW
1243 (source (origin
1244 (method url-fetch)
1245 (uri (string-append "https://github.com/brummer10/jalv_select/"
1246 "archive/V" version ".tar.gz"))
1247 (sha256
1248 (base32
eaace76c 1249 "0zraagwr681b5s3qifxf399c7q93jz23c8sr42gmff9zqnvxc75q"))))
3d4b1bb9
RW
1250 (build-system gnu-build-system)
1251 (arguments
1252 `(#:make-flags
1253 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
1254 #:phases
1255 (modify-phases %standard-phases
1256 (delete 'configure)
1257 (add-after 'unpack 'ignore-PATH
1258 (lambda* (#:key inputs #:allow-other-keys)
1259 (substitute* "jalv.select.cpp"
ad7f6e5f 1260 (("echo \\$PATH.*tr ':'.*xargs ls")
3d4b1bb9
RW
1261 (string-append "ls -1 " (assoc-ref inputs "jalv") "/bin")))
1262 (substitute* "jalv.select.h"
1263 (("gtkmm.h") "gtkmm-2.4/gtkmm.h"))
1264 #t)))))
1265 (inputs
1266 `(("lilv" ,lilv)
1267 ("lv2" ,lv2)
1268 ("jalv" ,jalv)
1269 ("gtkmm" ,gtkmm-2)))
1270 (native-inputs
1271 `(("pkg-config" ,pkg-config)))
1272 (home-page "https://github.com/brummer10/jalv_select")
1273 (synopsis "GUI to select LV2 plugins and run them with jalv")
1274 (description
1275 "The jalv.select package provides a graphical user interface allowing
1276users to select LV2 plugins and run them with jalv.")
1277 (license license:public-domain)))
1278
b095e762
RW
1279(define-public synthv1
1280 (package
1281 (name "synthv1")
7c60a23c 1282 (version "0.9.0")
b095e762
RW
1283 (source (origin
1284 (method url-fetch)
1285 (uri
de67e922
LF
1286 (string-append "mirror://sourceforge/synthv1/synthv1/" version
1287 "/synthv1-" version ".tar.gz"))
b095e762
RW
1288 (sha256
1289 (base32
7c60a23c 1290 "1skynjg6ip0qfbqqkybfjh6xcwxagq89ghl08f7sp7j0sz5qdcwp"))))
b095e762 1291 (build-system gnu-build-system)
69008d73
DC
1292 (arguments
1293 `(#:tests? #f ; There are no tests.
1294 #:configure-flags
1295 '("CXXFLAGS=-std=gnu++11")))
b095e762
RW
1296 (inputs
1297 `(("jack" ,jack-1)
1298 ("lv2" ,lv2)
1299 ("alsa-lib" ,alsa-lib)
b45aa39b 1300 ("non-session-manager" ,non-session-manager)
b095e762 1301 ("liblo" ,liblo)
e5f2afdb
EF
1302 ("qtbase" ,qtbase)
1303 ("qttools" ,qttools)))
b45aa39b
RW
1304 (native-inputs
1305 `(("pkg-config" ,pkg-config)))
b095e762
RW
1306 (home-page "http://synthv1.sourceforge.net")
1307 (synopsis "Polyphonic subtractive synthesizer")
1308 (description
1309 "Synthv1 is an old-school subtractive polyphonic synthesizer with four
1310oscillators and stereo effects.")
1311 (license license:gpl2+)))
2bb00612 1312
cf9af706
RW
1313(define-public drumkv1
1314 (package
1315 (name "drumkv1")
9602ac76 1316 (version "0.9.0")
cf9af706
RW
1317 (source (origin
1318 (method url-fetch)
1319 (uri
1320 (string-append "mirror://sourceforge/drumkv1/drumkv1/" version
1321 "/drumkv1-" version ".tar.gz"))
1322 (sha256
1323 (base32
9602ac76 1324 "1vm8lrk3lykdic6fyfpl12jx1xg6rcaid242s8sij30p1ix4zdab"))))
cf9af706
RW
1325 (build-system gnu-build-system)
1326 (arguments
1327 `(#:tests? #f ; There are no tests.
1328 #:configure-flags
1329 '("CXXFLAGS=-std=gnu++11")))
1330 (inputs
1331 `(("jack" ,jack-1)
1332 ("lv2" ,lv2)
1333 ("libsndfile" ,libsndfile)
1334 ("alsa-lib" ,alsa-lib)
41e2a731 1335 ("non-session-manager" ,non-session-manager)
cf9af706
RW
1336 ("liblo" ,liblo)
1337 ("qtbase" ,qtbase)))
1338 (native-inputs
1339 `(("pkg-config" ,pkg-config)
1340 ("qttools" ,qttools)))
1341 (home-page "http://drumkv1.sourceforge.net")
1342 (synopsis "Drum-kit sampler synthesizer with stereo effects")
1343 (description
1344 "Drumkv1 is an old-school drum-kit sampler synthesizer with stereo
1345effects.")
1346 (license license:gpl2+)))
1347
18675264
RW
1348(define-public samplv1
1349 (package
1350 (name "samplv1")
2a5d08da 1351 (version "0.9.0")
18675264
RW
1352 (source (origin
1353 (method url-fetch)
1354 (uri
1355 (string-append "mirror://sourceforge/samplv1/samplv1/" version
1356 "/samplv1-" version ".tar.gz"))
1357 (sha256
1358 (base32
2a5d08da 1359 "0g67vm9ilmq5nlvk0f3abia9pbinr4ck5v4mll6igni1rxz2n7wk"))))
18675264
RW
1360 (build-system gnu-build-system)
1361 (arguments
1362 `(#:tests? #f ; There are no tests.
1363 #:configure-flags
1364 '("CXXFLAGS=-std=gnu++11")))
1365 (inputs
1366 `(("jack" ,jack-1)
1367 ("lv2" ,lv2)
1368 ("libsndfile" ,libsndfile)
1369 ("alsa-lib" ,alsa-lib)
92b70c6f 1370 ("non-session-manager" ,non-session-manager)
18675264
RW
1371 ("liblo" ,liblo)
1372 ("qtbase" ,qtbase)))
1373 (native-inputs
1374 `(("pkg-config" ,pkg-config)
1375 ("qttools" ,qttools)))
1376 (home-page "http://samplv1.sourceforge.net")
1377 (synopsis "Polyphonic sampler synthesizer with stereo effects")
1378 (description
1379 "Samplv1 is an old-school polyphonic sampler synthesizer with stereo
1380effects.")
1381 (license license:gpl2+)))
1382
2702e12e
RW
1383(define-public padthv1
1384 (package
1385 (name "padthv1")
4503b187 1386 (version "0.9.0")
2702e12e
RW
1387 (source (origin
1388 (method url-fetch)
1389 (uri
1390 (string-append "mirror://sourceforge/padthv1/padthv1/" version
1391 "/padthv1-" version ".tar.gz"))
1392 (sha256
1393 (base32
4503b187 1394 "0c519qk2g0dk8gqf9ywqfp7dnr4b25lsnxxbf2l1spnnvf8nysvh"))))
2702e12e
RW
1395 (build-system gnu-build-system)
1396 (arguments
1397 `(#:tests? #f ; There are no tests.
1398 #:configure-flags
1399 '("CXXFLAGS=-std=gnu++11")))
1400 (inputs
1401 `(("jack" ,jack-1)
1402 ("lv2" ,lv2)
1403 ("alsa-lib" ,alsa-lib)
1404 ("non-session-manager" ,non-session-manager)
1405 ("liblo" ,liblo)
1406 ("fftw" ,fftw)
1407 ("qtbase" ,qtbase)))
1408 (native-inputs
1409 `(("pkg-config" ,pkg-config)
1410 ("qttools" ,qttools)))
1411 (home-page "http://padthv1.sourceforge.net")
1412 (synopsis "Polyphonic additive synthesizer")
1413 (description
1414 "Padthv1 is an old-school polyphonic additive synthesizer with stereo
1415effects. Padthv1 is based on the PADsynth algorithm by Paul Nasca, as a
1416special variant of additive synthesis.")
1417 (license license:gpl2+)))
1418
2bb00612
RW
1419(define-public amsynth
1420 (package
1421 (name "amsynth")
7e0befd4 1422 (version "1.7.1")
2bb00612
RW
1423 (source
1424 (origin
1425 (method url-fetch)
1426 (uri (string-append "https://github.com/amsynth/amsynth/releases/"
1427 "download/release-" version
1428 "/amsynth-" version ".tar.bz2"))
1429 (sha256
1430 (base32
7e0befd4 1431 "1882pfcmf3rqg3vd4qflzkppcv158d748i603spqjbxqi8z7x7w0"))))
2bb00612
RW
1432 (build-system gnu-build-system)
1433 (arguments
1434 `(#:phases
1435 (modify-phases %standard-phases
1436 (add-before 'configure 'set-flags
1437 (lambda _
1438 ;; Compile with C++11, required by gtkmm.
1439 (setenv "CXXFLAGS" "-std=c++11")
1440 #t)))))
1441 (inputs
1442 `(("alsa-lib" ,alsa-lib)
1443 ("jack" ,jack-1)
1444 ("lv2" ,lv2)
7175f4c2 1445 ("lash" ,lash)
2bb00612
RW
1446 ("libsndfile" ,libsndfile)
1447 ("gtk+" ,gtk+-2)
1448 ("gtkmm" ,gtkmm-2)))
1449 (native-inputs
7e0befd4
RW
1450 `(("pkg-config" ,pkg-config)
1451 ("intltool" ,intltool)))
2bb00612
RW
1452 (home-page "http://amsynth.github.io")
1453 (synopsis "Analog modeling synthesizer")
1454 (description
1455 "amsynth is an easy-to-use software synthesizer with a classic
1456subtractive synthesizer topology. Its features include: dual
1457oscillators (sine, saw, square, noise) with hard sync; 12 and 24 dB/oct
1458resonant filters (low-pass, high-pass, band-pass, notch); mono, poly, legato
1459keyboard modes; dual ADSR envelope generators for filter and amplitude; LFO
1460which can modulate the oscillators, filter, and amplitude; distortion and
1461reverb effects.")
1462 (license license:gpl2+)))
b095e762 1463
ec8da0e2
RW
1464(define-public setbfree
1465 (package
1466 (name "setbfree")
5404f1c2 1467 (version "0.8.5")
ec8da0e2
RW
1468 (source (origin
1469 (method url-fetch)
1470 (uri
a39f48b8
RW
1471 (string-append "https://github.com/pantherb/setBfree/archive/v"
1472 version ".tar.gz"))
1473 (file-name (string-append name "-" version ".tar.gz"))
ec8da0e2
RW
1474 (sha256
1475 (base32
5404f1c2 1476 "0qfccny0hh9lq54272mzmxvfz2jmzcgigjkjwn6v9h6n00gi5bw4"))))
ec8da0e2
RW
1477 (build-system gnu-build-system)
1478 (arguments
1479 `(#:tests? #f ; no "check" target
1480 #:make-flags
1481 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
1482 (string-append "FONTFILE="
1483 (assoc-ref %build-inputs "font-bitstream-vera")
b42d4508
RW
1484 "/share/fonts/truetype/VeraBd.ttf")
1485 ;; Disable unsupported optimization flags on non-x86
1486 ,@(let ((system (or (%current-target-system)
1487 (%current-system))))
1488 (if (or (string-prefix? "x86_64" system)
1489 (string-prefix? "i686" system))
1490 '()
1491 '("OPTIMIZATIONS=-ffast-math -fomit-frame-pointer -O3"))))
ec8da0e2
RW
1492 #:phases
1493 (modify-phases %standard-phases
1494 (add-before 'build 'set-CC-variable
1495 (lambda _ (setenv "CC" "gcc") #t))
1496 (delete 'configure))))
1497 (inputs
1498 `(("jack" ,jack-1)
1499 ("lv2" ,lv2)
1500 ("zita-convolver" ,zita-convolver)
1501 ("glu" ,glu)
1502 ("ftgl" ,ftgl)
1503 ("font-bitstream-vera" ,font-bitstream-vera)))
1504 (native-inputs
1505 `(("help2man" ,help2man)
1506 ("pkg-config" ,pkg-config)))
1507 (home-page "http://setbfree.org")
1508 (synopsis "Tonewheel organ")
1509 (description
1510 "setBfree is a MIDI-controlled, software synthesizer designed to imitate
1511the sound and properties of the electromechanical organs and sound
1512modification devices that brought world-wide fame to the names and products of
1513Laurens Hammond and Don Leslie.")
1514 (license license:gpl2+)))
1515
770305f4
RW
1516(define-public beast
1517 (package
1518 (name "beast")
1519 (version "0.10.0")
1520 (source (origin
1521 (method url-fetch)
1522 (uri (string-append "https://testbit.eu/pub/dists/beast/beast-"
1523 version ".tar.xz"))
1524 (sha256
1525 (base32
1526 "1jzzmfwssklzw8fvvil04n8csc0zm99fnd9p2xa7c0xchg37lvhn"))))
1527 (build-system gnu-build-system)
844f4f6e
EF
1528 (arguments
1529 '(#:parallel-build? #f)) ; Race conditions cause build failures
770305f4
RW
1530 (inputs
1531 `(("rapicorn" ,rapicorn)
1532 ("guile" ,guile-1.8)
1533 ("python" ,python-2)
770305f4
RW
1534 ("libgnomecanvas" ,libgnomecanvas)
1535 ("libogg" ,libogg)
1536 ("libmad" ,libmad)
1537 ("flac" ,flac)
1538 ("alsa-lib" ,alsa-lib)
1539 ("libvorbis" ,libvorbis)
b94a6ca0 1540 ("gettext" ,gettext-minimal)))
770305f4
RW
1541 (native-inputs
1542 `(("pkg-config" ,pkg-config)
1543 ("glib:bin" ,glib "bin")
f2516de2 1544 ("cython" ,python2-cython)
770305f4
RW
1545 ("perl" ,perl)
1546 ("perl-xml-parser" ,perl-xml-parser)))
1547 (home-page "https://testbit.eu/wiki/Beast_Home")
1548 (synopsis "Music composition and modular synthesis environment")
1549 (description
1550 "Beast is a music composition and modular synthesis application. It
1551supports a wide range of standards in the field, such as MIDI, various audio
1552file formats and LADSPA modules. It allows for multitrack editing, real-time
1553synthesis, 32bit audio rendering, precise timing down to sample granularity,
1554on-demand and partial loading of wave files, on the fly decoding, stereo
1555mixing, FFT scopes, MIDI automation and full scriptability in Scheme.")
1556 (license license:gpl3+)))
1557
96250294
RW
1558(define-public bristol
1559 (package
1560 (name "bristol")
1561 (version "0.60.11")
1562 (source (origin
1563 (method url-fetch)
1564 (uri (string-append "mirror://sourceforge/bristol/bristol/"
1565 (version-major+minor version)
1566 "/bristol-" version ".tar.gz"))
1567 (sha256
1568 (base32
1569 "1fi2m4gmvxdi260821y09lxsimq82yv4k5bbgk3kyc3x1nyhn7vx"))))
1570 (build-system gnu-build-system)
18ef998b
RW
1571 (arguments
1572 `(#:phases
1573 (modify-phases %standard-phases
1574 (add-after 'unpack 'remove-sse-flags
1575 (lambda* (#:key system #:allow-other-keys)
1576 (when (not (or (string-prefix? "x86_64" system)
1577 (string-prefix? "i686" system)))
1578 (substitute* "bristol/Makefile.in"
1579 (("-msse -mfpmath=sse") "")))
73124d34 1580 #t))
bd0c6231
RW
1581 ;; alsa-lib 1.1.x no longer provides iatomic.h. That's okay because
1582 ;; bristol actually doesn't use it.
1583 (add-after 'unpack 'do-not-use-alsa-iatomic
1584 (lambda _
1585 (substitute* "libbristolaudio/audioEngineJack.c"
1586 (("#include <alsa/iatomic.h>") ""))
1587 #t))
73124d34
RW
1588 ;; We know that Bristol has been linked with JACK and we don't have
1589 ;; ldd, so we can just skip this check.
1590 (add-after 'unpack 'do-not-grep-for-jack
1591 (lambda _
1592 (substitute* "bin/startBristol.in"
1593 (("ldd `which bristol` | grep jack") "echo guix"))
18ef998b 1594 #t)))))
96250294
RW
1595 (inputs
1596 `(("alsa-lib" ,alsa-lib)
1597 ("jack" ,jack-1)
1598 ("liblo" ,liblo)
1599 ("libx11" ,libx11)))
1600 (native-inputs
1601 `(("pkg-config" ,pkg-config)))
1602 (home-page "http://bristol.sourceforge.net/")
1603 (synopsis "Synthesizer emulator")
1604 (description
1605 "Bristol is an emulation package for a number of different 'classic'
1606synthesizers including additive and subtractive and a few organs. The
1607application consists of the engine, which is called bristol, and its own GUI
1608library called brighton that represents all the emulations. There are
1609currently more than twenty different emulations; each does sound different
1610although the author maintains that the quality and accuracy of each emulation
1611is subjective.")
1612 (license license:gpl3+)))
1613
6260d1a8
RW
1614(define-public tuxguitar
1615 (package
1616 (name "tuxguitar")
53c475d1 1617 (version "1.5")
6260d1a8
RW
1618 (source (origin
1619 (method url-fetch)
1620 (uri (string-append
1621 "mirror://sourceforge/tuxguitar/TuxGuitar/TuxGuitar-"
f467c352 1622 version "/tuxguitar-" version "-src.tar.gz"))
6260d1a8
RW
1623 (sha256
1624 (base32
53c475d1 1625 "1yd5wv17sh6i8pkndxayfd6r2k1ccgnc4w3nda3lpniv8cpjzz3k"))
f467c352
RW
1626 (modules '((guix build utils)))
1627 (snippet
750e54ec
RW
1628 '(begin
1629 ;; Delete pre-built classes
1630 (delete-file-recursively "TuxGuitar-android-gdrive/bin")
1631 (delete-file-recursively "TuxGuitar-android-gdrive-gdaa/bin")
1632 #t))))
f467c352 1633 (build-system ant-build-system)
6260d1a8 1634 (arguments
f467c352 1635 `(#:build-target "build"
40f372af 1636 #:jdk ,icedtea-8
f467c352 1637 #:tests? #f ; no tests
6260d1a8 1638 #:phases
5f1c9498 1639 (modify-phases %standard-phases
f467c352
RW
1640 (add-after 'unpack 'enter-dir
1641 (lambda _ (chdir "TuxGuitar-lib") #t))
750e54ec 1642 (add-after 'build 'build-libraries
f467c352 1643 (lambda* (#:key inputs outputs #:allow-other-keys)
750e54ec
RW
1644 (let* ((initial-classpath (getenv "CLASSPATH"))
1645 (build-dir (lambda (dir)
1646 (chdir "..")
1647 (setenv "CLASSPATH"
1648 (string-join (cons initial-classpath
1649 (find-files (getcwd) "\\.jar$"))
1650 ":"))
1651 (chdir dir)
1652 (if (file-exists? "build.xml")
1653 ((assoc-ref %standard-phases 'build)
1654 #:build-target "build")
1655 (begin
1656 ;; Generate default build.xml
1657 ((@@ (guix build ant-build-system) default-build.xml)
1658 (string-append (string-downcase dir) ".jar")
1659 (string-append (assoc-ref outputs "out")
1660 "/share/java"))
1661 ((assoc-ref %standard-phases 'build)))))))
1662 (map build-dir '("TuxGuitar-editor-utils"
1663 "TuxGuitar-ui-toolkit"
1664 "TuxGuitar-ui-toolkit-swt"
1665 "TuxGuitar-awt-graphics")))))
1666 (add-after 'build-libraries 'build-application
f467c352
RW
1667 (lambda _
1668 (chdir "../TuxGuitar")
1669 ((assoc-ref %standard-phases 'build)
1670 #:build-target "build")))
1671 (replace 'install
1672 (lambda* (#:key inputs outputs #:allow-other-keys)
1673 (let* ((out (assoc-ref outputs "out"))
1674 (bin (string-append out "/bin"))
1675 (share (string-append out "/share"))
1676 (lib (string-append share "/java"))
1677 (swt (assoc-ref inputs "java-swt")))
1678 (mkdir-p bin)
f467c352
RW
1679 ;; install all jars
1680 (for-each (lambda (file)
1681 (install-file file lib))
1682 (find-files ".." "\\.jar$"))
750e54ec 1683
f467c352 1684 ;; install all resources
750e54ec
RW
1685 (copy-recursively "share" share)
1686
f467c352
RW
1687 ;; create wrapper
1688 (call-with-output-file (string-append bin "/tuxguitar")
1689 (lambda (port)
1690 (let ((classpath (string-join (append (find-files lib "\\.jar$")
1691 (find-files swt "\\.jar$"))
1692 ":")))
1693 (format
1694 port
1695 (string-append "#!/bin/sh\n"
1696 (which "java")
1697 " -cp " classpath
1698 " -Dtuxguitar.home.path=" out
1699 " -Dtuxguitar.share.path=" out "/share"
1700 " -Dswt.library.path=" swt "/lib"
1701 " org.herac.tuxguitar.app.TGMainSingleton"
1702 " \"$1\" \"$2\"")))))
1703 (chmod (string-append bin "/tuxguitar") #o555)
1704 #t))))))
6260d1a8 1705 (inputs
1ad15c16 1706 `(("java-swt" ,java-swt)))
d4eae3f7 1707 (home-page "http://tuxguitar.com.ar/")
6260d1a8
RW
1708 (synopsis "Multitrack tablature editor and player")
1709 (description
1710 "TuxGuitar is a guitar tablature editor with player support through midi.
1711It can display scores and multitrack tabs. TuxGuitar provides various
1712additional features, including autoscrolling while playing, note duration
1713management, bend/slide/vibrato/hammer-on/pull-off effects, support for
1714tuplets, time signature management, tempo management, gp3/gp4/gp5 import and
1715export.")
1716 (license license:lgpl2.1+)))
2d0fd07b
RW
1717
1718(define-public pd
1719 (package
1720 (name "pd")
037bf4f4 1721 (version "0.47-1")
2d0fd07b
RW
1722 (source (origin
1723 (method url-fetch)
1724 (uri
037bf4f4
RW
1725 (string-append "http://msp.ucsd.edu/Software/pd-"
1726 version ".src.tar.gz"))
2d0fd07b
RW
1727 (sha256
1728 (base32
037bf4f4 1729 "0k5s949kqd7yw97h3m8z81bjz32bis9m4ih8df1z0ymipnafca67"))))
2d0fd07b
RW
1730 (build-system gnu-build-system)
1731 (arguments
1732 `(#:tests? #f ; no "check" target
1733 #:phases
1734 (modify-phases %standard-phases
4712cbb0
RW
1735 (add-before 'configure 'fix-wish-path
1736 (lambda _
1737 (substitute* "src/s_inter.c"
1738 ((" wish ") (string-append " " (which "wish8.6") " ")))
1739 (substitute* "tcl/pd-gui.tcl"
1740 (("exec wish ") (string-append "exec " (which "wish8.6") " ")))
1741 #t))
1742 (add-after 'unpack 'autoconf
8723fe23 1743 (lambda _ (zero? (system* "bash" "./autogen.sh")))))))
2d0fd07b
RW
1744 (native-inputs
1745 `(("autoconf" ,autoconf)
1746 ("automake" ,automake)
1747 ("libtool" ,libtool)
b94a6ca0 1748 ("gettext" ,gettext-minimal)
2d0fd07b
RW
1749 ("pkg-config" ,pkg-config)))
1750 (inputs
1751 `(("tk" ,tk)
1752 ("alsa-lib" ,alsa-lib)
1753 ("jack" ,jack-1)))
1754 (home-page "http://puredata.info")
1755 (synopsis "Visual programming language for artistic performances")
1756 (description
1757 "Pure Data (aka Pd) is a visual programming language. Pd enables
1758musicians, visual artists, performers, researchers, and developers to create
1759software graphically, without writing lines of code. Pd is used to process
1760and generate sound, video, 2D/3D graphics, and interface sensors, input
1761devices, and MIDI. Pd can easily work over local and remote networks to
1762integrate wearable technology, motor systems, lighting rigs, and other
1763equipment. Pd is suitable for learning basic multimedia processing and visual
1764programming methods as well as for realizing complex systems for large-scale
1765projects.")
1766 (license license:bsd-3)))
821664f1 1767
aacb52fb
RW
1768(define-public portmidi
1769 (package
1770 (name "portmidi")
1771 (version "217")
1772 (source (origin
1773 (method url-fetch)
1774 (uri (string-append "mirror://sourceforge/portmedia/portmidi/"
1775 version "/portmidi-src-" version ".zip"))
1776 (sha256
1777 (base32
1778 "03rfsk7z6rdahq2ihy5k13qjzgx757f75yqka88v3gc0pn9ais88"))
1779 (patches (list (search-patch "portmidi-modular-build.patch")))))
1780 (build-system cmake-build-system)
1781 (arguments
3def739d
TGR
1782 `(#:tests? #f ; tests cannot be linked
1783 #:build-type "Release" ; needed to have PMALSA set
aacb52fb
RW
1784 #:configure-flags
1785 (list "-DPORTMIDI_ENABLE_JAVA=Off"
a374d9c9
NG
1786 "-DPORTMIDI_ENABLE_TEST=Off") ; tests fail linking
1787 #:phases
1788 (modify-phases %standard-phases
1789 ;; Some packages, e.g., MuseScore, expect "libporttime.so" instead of
1790 ;; "libportmidi.so". Distributions get away with it by creating an
1791 ;; appropriate symlink.
1792 (add-after 'install 'add-porttime
1793 (lambda* (#:key outputs #:allow-other-keys)
1794 (let* ((out (assoc-ref outputs "out"))
1795 (lib (string-append out "/lib")))
1796 (with-directory-excursion lib
1797 (symlink "libportmidi.so" "libporttime.so")))
1798 #t)))))
aacb52fb
RW
1799 (inputs
1800 `(("alsa-lib" ,alsa-lib)))
1801 (native-inputs
1802 `(("unzip" ,unzip)))
1803 (home-page "http://portmedia.sourceforge.net/portmidi/")
1804 (synopsis "Library for MIDI I/O")
1805 (description
1806 "PortMidi is a library supporting real-time input and output of MIDI data
1807using a system-independent interface.")
1808 (license license:expat)))
f65d59fc 1809
38098bf7
RW
1810(define-public portmidi-for-extempore
1811 (package (inherit portmidi)
1812 (name "portmidi-for-extempore")
1813 (version "217")
1814 (source (origin
1815 (method url-fetch)
1816 (uri (string-append "https://github.com/extemporelang/portmidi/"
1817 "archive/" version ".tar.gz"))
1818 (file-name (string-append name "-" version ".tar.gz"))
1819 (sha256
1820 (base32
1821 "0gjikwciyr8kk4y3qiv1pcq58xpgw38ql1m2gs6g0qc1s8sx4235"))))
1822 (build-system cmake-build-system)
1823 (arguments `(#:tests? #f)) ; no tests
1824 (native-inputs '())
39162ee4
RW
1825 ;; Extempore refuses to build on architectures other than x86_64
1826 (supported-systems '("x86_64-linux"))
38098bf7
RW
1827 (home-page "https://github.com/extemporelang/portmidi/")))
1828
f65d59fc
RW
1829(define-public python-pyportmidi
1830 (package
1831 (name "python-pyportmidi")
1832 (version (package-version portmidi))
1833 (source (package-source portmidi))
1834 (build-system python-build-system)
1835 (arguments
1836 `(#:tests? #f ; no tests included
1837 #:phases
1838 (modify-phases %standard-phases
1839 (add-after 'unpack 'enter-dir
1840 (lambda _ (chdir "pm_python") #t))
1841 (add-after 'enter-dir 'fix-setup.py
1842 (lambda _
1843 (substitute* "setup.py"
1844 ;; Use Python 3 syntax
1845 (("print (\".*\")" _ text)
1846 (string-append "print(" text ")\n"))
1847 ;; TODO.txt and CHANGES.txt don't exist
1848 (("CHANGES =.*") "CHANGES = \"\"\n")
1849 (("TODO =.*") "TODO = \"\"\n"))
1850 #t)))))
1851 (inputs
1852 `(("portmidi" ,portmidi)
f2516de2 1853 ("alsa-lib" ,alsa-lib)))
f65d59fc 1854 (native-inputs
f2516de2
HG
1855 `(("python-cython" ,python-cython)
1856 ("unzip" ,unzip)))
f65d59fc
RW
1857 (home-page "http://portmedia.sourceforge.net/portmidi/")
1858 (synopsis "Python bindings to PortMidi")
1859 (description
1860 "This package provides Python bindings to the PortMidi library.")
1861 (license license:expat)))
aacb52fb 1862
821664f1
RW
1863(define-public frescobaldi
1864 (package
1865 (name "frescobaldi")
e40335b2 1866 (version "3.0.0")
821664f1
RW
1867 (source (origin
1868 (method url-fetch)
1869 (uri (string-append
1870 "https://github.com/wbsoft/frescobaldi/releases/download/v"
1871 version "/frescobaldi-" version ".tar.gz"))
1872 (sha256
1873 (base32
e40335b2 1874 "15cqhbjbjikr7ljgiq56bz2gxrr38j8p0f78p2vhyzydaviy9a2z"))))
821664f1 1875 (build-system python-build-system)
a19a6d3a 1876 (arguments `(#:tests? #f)) ; no tests included
821664f1
RW
1877 (inputs
1878 `(("lilypond" ,lilypond)
6855b347 1879 ("portmidi" ,portmidi)
e40335b2 1880 ("python-pyqt" ,python-pyqt)
821664f1 1881 ("python-ly" ,python-ly)
6855b347 1882 ("python-pyportmidi" ,python-pyportmidi)
821664f1 1883 ("poppler" ,poppler)
e40335b2 1884 ("python-poppler-qt5" ,python-poppler-qt5)
821664f1
RW
1885 ("python-sip" ,python-sip)))
1886 (home-page "http://www.frescobaldi.org/")
1887 (synopsis "LilyPond sheet music text editor")
1888 (description
1889 "Frescobaldi is a LilyPond sheet music text editor with syntax
1890highlighting and automatic completion. Among other things, it can render
1891scores next to the source, can capture input from MIDI or read MusicXML and
1892ABC files, has a MIDI player for proof-listening, and includes a documentation
1893browser.")
1894 (license license:gpl2+)))
ddfddb0c 1895
bf76d780
RW
1896(define-public drumstick
1897 (package
1898 (name "drumstick")
7adaf5b5 1899 (version "1.1.1")
bf76d780
RW
1900 (source (origin
1901 (method url-fetch)
1902 (uri (string-append "mirror://sourceforge/drumstick/"
1903 version "/drumstick-" version ".tar.bz2"))
1904 (sha256
1905 (base32
7adaf5b5 1906 "0avwxr6n9ra7narxc5lmkhdqi8ix10gmif8rpd06wp4g9iv46xrn"))))
bf76d780
RW
1907 (build-system cmake-build-system)
1908 (arguments
7adaf5b5 1909 `(#:tests? #f ; no test target
bf76d780
RW
1910 #:configure-flags '("-DLIB_SUFFIX=")
1911 #:phases
1912 (modify-phases %standard-phases
1913 (add-before 'configure 'fix-docbook
1914 (lambda* (#:key inputs #:allow-other-keys)
1915 (substitute* "cmake_admin/CreateManpages.cmake"
1916 (("http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl")
1917 (string-append (assoc-ref inputs "docbook-xsl")
1918 "/xml/xsl/docbook-xsl-"
1919 ,(package-version docbook-xsl)
1920 "/manpages/docbook.xsl")))
1921 #t)))))
1922 (inputs
ca1cab82
EF
1923 `(("qtbase" ,qtbase)
1924 ("qtsvg" ,qtsvg)
7adaf5b5 1925 ("alsa-lib" ,alsa-lib)))
bf76d780
RW
1926 (native-inputs
1927 `(("pkg-config" ,pkg-config)
7adaf5b5 1928 ("libxslt" ,libxslt) ; for xsltproc
bf76d780
RW
1929 ("docbook-xsl" ,docbook-xsl)
1930 ("doxygen" ,doxygen)))
1931 (home-page "http://drumstick.sourceforge.net/")
1932 (synopsis "C++ MIDI library")
1933 (description
1934 "Drumstick is a set of MIDI libraries using C++/Qt5 idioms and style. It
1935includes a C++ wrapper around the ALSA library sequencer interface. A
1936complementary library provides classes for processing SMF (Standard MIDI
1937files: .MID/.KAR), Cakewalk (.WRK), and Overture (.OVE) file formats. A
1938multiplatform realtime MIDI I/O library is also provided with various output
1939backends, including ALSA, OSS, Network and FluidSynth.")
1940 (license license:gpl2+)))
1941
ddfddb0c
RW
1942(define-public zynaddsubfx
1943 (package
1944 (name "zynaddsubfx")
ceffa180 1945 (version "3.0.3")
ddfddb0c
RW
1946 (source (origin
1947 (method url-fetch)
1948 (uri (string-append
1949 "mirror://sourceforge/zynaddsubfx/zynaddsubfx/"
138e7697 1950 version "/zynaddsubfx-" version ".tar.bz2"))
ddfddb0c
RW
1951 (sha256
1952 (base32
ceffa180 1953 "1hfpiqdm337gl4ynkmmp2qss2m5z8mzqzjrbiyg6w1v4js7l9phi"))))
ddfddb0c 1954 (build-system cmake-build-system)
00dfc97c
RW
1955 (arguments
1956 `(#:phases
1957 (modify-phases %standard-phases
1958 ;; Move SSE compiler optimization flags from generic target to
1959 ;; athlon64 and core2 targets, because otherwise the build would fail
1960 ;; on non-Intel machines.
1961 (add-after 'unpack 'remove-sse-flags-from-generic-target
1962 (lambda _
1963 (substitute* "src/CMakeLists.txt"
1964 (("-msse -msse2 -mfpmath=sse") "")
1965 (("-march=(athlon64|core2)" flag)
1966 (string-append flag " -msse -msse2 -mfpmath=sse")))
1967 #t)))))
ddfddb0c
RW
1968 (inputs
1969 `(("liblo" ,liblo)
1970 ("ntk" ,ntk)
1ea7969f 1971 ("mesa" ,mesa)
ddfddb0c
RW
1972 ("alsa-lib" ,alsa-lib)
1973 ("jack" ,jack-1)
1974 ("fftw" ,fftw)
1975 ("minixml" ,minixml)
1976 ("libxpm" ,libxpm)
1977 ("zlib" ,zlib)))
1978 (native-inputs
1979 `(("pkg-config" ,pkg-config)))
1980 (home-page "http://zynaddsubfx.sf.net/")
1981 (synopsis "Software synthesizer")
1982 (description
1983 "ZynAddSubFX is a feature heavy realtime software synthesizer. It offers
1984three synthesizer engines, multitimbral and polyphonic synths, microtonal
1985capabilities, custom envelopes, effects, etc.")
1986 (license license:gpl2)))
c493679f
RW
1987
1988(define-public yoshimi
1989 (package
1990 (name "yoshimi")
b4a145fa 1991 (version "1.5.8")
c493679f
RW
1992 (source (origin
1993 (method url-fetch)
1994 (uri (string-append "mirror://sourceforge/yoshimi/"
1995 (version-major+minor version)
1996 "/yoshimi-" version ".tar.bz2"))
1997 (sha256
1998 (base32
b4a145fa 1999 "0gwsr5srzy28hwqhfzrc8pswysmyra8kbww3bxfx8bq4mdjifdj6"))))
c493679f
RW
2000 (build-system cmake-build-system)
2001 (arguments
2002 `(#:tests? #f ; there are no tests
2003 #:configure-flags
2004 (list (string-append "-DCMAKE_INSTALL_DATAROOTDIR="
2005 (assoc-ref %outputs "out") "/share"))
2006 #:phases
2007 (modify-phases %standard-phases
2008 (add-before 'configure 'enter-dir
2009 (lambda _ (chdir "src") #t))
2010 ;; Move SSE compiler optimization flags from generic target to
2011 ;; athlon64 and core2 targets, because otherwise the build would fail
2012 ;; on non-Intel machines.
2013 (add-after 'unpack 'remove-sse-flags-from-generic-target
2014 (lambda _
2015 (substitute* "src/CMakeLists.txt"
2016 (("-msse -msse2 -mfpmath=sse") "")
2017 (("-march=(athlon64|core2)" flag)
2018 (string-append flag " -msse -msse2 -mfpmath=sse")))
5edc8682 2019 #t)))))
c493679f
RW
2020 (inputs
2021 `(("boost" ,boost)
2022 ("fftwf" ,fftwf)
2023 ("alsa-lib" ,alsa-lib)
2024 ("jack" ,jack-1)
2025 ("fontconfig" ,fontconfig)
2026 ("minixml" ,minixml)
2027 ("mesa" ,mesa)
2028 ("fltk" ,fltk)
2029 ("lv2" ,lv2)
2030 ("readline" ,readline)
2031 ("ncurses" ,ncurses)
2032 ("cairo" ,cairo)
2033 ("zlib" ,zlib)))
2034 (native-inputs
2035 `(("pkg-config" ,pkg-config)))
2036 (home-page "http://yoshimi.sourceforge.net/")
2037 (synopsis "Multi-paradigm software synthesizer")
2038 (description
edfa2eee 2039 "Yoshimi is a fork of ZynAddSubFX, a feature-heavy real-time software
c493679f
RW
2040synthesizer. It offers three synthesizer engines, multitimbral and polyphonic
2041synths, microtonal capabilities, custom envelopes, effects, etc. Yoshimi
2042improves on support for JACK features, such as JACK MIDI.")
2043 (license license:gpl2)))
658212eb 2044
e87cb754
RW
2045(define-public libgig
2046 (package
2047 (name "libgig")
2048 (version "4.0.0")
2049 (source (origin
2050 (method url-fetch)
2051 (uri (string-append "http://download.linuxsampler.org/packages/"
2052 "libgig-" version ".tar.bz2"))
2053 (sha256
2054 (base32
2055 "1wr8mwjmqpnyz6bx9757lspiii1zzn8zfbqsvn2ipzpgqkxv6kaz"))))
2056 (build-system gnu-build-system)
2057 (inputs
2058 `(("libuuid" ,util-linux)
2059 ("libsndfile" ,libsndfile)))
2060 (native-inputs
2061 `(("pkg-config" ,pkg-config)))
2062 (home-page "http://linuxsampler.org/libgig/")
2063 (synopsis "C++ library for working with Gigasampler (.gig) files")
2064 (description
2065 "Libgig is a C++ library for loading, modifying existing and creating new
2066Gigasampler (.gig) files and DLS (Downloadable Sounds) Level 1/2 files, KORG
2067sample based instruments (.KSF and .KMP files), SoundFont v2 (.sf2) files and
2068AKAI sampler data. The package includes a couple of command line tools based
2069on the library.")
2070 ;; The library and tools are released under the GPL, except the AKAI
2071 ;; classes which are released under the LGPL.
2072 (license (list license:gpl2+ license:lgpl2.1+))))
2073
a9f55bf2
RW
2074(define-public jack-keyboard
2075 (package
2076 (name "jack-keyboard")
2077 (version "2.5")
2078 (source
2079 (origin
2080 (method url-fetch)
2081 (uri (string-append "mirror://sourceforge/jack-keyboard/jack-keyboard/"
2082 version "/jack-keyboard-" version ".tar.gz"))
2083 (sha256
2084 (base32
2085 "0mzmg8aavybcfdlq2yd9d0vscqd6is5p6jzrgfpfm5j3xdcvh2s3"))))
2086 (build-system gnu-build-system)
2087 (inputs
2088 `(("jack" ,jack-1)
2089 ("lash" ,lash)
2090 ("gtk+" ,gtk+-2)))
2091 (native-inputs
2092 `(("pkg-config" ,pkg-config)))
2093 (home-page "http://jack-keyboard.sourceforge.net/")
2094 (synopsis "Virtual MIDI keyboard")
2095 (description "Jack-keyboard is a virtual MIDI keyboard, a program that
2096allows you to send JACK MIDI events (i.e. play) using your PC keyboard.")
2097 (license license:bsd-2)))
2098
39b33584
RW
2099(define-public jack-capture
2100 (package
2101 (name "jack-capture")
2102 (version "0.9.73")
2103 (source (origin
2104 (method git-fetch)
2105 (uri (git-reference
2106 (url "https://github.com/kmatheussen/jack_capture.git")
2107 (commit version)))
2108 (file-name (string-append name "-" version "-checkout"))
2109 (sha256
2110 (base32
2111 "0jcqky96q8xgya6wqv1p8pj9fkf2wh7ynl67ah7x5bn3basgfclf"))))
2112 (build-system gnu-build-system)
2113 (arguments
2114 `(#:make-flags
2115 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
2116 #:tests? #f ; there are none
2117 #:phases
2118 (modify-phases %standard-phases
2119 (delete 'configure))))
2120 (native-inputs
2121 `(("pkg-config" ,pkg-config)
2122 ("which" ,which)))
2123 (inputs
2124 `(("gtk+" ,gtk+-2)
2125 ("jack" ,jack-1)
2126 ("libogg" ,libogg)
2127 ("liblo" ,liblo)
2128 ("lame" ,lame)
2129 ("libsndfile" ,libsndfile)))
2130 (home-page "https://github.com/kmatheussen/jack_capture")
2131 (synopsis "Program for recording sound files with JACK")
2132 (description "This is a program for recording sound files with JACK. It
2133can connect to any JACK port and record the output into a stereo WAV file.")
2134 (license license:gpl2+)))
2135
658212eb
LF
2136(define-public cursynth
2137 (package
2138 (name "cursynth")
2139 (version "1.5")
2140 (source
2141 (origin
2142 (method url-fetch)
2143 (uri (string-append "mirror://gnu/cursynth/cursynth-"
2144 version ".tar.gz"))
2145 (sha256
2146 (base32 "1dhphsya41rv8z6yqcv9l6fwbslsds4zh1y56zizi39nd996d40v"))
fc1adab1 2147 (patches (search-patches "cursynth-wave-rand.patch"))))
658212eb
LF
2148 (build-system gnu-build-system)
2149 (native-inputs `(("pkg-config" ,pkg-config)))
2150 ;; TODO: See https://github.com/iyoko/cursynth/issues/4 which currently
2151 ;; prevents us from using pulseaudio
2152 (inputs `(("ncurses" ,ncurses)
2153 ("alsa" ,alsa-lib)))
6fd52309 2154 (home-page "https://www.gnu.org/software/cursynth/")
658212eb
LF
2155 (synopsis "Polyphonic and MIDI subtractive music synthesizer using curses")
2156 (description "GNU cursynth is a polyphonic synthesizer that runs
2157graphically in the terminal. It is built on a full-featured subtractive
2158synthesis engine. Notes and parameter changes may be entered via MIDI or the
2159computer's keyboard.")
2160 (license license:gpl3+)))
a763ce7d 2161
13edf1b9
RW
2162(define-public aj-snapshot
2163 (package
2164 (name "aj-snapshot")
2216b6f4 2165 (version "0.9.8")
13edf1b9
RW
2166 (source (origin
2167 (method url-fetch)
2168 (uri (string-append "mirror://sourceforge/aj-snapshot/"
2169 "aj-snapshot-" version ".tar.bz2"))
2170 (sha256
2171 (base32
2216b6f4 2172 "0wilky1g2mb88v2z0520s7sw1dsn10iwanc8id5p6z1xsnhg7b6p"))))
13edf1b9
RW
2173 (build-system gnu-build-system)
2174 (inputs
2175 `(("minixml" ,minixml)
2176 ("jack" ,jack-1)
2177 ("alsa-lib" ,alsa-lib)))
2178 (native-inputs
2179 `(("pkg-config" ,pkg-config)))
2180 (home-page "http://aj-snapshot.sourceforge.net/")
2181 (synopsis "Snapshot connections between ALSA and JACK clients")
2182 (description "Aj-snapshot is a small program that can be used to make
2183snapshots of the connections made between JACK and/or ALSA clients. Because
2184JACK can provide both audio and MIDI support to programs, aj-snapshot can
2185store both types of connections for JACK. ALSA, on the other hand, only
2186provides routing facilities for MIDI clients. Aj-snapshot is meant to be used
2187from the command line.")
2188 (license license:gpl3+)))
2189
a763ce7d
RW
2190(define-public qtractor
2191 (package
2192 (name "qtractor")
42639cc9 2193 (version "0.9.1")
a763ce7d
RW
2194 (source (origin
2195 (method url-fetch)
2196 (uri (string-append "http://downloads.sourceforge.net/qtractor/"
2197 "qtractor-" version ".tar.gz"))
2198 (sha256
2199 (base32
42639cc9 2200 "07csbqr7q4m1j0pqg89kn7jdw0snd5lwna5rha0986s4plq4z1qb"))))
a763ce7d 2201 (build-system gnu-build-system)
42639cc9
RW
2202 (arguments
2203 `(#:tests? #f ; no "check" target
2204 #:phases
2205 (modify-phases %standard-phases
2206 (add-after 'unpack 'fix-build-with-qt-5.11
2207 (lambda _
2208 (substitute* "src/qtractorMeter.h"
2209 (("#include <QFrame>" m)
2210 (string-append "#include <QAction>\n" m)))
2211 (substitute* "src/qtractorTrackButton.h"
2212 (("#include <QPushButton>" m)
2213 (string-append "#include <QAction>\n" m)))
2214 #t)))))
a763ce7d 2215 (inputs
523544d3
RW
2216 `(("qt" ,qtbase)
2217 ("qtx11extras" ,qtx11extras)
a763ce7d
RW
2218 ("alsa-lib" ,alsa-lib)
2219 ("jack" ,jack-1)
2220 ("libsndfile" ,libsndfile)
2221 ("ladspa" ,ladspa)
2222 ("lv2" ,lv2)
2223 ("lilv" ,lilv)
2224 ("suil" ,suil)
2225 ("libsamplerate" ,libsamplerate)
2226 ("libvorbis" ,libvorbis)
2227 ("libmad" ,libmad)
2228 ("rubberband" ,rubberband)
2229 ("liblo" ,liblo)
2230 ("zlib" ,zlib)))
2231 (native-inputs
523544d3
RW
2232 `(("pkg-config" ,pkg-config)
2233 ("qttools" ,qttools)))
8071bbbc 2234 (home-page "http://qtractor.org/")
a763ce7d
RW
2235 (synopsis "Audio/MIDI multi-track sequencer")
2236 (description
2237 "Qtractor is an Audio/MIDI multi-track sequencer application. It uses
2238JACK for audio and ALSA sequencer for MIDI as multimedia infrastructures and
2239follows a traditional multi-track tape recorder control paradigm.")
2240 (license license:gpl2+)))
aa0edd3f 2241
849c3d03
RW
2242(define-public ams-lv2
2243 (package
2244 (name "ams-lv2")
f0c5856d 2245 (version "1.2.1")
849c3d03
RW
2246 (source
2247 (origin
2248 (method url-fetch)
2249 (uri (string-append "https://github.com/blablack/ams-lv2/"
2250 "archive/" version ".tar.gz"))
2251 (file-name (string-append name "-" version ".tar.gz"))
2252 (sha256
2253 (base32
f0c5856d 2254 "1xacxyzqcj83g9c1gwfn36gg1c6yi15v7km4vidfidrjzb4x27fq"))))
849c3d03 2255 (build-system waf-build-system)
8a3ce2c7
EF
2256 (arguments
2257 `(#:phases
2258 (modify-phases %standard-phases
2259 (add-after 'unpack 'remove-sse-flags
2260 (lambda* (#:key system #:allow-other-keys)
2261 (when (not (or (string-prefix? "x86_64" system)
2262 (string-prefix? "i686" system)))
2263 (substitute* "wscript"
2264 (("'-msse', '-mfpmath=sse', ") ""))
2265 #t))))
2266 #:tests? #f)) ; no tests
849c3d03
RW
2267 (inputs
2268 `(("lv2" ,lv2)
2269 ("lvtk" ,lvtk)
2270 ("gtkmm" ,gtkmm-2)
2271 ("gtk" ,gtk+-2)
2272 ("cairo" ,cairo)
2273 ("fftw" ,fftw)))
2274 (native-inputs
2275 `(("pkg-config" ,pkg-config)))
2276 (home-page "https://objectivewave.wordpress.com/ams-lv2/")
2277 (synopsis "Port of Alsa Modular Synth internal modules into LV2")
2278 (description "This set of LV2 plugins is a port of the internal modules
2279found in Alsa Modular Synth. These plugins are used to create modular
2280synthesizers and contain: VCO, VCF, VCA, LFO, slew limiter, envelopes, sample
2281and hold, etc.")
2282 (license license:gpl2)))
2283
aed023ff
RW
2284(define-public gxtuner
2285 (package
2286 (name "gxtuner")
f5e0ff0f 2287 (version "2.4")
aed023ff
RW
2288 (source (origin
2289 (method url-fetch)
2290 (uri (string-append "https://github.com/brummer10/gxtuner/"
2291 "archive/v" version ".tar.gz"))
2292 (file-name (string-append name "-" version ".tar.gz"))
2293 (sha256
2294 (base32
f5e0ff0f 2295 "1hn5qjac7qd00v0sp7ijhhc3sb26ks9bni06nngivva21h61xrjr"))))
aed023ff
RW
2296 (build-system gnu-build-system)
2297 (arguments
2298 `(#:make-flags
2299 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
2300 (string-append "INCLUDE_L_DIR="
2301 (assoc-ref %build-inputs "zita-resampler")
2302 "/include/"))
2303 #:phases
2304 (modify-phases %standard-phases
2305 (delete 'configure))))
2306 (inputs
f5e0ff0f 2307 `(("gtk+" ,gtk+)
aed023ff
RW
2308 ("jack" ,jack-1)
2309 ("fftwf" ,fftwf)
2310 ("cairo" ,cairo)
2311 ("zita-resampler" ,zita-resampler)))
2312 (native-inputs
2313 `(("pkg-config" ,pkg-config)))
2314 (home-page "https://github.com/brummer10/gxtuner")
2315 (synopsis "Guitar tuner")
2316 (description "GXtuner is a simple guitar tuner for JACK with an
2317analogue-like user interface.")
2318 (license license:gpl2+)))
2319
c2c9e748 2320(define-public mod-host
9f1ac4fa 2321 ;; The last release was in 2014 but since then hundreds of commits have
c2c9e748 2322 ;; been made.
9f1ac4fa
RW
2323 (let ((commit "1726ad06b11323da7e1aaed690ff8aef91f702b5")
2324 (revision "3"))
c2c9e748
RW
2325 (package
2326 (name "mod-host")
2327 (version (string-append "0.10.6-" revision "." (string-take commit 9)))
2328 (source (origin
2329 (method git-fetch)
2330 (uri (git-reference
2331 (url "https://github.com/moddevices/mod-host")
2332 (commit commit)))
2333 (sha256
2334 (base32
9f1ac4fa 2335 "1nrd37c35w6z6ldczgrwmmd9hx1n3zyvcjcgb3mi4cygqdanvspv"))
c2c9e748
RW
2336 (file-name (string-append name "-" version "-checkout"))))
2337 (build-system gnu-build-system)
2338 (arguments
2339 `(#:tests? #f ; no tests included
2340 #:make-flags
2341 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
2342 "CC=gcc")
2343 #:phases
2344 (modify-phases %standard-phases
2345 (delete 'configure)
2346 (add-after 'unpack 'fix-jack-installation-directory
2347 (lambda _
2348 ;; Do not attempt to install files to output of "jack" package.
2349 (substitute* "Makefile"
2350 (("\\$\\(shell pkg-config --variable=libdir jack\\)")
2351 "lib"))
2352 #t)))))
2353 (inputs
2354 `(("lilv" ,lilv)
c96cb01a
DC
2355 ("fftw" ,fftw)
2356 ("fftwf" ,fftwf)
c2c9e748
RW
2357 ("lv2" ,lv2)
2358 ("jack" ,jack-1)
2359 ("readline" ,readline)))
2360 (native-inputs
2361 `(("pkg-config" ,pkg-config)
2362 ("python" ,python-2)))
2363 (home-page "https://github.com/moddevices/mod-host")
2364 (synopsis "LV2 host for Jack controllable via socket or command line")
2365 (description "mod-host is an LV2 plugin host for JACK, controllable via
2366socket or command line.")
2367 (license license:gpl3+))))
2368
19d93ef5
SR
2369(define-public curseradio
2370 (let ((commit "1bd4bd0faeec675e0647bac9a100b526cba19f8d")
2371 (revision "1"))
2372 (package
2373 (name "curseradio")
2374 (version (git-version "0" revision commit))
2375 (source (origin
2376 (method git-fetch)
2377 (uri (git-reference
2378 (url "https://github.com/chronitis/curseradio.git")
2379 (commit commit)))
2380 (file-name (git-file-name name version))
2381 (sha256
2382 (base32
2383 "11bf0jnj8h2fxhpdp498189r4s6b47vy4wripv0z4nx7lxajl88i"))))
2384 (build-system python-build-system)
2385 (propagated-inputs
2386 `(("python-lxml" ,python-lxml)
2387 ("python-requests" ,python-requests)
2388 ("python-pyxdg" ,python-pyxdg)
2389 ("mpv" ,mpv)))
2390 (home-page "https://github.com/chronitis/curseradio")
2391 (synopsis "Command-line Internet radio player")
2392 (description "Curseradio is a Curses-based radio player that uses a
2393tune-in sender list from @url{http://opml.radiotime.com}.")
2394 (license license:expat))))
2395
aa0edd3f
AM
2396(define-public pianobar
2397 (package
2398 (name "pianobar")
3999b664 2399 (version "2016.06.02")
aa0edd3f
AM
2400 (source (origin
2401 (method url-fetch)
2402 (uri (string-append "https://github.com/PromyLOPh/"
2403 name "/archive/" version ".tar.gz"))
2404 (file-name (string-append name "-" version ".tar.gz"))
2405 (sha256
2406 (base32
3999b664 2407 "1hi5rr6jcr0kwf4xfz007ndwkjkp287lhwlsgfz6iryqa5n6jzcp"))))
aa0edd3f
AM
2408 (build-system gnu-build-system)
2409 (arguments
2410 `(#:tests? #f ; no tests
2411 #:make-flags (list "CC=gcc" "CFLAGS=-std=c99"
2412 (string-append "PREFIX=" %output))
2413 #:phases (modify-phases %standard-phases
2414 (delete 'configure))))
2415 (inputs
2416 `(("ao" ,ao)
2417 ("curl" ,curl)
2418 ("libgcrypt" ,libgcrypt)
2419 ("json-c" ,json-c)
bb5c508c 2420 ("ffmpeg" ,ffmpeg-3.4)))
aa0edd3f
AM
2421 (native-inputs
2422 `(("pkg-config" ,pkg-config)))
2423 (home-page "http://6xq.net/projects/pianobar/")
2424 (synopsis "Console-based pandora.com player")
2425 (description "pianobar is a console-based music player for the
2426personalized online radio pandora.com. It has configurable keys for playing
2427and managing stations, can be controlled remotely via fifo, and can run
2428event-based scripts for scrobbling, notifications, etc.")
2429 (license license:expat)))
3f7a182d
LF
2430
2431(define-public python-mutagen
2432 (package
2433 (name "python-mutagen")
e39aae4f 2434 (version "1.38")
3f7a182d
LF
2435 (source (origin
2436 (method url-fetch)
2437 (uri (pypi-uri "mutagen" version))
2438 (sha256
2439 (base32
e39aae4f 2440 "0rl7sxn1rcjl48fwga3dqf9f6pzspsny4ngxyf6pp337mrq0z693"))))
3f7a182d 2441 (build-system python-build-system)
4228a79e
LF
2442 (native-inputs
2443 `(("python-pytest" ,python-pytest)))
3f7a182d
LF
2444 (home-page "https://bitbucket.org/lazka/mutagen")
2445 (synopsis "Read and write audio tags")
2446 (description "Mutagen is a Python module to handle audio metadata. It
2447supports ASF, FLAC, M4A, Monkey’s Audio, MP3, Musepack, Ogg FLAC, Ogg Speex, Ogg
2448Theora, Ogg Vorbis, True Audio, WavPack and OptimFROG audio files. All versions
2449of ID3v2 are supported, and all standard ID3v2.4 frames are parsed. It can read
2450Xing headers to accurately calculate the bitrate and length of MP3s. ID3 and
2451APEv2 tags can be edited regardless of audio format. It can also manipulate Ogg
2452streams on an individual packet/page level.")
2453 (license license:gpl2))) ; "later version" never mentioned
2454
2455(define-public python2-mutagen
2456 (package-with-python2 python-mutagen))
8975de88
LF
2457
2458(define-public python-musicbrainzngs
2459 (package
2460 (name "python-musicbrainzngs")
daedf34d 2461 (version "0.6")
8975de88
LF
2462 (source (origin
2463 (method url-fetch)
2464 (uri (pypi-uri "musicbrainzngs" version))
2465 (sha256
2466 (base32
daedf34d 2467 "1dddarpjawryll2wss65xq3v9q8ln8dan7984l5dxzqx88d2dvr8"))))
8975de88 2468 (build-system python-build-system)
daedf34d
LF
2469 (arguments
2470 '(;; The tests fail suffer from race conditions:
2471 ;; https://github.com/alastair/python-musicbrainzngs/issues/211
2472 #:tests? #f))
8975de88
LF
2473 (home-page "https://python-musicbrainzngs.readthedocs.org/")
2474 (synopsis "Python bindings for MusicBrainz NGS webservice")
2475 (description "Musicbrainzngs implements Python bindings of the MusicBrainz
2476web service. This library can be used to retrieve music metadata from the
2477MusicBrainz database.")
2478 ;; 'musicbrainzngs/compat.py' is ISC licensed.
2479 (license (list license:bsd-2 license:isc))))
2480
2481(define-public python2-musicbrainzngs
2482 (package-with-python2 python-musicbrainzngs))
e8fee648 2483
a2eab422 2484(define-public python2-pyechonest
e8fee648 2485 (package
a2eab422 2486 (name "python2-pyechonest")
e8fee648
LF
2487 (version "9.0.0")
2488 (source (origin
2489 (method url-fetch)
2490 (uri (pypi-uri "pyechonest" version))
2491 (sha256
2492 (base32
2493 "1584nira3rkiman9dm81kdshihmkj21s8navndz2l8spnjwb790x"))))
2494 (build-system python-build-system)
a2eab422
LF
2495 (arguments
2496 `(;; Python 3 is not supported:
2497 ;; https://github.com/echonest/pyechonest/issues/42
2498 #:python ,python-2))
e8fee648
LF
2499 (home-page "https://github.com/echonest/pyechonest")
2500 (synopsis "Python interface to The Echo Nest APIs")
d3e3468f
LF
2501 (description "Pyechonest is a Python library for the Echo Nest API. With
2502Pyechonest you have Python access to the entire set of API methods including:
e8fee648
LF
2503
2504@enumerate
2505@item artist - search for artists by name, description, or attribute, and get
2506back detailed information about any artist including audio, similar artists,
2507blogs, familiarity, hotttnesss, news, reviews, urls and video.
2508@item song - search songs by artist, title, description, or attribute (tempo,
2509duration, etc) and get detailed information back about each song, such as
2510hotttnesss, audio_summary, or tracks.
2511@item track - upload a track to the Echo Nest and receive summary information
2512about the track including key, duration, mode, tempo, time signature along with
2513detailed track info including timbre, pitch, rhythm and loudness information.
2514@end enumerate\n")
a2eab422 2515 (license license:bsd-3)))
acd7351f
LF
2516
2517(define-public python-pylast
2518 (package
2519 (name "python-pylast")
653f2b92 2520 (version "2.0.0")
acd7351f
LF
2521 (source (origin
2522 (method url-fetch)
2523 (uri (pypi-uri "pylast" version))
2524 (sha256
2525 (base32
653f2b92 2526 "0r9h7g8i8l2mgqjwkda3v6prfbkb2im5kap1az9ppmhjm9i4jkcf"))))
acd7351f 2527 (build-system python-build-system)
653f2b92
RW
2528 ;; Tests require network access. See
2529 ;; https://github.com/pylast/pylast/issues/105
2530 (arguments '(#:tests? #f))
acd7351f
LF
2531 (native-inputs
2532 `(("python-coverage" ,python-coverage)
653f2b92 2533 ("python-pycodestyle" ,python-pycodestyle)
acd7351f
LF
2534 ("python-mock" ,python-mock)
2535 ("python-pep8" ,python-pep8)
2536 ("python-pytest" ,python-pytest)
653f2b92 2537 ("python-flaky" ,python-flaky)
acd7351f
LF
2538 ("python-pyflakes" ,python-pyflakes)
2539 ("python-pyyaml" ,python-pyyaml)))
2540 (propagated-inputs
2541 `(("python-six" ,python-six)))
2542 (home-page "https://github.com/pylast/pylast")
2543 (synopsis "Python interface to Last.fm and Libre.fm")
2544 (description "A Python interface to Last.fm and other API-compatible
2545websites such as Libre.fm.")
5c31f4aa 2546 (license license:asl2.0)))
acd7351f
LF
2547
2548(define-public python2-pylast
5c31f4aa 2549 (package-with-python2 python-pylast))
3bf429af 2550
b0dea60c
SR
2551(define-public instantmusic
2552 (let ((commit "300891d09c703525215fa5a116b9294af1c923c8")
2553 (revision "1"))
2554 (package
2555 (name "instantmusic")
2556 (version (git-version "1.0" revision commit))
2557 (source (origin
2558 (method git-fetch)
2559 (uri (git-reference
2560 (url "https://github.com/yask123/Instant-Music-Downloader.git")
2561 (commit commit)))
2562 (file-name (git-file-name name version))
2563 (sha256
2564 (base32
2565 "0j7qivaa04bpdz3anmgci5833dgiyfqqwq9fdrpl9m68b34gl773"))))
2566 (build-system python-build-system)
2567 (propagated-inputs
2568 `(("python-requests" ,python-requests)
c695fb76 2569 ("eyed3" ,eyed3)
b0dea60c
SR
2570 ("python-beautifulsoup4" ,python-beautifulsoup4)
2571 ("youtube-dl" ,youtube-dl)))
2572 (arguments
2573 '(#:modules ((guix build python-build-system)
2574 (guix build utils)
2575 (srfi srfi-26))
2576 #:phases (modify-phases %standard-phases
2577 (add-before 'build 'change-directory
2578 (lambda _
2579 (chdir "instantmusic-0.1") #t))
2580 (add-before 'check 'fix-file-permissions
2581 (lambda _
2582 ;; Fix some read-only files that would cause a build failure
2583 (for-each (cut chmod <> #o644)
2584 (find-files "instantmusic.egg-info"
2585 "PKG-INFO|.*\\.txt"))
2586 #t)))))
2587 (home-page "http://iyask.me/Instant-Music-Downloader/")
2588 (synopsis "Command-line program to download a song from YouTube")
2589 (description "InstantMusic downloads a song from YouTube in MP3 format.
2590Songs can be searched by artist, name or even by a part of the song text.")
2591 (license license:expat))))
2592
3bf429af
LF
2593(define-public beets
2594 (package
2595 (name "beets")
bbfd188f 2596 (version "1.4.6")
3bf429af
LF
2597 (source (origin
2598 (method url-fetch)
23319ed6 2599 (uri (pypi-uri "beets" version))
3bf429af
LF
2600 (sha256
2601 (base32
bbfd188f 2602 "0l2vfrknwcsm6bn83m7476qrz45qwgxcb5k0h7kn96kr70irn1v2"))))
3bf429af
LF
2603 (build-system python-build-system)
2604 (arguments
0d48ff81 2605 `(#:phases
3bf429af
LF
2606 (modify-phases %standard-phases
2607 (add-after 'unpack 'set-HOME
46fce968
TGR
2608 (lambda _
2609 (setenv "HOME" (string-append (getcwd) "/tmp"))
2610 #t))
36c2c8c8 2611 (replace 'check
46fce968
TGR
2612 (lambda _
2613 (invoke "nosetests" "-v"))))))
3bf429af 2614 (native-inputs
0d48ff81
LF
2615 `(("python-beautifulsoup4" ,python-beautifulsoup4)
2616 ("python-flask" ,python-flask)
2617 ("python-mock" ,python-mock)
2618 ("python-mpd2" ,python-mpd2)
2619 ("python-nose" ,python-nose)
2620 ("python-pathlib" ,python-pathlib)
2621 ("python-pyxdg" ,python-pyxdg)
2622 ("python-pylast" ,python-pylast)
2623 ("python-rarfile" ,python-rarfile)
2624 ("python-responses" ,python-responses)))
3bf429af 2625 ;; TODO: Install optional plugins and dependencies.
b3470031 2626 (inputs
0d48ff81 2627 `(("python-discogs-client" ,python-discogs-client)
0d48ff81
LF
2628 ("python-jellyfish" ,python-jellyfish)
2629 ("python-munkres" ,python-munkres)
2630 ("python-musicbrainzngs" ,python-musicbrainzngs)
2631 ("python-mutagen" ,python-mutagen)
2632 ("python-pyyaml" ,python-pyyaml)
2633 ("python-unidecode" ,python-unidecode)))
3bf429af
LF
2634 (home-page "http://beets.io")
2635 (synopsis "Music organizer")
2636 (description "The purpose of beets is to get your music collection right
2637once and for all. It catalogs your collection, automatically improving its
2638metadata as it goes using the MusicBrainz database. Then it provides a variety
2639of tools for manipulating and accessing your music.")
2640 (license license:expat)))
21d18113
KY
2641
2642(define-public milkytracker
2643 (package
2644 (name "milkytracker")
b7e2fcf0 2645 (version "1.02.00")
21d18113
KY
2646 (source (origin
2647 (method url-fetch)
e3b2e943 2648 (uri (string-append "https://github.com/milkytracker/"
1faf081b
KK
2649 "MilkyTracker/archive/v"
2650 version ".tar.gz"))
e3b2e943 2651 (file-name (string-append name "-" version ".tar.gz"))
21d18113
KY
2652 (sha256
2653 (base32
b7e2fcf0 2654 "08v0l4ipvvwkwv4ywkc6c8a6xnpkyb02anj36w8q6gikxrs6xjvb"))
e3b2e943
KK
2655 (modules '((guix build utils)))
2656 ;; Remove non-FSDG compliant sample songs.
2657 (snippet
2658 '(begin
2659 (delete-file-recursively "resources/music")
2660 (substitute* "CMakeLists.txt"
6cbee49d
MW
2661 (("add_subdirectory\\(resources/music\\)") ""))
2662 #t))))
e3b2e943 2663 (build-system cmake-build-system)
21d18113 2664 (arguments
7f2f8345
KK
2665 '(#:tests? #f ; no check target
2666 ;; This flag ensures that MilkyTracker links with the JACK library.
2667 #:configure-flags '("-DCMAKE_CXX_FLAGS=-ljack")))
21d18113
KY
2668 (inputs
2669 `(("alsa-lib" ,alsa-lib)
2670 ("jack" ,jack-1)
e3b2e943 2671 ("sdl" ,sdl2)
21d18113
KY
2672 ("zlib" ,zlib)))
2673 (native-inputs
2674 `(("pkg-config" ,pkg-config)))
2675 (synopsis "Music tracker for working with .MOD/.XM module files")
2676 (description "MilkyTracker is a music application for creating .MOD and .XM
2677module files. It attempts to recreate the module replay and user experience of
2678the popular DOS program Fasttracker II, with special playback modes available
2679for improved Amiga ProTracker 2/3 compatibility.")
1b35fea1 2680 (home-page "http://milkytracker.titandemo.org/")
21d18113
KY
2681 ;; 'src/milkyplay' is under Modified BSD, the rest is under GPL3 or later.
2682 (license (list license:bsd-3 license:gpl3+))))
13416a10 2683
89bcf3fc
KK
2684(define-public schismtracker
2685 (package
2686 (name "schismtracker")
3fe43df7 2687 (version "20180513")
89bcf3fc
KK
2688 (source (origin
2689 (method url-fetch)
2690 (uri (string-append
2691 "https://github.com/" name "/" name "/archive/"
2692 version ".tar.gz"))
2693 (file-name (string-append name "-" version ".tar.gz"))
2694 (sha256
2695 (base32
3fe43df7 2696 "1yjfd02arb51n0vyv11qgpn6imh7hcqnc3953cbvgwb4cnrswk9f"))
89bcf3fc
KK
2697 (modules '((guix build utils)))
2698 (snippet
2699 ;; Remove use of __DATE__ and __TIME__ for reproducibility.
6cbee49d
MW
2700 `(begin
2701 (substitute* "schism/version.c"
2702 (("Schism Tracker built %s %s.*$")
2703 (string-append "Schism Tracker version " ,version "\");")))
2704 #t))))
89bcf3fc
KK
2705 (build-system gnu-build-system)
2706 (arguments
2707 `(#:phases
2708 (modify-phases %standard-phases
2709 (add-after 'unpack 'autoconf
3fe43df7 2710 (lambda _ (invoke "autoreconf" "-vfi")))
89bcf3fc
KK
2711 (add-before 'configure 'link-libm
2712 (lambda _ (setenv "LIBS" "-lm") #t)))))
2713 (native-inputs
2714 `(("autoconf" ,autoconf)
2715 ("automake" ,automake)
2716 ("python" ,python)))
2717 (inputs
2718 `(("alsa-lib" ,alsa-lib) ; for asound dependency
2719 ("libx11" ,libx11)
2720 ("libxext" ,libxext)
2721 ("sdl" ,sdl)))
2722 (home-page "http://schismtracker.org")
2723 (synopsis "Oldschool sample-based music composition tool")
2724 (description
2725 "Schism Tracker is a reimplementation of Impulse Tracker, a program used to
2726create high quality music without the requirements of specialized, expensive
2727equipment, and with a unique \"finger feel\" that is difficult to replicate in
2728part. The player is based on a highly modified version of the ModPlug engine,
2729with a number of bugfixes and changes to improve IT playback.")
2730 (license license:gpl2+)))
2731
5beecc32
RW
2732(define-public sooperlooper
2733 (package
2734 (name "sooperlooper")
2735 (version "1.7.3")
2736 (source (origin
2737 (method url-fetch)
2738 (uri (string-append "http://essej.net/sooperlooper/sooperlooper-"
2739 version ".tar.gz"))
2740 (sha256
2741 (base32
2742 "0n2gdxw1fx8nxxnpzf4sj0kp6k6zi1yq59cbz6qqzcnsnpnvszbs"))
2743 (patches (search-patches "sooperlooper-build-with-wx-30.patch"))))
2744 (build-system gnu-build-system)
2745 (arguments
2746 `(#:make-flags (list "CXXFLAGS=-std=gnu++11")
2747 #:phases
2748 (modify-phases %standard-phases
2749 (add-after 'unpack 'add-sigc++-includes
2750 (lambda* (#:key inputs #:allow-other-keys)
2751 (let ((sig (assoc-ref inputs "libsigc++"))
2752 (xml (assoc-ref inputs "libxml2"))
2753 (cwd (getcwd)))
2754 (setenv "CPATH"
2755 (string-append sig "/include/sigc++-2.0:"
2756 sig "/lib/sigc++-2.0/include:"
2757 xml "/include/libxml2/:"
2758 cwd "/libs/pbd:"
2759 cwd "/libs/midi++")))
2760 (substitute* '("src/control_osc.hpp"
2761 "src/gui/app_frame.hpp"
2762 "src/gui/config_panel.hpp"
2763 "src/gui/keys_panel.hpp"
2764 "src/gui/latency_panel.hpp"
2765 "src/gui/main_panel.hpp"
2766 "src/gui/midi_bind_panel.hpp"
2767 "src/gui/prefs_dialog.hpp")
2768 (("sigc\\+\\+/object.h")
2769 "sigc++/sigc++.h"))
2770 (substitute* '("src/engine.cpp"
2771 "src/gui/latency_panel.cpp"
2772 "src/gui/looper_panel.cpp"
2773 "src/gui/main_panel.cpp")
2774 (("(\\(| )bind " _ pre)
2775 (string-append pre "sigc::bind ")))
2776 #t))
2777 (add-after 'unpack 'fix-xpm-warnings
2778 (lambda _
2779 (substitute* (find-files "." "\\.xpm$")
2780 (("static char") "static const char"))
2781 #t)))))
2782 (inputs
2783 `(("jack" ,jack-1)
2784 ("alsa-lib" ,alsa-lib)
2785 ("wxwidgets" ,wxwidgets-gtk2)
2786 ("libsndfile" ,libsndfile)
2787 ("libsamplerate" ,libsamplerate)
2788 ("liblo" ,liblo)
2789 ("rubberband" ,rubberband)
2790 ("libxml2" ,libxml2)
2791 ("libsigc++" ,libsigc++)
2792 ("ncurses" ,ncurses)))
2793 (native-inputs
2794 `(("pkg-config" ,pkg-config)))
2795 (home-page "http://essej.net/sooperlooper/")
2796 (synopsis "Live looping sampler")
2797 (description
2798 "SooperLooper is a live looping sampler capable of immediate loop
2799recording, overdubbing, multiplying, reversing and more. It allows for
2800multiple simultaneous multi-channel loops limited only by your computer's
2801available memory.")
2802 (license license:gpl2+)))
2803
13416a10
KY
2804(define-public moc
2805 (package
2806 (name "moc")
2fbc004f 2807 (version "2.5.2")
13416a10
KY
2808 (source (origin
2809 (method url-fetch)
2810 (uri (string-append "http://ftp.daper.net/pub/soft/"
2811 name "/stable/"
2812 name "-" version ".tar.bz2"))
2813 (sha256
2814 (base32
2784b35f 2815 "026v977kwb0wbmlmf6mnik328plxg8wykfx9ryvqhirac0aq39pk"))))
13416a10
KY
2816 (build-system gnu-build-system)
2817 (inputs
2818 `(("alsa-lib" ,alsa-lib)
2819 ("curl" ,curl)
2820 ("faad2" ,faad2)
bb5c508c 2821 ("ffmpeg" ,ffmpeg-3.4)
13416a10
KY
2822 ("file" ,file)
2823 ("jack" ,jack-1)
2824 ("libid3tag" ,libid3tag)
2825 ("libltdl" ,libltdl)
2826 ("libmodplug" ,libmodplug)
2827 ("libmpcdec" ,libmpcdec)
2828 ("libmad" ,libmad)
6beaa5a0
MM
2829 ("libogg" ,libogg)
2830 ("libvorbis" ,libvorbis)
13416a10
KY
2831 ("ncurses" ,ncurses)
2832 ("openssl" ,openssl)
2833 ("sasl" ,cyrus-sasl)
2834 ("speex" ,speex)
2835 ("taglib" ,taglib)
2836 ("wavpack" ,wavpack)
2837 ("zlib" ,zlib)))
2838 (native-inputs
2839 `(("pkg-config" ,pkg-config)))
2840 (synopsis "Console audio player designed to be powerful and easy to use")
2841 (description
2842 "Music on Console is a console audio player that supports many file
2843formats, including most audio formats recognized by FFMpeg.")
2844 (home-page "http://moc.daper.net")
2845 (license license:gpl2+)))
6d3ef286
JF
2846
2847(define-public midicsv
2848 (package
2849 (name "midicsv")
2850 (version "1.1")
2851 (source (origin
2852 (method url-fetch)
2853 (uri (string-append "http://www.fourmilab.ch/webtools/midicsv/"
2854 name "-" version ".tar.gz"))
2855 (sha256
2856 (base32
2857 "1vvhk2nf9ilfw0wchmxy8l13hbw9cnpz079nsx5srsy4nnd78nkw"))))
2858 (build-system gnu-build-system)
2859 (arguments
2860 `(#:phases (modify-phases %standard-phases (delete 'configure))
2861 #:make-flags (list "CC=gcc" (string-append "INSTALL_DEST=" %output))))
2862 (synopsis "Convert MIDI files to and from CSV")
2863 (description
2864 "Midicsv reads a standard MIDI file and decodes it into a comma-separated
2865value file (CSV), which preserves all the information in the MIDI file. The
2866ASCII CSV file may be loaded into a spreadsheet or database application, or
2867processed by a program to transform the MIDI data (for example, to key
2868transpose a composition or extract a track from a multi-track sequence). A
2869CSV file in the format created by midicsv may be converted back into a
2870standard MIDI file with the csvmidi program.")
2871 (home-page "http://www.fourmilab.ch/webtools/midicsv/")
2872 (license license:public-domain)))
49604680
RW
2873
2874(define-public gx-guvnor-lv2
35f909d4
RW
2875 (package
2876 (name "gx-guvnor-lv2")
2877 (version "0.1")
2878 (source (origin
6ac8c78c
RW
2879 (method git-fetch)
2880 (uri (git-reference
2881 (url "https://github.com/brummer10/GxGuvnor.lv2.git")
2882 (commit (string-append "v" version))))
2883 (file-name (string-append name "-" version "-checkout"))
35f909d4
RW
2884 (sha256
2885 (base32
6ac8c78c 2886 "1wa5070j40p7f0b3kr259pzm99xb6cf2badr2capayjvgayd6gnm"))))
35f909d4
RW
2887 (build-system gnu-build-system)
2888 (arguments
2889 `(;; The check target is used only to output a warning.
2890 #:tests? #f
2891 #:make-flags
2892 (list (string-append "DESTDIR=" (assoc-ref %outputs "out")))
2893 #:phases
2894 (modify-phases %standard-phases
2895 (replace 'configure
2896 (lambda _
2897 (substitute* "Makefile"
6ac8c78c
RW
2898 (("INSTALL_DIR = .*") "INSTALL_DIR=/lib/lv2\n")
2899 (("install : all") "install :"))
35f909d4
RW
2900 #t)))))
2901 (inputs
2902 `(("lv2" ,lv2)))
2903 (home-page "https://github.com/brummer10/GxGuvnor.lv2")
2904 (synopsis "Overdrive/distortion pedal simulation")
2905 (description "This package provides the LV2 plugin \"GxGuvnor\", a
49604680 2906simulation of an overdrive or distortion pedal for guitars.")
35f909d4 2907 ;; The LICENSE file says GPLv3 but the license headers in the files say
4b359532
RW
2908 ;; GPLv2 or later. The whole project is released under GPLv3 or later
2909 ;; according to https://github.com/brummer10/GxGuvnor.lv2/issues/1
2910 (license license:gpl3+)))
85ae347e
RW
2911
2912(define-public gx-vbass-preamp-lv2
1b74b126
RW
2913 (let ((commit "eb999b0ca0ef4da40a59e458a9ab6e7042b96c99")
2914 (revision "2"))
85ae347e
RW
2915 (package (inherit gx-guvnor-lv2)
2916 (name "gx-vbass-preamp-lv2")
2917 (version (string-append "0-" revision "." (string-take commit 9)))
2918 (source (origin
2919 (method git-fetch)
2920 (uri (git-reference
2921 (url "https://github.com/brummer10/GxVBassPreAmp.lv2")
2922 (commit commit)))
2923 (sha256
2924 (base32
1b74b126 2925 "0firap073ldw4nrykkd7jvyyj0jbl1nslxyzjj4kswazp99x7d9h"))
85ae347e 2926 (file-name (string-append name "-" version "-checkout"))))
1b74b126
RW
2927 (inputs
2928 `(("lv2" ,lv2)
2929 ("gtk+" ,gtk+-2)))
2930 (native-inputs
2931 `(("pkg-config" ,pkg-config)))
85ae347e
RW
2932 (home-page "https://github.com/brummer10/GxVBassPreAmp.lv2")
2933 (synopsis "Simulation of the Vox Venue Bass 100 Pre Amp Section")
2934 (description "This package provides the LV2 plugin \"GxVBassPreAmp\", a
2935pre-amplifier simulation modelled after the 1984 Vox Venue Bass 100 Pre Amp
2936Section."))))
cdc7a021
RW
2937
2938(define-public gx-overdriver-lv2
2939 (let ((commit "ed71801987449414bf3adaa0dbfac68e8775f1ce")
2940 (revision "1"))
1b74b126 2941 (package (inherit gx-guvnor-lv2)
cdc7a021
RW
2942 (name "gx-overdriver-lv2")
2943 (version (string-append "0-" revision "." (string-take commit 9)))
2944 (source (origin
2945 (method git-fetch)
2946 (uri (git-reference
2947 (url "https://github.com/brummer10/GxOverDriver.lv2")
2948 (commit commit)))
2949 (sha256
2950 (base32
2951 "13j614jh525fbkby79nnzwj0z1ac0c9wclyn5pfqvkmx6a7j24r8"))
2952 (file-name (string-append name "-" version "-checkout"))))
2953 (home-page "https://github.com/brummer10/GxOverDriver.lv2")
2954 (synopsis "Overdrive effect with level and tone control")
2955 (description "This package provides the LV2 plugin \"GxOverDriver\", an
2956overdrive effect."))))
4d95cd30
RW
2957
2958(define-public gx-tone-mender-lv2
2959 (let ((commit "b6780b4a3e4782b3ed0e5882d6788f178aed138f")
2960 (revision "1"))
1b74b126 2961 (package (inherit gx-guvnor-lv2)
4d95cd30
RW
2962 (name "gx-tone-mender-lv2")
2963 (version (string-append "0-" revision "." (string-take commit 9)))
2964 (source (origin
2965 (method git-fetch)
2966 (uri (git-reference
2967 (url "https://github.com/brummer10/GxToneMender.lv2")
2968 (commit commit)))
2969 (sha256
2970 (base32
2971 "07qdcfsvv2vdnfnjh91pfgvjdcs5y91nvwfm8c0z8fp6b4bk7a9q"))
2972 (file-name (string-append name "-" version "-checkout"))))
2973 (home-page "https://github.com/brummer10/GxToneMender.lv2")
2974 (synopsis "Clean boost with a 3-knob tonestack")
2975 (description "This package provides the LV2 plugin \"GxToneMender\", a
2976clean boost effect with a 3-knob tonestack."))))
4d4bfdc2
RW
2977
2978(define-public gx-push-pull-lv2
2979 (let ((commit "7f76ae2068498643ac8671ee0930b13ee3fd8eb5")
2980 (revision "1"))
1b74b126 2981 (package (inherit gx-guvnor-lv2)
4d4bfdc2
RW
2982 (name "gx-push-pull-lv2")
2983 (version (string-append "0-" revision "." (string-take commit 9)))
2984 (source (origin
2985 (method git-fetch)
2986 (uri (git-reference
2987 (url "https://github.com/brummer10/GxPushPull.lv2")
2988 (commit commit)))
2989 (sha256
2990 (base32
2991 "12f5hwck2irph0gjbj8xy8jqcqdwb8l1hlwf29k0clz52h1jhb5q"))
2992 (file-name (string-append name "-" version "-checkout"))))
2993 (home-page "https://github.com/brummer10/GxPushPull.lv2")
2994 (synopsis "Octave up push pull transistor fuzz simulation")
2995 (description "This package provides the LV2 plugin \"GxPushPull\", a
2996simulation of a push pull transistor fuzz effect with added high octave."))))
3eb1a964
RW
2997
2998(define-public gx-suppa-tone-bender-lv2
f959991d
RW
2999 (package (inherit gx-guvnor-lv2)
3000 (name "gx-suppa-tone-bender-lv2")
3001 (version "0.1")
3002 (source (origin
48b95a19
RW
3003 (method git-fetch)
3004 (uri (git-reference
3005 (url "https://github.com/brummer10/GxSuppaToneBender.lv2.git")
3006 (commit (string-append "v" version))))
3007 (file-name (string-append name "-" version "-checkout"))
f959991d
RW
3008 (sha256
3009 (base32
48b95a19 3010 "01x6bjmllkmvxfzc5xwdix7w021j26js71awv728cxsmkxgqw0zy"))))
f959991d
RW
3011 (home-page "https://github.com/brummer10/GxSuppaToneBender.lv2")
3012 (synopsis "Simulation of the Vox Suppa Tone Bender pedal")
3013 (description "This package provides the LV2 plugin
3eb1a964 3014\"GxSuppaToneBender\", a simulation modelled after the Vox Suppa Tone Bender
f959991d 3015pedal.")))
664f677f
RW
3016
3017(define-public gx-saturator-lv2
d9f65bd3
RW
3018 (let ((commit "605330f432c94b6eb3f8203cbe472befae959532")
3019 (revision "3"))
ad67ca3d 3020 (package (inherit gx-vbass-preamp-lv2)
664f677f
RW
3021 (name "gx-saturator-lv2")
3022 (version (string-append "0-" revision "." (string-take commit 9)))
3023 (source (origin
3024 (method git-fetch)
3025 (uri (git-reference
3026 (url "https://github.com/brummer10/GxSaturator.lv2")
3027 (commit commit)))
3028 (sha256
3029 (base32
d9f65bd3 3030 "1w4nvh0rmxrv3s3hmh4fs74f3hc0jn31v00j769j7v68mqr7kawy"))
664f677f
RW
3031 (file-name (string-append name "-" version "-checkout"))))
3032 (home-page "https://github.com/brummer10/GxSaturator.lv2")
3033 (synopsis "Saturation effect")
3034 (description "This package provides the LV2 plugin \"GxSaturator\", a
3035saturation effect."))))
89412238
RW
3036
3037(define-public gx-hyperion-lv2
4396e9b5
RW
3038 (package (inherit gx-guvnor-lv2)
3039 (name "gx-hyperion-lv2")
3040 (version "0.1")
3041 (source (origin
37519239
RW
3042 (method git-fetch)
3043 (uri (git-reference
3044 (url "https://github.com/brummer10/GxHyperion.lv2.git")
3045 (commit (string-append "v" version))))
3046 (file-name (string-append name "-" version "-checkout"))
4396e9b5
RW
3047 (sha256
3048 (base32
37519239 3049 "1vx79s6s9if117y2g0ppdja2sv2wcny6xcfl3j1z4cipahnildxf"))))
4396e9b5
RW
3050 (home-page "https://github.com/brummer10/GxHyperion.lv2")
3051 (synopsis "Simulation of the Hyperion Fuzz pedal")
3052 (description "This package provides the LV2 plugin \"GxHyperion\", a
3053simulation of the Hyperion Fuzz pedal.")))
32536f00
RW
3054
3055(define-public gx-voodoo-fuzz-lv2
cf44ebeb
RW
3056 (package (inherit gx-guvnor-lv2)
3057 (name "gx-voodoo-fuzz-lv2")
3058 (version "0.1")
3059 (source (origin
d42c6613
RW
3060 (method git-fetch)
3061 (uri (git-reference
3062 (url "https://github.com/brummer10/GxVoodoFuzz.lv2.git")
3063 (commit (string-append "v" version))))
3064 (file-name (string-append name "-" version "-checkout"))
cf44ebeb
RW
3065 (sha256
3066 (base32
d42c6613 3067 "1v0scphivri1fk4hl20j13f92i48mnx1zsil4hgnadsmm4nsfw43"))))
cf44ebeb
RW
3068 (home-page "https://github.com/brummer10/GxVoodoFuzz.lv2")
3069 (synopsis "Fuzz effect modelled after the Voodoo Lab SuperFuzz")
3070 (description "This package provides the LV2 plugin \"GxVoodooFuzz\", a
32536f00
RW
3071simulation modelled after the Voodoo Lab SuperFuzz pedal. It's basically a
3072Bosstone circuit, followed by the tone control of the FoxToneMachine in
cf44ebeb 3073parallel with a DarkBooster, followed by a volume control.")))
29f63222
RW
3074
3075(define-public gx-super-fuzz-lv2
34a3ecfe
RW
3076 (package (inherit gx-guvnor-lv2)
3077 (name "gx-super-fuzz-lv2")
3078 (version "0.1")
3079 (source (origin
5057535f
RW
3080 (method git-fetch)
3081 (uri (git-reference
3082 (url "https://github.com/brummer10/GxSuperFuzz.lv2.git")
3083 (commit (string-append "v" version))))
3084 (file-name (string-append name "-" version "-checkout"))
34a3ecfe
RW
3085 (sha256
3086 (base32
5057535f 3087 "1jlljd9hlgfflbiizq47lv1xbbgjyx3v835mf24zmh1q5zsw4np4"))))
34a3ecfe
RW
3088 (home-page "https://github.com/brummer10/GxSuperFuzz.lv2")
3089 (synopsis "Fuzz effect modelled after the UniVox SuperFuzz")
a6f39d7c 3090 (description "This package provides the LV2 plugin \"GxSuperFuzz\", an
29f63222 3091analog simulation of the UniVox SuperFuzz pedal. In this simulation the trim
d1e4ad1b 3092pot, which is usually in the housing, is exposed as a control parameter. It
34a3ecfe 3093adjusts the amount of harmonics.")))
40bffdfa
RW
3094
3095(define-public gx-vintage-fuzz-master-lv2
38050923
RW
3096 (package (inherit gx-guvnor-lv2)
3097 (name "gx-vintage-fuzz-master-lv2")
3098 (version "0.1")
3099 (source (origin
0febd673
RW
3100 (method git-fetch)
3101 (uri (git-reference
3102 (url "https://github.com/brummer10/GxVintageFuzzMaster.lv2.git")
3103 (commit (string-append "v" version))))
3104 (file-name (string-append name "-" version "-checkout"))
38050923
RW
3105 (sha256
3106 (base32
0febd673 3107 "02jb211z8rw2qr5r1z5mdxlqgiw6cbc319xpqplvn6k21c59mskv"))))
38050923
RW
3108 (home-page "https://github.com/brummer10/GxVintageFuzzMaster.lv2")
3109 (synopsis "Fuzz effect simulation of the vintage Fuzz Master")
3110 (description "This package provides the LV2 plugin
3111\"GxVintageFuzzMaster\", a simulation of the vintage Fuzz Master pedal.")))
631f8175
RW
3112
3113(define-public gx-slow-gear-lv2
d921a1f4
RW
3114 (let ((commit "5d37e775b0feef1d82feee94e2a7a2d7e57efe2d")
3115 (revision "3"))
ad67ca3d 3116 (package (inherit gx-vbass-preamp-lv2)
631f8175
RW
3117 (name "gx-slow-gear-lv2")
3118 (version (string-append "0-" revision "." (string-take commit 9)))
3119 (source (origin
3120 (method git-fetch)
3121 (uri (git-reference
3122 (url "https://github.com/brummer10/GxSlowGear.lv2")
3123 (commit commit)))
3124 (sha256
3125 (base32
d921a1f4 3126 "141mz69zkhk3lm54bb6wgpnghb92zm1ig7fv07240cmhydqji1q1"))
631f8175
RW
3127 (file-name (string-append name "-" version "-checkout"))))
3128 (home-page "https://github.com/brummer10/GxSlowGear.lv2")
3129 (synopsis "Slow gear audio effect")
3130 (description "This package provides the LV2 plugin \"GxSlowGear\", a
3131slow gear audio effect to produce volume swells."))))
d75e8f5a
RW
3132
3133(define-public gx-switchless-wah-lv2
cfcef2c2
RW
3134 (let ((commit "7b08691203314612999f0ce2328cdc1161cd6665")
3135 (revision "2"))
1b74b126 3136 (package (inherit gx-guvnor-lv2)
d75e8f5a
RW
3137 (name "gx-switchless-wah-lv2")
3138 (version (string-append "0-" revision "." (string-take commit 9)))
3139 (source (origin
3140 (method git-fetch)
3141 (uri (git-reference
3142 (url "https://github.com/brummer10/GxSwitchlessWah.lv2")
3143 (commit commit)))
3144 (sha256
3145 (base32
cfcef2c2 3146 "04jqfpncmrrqn34p21w4v9m2x5a5wsqwbm4f3byxvq4vcibwxzk2"))
d75e8f5a
RW
3147 (file-name (string-append name "-" version "-checkout"))))
3148 (home-page "https://github.com/brummer10/GxSwitchlessWah.lv2")
3149 (synopsis "Wah emulation with switchless activation")
3150 (description "This package provides the LV2 plugin \"GxSwitchlessWah\",
3151a simulation of an analog Wah pedal with switchless activation."))))
84d53724
RW
3152
3153(define-public mod-utilities
fe049d21
RW
3154 (let ((commit "80ea3ea9f52fab7f191671f4810bf90fc955a046")
3155 (revision "2"))
84d53724
RW
3156 (package
3157 (name "mod-utilities")
3158 (version (string-append "0-" revision "." (string-take commit 9)))
3159 (source (origin
3160 (method git-fetch)
3161 (uri (git-reference
3162 (url "https://github.com/moddevices/mod-utilities.git")
3163 (commit commit)))
fe049d21 3164 (file-name (string-append name "-" version "-checkout"))
84d53724
RW
3165 (sha256
3166 (base32
fe049d21 3167 "1v55zmzmlg0ka7341x5lsvb44amy17vk27s669ps1basd1bk5s5v"))))
84d53724
RW
3168 (build-system gnu-build-system)
3169 (arguments
3170 `(#:tests? #f ; there are no tests
3171 #:make-flags
3172 (list (string-append "INSTALL_PATH="
3173 (assoc-ref %outputs "out")
fe049d21
RW
3174 "/lib/lv2")
3175 (string-append "PREFIX=" (assoc-ref %outputs "out"))
3176 "CC=gcc")
84d53724
RW
3177 #:phases
3178 (modify-phases %standard-phases
3179 (delete 'configure))))
3180 (inputs
3181 `(("lv2" ,lv2)))
3182 (home-page "https://github.com/moddevices/mod-utilities")
3183 (synopsis "LV2 utility plugins")
3184 (description "This package provides LV2 audio utility plugins, such as
3185filters, crossovers, simple gain plugins without zipper noise, switch box
3186plugins, a switch trigger, a toggle switch, and a peakmeter.")
3187 (license license:gpl2+))))
d3db5efb 3188
951581a2 3189(define-public ingen
19748414
RW
3190 (let ((commit "cc4a4db33f4d126a07a4a498e053c5fb9a883be3")
3191 (revision "2"))
951581a2
RW
3192 (package
3193 (name "ingen")
3194 (version (string-append "0.0.0-" revision "."
3195 (string-take commit 9)))
3196 (source
3197 (origin
3198 (method git-fetch)
3199 (uri (git-reference
0d0252e4 3200 (url "https://git.drobilla.net/ingen.git")
951581a2
RW
3201 (commit commit)))
3202 (file-name (string-append name "-" version "-checkout"))
3203 (sha256
3204 (base32
19748414 3205 "1wg47vjw9djn99gbnsl2bcwj4xhdid61m4wrbn2nlp797flj91ic"))))
951581a2
RW
3206 (build-system waf-build-system)
3207 (arguments
3208 `(#:tests? #f ; no "check" target
3209 #:configure-flags (list "--no-webkit")
3210 #:phases
3211 (modify-phases %standard-phases
3212 (add-after 'unpack 'patch-wscript
3213 (lambda* (#:key outputs #:allow-other-keys)
3214 (let ((out (assoc-ref outputs "out")))
3215 (substitute* "wscript"
3216 ;; FIXME: Our version of lv2specgen.py does not behave as
3217 ;; expected. Maybe this requires a development version of
3218 ;; LV2.
3219 (("lv2specgen.py") "touch ingen.lv2/ingen.html; echo")
3220 ;; Add libraries to RUNPATH.
3221 (("^(.+)target.*= 'src/ingen/ingen'," line prefix)
3222 (string-append prefix
3223 "linkflags=[\"-Wl,-rpath="
3224 out "/lib" "\"]," line)))
3225 (substitute* '("src/wscript"
3226 "src/server/wscript")
3227 ;; Add libraries to RUNPATH.
3228 (("bld.env.PTHREAD_LINKFLAGS" line)
3229 (string-append line
3230 " + [\"-Wl,-rpath=" out "/lib" "\"]")))
3231 (substitute* "src/client/wscript"
3232 ;; Add libraries to RUNPATH.
3233 (("^(.+)target.*= 'ingen_client'," line prefix)
3234 (string-append prefix
3235 "linkflags=[\"-Wl,-rpath="
3236 out "/lib" "\"]," line)))
3237 (substitute* "src/gui/wscript"
3238 ;; Add libraries to RUNPATH.
3239 (("^(.+)target.* = 'ingen_gui.*" line prefix)
3240 (string-append prefix
3241 "linkflags=[\"-Wl,-rpath="
3242 out "/lib" "\"]," line))))
3243 #t)))))
3244 (inputs
3245 `(("boost" ,boost)
3246 ("python-rdflib" ,python-rdflib)
3247 ("python" ,python)
3248 ("jack" ,jack-1)
19748414 3249 ("lv2" ,lv2-devel)
951581a2
RW
3250 ("lilv" ,lilv)
3251 ("raul" ,raul-devel)
3252 ("ganv" ,ganv-devel)
3253 ("suil" ,suil)
3254 ("serd" ,serd)
3255 ("sord" ,sord)
3256 ("sratom" ,sratom)
3257 ("gtkmm" ,gtkmm-2)))
3258 (native-inputs
3259 `(("pkg-config" ,pkg-config)
3260 ("python-pygments" ,python-pygments)))
0d0252e4 3261 (home-page "https://drobilla.net/software/ingen")
951581a2
RW
3262 (synopsis "Modular audio processing system")
3263 (description "Ingen is a modular audio processing system for JACK and
3264LV2 based systems. Ingen is built around LV2 technology and a strict
3265separation of engine from user interface. The engine is controlled
3266exclusively through a protocol, and can execute as a headless process, with an
3267in-process GUI, or as an LV2 plugin. The GUI can run as a program which
3268communicates over a Unix or TCP/IP socket, or as an embeddable LV2 GUI which
3269communicates via LV2 ports. Any saved Ingen graph can be loaded as an LV2
3270plugin on any system where Ingen is installed. This allows users to visually
3271develop custom plugins for use in other applications without programming.")
3272 (license license:agpl3+))))
3273
b3410b44
RW
3274(define-public qmidiarp
3275 (package
3276 (name "qmidiarp")
b6313997 3277 (version "0.6.5")
b3410b44
RW
3278 (source (origin
3279 (method url-fetch)
3280 (uri (string-append "mirror://sourceforge/qmidiarp/qmidiarp/"
3281 version "/qmidiarp-" version ".tar.bz2"))
3282 (sha256
3283 (base32
b6313997 3284 "043yh1p0rrbj1v840y27529m9260g55gvh1km8az4jxy7mns58r2"))))
b3410b44
RW
3285 (build-system gnu-build-system)
3286 (arguments
3287 `(#:configure-flags
3288 (list "--enable-qt5"
3289 "CXXFLAGS=-std=gnu++11")))
3290 (inputs
3291 `(("qtbase" ,qtbase)
3292 ("alsa-lib" ,alsa-lib)
3293 ("jack" ,jack-1)
3294 ("liblo" ,liblo)
3295 ("lv2" ,lv2)))
3296 (native-inputs
3297 `(("pkg-config" ,pkg-config)
3298 ("qttools" ,qttools)))
3299 (home-page "http://qmidiarp.sourceforge.net/")
3300 (synopsis "MIDI arpeggiator")
3301 (description "QMidiArp is an advanced MIDI arpeggiator, programmable step
3302sequencer and LFO. It can hold any number of arpeggiator, sequencer, or LFO
3303modules running in parallel.")
3304 (license license:gpl2+)))
3305
ff49437d
RW
3306(define-public qmidiroute
3307 (package
3308 (name "qmidiroute")
3309 (version "0.4.0")
3310 (source (origin
3311 (method url-fetch)
3312 (uri (string-append "mirror://sourceforge/alsamodular/QMidiRoute/"
3313 version "/qmidiroute-" version ".tar.bz2"))
3314 (sha256
3315 (base32
3316 "19v1ppbglgl3z9v7xdqc0k33w71cqq8a7d6ihvfs7iz77dygrih9"))))
3317 (build-system gnu-build-system)
3318 (arguments
3319 `(#:configure-flags
3320 (list "--enable-qt5"
3321 "CXXFLAGS=-std=gnu++11")))
3322 (inputs
3323 `(("qtbase" ,qtbase)
3324 ("alsa-lib" ,alsa-lib)))
3325 (native-inputs
3326 `(("pkg-config" ,pkg-config)
3327 ("qttools" ,qttools)))
3328 (home-page "http://alsamodular.sourceforge.net/")
3329 (synopsis "MIDI event router and filter")
3330 (description "QMidiRoute is a MIDI event router and filter. MIDI note,
3331control change, program change and pitch bend events are logged, and can be
3332filtered, redirected and transformed into other events according to MIDI maps
3333defined as tabs in the main control surface.")
3334 (license license:gpl2+)))
3335
5a66e25c
RW
3336(define-public seq24
3337 (package
3338 (name "seq24")
3339 (version "0.9.3")
3340 (source (origin
3341 (method url-fetch)
3342 (uri (string-append "https://launchpad.net/seq24/trunk/"
3343 version "/+download/seq24-"
3344 version ".tar.bz2"))
3345 (sha256
3346 (base32
3347 "12dphdhnvfk1k0vmagi1v2lhyxjyj1j3cz6ksjw0ydcvid1x8ap2"))
3348 (patches (search-patches "seq24-rename-mutex.patch"))))
3349 (build-system gnu-build-system)
3350 (arguments
3351 `(#:configure-flags
3352 (list "CXXFLAGS=-std=gnu++11")))
3353 (inputs
3354 `(("gtkmm" ,gtkmm-2)
3355 ("alsa-lib" ,alsa-lib)
3356 ("jack" ,jack-1)
3357 ("lash" ,lash)))
3358 (native-inputs
3359 `(("pkg-config" ,pkg-config)))
3360 (home-page "https://edge.launchpad.net/seq24/")
3361 (synopsis "Real-time MIDI sequencer")
3362 (description "Seq24 is a real-time MIDI sequencer. It was created to
3363provide a very simple interface for editing and playing MIDI loops.")
3364 (license license:gpl2+)))
3365
d3db5efb
LF
3366(define-public python-discogs-client
3367 (package
3368 (name "python-discogs-client")
3369 (version "2.2.1")
3370 (source (origin
3371 (method url-fetch)
3372 (uri (pypi-uri "discogs-client" version))
3373 (sha256
3374 (base32
3375 "053ld2psh0yj3z0kg6z5bn4y3cr562m727494n0ayhgzbkjbacly"))))
3376 (build-system python-build-system)
3377 (propagated-inputs
3378 `(("python-oauthlib" ,python-oauthlib)
3379 ("python-requests" ,python-requests)))
3380 (native-inputs
3381 `(("python-six" ,python-six)))
3382 (home-page "https://github.com/discogs/discogs_client")
3383 (synopsis "Official Python client for the Discogs API")
3384 (description "This is the official Discogs API client for Python. It enables
3385you to query the Discogs database for information on artists, releases, labels,
3386users, Marketplace listings, and more. It also supports OAuth 1.0a
3387authorization, which allows you to change user data such as profile information,
3388collections and wantlists, inventory, and orders.")
80983df3 3389 (license license:bsd-2)))
d3db5efb
LF
3390
3391(define-public python2-discogs-client
80983df3 3392 (package-with-python2 python-discogs-client))
a4f05b46 3393
3394(define-public libsmf
3395 (package
3396 (name "libsmf")
3397 (version "1.3")
3398 (source
3399 (origin
3400 (method url-fetch)
3401 ;; SF download page says development moved, but the link it points to
3402 ;; is gone (https://github.com/nilsgey/libsmf). Someone else adopted
3403 ;; it but made no release so far (https://github.com/stump/libsmf).
3404 (uri (string-append "mirror://sourceforge/libsmf/libsmf/"
3405 version "/libsmf-" version ".tar.gz"))
3406 (sha256
3407 (base32
3408 "16c0n40h0r56gzbh5ypxa4dwp296dan3jminml2qkb4lvqarym6k"))))
3409 (build-system gnu-build-system)
3410 (outputs '("out"
3411 "static")) ; 88KiB of .a files
3412 (arguments
3413 `(#:phases
3414 (modify-phases %standard-phases
3415 (add-after 'install 'move-static-libraries
3416 (lambda* (#:key outputs #:allow-other-keys)
3417 ;; Move static libraries to the "static" output.
3418 (let* ((out (assoc-ref outputs "out"))
3419 (lib (string-append out "/lib"))
3420 (static (assoc-ref outputs "static"))
3421 (slib (string-append static "/lib")))
3422 (mkdir-p slib)
3423 (for-each (lambda (file)
3424 (install-file file slib)
3425 (delete-file file))
3426 (find-files lib "\\.a$"))
3427 #t))))))
3428 (inputs
3429 `(("readline" ,readline)
3430 ("glib" ,glib)))
3431 (native-inputs
3432 `(("doxygen" ,doxygen)
3433 ("pkg-config" ,pkg-config)))
3434 (home-page "http://libsmf.sourceforge.net/")
3435 (synopsis "Standard MIDI File format library")
3436 (description
3437 "LibSMF is a C library for handling SMF (\"*.mid\") files. It transparently handles
3438conversions between time and pulses, tempo map handling and more. The only dependencies
3439are a C compiler and glib. Full API documentation and examples are included.")
3440 (license license:bsd-2)))
a42619e5
RF
3441
3442(define-public lmms
3443 (package
3444 (name "lmms")
3445 (version "1.1.3")
3446 (source
3447 (origin
3448 (method url-fetch)
3449 (uri (string-append "https://github.com/LMMS/lmms/archive/v"
3450 version ".tar.gz"))
3451 (file-name (string-append name "-" version ".tar.gz"))
3452 (sha256
3453 (base32
3454 "1g76z7ha3hd53vbqaq9n1qg6s3lw8zzaw51iny6y2bz0j1xqwcsr"))))
3455 (build-system cmake-build-system)
3456 (arguments
3457 `(#:tests? #f ; no tests
3458 #:phases
3459 (modify-phases %standard-phases
ab2ccf4c
KK
3460 (add-before 'configure 'set-ldflags
3461 (lambda* (#:key outputs #:allow-other-keys)
3462 (setenv "LDFLAGS"
3463 (string-append
3464 "-Wl,-rpath=\""
3465 (assoc-ref outputs "out") "/lib/lmms"
3466 ":"
3467 (assoc-ref outputs "out") "/lib/lmms/ladspa"
3468 "\""))
3469 #t))
3470 (add-before 'configure 'remove-Werror
3471 (lambda _
3472 (substitute* "CMakeLists.txt"
3473 (("SET\\(WERROR_FLAGS \"\\$\\{WERROR_FLAGS\\} -Werror")
3474 "SET(WERROR_FLAGS \"${WERROR_FLAGS}"))
3475 #t))
3476 (add-before 'reset-gzip-timestamps 'make-manpages-writable
3477 (lambda* (#:key outputs #:allow-other-keys)
3478 (map (lambda (file)
3479 (make-file-writable file))
3480 (find-files (string-append (assoc-ref outputs "out")
3481 "/share/man")
3482 ".*\\.gz$"))
3483 #t)))))
a42619e5
RF
3484 (native-inputs
3485 `(("pkg-config" ,pkg-config)))
3486 (inputs
3487 `(("sdl" ,sdl)
3488 ("qt" ,qt-4)
3489 ("fltk" ,fltk)
3490 ("libogg" ,libogg)
3491 ("libsamplerate" ,libsamplerate)
3492 ("fluidsynth" ,fluidsynth)
3493 ("libvorbis" ,libvorbis)
3494 ("alsa-lib" ,alsa-lib)
3495 ("portaudio" ,portaudio)
3496 ("ladspa" ,ladspa)
3497 ("libsndfile1" ,libsndfile)
3498 ("libxft" ,libxft)
3499 ("freetype2" ,freetype)
3500 ("fftw3f" ,fftwf)))
3501 (home-page "https://lmms.io/")
3502 (synopsis "Music composition tool")
3503 (description "LMMS is a digital audio workstation. It includes tools for sequencing
3504melodies and beats and for mixing and arranging songs. LMMS includes instruments based on
3505audio samples and various soft sythesizers. It can receive input from a MIDI keyboard.")
3506 (license license:gpl2+)))
a7a7186c
NG
3507
3508(define-public musescore
3509 (package
3510 (name "musescore")
ce9ae8a1 3511 (version "2.2.1")
a7a7186c
NG
3512 (source (origin
3513 (method url-fetch)
3514 (uri (string-append
3515 "https://github.com/musescore/MuseScore/archive/"
3516 "v" version ".tar.gz"))
3517 (file-name (string-append name "-" version ".tar.gz"))
3518 (sha256
3519 (base32
ce9ae8a1 3520 "1ml99ayzpdyd18cypcp0lbsbasfg3abw57i5fl7ph5739vikj6i6"))
a7a7186c
NG
3521 (modules '((guix build utils)))
3522 (snippet
3523 ;; Un-bundle OpenSSL and remove unused libraries.
3524 '(begin
3525 (substitute* "thirdparty/kQOAuth/CMakeLists.txt"
3526 (("-I \\$\\{PROJECT_SOURCE_DIR\\}/thirdparty/openssl/include ")
3527 ""))
3528 (substitute* "thirdparty/kQOAuth/kqoauthutils.cpp"
3529 (("#include <openssl/.*") ""))
3530 (for-each delete-file-recursively
3531 '("thirdparty/freetype"
3532 "thirdparty/openssl"
3533 "thirdparty/portmidi"))
3534 #t))))
3535 (build-system gnu-build-system)
3536 (arguments
3537 `(#:make-flags
b3891a25
NG
3538 `(,(string-append "PREFIX=" (assoc-ref %outputs "out"))
3539 "USE_SYSTEM_FREETYPE=ON"
1bfde769
NG
3540 "DOWNLOAD_SOUNDFONT=OFF"
3541 ;; The following is not supported since Qt 5.11. Can be
3542 ;; removed in Musescore 2.2.2+.
3543 "BUILD_WEBKIT=OFF")
a7a7186c
NG
3544 ;; There are tests, but no simple target to run. The command
3545 ;; used to run them is:
3546 ;;
3547 ;; make debug && sudo make installdebug && cd \
3548 ;; build.debug/mtest && make && ctest
3549 ;;
3550 ;; Basically, it requires to start a whole new build process.
3551 ;; So we simply skip them.
3552 #:tests? #f
3553 #:phases
3554 (modify-phases %standard-phases
1bfde769
NG
3555 ;; Fix Qt 5.11 upgrade. Should be fixed in 2.2.2+, see:
3556 ;; <https://github.com/musescore/MuseScore/commit/d10e70415c8e52e2ba9d45de564467e42f66c102>
3557 (add-after 'unpack 'patch-sources
3558 (lambda _
3559 (substitute* "all.h"
3560 (("#include <QRadioButton>") "#include <QRadioButton>
3561#include <QButtonGroup>"))
3562 #t))
b3891a25 3563 (delete 'configure))))
a7a7186c
NG
3564 (inputs
3565 `(("alsa-lib" ,alsa-lib)
3566 ("freetype" ,freetype)
3567 ("gtk+-bin" ,gtk+ "bin") ;for gtk-update-icon-cache
3568 ("jack" ,jack-1)
3569 ("lame" ,lame)
3570 ("libogg" ,libogg)
3571 ("libsndfile" ,libsndfile)
3572 ("libvorbis" ,libvorbis)
3573 ("portaudio" ,portaudio)
b3891a25 3574 ("portmidi" ,portmidi)
a7a7186c
NG
3575 ("pulseaudio" ,pulseaudio)
3576 ("qtbase" ,qtbase)
3577 ("qtdeclarative" ,qtdeclarative)
3578 ("qtscript" ,qtscript)
3579 ("qtsvg" ,qtsvg)
a7a7186c
NG
3580 ("qtxmlpatterns" ,qtxmlpatterns)))
3581 (native-inputs
3582 `(("cmake" ,cmake)
3583 ("pkg-config" ,pkg-config)
3584 ("qttools" ,qttools)))
3585 (synopsis "Music composition and notation software")
3586 (description "MuseScore is a music score typesetter. Its main purpose is
3587the creation of high-quality engraved musical scores in a WYSIWYG environment.
3588
3589It supports unlimited staves, linked parts and part extraction, tablature,
3590MIDI input, percussion notation, cross-staff beaming, automatic transposition,
3591lyrics (multiple verses), fretboard diagrams, and in general everything
3592commonly used in sheet music. Style options and style sheets to change the
3593appearance and layout are provided.
3594
3595MuseScore can also play back scores through the built-in sequencer and SoundFont
3596sample library.")
3597 (home-page "https://musescore.org")
3598 (license license:gpl2)))
2434f5ce 3599
43188faf
RW
3600(define-public muse-sequencer
3601 (package
3602 (name "muse-sequencer")
3603 (version "3.0.0")
3604 (source (origin
3605 (method git-fetch)
3606 (uri (git-reference
3607 (url "https://github.com/muse-sequencer/muse.git")
3608 (commit (string-append "muse_"
3609 (string-map (lambda (c)
3610 (if (char=? c #\.)
3611 #\_ c)) version)))))
3612 (file-name (string-append name "-" version "-checkout"))
3613 (sha256
3614 (base32
3615 "1nninz8qyqlxxjdnrm79y3gr3056pga9l2fsqh674jd3cjvafya3"))))
3616 (build-system cmake-build-system)
3617 (arguments
3618 `(#:tests? #f ; there is no test target
3619 #:configure-flags
3620 (list "-DENABLE_LV2_SUPPLIED=OFF"
3621 "-DENABLE_RTAUDIO=OFF" ; FIXME: not packaged
3622 "-DENABLE_INSTPATCH=OFF" ; FIXME: not packaged
3623 "-DENABLE_VST_NATIVE=OFF")
3624 #:phases
3625 (modify-phases %standard-phases
3626 (add-after 'unpack 'chdir
3627 (lambda _ (chdir "muse3"))))))
3628 (inputs
3629 `(("alsa-lib" ,alsa-lib)
3630 ("lash" ,lash)
3631 ("jack" ,jack-1)
3632 ("liblo" ,liblo)
3633 ("dssi" ,dssi)
3634 ("ladspa" ,ladspa)
3635 ("lv2" ,lv2)
3636 ("lilv" ,lilv)
3637 ("sord" ,sord)
3638 ("libsndfile" ,libsndfile)
3639 ("libsamplerate" ,libsamplerate)
3640 ("fluidsynth" ,fluidsynth)
3641 ("pcre" ,pcre)
3642 ("qtbase" ,qtbase)
3643 ("qtsvg" ,qtsvg)))
3644 (native-inputs
3645 `(("pkg-config" ,pkg-config)
3646 ("qttools" ,qttools)))
3647 (home-page "http://muse-sequencer.org")
3648 (synopsis "MIDI/Audio sequencer")
3649 (description "MusE is a MIDI/Audio sequencer with recording and editing
3650capabilities. Its audio sequencer supports the LADSPA, DSSI, and LV2 audio
3651plugin formats; the MIDI sequencer provides a piano roll, a drum editor, a
3652list view, and a score editor. MusE aims to be a complete multitrack virtual
3653studio.")
3654 (license license:gpl2+)))
3655
2434f5ce
DM
3656(define-public dssi
3657 (package
3658 (name "dssi")
3659 (version "1.1.1")
3660 (source (origin
3661 (method url-fetch)
3662 (uri (string-append
3663 "mirror://sourceforge/dssi/dssi/" version
3664 "/dssi-" version ".tar.gz"))
3665 (sha256
3666 (base32
3667 "0kl1hzhb7cykzkrqcqgq1dk4xcgrcxv0jja251aq4z4l783jpj7j"))))
3668 (build-system gnu-build-system)
3669 (inputs
3670 `(("alsa-lib" ,alsa-lib)
0e78801a 3671 ("jack" ,jack-1)
2434f5ce
DM
3672 ("ladspa" ,ladspa)
3673 ("libsamplerate" ,libsamplerate)
3674 ("libsndfile" ,libsndfile)
3675 ("liblo" ,liblo)))
3676 (native-inputs
3677 `(("pkg-config" ,pkg-config)))
3678 (synopsis "Audio plugin API for soft synths and effects")
3679 (description "DSSI is a plugin API for software instruments with user
3680interfaces, permitting them to be hosted in-process by audio applications.
3681It is intended to be simple, GUI-toolkit-agnostic, and slightly biased
3682towards familiarity with MIDI. The DSSI distribution package contains
3683a JACK/ALSA-sequencer reference host and some plugins as well as the
3684specification and header.")
3685 (home-page "http://dssi.sourceforge.net/")
3686 ;; The DSSI interface is LGPL2.1+, some tests and examples are GPL2+.
3687 ;; The vast majority of examples are in the public domain.
3688 (license (list license:lgpl2.1+ license:gpl2+))))
9bc38f28
DM
3689
3690(define-public rosegarden
3691 (package
3692 (name "rosegarden")
3693 (version "17.04")
3694 (source (origin
3695 (method url-fetch)
3696 (uri (string-append
3697 "mirror://sourceforge/rosegarden/rosegarden/"
3698 version "/rosegarden-" version ".tar.bz2"))
3699 (sha256
3700 (base32
3701 "1khfcj22asdhjh0jvhkqsz200wgmigkhsrcz09ffia5hqm0n32lq"))))
3702 (build-system cmake-build-system)
3703 (arguments
3704 `(#:configure-flags '("-DUSE_QT5=1") ; "-DCMAKE_BUILD_TYPE=Release"
3705 #:phases
3706 (modify-phases %standard-phases
3707 (add-after 'unpack 'patch-tests
3708 (lambda _
3709 (substitute* "CMakeLists.txt"
3710 (("BUILD_TESTING OFF") "BUILD_TESTING ON")
3711 ;; Make tests work.
3712 ((" -fvisibility=hidden") ""))
3713 #t))
3714 (add-after 'unpack 'fix-references
3715 (lambda* (#:key inputs #:allow-other-keys)
3716 (substitute* "src/gui/general/ProjectPackager.cpp"
3717 (("\"flac\\>")
3718 (string-append "\"" (assoc-ref inputs "flac") "/bin/flac"))
3719 (("\"wavpack\\>")
3720 (string-append "\"" (assoc-ref inputs "wavpack") "/bin/wavpack"))
3721 (("\"wvunpack\\>")
3722 (string-append "\"" (assoc-ref inputs "wavpack") "/bin/wvunpack"))
3723 (("\"bash\\>")
3724 (string-append "\"" (assoc-ref inputs "bash") "/bin/bash"))
3725 (("\"tar\\>")
3726 (string-append "\"" (assoc-ref inputs "tar") "/bin/tar")))
3727 (substitute* "src/gui/general/LilyPondProcessor.cpp"
3728 (("\"convert-ly\\>")
3729 (string-append "\"" (assoc-ref inputs "lilypond") "/bin/convert-ly"))
3730 (("\"lilypond\\>")
3731 (string-append "\"" (assoc-ref inputs "lilypond") "/bin/lilypond")))
3732 #t))
3733 (add-after 'unpack 'make-reproducible
3734 (lambda _
3735 ;; Prevent Last-Modified from being written.
3736 ;; The "*.qm" files that are used in locale.qrc would have a new
3737 ;; mtime otherwise that is written into qrc_locale.cpp in the
3738 ;; end - except when we disable it.
3739 (substitute* "src/CMakeLists.txt"
3740 (("COMMAND [$][{]QT_RCC_EXECUTABLE[}]")
3741 "COMMAND ${QT_RCC_EXECUTABLE} --format-version 1")
3742 ;; Extraneous.
3743 ;(("qt5_add_resources[(]rg_SOURCES ../data/data.qrc[)]")
3744 ; "qt5_add_resources(rg_SOURCES ../data/data.qrc OPTIONS --format-version 1)")
3745 )
3746 ;; Make hashtable traversal order predicable.
3747 (setenv "QT_RCC_TEST" "1") ; important
3748 #t))
3749 (add-before 'check 'prepare-check
3750 (lambda _
3751 (setenv "QT_QPA_PLATFORM" "offscreen")
3752 ;; Tests create files in $HOME/.local/share/rosegarden .
3753 (mkdir-p "/tmp/foo")
3754 (setenv "HOME" "/tmp/foo")
3755 #t)))))
3756 (inputs
3757 `(("alsa-lib" ,alsa-lib)
3758 ("bash" ,bash)
3759 ("dssi" ,dssi)
3760 ("flac" ,flac)
3761 ("fftwf" ,fftwf)
b94f250e 3762 ("jack" ,jack-1)
9bc38f28
DM
3763 ("ladspa" ,ladspa)
3764 ("liblo" ,liblo)
3765 ("libsamplerate" ,libsamplerate)
3766 ("lilypond" ,lilypond)
3767 ("lrdf" ,lrdf)
3768 ("qtbase" ,qtbase)
3769 ("tar" ,tar)
3770 ("lirc" ,lirc)
3771 ("wavpack" ,wavpack)
3772 ("zlib" ,zlib)))
3773 (native-inputs
3774 `(("pkg-config" ,pkg-config)
3775 ("qtlinguist" ,qttools)))
3776 (synopsis "Music composition and editing environment based around a MIDI
3777sequencer")
3778 (description "Rosegarden is a music composition and editing environment
3779based around a MIDI sequencer that features a rich understanding of music
3780notation and includes basic support for digital audio.")
3781 (home-page "http://www.rosegardenmusic.com/")
3782 (license license:gpl2)))
30655652 3783
643817e4 3784(define-public patchmatrix
2394afa4
RW
3785 ;; There have been no releases for more than a year.
3786 (let ((commit "a0b0b1e791f4574d5abd059cfe1819c71e8b18d5")
3787 (revision "1"))
3788 (package
3789 (name "patchmatrix")
3790 (version (git-version "0.12.0" revision commit))
3791 (source (origin
3792 (method git-fetch)
3793 (uri (git-reference
3794 (url "https://github.com/OpenMusicKontrollers/patchmatrix.git")
3795 (commit commit)))
3796 (file-name (string-append "patchmatrix-" version "-checkout"))
3797 (sha256
3798 (base32
3799 "0pph4ra7aci3rbpqvvr564pi16vxrk448bmvp8985cd9lbjlrp3m"))))
3800 (build-system meson-build-system)
3801 (arguments
3802 '(#:tests? #f ; no test target
3803 #:phases
3804 (modify-phases %standard-phases
3805 (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
3806 (lambda* (#:key outputs #:allow-other-keys)
3807 (map make-file-writable
3808 (find-files (assoc-ref outputs "out") ".*\\.gz$"))
3809 #t)))))
3810 (inputs
3811 `(("jack" ,jack-1)
3812 ("lv2" ,lv2)
3813 ("mesa" ,mesa)))
3814 (native-inputs
3815 `(("pkg-config" ,pkg-config)))
3816 (home-page "https://github.com/OpenMusicKontrollers/patchmatrix")
3817 (synopsis "Simple JACK patch bay")
3818 (description "PatchMatrix is a patch bay for the JACK audio connection
643817e4
RW
3819kit. It provides a patch bay in flow matrix style for audio, MIDI, CV, and
3820OSC connections.")
2394afa4 3821 (license license:artistic2.0))))
643817e4 3822
30655652
RW
3823(define-public sorcer
3824 (package
3825 (name "sorcer")
3826 (version "1.1.3")
3827 (source (origin
3828 (method url-fetch)
3829 (uri (string-append "https://github.com/openAVproductions/"
3830 "openAV-Sorcer/archive/release-"
3831 version ".tar.gz"))
3832 (file-name (string-append name "-" version ".tar.gz"))
3833 (sha256
3834 (base32
3835 "07iyqj28wm0xc4arrq893bm12xjpz65db7ynrlmf6w8krg8wjmd0"))))
3836 (build-system cmake-build-system)
3837 (arguments
3838 `(#:tests? #f ; no tests included
3839 #:phases
3840 (modify-phases %standard-phases
e5af1f4a
EF
3841 (add-after 'unpack 'remove-architecture-specific-flags
3842 (lambda _
3843 (substitute* "CMakeLists.txt"
3844 (("-msse2 -mfpmath=sse") ""))
3845 #t))
30655652
RW
3846 (add-after 'unpack 'build-faust-sources
3847 (lambda* (#:key inputs #:allow-other-keys)
3848 (with-directory-excursion "faust"
3849 (delete-file "main.cpp")
3850 (zero? (system* "faust" "-i"
3851 "-a" "lv2synth.cpp"
3852 "-o" "main.cpp" "main.dsp"))))))))
3853 (inputs
3854 `(("boost" ,boost)
3855 ("lv2" ,lv2)
3856 ("ntk" ,ntk)))
3857 (native-inputs
3858 `(("faust" ,faust)
3859 ("pkg-config" ,pkg-config)))
3860 (home-page "http://openavproductions.com/sorcer/")
3861 (synopsis "Wavetable LV2 plugin synth")
3862 (description "Sorcer is a wavetable LV2 plugin synthesizer, targeted at
3863the electronic or dubstep genre.")
3864 (license license:gpl3+)))
60b7ed9c 3865
43925703
PL
3866(define-public libmygpo-qt
3867 (package
3868 (name "libmygpo-qt")
d09e31bd 3869 (version "1.1.0")
43925703
PL
3870 (source (origin
3871 (method url-fetch)
3872 (uri (string-append "http://stefan.derkits.at/files/"
3873 "libmygpo-qt/libmygpo-qt." version ".tar.gz"))
3874 (sha256
3875 (base32
01c48690
PL
3876 "1kg18qrq2rsswgzhl65r3mlyx7kpqg4wwnbp4yiv6svvmadmlxl2"))
3877 (patches (search-patches "libmygpo-qt-fix-qt-5.11.patch"
3878 "libmygpo-qt-missing-qt5-modules.patch"))))
43925703 3879 (build-system cmake-build-system)
43925703
PL
3880 (native-inputs
3881 `(("pkg-config" ,pkg-config)))
3882 (inputs
3883 `(("qt" ,qtbase)))
01c48690
PL
3884 (arguments
3885 `(#:configure-flags '("-DMYGPO_BUILD_TESTS=ON")
3886 ;; TODO: Enable tests when https://github.com/gpodder/gpodder/issues/446
3887 ;; is fixed.
3888 #:tests? #f))
43925703
PL
3889 (home-page "http://wiki.gpodder.org/wiki/Libmygpo-qt")
3890 (synopsis "Qt/C++ library wrapping the gpodder web service")
3891 (description "@code{libmygpo-qt} is a Qt/C++ library wrapping the
3892@url{https://gpodder.net} APIs. It allows applications to discover, manage
3893and track podcasts.")
3894 (license license:lgpl2.1+)))
f7ce2134
RW
3895
3896(define-public sonivox-eas
3897 (package
3898 (name "sonivox-eas")
3899 (version "1.1.0")
3900 (source (origin
3901 (method git-fetch)
3902 (uri (git-reference
3903 (url "https://github.com/pedrolcl/Linux-SonivoxEas.git")
3904 (commit (string-append "v" version))))
3905 (file-name (string-append name "-" version "-checkout"))
3906 (sha256
3907 (base32
3908 "0l9gs00p5g4k4qy6i7nv1mfi2n2wnsycwjrgrh9hxzam4irf2mw2"))))
3909 (build-system cmake-build-system)
3910 (arguments '(#:tests? #f)) ; there are no tests
3911 (inputs
3912 `(("alsa-lib" ,alsa-lib)
3913 ("drumstick" ,drumstick)
3914 ("pulseaudio" ,pulseaudio)
3915 ("qtbase" ,qtbase)))
3916 (native-inputs
3917 `(("pkg-config" ,pkg-config)))
3918 (home-page "https://github.com/pedrolcl/Linux-SonivoxEas")
3919 (synopsis "MIDI synthesizer library")
3920 (description "This project is a real time General MIDI synthesizer based
3921on the Sonivox EAS Synthesizer by Google. It does not need external
3922soundfonts, using embedded samples instead.")
3923 ;; Sonivox is released under the ASL2.0; the rest of the code is under
3924 ;; GPLv2+.
3925 (license (list license:gpl2+ license:asl2.0))))
92b36e3a
RW
3926
3927(define-public whysynth
3928 (package
3929 (name "whysynth")
3930 (version "20170701")
3931 (source (origin
3932 (method url-fetch)
3933 (uri (string-append "http://smbolton.com/whysynth/whysynth-"
3934 version ".tar.bz2"))
3935 (sha256
3936 (base32
3937 "02qbn0hbvn1iym4zxv35b201blg31yjpgh71h8db0j5zls2xc0m6"))))
3938 (build-system gnu-build-system)
3939 (inputs
3940 `(("dssi" ,dssi)
3941 ("liblo" ,liblo)
3942 ("fftwf" ,fftwf)
3943 ("gtk+" ,gtk+-2)
3944 ("ladspa" ,ladspa)
3945 ("alsa-lib" ,alsa-lib)))
3946 (native-inputs
3947 `(("pkg-config" ,pkg-config)))
3948 (home-page "http://smbolton.com/whysynth.html")
3949 (synopsis "DSSI software synthesizer")
3950 (description "WhySynth is a versatile softsynth which operates as a plugin
3951for the DSSI Soft Synth Interface. A brief list of features:
3952
3953@enumerate
3954@item 4 oscillators, 2 filters, 3 LFOs, and 5 envelope generators per voice.
3955@item 11 oscillator modes: minBLEP, wavecycle, chorused wavecycle,
3956 asynchronous granular, three FM modes, waveshaper, noise, PADsynth, and phase
3957 distortion.
3958@item 10 filter modes.
3959@item flexible modulation and mixdown options, plus effects.
3960@end enumerate
3961")
3962 (license license:gpl2+)))
6b445c57 3963
3964(define-public libdiscid
3965 (package
3966 (name "libdiscid")
3967 (version "0.6.2")
3968 (source
3969 (origin
3970 (method url-fetch)
3971 (uri (string-append
3972 "http://ftp.musicbrainz.org/pub/musicbrainz/libdiscid/libdiscid-"
3973 version ".tar.gz"))
3974 (sha256
3975 (base32
3976 "1f9irlj3dpb5gyfdnb1m4skbjvx4d4hwiz2152f83m0d9jn47r7r"))))
3977 (arguments `(#:test-target "check"))
3978 (build-system cmake-build-system)
3979 (home-page "https://musicbrainz.org/doc/libdiscid")
3980 (synopsis "Disc id reader library")
3981 (description "libdiscid is a C library for creating MusicBrainz and freedb
3982disc IDs from audio CDs. It reads a CD's table of contents (TOC) and generates
3983an identifier which can be used to lookup the CD at MusicBrainz. Additionally,
3984it provides a submission URL for adding the disc ID to the database and gathers
3985ISRCs and the MCN (=UPC/EAN) from disc.")
3986 (license license:lgpl2.1+)))
1ea29aa0 3987
3988(define-public libmusicbrainz
3989 (package
3990 (name "libmusicbrainz")
3991 (version "5.1.0")
3992 (source
3993 (origin
3994 (method url-fetch)
3995 (uri (string-append
3996 "https://github.com/metabrainz/libmusicbrainz/releases/download/release-"
3997 version "/libmusicbrainz-" version ".tar.gz"))
3998 (sha256
3999 (base32
8c71a52c 4000 "0ikb9igyyk28jm34raxfzkw2qyn4nzzwsymdyprp7cmvi6g2ajb7"))))
1ea29aa0 4001 (build-system cmake-build-system)
4002 (arguments `(#:phases
4003 (modify-phases %standard-phases
4004 (replace 'check
4005 (lambda _
4006 (and
4007 ;; requires network connections
4008 ;; (zero? (system* "tests/mbtest"))
4009 (zero? (system* "tests/ctest"))))))))
4010 (inputs `(("neon" ,neon)
4011 ("libxml2" ,libxml2)))
4012 (native-inputs `(("pkg-config" ,pkg-config)))
4013 (home-page "https://musicbrainz.org/doc/libmusicbrainz")
4014 (synopsis "MusicBrainz client library")
4015 (description "The MusicBrainz Client Library (libmusicbrainz), also known as
4016mb_client, is a development library geared towards developers who wish to add
4017MusicBrainz lookup capabilities to their applications.")
4018 (license license:lgpl2.1+)))