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