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