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