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