gnu: yoshimi: Update to 1.6.0.
[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")
d7495560 2010 (version "1.1.2")
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
d7495560 2017 "0kljqyqj7s1i2z52i24x7ail1bywn6dcxxfbad5c59drm8wv94bp"))))
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
ddfddb0c
RW
2053(define-public zynaddsubfx
2054 (package
2055 (name "zynaddsubfx")
5f88d81f 2056 (version "3.0.5")
ddfddb0c
RW
2057 (source (origin
2058 (method url-fetch)
2059 (uri (string-append
2060 "mirror://sourceforge/zynaddsubfx/zynaddsubfx/"
138e7697 2061 version "/zynaddsubfx-" version ".tar.bz2"))
ddfddb0c
RW
2062 (sha256
2063 (base32
5f88d81f 2064 "0qwzg14h043rmyf9jqdylxhyfy4sl0vsr0gjql51wjhid0i34ivl"))))
ddfddb0c 2065 (build-system cmake-build-system)
00dfc97c
RW
2066 (arguments
2067 `(#:phases
2068 (modify-phases %standard-phases
2069 ;; Move SSE compiler optimization flags from generic target to
2070 ;; athlon64 and core2 targets, because otherwise the build would fail
2071 ;; on non-Intel machines.
2072 (add-after 'unpack 'remove-sse-flags-from-generic-target
2073 (lambda _
2074 (substitute* "src/CMakeLists.txt"
2075 (("-msse -msse2 -mfpmath=sse") "")
2076 (("-march=(athlon64|core2)" flag)
2077 (string-append flag " -msse -msse2 -mfpmath=sse")))
2078 #t)))))
ddfddb0c
RW
2079 (inputs
2080 `(("liblo" ,liblo)
2081 ("ntk" ,ntk)
1ea7969f 2082 ("mesa" ,mesa)
ddfddb0c
RW
2083 ("alsa-lib" ,alsa-lib)
2084 ("jack" ,jack-1)
2085 ("fftw" ,fftw)
2086 ("minixml" ,minixml)
2087 ("libxpm" ,libxpm)
2088 ("zlib" ,zlib)))
2089 (native-inputs
2090 `(("pkg-config" ,pkg-config)))
2091 (home-page "http://zynaddsubfx.sf.net/")
2092 (synopsis "Software synthesizer")
2093 (description
2094 "ZynAddSubFX is a feature heavy realtime software synthesizer. It offers
2095three synthesizer engines, multitimbral and polyphonic synths, microtonal
2096capabilities, custom envelopes, effects, etc.")
2097 (license license:gpl2)))
c493679f
RW
2098
2099(define-public yoshimi
2100 (package
2101 (name "yoshimi")
8a71a01c 2102 (version "1.6.0")
c493679f
RW
2103 (source (origin
2104 (method url-fetch)
2105 (uri (string-append "mirror://sourceforge/yoshimi/"
2106 (version-major+minor version)
2107 "/yoshimi-" version ".tar.bz2"))
2108 (sha256
2109 (base32
8a71a01c 2110 "0bcc5spnq73yp1fmm367d1mxcswqkmzs3cnpb4cxr513ir98sa50"))))
c493679f
RW
2111 (build-system cmake-build-system)
2112 (arguments
2113 `(#:tests? #f ; there are no tests
2114 #:configure-flags
2115 (list (string-append "-DCMAKE_INSTALL_DATAROOTDIR="
2116 (assoc-ref %outputs "out") "/share"))
2117 #:phases
2118 (modify-phases %standard-phases
2119 (add-before 'configure 'enter-dir
2120 (lambda _ (chdir "src") #t))
2121 ;; Move SSE compiler optimization flags from generic target to
2122 ;; athlon64 and core2 targets, because otherwise the build would fail
2123 ;; on non-Intel machines.
2124 (add-after 'unpack 'remove-sse-flags-from-generic-target
2125 (lambda _
2126 (substitute* "src/CMakeLists.txt"
2127 (("-msse -msse2 -mfpmath=sse") "")
2128 (("-march=(athlon64|core2)" flag)
2129 (string-append flag " -msse -msse2 -mfpmath=sse")))
5edc8682 2130 #t)))))
c493679f
RW
2131 (inputs
2132 `(("boost" ,boost)
2133 ("fftwf" ,fftwf)
2134 ("alsa-lib" ,alsa-lib)
2135 ("jack" ,jack-1)
2136 ("fontconfig" ,fontconfig)
2137 ("minixml" ,minixml)
2138 ("mesa" ,mesa)
2139 ("fltk" ,fltk)
2140 ("lv2" ,lv2)
2141 ("readline" ,readline)
2142 ("ncurses" ,ncurses)
2143 ("cairo" ,cairo)
2144 ("zlib" ,zlib)))
2145 (native-inputs
2146 `(("pkg-config" ,pkg-config)))
2147 (home-page "http://yoshimi.sourceforge.net/")
2148 (synopsis "Multi-paradigm software synthesizer")
2149 (description
edfa2eee 2150 "Yoshimi is a fork of ZynAddSubFX, a feature-heavy real-time software
c493679f
RW
2151synthesizer. It offers three synthesizer engines, multitimbral and polyphonic
2152synths, microtonal capabilities, custom envelopes, effects, etc. Yoshimi
2153improves on support for JACK features, such as JACK MIDI.")
2154 (license license:gpl2)))
658212eb 2155
e87cb754
RW
2156(define-public libgig
2157 (package
2158 (name "libgig")
38146797 2159 (version "4.1.0")
e87cb754
RW
2160 (source (origin
2161 (method url-fetch)
2162 (uri (string-append "http://download.linuxsampler.org/packages/"
2163 "libgig-" version ".tar.bz2"))
2164 (sha256
2165 (base32
38146797 2166 "02xx6bqxzgkvrawwnzrnxx1ypk244q4kpwfd58266f9ji8kq18h6"))))
e87cb754
RW
2167 (build-system gnu-build-system)
2168 (inputs
2169 `(("libuuid" ,util-linux)
2170 ("libsndfile" ,libsndfile)))
2171 (native-inputs
2172 `(("pkg-config" ,pkg-config)))
2173 (home-page "http://linuxsampler.org/libgig/")
2174 (synopsis "C++ library for working with Gigasampler (.gig) files")
2175 (description
2176 "Libgig is a C++ library for loading, modifying existing and creating new
2177Gigasampler (.gig) files and DLS (Downloadable Sounds) Level 1/2 files, KORG
2178sample based instruments (.KSF and .KMP files), SoundFont v2 (.sf2) files and
2179AKAI sampler data. The package includes a couple of command line tools based
2180on the library.")
2181 ;; The library and tools are released under the GPL, except the AKAI
2182 ;; classes which are released under the LGPL.
2183 (license (list license:gpl2+ license:lgpl2.1+))))
2184
a9f55bf2
RW
2185(define-public jack-keyboard
2186 (package
2187 (name "jack-keyboard")
2188 (version "2.5")
2189 (source
2190 (origin
2191 (method url-fetch)
2192 (uri (string-append "mirror://sourceforge/jack-keyboard/jack-keyboard/"
2193 version "/jack-keyboard-" version ".tar.gz"))
2194 (sha256
2195 (base32
2196 "0mzmg8aavybcfdlq2yd9d0vscqd6is5p6jzrgfpfm5j3xdcvh2s3"))))
2197 (build-system gnu-build-system)
2198 (inputs
2199 `(("jack" ,jack-1)
2200 ("lash" ,lash)
2201 ("gtk+" ,gtk+-2)))
2202 (native-inputs
2203 `(("pkg-config" ,pkg-config)))
2204 (home-page "http://jack-keyboard.sourceforge.net/")
2205 (synopsis "Virtual MIDI keyboard")
2206 (description "Jack-keyboard is a virtual MIDI keyboard, a program that
2207allows you to send JACK MIDI events (i.e. play) using your PC keyboard.")
2208 (license license:bsd-2)))
2209
39b33584
RW
2210(define-public jack-capture
2211 (package
2212 (name "jack-capture")
2213 (version "0.9.73")
2214 (source (origin
2215 (method git-fetch)
2216 (uri (git-reference
2217 (url "https://github.com/kmatheussen/jack_capture.git")
2218 (commit version)))
2219 (file-name (string-append name "-" version "-checkout"))
2220 (sha256
2221 (base32
2222 "0jcqky96q8xgya6wqv1p8pj9fkf2wh7ynl67ah7x5bn3basgfclf"))))
2223 (build-system gnu-build-system)
2224 (arguments
2225 `(#:make-flags
2226 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
2227 #:tests? #f ; there are none
2228 #:phases
2229 (modify-phases %standard-phases
2230 (delete 'configure))))
2231 (native-inputs
2232 `(("pkg-config" ,pkg-config)
2233 ("which" ,which)))
2234 (inputs
2235 `(("gtk+" ,gtk+-2)
2236 ("jack" ,jack-1)
2237 ("libogg" ,libogg)
2238 ("liblo" ,liblo)
2239 ("lame" ,lame)
2240 ("libsndfile" ,libsndfile)))
2241 (home-page "https://github.com/kmatheussen/jack_capture")
2242 (synopsis "Program for recording sound files with JACK")
2243 (description "This is a program for recording sound files with JACK. It
2244can connect to any JACK port and record the output into a stereo WAV file.")
2245 (license license:gpl2+)))
2246
658212eb
LF
2247(define-public cursynth
2248 (package
2249 (name "cursynth")
2250 (version "1.5")
2251 (source
2252 (origin
2253 (method url-fetch)
2254 (uri (string-append "mirror://gnu/cursynth/cursynth-"
2255 version ".tar.gz"))
2256 (sha256
2257 (base32 "1dhphsya41rv8z6yqcv9l6fwbslsds4zh1y56zizi39nd996d40v"))
fc1adab1 2258 (patches (search-patches "cursynth-wave-rand.patch"))))
658212eb
LF
2259 (build-system gnu-build-system)
2260 (native-inputs `(("pkg-config" ,pkg-config)))
2261 ;; TODO: See https://github.com/iyoko/cursynth/issues/4 which currently
2262 ;; prevents us from using pulseaudio
2263 (inputs `(("ncurses" ,ncurses)
2264 ("alsa" ,alsa-lib)))
6fd52309 2265 (home-page "https://www.gnu.org/software/cursynth/")
658212eb
LF
2266 (synopsis "Polyphonic and MIDI subtractive music synthesizer using curses")
2267 (description "GNU cursynth is a polyphonic synthesizer that runs
2268graphically in the terminal. It is built on a full-featured subtractive
2269synthesis engine. Notes and parameter changes may be entered via MIDI or the
2270computer's keyboard.")
2271 (license license:gpl3+)))
a763ce7d 2272
13edf1b9
RW
2273(define-public aj-snapshot
2274 (package
2275 (name "aj-snapshot")
bc03fe69 2276 (version "0.9.9")
13edf1b9
RW
2277 (source (origin
2278 (method url-fetch)
2279 (uri (string-append "mirror://sourceforge/aj-snapshot/"
2280 "aj-snapshot-" version ".tar.bz2"))
2281 (sha256
2282 (base32
bc03fe69 2283 "0z8wd5yvxdmw1h1rj6km9h01xd4xmp4d86gczlix7hsc7zrf0wil"))))
13edf1b9
RW
2284 (build-system gnu-build-system)
2285 (inputs
2286 `(("minixml" ,minixml)
2287 ("jack" ,jack-1)
2288 ("alsa-lib" ,alsa-lib)))
2289 (native-inputs
2290 `(("pkg-config" ,pkg-config)))
2291 (home-page "http://aj-snapshot.sourceforge.net/")
2292 (synopsis "Snapshot connections between ALSA and JACK clients")
2293 (description "Aj-snapshot is a small program that can be used to make
2294snapshots of the connections made between JACK and/or ALSA clients. Because
2295JACK can provide both audio and MIDI support to programs, aj-snapshot can
2296store both types of connections for JACK. ALSA, on the other hand, only
2297provides routing facilities for MIDI clients. Aj-snapshot is meant to be used
2298from the command line.")
2299 (license license:gpl3+)))
2300
a763ce7d
RW
2301(define-public qtractor
2302 (package
2303 (name "qtractor")
95bf4508 2304 (version "0.9.6")
a763ce7d
RW
2305 (source (origin
2306 (method url-fetch)
2307 (uri (string-append "http://downloads.sourceforge.net/qtractor/"
2308 "qtractor-" version ".tar.gz"))
2309 (sha256
2310 (base32
95bf4508 2311 "06sa4wl8zr0k8dnjiil0gjwnhrkq95h50xv56ih1y8jgyzxchaxp"))))
a763ce7d 2312 (build-system gnu-build-system)
42639cc9 2313 (arguments
d56eee86 2314 `(#:tests? #f)) ; no "check" target
a763ce7d 2315 (inputs
523544d3
RW
2316 `(("qt" ,qtbase)
2317 ("qtx11extras" ,qtx11extras)
a763ce7d
RW
2318 ("alsa-lib" ,alsa-lib)
2319 ("jack" ,jack-1)
2320 ("libsndfile" ,libsndfile)
2321 ("ladspa" ,ladspa)
2322 ("lv2" ,lv2)
2323 ("lilv" ,lilv)
2324 ("suil" ,suil)
2325 ("libsamplerate" ,libsamplerate)
2326 ("libvorbis" ,libvorbis)
2327 ("libmad" ,libmad)
2328 ("rubberband" ,rubberband)
2329 ("liblo" ,liblo)
2330 ("zlib" ,zlib)))
2331 (native-inputs
523544d3
RW
2332 `(("pkg-config" ,pkg-config)
2333 ("qttools" ,qttools)))
8071bbbc 2334 (home-page "http://qtractor.org/")
a763ce7d
RW
2335 (synopsis "Audio/MIDI multi-track sequencer")
2336 (description
2337 "Qtractor is an Audio/MIDI multi-track sequencer application. It uses
2338JACK for audio and ALSA sequencer for MIDI as multimedia infrastructures and
2339follows a traditional multi-track tape recorder control paradigm.")
2340 (license license:gpl2+)))
aa0edd3f 2341
849c3d03 2342(define-public ams-lv2
e029d90f
BH
2343 ;; Version 1.2.1 built with Python 3.7 raises an error in the waf-script.
2344 ;; Therefore, we take two more commmits than 1.2.1 that introduce an updated
2345 ;; waf-script and fix one error.
2346 (let ((commit "377d166db54a787b48979171c5652d2eb4f1bbb5")
2347 (revision "1"))
2348 (package
2349 (name "ams-lv2")
2350 (version (git-version "1.2.1" revision commit))
2351 (source
2352 (origin
2353 (method git-fetch)
2354 (uri (git-reference
2355 (url "https://github.com/blablack/ams-lv2.git")
2356 (commit commit)))
2357 (file-name (git-file-name name version))
2358 (sha256
2359 (base32
2360 "1ndgxcxjxwidg7436k0nb5clxkyi878k1j999sbbd1gk2fm0kcqm"))))
2361 (build-system waf-build-system)
2362 (arguments
2363 `(#:phases
2364 (modify-phases %standard-phases
2365 (add-after 'unpack 'remove-sse-flags
2366 (lambda* (#:key system #:allow-other-keys)
6cbb2c87
BH
2367 (unless (or (string-prefix? "x86_64" system)
2368 (string-prefix? "i686" system))
e029d90f 2369 (substitute* "wscript"
6cbb2c87
BH
2370 (("'-msse', '-mfpmath=sse', ") "")))
2371 #t)))
e029d90f
BH
2372 #:tests? #f)) ; no tests
2373 (inputs
2374 `(("lv2" ,lv2)
2375 ("lvtk" ,lvtk)
2376 ("gtkmm" ,gtkmm-2)
2377 ("gtk" ,gtk+-2)
2378 ("cairo" ,cairo)
2379 ("fftw" ,fftw)))
2380 (native-inputs
2381 `(("pkg-config" ,pkg-config)))
2382 (home-page "https://objectivewave.wordpress.com/ams-lv2/")
2383 (synopsis "Port of Alsa Modular Synth internal modules into LV2")
2384 (description "This set of LV2 plugins is a port of the internal modules
849c3d03
RW
2385found in Alsa Modular Synth. These plugins are used to create modular
2386synthesizers and contain: VCO, VCF, VCA, LFO, slew limiter, envelopes, sample
2387and hold, etc.")
e029d90f 2388 (license license:gpl2))))
849c3d03 2389
aed023ff
RW
2390(define-public gxtuner
2391 (package
2392 (name "gxtuner")
f5e0ff0f 2393 (version "2.4")
aed023ff 2394 (source (origin
bed4eb37
RW
2395 (method git-fetch)
2396 (uri (git-reference
2397 (url "https://github.com/brummer10/gxtuner.git")
2398 (commit (string-append "v" version))))
2399 (file-name (git-file-name name version))
aed023ff
RW
2400 (sha256
2401 (base32
bed4eb37 2402 "1fxd2akan2njlr7fpkh84830783qhh1gg7yakswqk5dd466dcn96"))))
aed023ff
RW
2403 (build-system gnu-build-system)
2404 (arguments
2405 `(#:make-flags
2406 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
2407 (string-append "INCLUDE_L_DIR="
2408 (assoc-ref %build-inputs "zita-resampler")
2409 "/include/"))
2410 #:phases
2411 (modify-phases %standard-phases
2412 (delete 'configure))))
2413 (inputs
f5e0ff0f 2414 `(("gtk+" ,gtk+)
aed023ff
RW
2415 ("jack" ,jack-1)
2416 ("fftwf" ,fftwf)
2417 ("cairo" ,cairo)
2418 ("zita-resampler" ,zita-resampler)))
2419 (native-inputs
2420 `(("pkg-config" ,pkg-config)))
2421 (home-page "https://github.com/brummer10/gxtuner")
2422 (synopsis "Guitar tuner")
2423 (description "GXtuner is a simple guitar tuner for JACK with an
2424analogue-like user interface.")
2425 (license license:gpl2+)))
2426
c2c9e748 2427(define-public mod-host
9f1ac4fa 2428 ;; The last release was in 2014 but since then hundreds of commits have
c2c9e748 2429 ;; been made.
9f1ac4fa
RW
2430 (let ((commit "1726ad06b11323da7e1aaed690ff8aef91f702b5")
2431 (revision "3"))
c2c9e748
RW
2432 (package
2433 (name "mod-host")
2434 (version (string-append "0.10.6-" revision "." (string-take commit 9)))
2435 (source (origin
2436 (method git-fetch)
2437 (uri (git-reference
2438 (url "https://github.com/moddevices/mod-host")
2439 (commit commit)))
2440 (sha256
2441 (base32
9f1ac4fa 2442 "1nrd37c35w6z6ldczgrwmmd9hx1n3zyvcjcgb3mi4cygqdanvspv"))
c2c9e748
RW
2443 (file-name (string-append name "-" version "-checkout"))))
2444 (build-system gnu-build-system)
2445 (arguments
2446 `(#:tests? #f ; no tests included
2447 #:make-flags
2448 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
2449 "CC=gcc")
2450 #:phases
2451 (modify-phases %standard-phases
2452 (delete 'configure)
2453 (add-after 'unpack 'fix-jack-installation-directory
2454 (lambda _
2455 ;; Do not attempt to install files to output of "jack" package.
2456 (substitute* "Makefile"
2457 (("\\$\\(shell pkg-config --variable=libdir jack\\)")
2458 "lib"))
2459 #t)))))
2460 (inputs
2461 `(("lilv" ,lilv)
c96cb01a
DC
2462 ("fftw" ,fftw)
2463 ("fftwf" ,fftwf)
c2c9e748
RW
2464 ("lv2" ,lv2)
2465 ("jack" ,jack-1)
2466 ("readline" ,readline)))
2467 (native-inputs
2468 `(("pkg-config" ,pkg-config)
2469 ("python" ,python-2)))
2470 (home-page "https://github.com/moddevices/mod-host")
2471 (synopsis "LV2 host for Jack controllable via socket or command line")
2472 (description "mod-host is an LV2 plugin host for JACK, controllable via
2473socket or command line.")
2474 (license license:gpl3+))))
2475
19d93ef5
SR
2476(define-public curseradio
2477 (let ((commit "1bd4bd0faeec675e0647bac9a100b526cba19f8d")
2478 (revision "1"))
2479 (package
2480 (name "curseradio")
2481 (version (git-version "0" revision commit))
2482 (source (origin
2483 (method git-fetch)
2484 (uri (git-reference
2485 (url "https://github.com/chronitis/curseradio.git")
2486 (commit commit)))
2487 (file-name (git-file-name name version))
2488 (sha256
2489 (base32
2490 "11bf0jnj8h2fxhpdp498189r4s6b47vy4wripv0z4nx7lxajl88i"))))
2491 (build-system python-build-system)
2492 (propagated-inputs
2493 `(("python-lxml" ,python-lxml)
2494 ("python-requests" ,python-requests)
2495 ("python-pyxdg" ,python-pyxdg)
2496 ("mpv" ,mpv)))
2497 (home-page "https://github.com/chronitis/curseradio")
2498 (synopsis "Command-line Internet radio player")
2499 (description "Curseradio is a Curses-based radio player that uses a
2500tune-in sender list from @url{http://opml.radiotime.com}.")
2501 (license license:expat))))
2502
aa0edd3f
AM
2503(define-public pianobar
2504 (package
2505 (name "pianobar")
3999b664 2506 (version "2016.06.02")
aa0edd3f 2507 (source (origin
1410e178
RW
2508 (method git-fetch)
2509 (uri (git-reference
2510 (url "https://github.com/PromyLOPh/pianobar.git")
2511 (commit version)))
2512 (file-name (git-file-name name version))
aa0edd3f
AM
2513 (sha256
2514 (base32
1410e178 2515 "058fbdxp7n35hxwy3b8slfy4pb4n63cb173vfmywqa06wh1dv6f6"))))
aa0edd3f
AM
2516 (build-system gnu-build-system)
2517 (arguments
2518 `(#:tests? #f ; no tests
2519 #:make-flags (list "CC=gcc" "CFLAGS=-std=c99"
2520 (string-append "PREFIX=" %output))
2521 #:phases (modify-phases %standard-phases
2522 (delete 'configure))))
2523 (inputs
2524 `(("ao" ,ao)
2525 ("curl" ,curl)
2526 ("libgcrypt" ,libgcrypt)
2527 ("json-c" ,json-c)
bb5c508c 2528 ("ffmpeg" ,ffmpeg-3.4)))
aa0edd3f
AM
2529 (native-inputs
2530 `(("pkg-config" ,pkg-config)))
2531 (home-page "http://6xq.net/projects/pianobar/")
2532 (synopsis "Console-based pandora.com player")
2533 (description "pianobar is a console-based music player for the
2534personalized online radio pandora.com. It has configurable keys for playing
2535and managing stations, can be controlled remotely via fifo, and can run
2536event-based scripts for scrobbling, notifications, etc.")
2537 (license license:expat)))
3f7a182d 2538
1deab8cb
CB
2539(define-public picard
2540 (package
2541 (name "picard")
b421e915 2542 (version "2.1.3")
1deab8cb
CB
2543 (source (origin
2544 (method url-fetch)
2545 (uri (string-append
2546 "https://musicbrainz.osuosl.org/pub/musicbrainz/"
2547 "picard/picard-" version ".tar.gz"))
2548 (sha256
2549 (base32
b421e915 2550 "19w5k3bf4886gdycxjds9nkjvir0gwy2r5cqkz0lbls4ikk4y14f"))))
1deab8cb
CB
2551 (build-system python-build-system)
2552 (arguments
251448f7
TGR
2553 '(#:use-setuptools? #f
2554 #:configure-flags
e28b0798
TGR
2555 (list "--root=/"
2556 ;; Don't phone home or show ‘Check for Update…’ in the Help menu.
2557 "--disable-autoupdate")
251448f7 2558 #:phases
1deab8cb
CB
2559 (modify-phases %standard-phases
2560 (add-after 'unpack 'patch-source
2561 (lambda* (#:key inputs #:allow-other-keys)
2562 (substitute* "picard/const/__init__.py"
2563 (("pyfpcalc")
2564 (string-append
2565 "pyfpcalc', '"
e247244e
TGR
2566 (assoc-ref inputs "chromaprint") "/bin/fpcalc")))
2567 #t)))))
1deab8cb
CB
2568 (native-inputs
2569 `(("gettext" ,gettext-minimal)))
2570 (inputs
2571 `(("chromaprint" ,chromaprint)
7d9fa5f3 2572 ("python-discid" ,python-discid)
1deab8cb
CB
2573 ("python-pyqt" ,python-pyqt)
2574 ("python-mutagen" ,python-mutagen)))
2575 (home-page "https://picard.musicbrainz.org/")
2576 (synopsis "Graphical music tagging application")
2577 (description
2578 "MusicBrainz Picard is a music tagging application, supporting multiple
2579formats, looking up tracks through metadata and audio fingerprints.")
2580 (license license:gpl2+)))
2581
3f7a182d
LF
2582(define-public python-mutagen
2583 (package
2584 (name "python-mutagen")
e39aae4f 2585 (version "1.38")
3f7a182d
LF
2586 (source (origin
2587 (method url-fetch)
2588 (uri (pypi-uri "mutagen" version))
2589 (sha256
2590 (base32
e39aae4f 2591 "0rl7sxn1rcjl48fwga3dqf9f6pzspsny4ngxyf6pp337mrq0z693"))))
3f7a182d 2592 (build-system python-build-system)
4228a79e
LF
2593 (native-inputs
2594 `(("python-pytest" ,python-pytest)))
3f7a182d
LF
2595 (home-page "https://bitbucket.org/lazka/mutagen")
2596 (synopsis "Read and write audio tags")
2597 (description "Mutagen is a Python module to handle audio metadata. It
2598supports ASF, FLAC, M4A, Monkey’s Audio, MP3, Musepack, Ogg FLAC, Ogg Speex, Ogg
2599Theora, Ogg Vorbis, True Audio, WavPack and OptimFROG audio files. All versions
2600of ID3v2 are supported, and all standard ID3v2.4 frames are parsed. It can read
2601Xing headers to accurately calculate the bitrate and length of MP3s. ID3 and
2602APEv2 tags can be edited regardless of audio format. It can also manipulate Ogg
2603streams on an individual packet/page level.")
2604 (license license:gpl2))) ; "later version" never mentioned
2605
2606(define-public python2-mutagen
2607 (package-with-python2 python-mutagen))
8975de88
LF
2608
2609(define-public python-musicbrainzngs
2610 (package
2611 (name "python-musicbrainzngs")
daedf34d 2612 (version "0.6")
8975de88
LF
2613 (source (origin
2614 (method url-fetch)
2615 (uri (pypi-uri "musicbrainzngs" version))
2616 (sha256
2617 (base32
daedf34d 2618 "1dddarpjawryll2wss65xq3v9q8ln8dan7984l5dxzqx88d2dvr8"))))
8975de88 2619 (build-system python-build-system)
daedf34d
LF
2620 (arguments
2621 '(;; The tests fail suffer from race conditions:
2622 ;; https://github.com/alastair/python-musicbrainzngs/issues/211
2623 #:tests? #f))
8975de88
LF
2624 (home-page "https://python-musicbrainzngs.readthedocs.org/")
2625 (synopsis "Python bindings for MusicBrainz NGS webservice")
2626 (description "Musicbrainzngs implements Python bindings of the MusicBrainz
2627web service. This library can be used to retrieve music metadata from the
2628MusicBrainz database.")
2629 ;; 'musicbrainzngs/compat.py' is ISC licensed.
2630 (license (list license:bsd-2 license:isc))))
2631
2632(define-public python2-musicbrainzngs
2633 (package-with-python2 python-musicbrainzngs))
e8fee648 2634
07c82daa
GH
2635(define-public python-isrcsubmit
2636 (package
2637 (name "python-isrcsubmit")
2638 (version "2.0.1")
2639 (source
2640 (origin
2641 (method url-fetch)
2642 (uri (pypi-uri "isrcsubmit" version))
2643 (sha256
2644 (base32
2645 "0jh4cni8qhri6dh83cmp0i0m0384vv0vznlygv49wj9xzh1d99qv"))))
2646 (build-system python-build-system)
2647 (propagated-inputs
2648 `(("python-discid" ,python-discid)
2649 ("python-musicbrainzngs" ,python-musicbrainzngs)))
2650 (home-page "https://github.com/JonnyJD/musicbrainz-isrcsubmit")
2651 (synopsis "Submit ISRCs from CDs to MusicBrainz")
2652 (description "@code{isrcsubmit} is a tool to extract @dfn{International
2653Standard Recording Code} (ISRCs) from audio CDs and submit them to
2654@url{https://musicbrainz.org/, MusicBrainz}.")
2655 (license license:gpl3+)))
2656
a2eab422 2657(define-public python2-pyechonest
e8fee648 2658 (package
a2eab422 2659 (name "python2-pyechonest")
e8fee648
LF
2660 (version "9.0.0")
2661 (source (origin
2662 (method url-fetch)
2663 (uri (pypi-uri "pyechonest" version))
2664 (sha256
2665 (base32
2666 "1584nira3rkiman9dm81kdshihmkj21s8navndz2l8spnjwb790x"))))
2667 (build-system python-build-system)
a2eab422
LF
2668 (arguments
2669 `(;; Python 3 is not supported:
2670 ;; https://github.com/echonest/pyechonest/issues/42
2671 #:python ,python-2))
e8fee648
LF
2672 (home-page "https://github.com/echonest/pyechonest")
2673 (synopsis "Python interface to The Echo Nest APIs")
d3e3468f
LF
2674 (description "Pyechonest is a Python library for the Echo Nest API. With
2675Pyechonest you have Python access to the entire set of API methods including:
e8fee648
LF
2676
2677@enumerate
2678@item artist - search for artists by name, description, or attribute, and get
2679back detailed information about any artist including audio, similar artists,
2680blogs, familiarity, hotttnesss, news, reviews, urls and video.
2681@item song - search songs by artist, title, description, or attribute (tempo,
2682duration, etc) and get detailed information back about each song, such as
2683hotttnesss, audio_summary, or tracks.
2684@item track - upload a track to the Echo Nest and receive summary information
2685about the track including key, duration, mode, tempo, time signature along with
2686detailed track info including timbre, pitch, rhythm and loudness information.
2687@end enumerate\n")
a2eab422 2688 (license license:bsd-3)))
acd7351f
LF
2689
2690(define-public python-pylast
2691 (package
2692 (name "python-pylast")
653f2b92 2693 (version "2.0.0")
acd7351f
LF
2694 (source (origin
2695 (method url-fetch)
2696 (uri (pypi-uri "pylast" version))
2697 (sha256
2698 (base32
653f2b92 2699 "0r9h7g8i8l2mgqjwkda3v6prfbkb2im5kap1az9ppmhjm9i4jkcf"))))
acd7351f 2700 (build-system python-build-system)
653f2b92
RW
2701 ;; Tests require network access. See
2702 ;; https://github.com/pylast/pylast/issues/105
2703 (arguments '(#:tests? #f))
acd7351f
LF
2704 (native-inputs
2705 `(("python-coverage" ,python-coverage)
653f2b92 2706 ("python-pycodestyle" ,python-pycodestyle)
acd7351f
LF
2707 ("python-mock" ,python-mock)
2708 ("python-pep8" ,python-pep8)
2709 ("python-pytest" ,python-pytest)
653f2b92 2710 ("python-flaky" ,python-flaky)
acd7351f
LF
2711 ("python-pyflakes" ,python-pyflakes)
2712 ("python-pyyaml" ,python-pyyaml)))
2713 (propagated-inputs
2714 `(("python-six" ,python-six)))
2715 (home-page "https://github.com/pylast/pylast")
2716 (synopsis "Python interface to Last.fm and Libre.fm")
2717 (description "A Python interface to Last.fm and other API-compatible
2718websites such as Libre.fm.")
5c31f4aa 2719 (license license:asl2.0)))
acd7351f
LF
2720
2721(define-public python2-pylast
5c31f4aa 2722 (package-with-python2 python-pylast))
3bf429af 2723
b0dea60c
SR
2724(define-public instantmusic
2725 (let ((commit "300891d09c703525215fa5a116b9294af1c923c8")
2726 (revision "1"))
2727 (package
2728 (name "instantmusic")
2729 (version (git-version "1.0" revision commit))
2730 (source (origin
2731 (method git-fetch)
2732 (uri (git-reference
2733 (url "https://github.com/yask123/Instant-Music-Downloader.git")
2734 (commit commit)))
2735 (file-name (git-file-name name version))
2736 (sha256
2737 (base32
2738 "0j7qivaa04bpdz3anmgci5833dgiyfqqwq9fdrpl9m68b34gl773"))))
2739 (build-system python-build-system)
2740 (propagated-inputs
2741 `(("python-requests" ,python-requests)
c695fb76 2742 ("eyed3" ,eyed3)
b0dea60c
SR
2743 ("python-beautifulsoup4" ,python-beautifulsoup4)
2744 ("youtube-dl" ,youtube-dl)))
2745 (arguments
2746 '(#:modules ((guix build python-build-system)
2747 (guix build utils)
2748 (srfi srfi-26))
2749 #:phases (modify-phases %standard-phases
2750 (add-before 'build 'change-directory
2751 (lambda _
2752 (chdir "instantmusic-0.1") #t))
2753 (add-before 'check 'fix-file-permissions
2754 (lambda _
2755 ;; Fix some read-only files that would cause a build failure
2756 (for-each (cut chmod <> #o644)
2757 (find-files "instantmusic.egg-info"
2758 "PKG-INFO|.*\\.txt"))
2759 #t)))))
2760 (home-page "http://iyask.me/Instant-Music-Downloader/")
2761 (synopsis "Command-line program to download a song from YouTube")
2762 (description "InstantMusic downloads a song from YouTube in MP3 format.
2763Songs can be searched by artist, name or even by a part of the song text.")
2764 (license license:expat))))
2765
3bf429af
LF
2766(define-public beets
2767 (package
2768 (name "beets")
191c439e 2769 (version "1.4.7")
3bf429af
LF
2770 (source (origin
2771 (method url-fetch)
23319ed6 2772 (uri (pypi-uri "beets" version))
c05c1910 2773 (patches (search-patches "beets-python-3.7-fix.patch"))
3bf429af
LF
2774 (sha256
2775 (base32
191c439e 2776 "0w3gz69s9gf5ih69d4sddgh7ndj7658m621bp742zldvjakdncrs"))))
3bf429af
LF
2777 (build-system python-build-system)
2778 (arguments
0d48ff81 2779 `(#:phases
3bf429af
LF
2780 (modify-phases %standard-phases
2781 (add-after 'unpack 'set-HOME
46fce968
TGR
2782 (lambda _
2783 (setenv "HOME" (string-append (getcwd) "/tmp"))
2784 #t))
aa007978
DM
2785 (add-after 'unpack 'make-python3.7-compatible
2786 (lambda _
2787 ;; See <https://github.com/beetbox/beets/issues/2978>.
2788 (substitute* "beets/autotag/hooks.py"
2789 (("re\\._pattern_type") "re.Pattern"))
2790 #t))
36c2c8c8 2791 (replace 'check
46fce968
TGR
2792 (lambda _
2793 (invoke "nosetests" "-v"))))))
3bf429af 2794 (native-inputs
0d48ff81
LF
2795 `(("python-beautifulsoup4" ,python-beautifulsoup4)
2796 ("python-flask" ,python-flask)
2797 ("python-mock" ,python-mock)
2798 ("python-mpd2" ,python-mpd2)
2799 ("python-nose" ,python-nose)
2800 ("python-pathlib" ,python-pathlib)
2801 ("python-pyxdg" ,python-pyxdg)
2802 ("python-pylast" ,python-pylast)
2803 ("python-rarfile" ,python-rarfile)
2804 ("python-responses" ,python-responses)))
3bf429af 2805 ;; TODO: Install optional plugins and dependencies.
b3470031 2806 (inputs
0d48ff81 2807 `(("python-discogs-client" ,python-discogs-client)
0d48ff81
LF
2808 ("python-jellyfish" ,python-jellyfish)
2809 ("python-munkres" ,python-munkres)
2810 ("python-musicbrainzngs" ,python-musicbrainzngs)
2811 ("python-mutagen" ,python-mutagen)
2812 ("python-pyyaml" ,python-pyyaml)
2813 ("python-unidecode" ,python-unidecode)))
3bf429af
LF
2814 (home-page "http://beets.io")
2815 (synopsis "Music organizer")
2816 (description "The purpose of beets is to get your music collection right
2817once and for all. It catalogs your collection, automatically improving its
2818metadata as it goes using the MusicBrainz database. Then it provides a variety
2819of tools for manipulating and accessing your music.")
2820 (license license:expat)))
21d18113 2821
4ee2cce3
JK
2822(define-public beets-bandcamp
2823 (package
2824 (name "beets-bandcamp")
2825 (version "0.1.3")
2826 (source (origin
2827 (method url-fetch)
2828 (uri (pypi-uri "beets-bandcamp" version))
2829 (sha256
2830 (base32
2831 "04awg0zdhhg5h510fc1p3qkvr2l1qm6nf85hlr9z8im8a7xlka0i"))))
2832 (build-system python-build-system)
2833 (arguments '(#:tests? #f)) ; there are no tests
2834 (propagated-inputs
2835 `(("beets" ,beets)
2836 ("python-isodate" ,python-isodate)))
2837 (inputs
2838 `(("python-beautifulsoup4" ,python-beautifulsoup4)
2839 ("python-requests" ,python-requests)
2840 ("python-six" ,python-six)))
2841 (home-page "https://github.com/unrblt/beets-bandcamp")
2842 (synopsis "Bandcamp plugin for beets")
2843 (description
2844 "This plugin for beets automatically obtains tag data from @uref{Bandcamp,
2845https://bandcamp.com/}. It's also capable of getting song lyrics and album art
2846using the beets FetchArt plugin.")
2847 (license license:gpl2)))
2848
21d18113
KY
2849(define-public milkytracker
2850 (package
2851 (name "milkytracker")
b7e2fcf0 2852 (version "1.02.00")
21d18113 2853 (source (origin
caa39e56
RW
2854 (method git-fetch)
2855 (uri (git-reference
2856 (url "https://github.com/milkytracker/MilkyTracker.git")
2857 (commit (string-append "v" version))))
2858 (file-name (git-file-name name version))
21d18113
KY
2859 (sha256
2860 (base32
caa39e56 2861 "05a6d7l98k9i82dwrgi855dnccm3f2lkb144gi244vhk1156n0ca"))
e3b2e943
KK
2862 (modules '((guix build utils)))
2863 ;; Remove non-FSDG compliant sample songs.
2864 (snippet
2865 '(begin
2866 (delete-file-recursively "resources/music")
2867 (substitute* "CMakeLists.txt"
6cbee49d
MW
2868 (("add_subdirectory\\(resources/music\\)") ""))
2869 #t))))
e3b2e943 2870 (build-system cmake-build-system)
21d18113 2871 (arguments
7f2f8345
KK
2872 '(#:tests? #f ; no check target
2873 ;; This flag ensures that MilkyTracker links with the JACK library.
2874 #:configure-flags '("-DCMAKE_CXX_FLAGS=-ljack")))
21d18113
KY
2875 (inputs
2876 `(("alsa-lib" ,alsa-lib)
ba259bad 2877 ("lhasa" ,lhasa)
21d18113 2878 ("jack" ,jack-1)
f1618a0f 2879 ("rtmidi" ,rtmidi)
e3b2e943 2880 ("sdl" ,sdl2)
f1618a0f
KK
2881 ("zlib" ,zlib)
2882 ("zziplib" ,zziplib)))
21d18113
KY
2883 (native-inputs
2884 `(("pkg-config" ,pkg-config)))
2885 (synopsis "Music tracker for working with .MOD/.XM module files")
2886 (description "MilkyTracker is a music application for creating .MOD and .XM
2887module files. It attempts to recreate the module replay and user experience of
2888the popular DOS program Fasttracker II, with special playback modes available
2889for improved Amiga ProTracker 2/3 compatibility.")
1b35fea1 2890 (home-page "http://milkytracker.titandemo.org/")
21d18113
KY
2891 ;; 'src/milkyplay' is under Modified BSD, the rest is under GPL3 or later.
2892 (license (list license:bsd-3 license:gpl3+))))
13416a10 2893
89bcf3fc
KK
2894(define-public schismtracker
2895 (package
2896 (name "schismtracker")
e526db51 2897 (version "20190614")
89bcf3fc 2898 (source (origin
3b9e9415
RW
2899 (method git-fetch)
2900 (uri (git-reference
2901 (url "https://github.com/schismtracker/schismtracker.git")
2902 (commit version)))
2903 (file-name (git-file-name name version))
89bcf3fc
KK
2904 (sha256
2905 (base32
e526db51 2906 "0cg0q5bkn8a06v03vmj69xyhi4xxpl729k4008q4hiakh9gy2x49"))
89bcf3fc
KK
2907 (modules '((guix build utils)))
2908 (snippet
2909 ;; Remove use of __DATE__ and __TIME__ for reproducibility.
6cbee49d
MW
2910 `(begin
2911 (substitute* "schism/version.c"
2912 (("Schism Tracker built %s %s.*$")
2913 (string-append "Schism Tracker version " ,version "\");")))
2914 #t))))
89bcf3fc
KK
2915 (build-system gnu-build-system)
2916 (arguments
2917 `(#:phases
2918 (modify-phases %standard-phases
89bcf3fc
KK
2919 (add-before 'configure 'link-libm
2920 (lambda _ (setenv "LIBS" "-lm") #t)))))
2921 (native-inputs
2922 `(("autoconf" ,autoconf)
2923 ("automake" ,automake)
2924 ("python" ,python)))
2925 (inputs
e526db51 2926 `(("alsa-lib" ,alsa-lib) ; for asound dependency
89bcf3fc
KK
2927 ("libx11" ,libx11)
2928 ("libxext" ,libxext)
2929 ("sdl" ,sdl)))
2930 (home-page "http://schismtracker.org")
2931 (synopsis "Oldschool sample-based music composition tool")
2932 (description
2933 "Schism Tracker is a reimplementation of Impulse Tracker, a program used to
2934create high quality music without the requirements of specialized, expensive
2935equipment, and with a unique \"finger feel\" that is difficult to replicate in
2936part. The player is based on a highly modified version of the ModPlug engine,
2937with a number of bugfixes and changes to improve IT playback.")
2938 (license license:gpl2+)))
2939
5beecc32
RW
2940(define-public sooperlooper
2941 (package
2942 (name "sooperlooper")
2943 (version "1.7.3")
2944 (source (origin
2945 (method url-fetch)
2946 (uri (string-append "http://essej.net/sooperlooper/sooperlooper-"
2947 version ".tar.gz"))
2948 (sha256
2949 (base32
2950 "0n2gdxw1fx8nxxnpzf4sj0kp6k6zi1yq59cbz6qqzcnsnpnvszbs"))
2951 (patches (search-patches "sooperlooper-build-with-wx-30.patch"))))
2952 (build-system gnu-build-system)
2953 (arguments
2954 `(#:make-flags (list "CXXFLAGS=-std=gnu++11")
2955 #:phases
2956 (modify-phases %standard-phases
2957 (add-after 'unpack 'add-sigc++-includes
2958 (lambda* (#:key inputs #:allow-other-keys)
2959 (let ((sig (assoc-ref inputs "libsigc++"))
2960 (xml (assoc-ref inputs "libxml2"))
2961 (cwd (getcwd)))
2962 (setenv "CPATH"
2963 (string-append sig "/include/sigc++-2.0:"
2964 sig "/lib/sigc++-2.0/include:"
2965 xml "/include/libxml2/:"
2966 cwd "/libs/pbd:"
2967 cwd "/libs/midi++")))
2968 (substitute* '("src/control_osc.hpp"
2969 "src/gui/app_frame.hpp"
2970 "src/gui/config_panel.hpp"
2971 "src/gui/keys_panel.hpp"
2972 "src/gui/latency_panel.hpp"
2973 "src/gui/main_panel.hpp"
2974 "src/gui/midi_bind_panel.hpp"
2975 "src/gui/prefs_dialog.hpp")
2976 (("sigc\\+\\+/object.h")
2977 "sigc++/sigc++.h"))
2978 (substitute* '("src/engine.cpp"
2979 "src/gui/latency_panel.cpp"
2980 "src/gui/looper_panel.cpp"
2981 "src/gui/main_panel.cpp")
2982 (("(\\(| )bind " _ pre)
2983 (string-append pre "sigc::bind ")))
2984 #t))
2985 (add-after 'unpack 'fix-xpm-warnings
2986 (lambda _
2987 (substitute* (find-files "." "\\.xpm$")
2988 (("static char") "static const char"))
2989 #t)))))
2990 (inputs
2991 `(("jack" ,jack-1)
2992 ("alsa-lib" ,alsa-lib)
2993 ("wxwidgets" ,wxwidgets-gtk2)
2994 ("libsndfile" ,libsndfile)
2995 ("libsamplerate" ,libsamplerate)
2996 ("liblo" ,liblo)
2997 ("rubberband" ,rubberband)
2998 ("libxml2" ,libxml2)
2999 ("libsigc++" ,libsigc++)
3000 ("ncurses" ,ncurses)))
3001 (native-inputs
3002 `(("pkg-config" ,pkg-config)))
3003 (home-page "http://essej.net/sooperlooper/")
3004 (synopsis "Live looping sampler")
3005 (description
3006 "SooperLooper is a live looping sampler capable of immediate loop
3007recording, overdubbing, multiplying, reversing and more. It allows for
3008multiple simultaneous multi-channel loops limited only by your computer's
3009available memory.")
3010 (license license:gpl2+)))
3011
13416a10
KY
3012(define-public moc
3013 (package
3014 (name "moc")
2fbc004f 3015 (version "2.5.2")
13416a10
KY
3016 (source (origin
3017 (method url-fetch)
3018 (uri (string-append "http://ftp.daper.net/pub/soft/"
3019 name "/stable/"
3020 name "-" version ".tar.bz2"))
3021 (sha256
3022 (base32
2784b35f 3023 "026v977kwb0wbmlmf6mnik328plxg8wykfx9ryvqhirac0aq39pk"))))
13416a10
KY
3024 (build-system gnu-build-system)
3025 (inputs
3026 `(("alsa-lib" ,alsa-lib)
3027 ("curl" ,curl)
3028 ("faad2" ,faad2)
bb5c508c 3029 ("ffmpeg" ,ffmpeg-3.4)
13416a10
KY
3030 ("file" ,file)
3031 ("jack" ,jack-1)
3032 ("libid3tag" ,libid3tag)
3033 ("libltdl" ,libltdl)
3034 ("libmodplug" ,libmodplug)
3035 ("libmpcdec" ,libmpcdec)
3036 ("libmad" ,libmad)
6beaa5a0
MM
3037 ("libogg" ,libogg)
3038 ("libvorbis" ,libvorbis)
13416a10
KY
3039 ("ncurses" ,ncurses)
3040 ("openssl" ,openssl)
3041 ("sasl" ,cyrus-sasl)
3042 ("speex" ,speex)
3043 ("taglib" ,taglib)
3044 ("wavpack" ,wavpack)
3045 ("zlib" ,zlib)))
3046 (native-inputs
3047 `(("pkg-config" ,pkg-config)))
3048 (synopsis "Console audio player designed to be powerful and easy to use")
3049 (description
3050 "Music on Console is a console audio player that supports many file
3051formats, including most audio formats recognized by FFMpeg.")
3052 (home-page "http://moc.daper.net")
3053 (license license:gpl2+)))
6d3ef286
JF
3054
3055(define-public midicsv
3056 (package
3057 (name "midicsv")
3058 (version "1.1")
3059 (source (origin
3060 (method url-fetch)
3061 (uri (string-append "http://www.fourmilab.ch/webtools/midicsv/"
3062 name "-" version ".tar.gz"))
3063 (sha256
3064 (base32
3065 "1vvhk2nf9ilfw0wchmxy8l13hbw9cnpz079nsx5srsy4nnd78nkw"))))
3066 (build-system gnu-build-system)
3067 (arguments
3068 `(#:phases (modify-phases %standard-phases (delete 'configure))
3069 #:make-flags (list "CC=gcc" (string-append "INSTALL_DEST=" %output))))
3070 (synopsis "Convert MIDI files to and from CSV")
3071 (description
3072 "Midicsv reads a standard MIDI file and decodes it into a comma-separated
3073value file (CSV), which preserves all the information in the MIDI file. The
3074ASCII CSV file may be loaded into a spreadsheet or database application, or
3075processed by a program to transform the MIDI data (for example, to key
3076transpose a composition or extract a track from a multi-track sequence). A
3077CSV file in the format created by midicsv may be converted back into a
3078standard MIDI file with the csvmidi program.")
3079 (home-page "http://www.fourmilab.ch/webtools/midicsv/")
3080 (license license:public-domain)))
49604680
RW
3081
3082(define-public gx-guvnor-lv2
35f909d4
RW
3083 (package
3084 (name "gx-guvnor-lv2")
3085 (version "0.1")
3086 (source (origin
6ac8c78c
RW
3087 (method git-fetch)
3088 (uri (git-reference
3089 (url "https://github.com/brummer10/GxGuvnor.lv2.git")
3090 (commit (string-append "v" version))))
3091 (file-name (string-append name "-" version "-checkout"))
35f909d4
RW
3092 (sha256
3093 (base32
6ac8c78c 3094 "1wa5070j40p7f0b3kr259pzm99xb6cf2badr2capayjvgayd6gnm"))))
35f909d4
RW
3095 (build-system gnu-build-system)
3096 (arguments
3097 `(;; The check target is used only to output a warning.
3098 #:tests? #f
3099 #:make-flags
3100 (list (string-append "DESTDIR=" (assoc-ref %outputs "out")))
3101 #:phases
3102 (modify-phases %standard-phases
3103 (replace 'configure
3104 (lambda _
3105 (substitute* "Makefile"
6ac8c78c
RW
3106 (("INSTALL_DIR = .*") "INSTALL_DIR=/lib/lv2\n")
3107 (("install : all") "install :"))
35f909d4
RW
3108 #t)))))
3109 (inputs
3110 `(("lv2" ,lv2)))
3111 (home-page "https://github.com/brummer10/GxGuvnor.lv2")
3112 (synopsis "Overdrive/distortion pedal simulation")
3113 (description "This package provides the LV2 plugin \"GxGuvnor\", a
49604680 3114simulation of an overdrive or distortion pedal for guitars.")
35f909d4 3115 ;; The LICENSE file says GPLv3 but the license headers in the files say
4b359532
RW
3116 ;; GPLv2 or later. The whole project is released under GPLv3 or later
3117 ;; according to https://github.com/brummer10/GxGuvnor.lv2/issues/1
3118 (license license:gpl3+)))
85ae347e
RW
3119
3120(define-public gx-vbass-preamp-lv2
1b74b126
RW
3121 (let ((commit "eb999b0ca0ef4da40a59e458a9ab6e7042b96c99")
3122 (revision "2"))
85ae347e
RW
3123 (package (inherit gx-guvnor-lv2)
3124 (name "gx-vbass-preamp-lv2")
3125 (version (string-append "0-" revision "." (string-take commit 9)))
3126 (source (origin
3127 (method git-fetch)
3128 (uri (git-reference
3129 (url "https://github.com/brummer10/GxVBassPreAmp.lv2")
3130 (commit commit)))
3131 (sha256
3132 (base32
1b74b126 3133 "0firap073ldw4nrykkd7jvyyj0jbl1nslxyzjj4kswazp99x7d9h"))
85ae347e 3134 (file-name (string-append name "-" version "-checkout"))))
1b74b126
RW
3135 (inputs
3136 `(("lv2" ,lv2)
3137 ("gtk+" ,gtk+-2)))
3138 (native-inputs
3139 `(("pkg-config" ,pkg-config)))
85ae347e
RW
3140 (home-page "https://github.com/brummer10/GxVBassPreAmp.lv2")
3141 (synopsis "Simulation of the Vox Venue Bass 100 Pre Amp Section")
3142 (description "This package provides the LV2 plugin \"GxVBassPreAmp\", a
3143pre-amplifier simulation modelled after the 1984 Vox Venue Bass 100 Pre Amp
3144Section."))))
cdc7a021
RW
3145
3146(define-public gx-overdriver-lv2
3147 (let ((commit "ed71801987449414bf3adaa0dbfac68e8775f1ce")
3148 (revision "1"))
1b74b126 3149 (package (inherit gx-guvnor-lv2)
cdc7a021
RW
3150 (name "gx-overdriver-lv2")
3151 (version (string-append "0-" revision "." (string-take commit 9)))
3152 (source (origin
3153 (method git-fetch)
3154 (uri (git-reference
3155 (url "https://github.com/brummer10/GxOverDriver.lv2")
3156 (commit commit)))
3157 (sha256
3158 (base32
3159 "13j614jh525fbkby79nnzwj0z1ac0c9wclyn5pfqvkmx6a7j24r8"))
3160 (file-name (string-append name "-" version "-checkout"))))
3161 (home-page "https://github.com/brummer10/GxOverDriver.lv2")
3162 (synopsis "Overdrive effect with level and tone control")
3163 (description "This package provides the LV2 plugin \"GxOverDriver\", an
3164overdrive effect."))))
4d95cd30
RW
3165
3166(define-public gx-tone-mender-lv2
3167 (let ((commit "b6780b4a3e4782b3ed0e5882d6788f178aed138f")
3168 (revision "1"))
1b74b126 3169 (package (inherit gx-guvnor-lv2)
4d95cd30
RW
3170 (name "gx-tone-mender-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/GxToneMender.lv2")
3176 (commit commit)))
3177 (sha256
3178 (base32
3179 "07qdcfsvv2vdnfnjh91pfgvjdcs5y91nvwfm8c0z8fp6b4bk7a9q"))
3180 (file-name (string-append name "-" version "-checkout"))))
3181 (home-page "https://github.com/brummer10/GxToneMender.lv2")
3182 (synopsis "Clean boost with a 3-knob tonestack")
3183 (description "This package provides the LV2 plugin \"GxToneMender\", a
3184clean boost effect with a 3-knob tonestack."))))
4d4bfdc2
RW
3185
3186(define-public gx-push-pull-lv2
3187 (let ((commit "7f76ae2068498643ac8671ee0930b13ee3fd8eb5")
3188 (revision "1"))
1b74b126 3189 (package (inherit gx-guvnor-lv2)
4d4bfdc2
RW
3190 (name "gx-push-pull-lv2")
3191 (version (string-append "0-" revision "." (string-take commit 9)))
3192 (source (origin
3193 (method git-fetch)
3194 (uri (git-reference
3195 (url "https://github.com/brummer10/GxPushPull.lv2")
3196 (commit commit)))
3197 (sha256
3198 (base32
3199 "12f5hwck2irph0gjbj8xy8jqcqdwb8l1hlwf29k0clz52h1jhb5q"))
3200 (file-name (string-append name "-" version "-checkout"))))
3201 (home-page "https://github.com/brummer10/GxPushPull.lv2")
3202 (synopsis "Octave up push pull transistor fuzz simulation")
3203 (description "This package provides the LV2 plugin \"GxPushPull\", a
3204simulation of a push pull transistor fuzz effect with added high octave."))))
3eb1a964
RW
3205
3206(define-public gx-suppa-tone-bender-lv2
f959991d
RW
3207 (package (inherit gx-guvnor-lv2)
3208 (name "gx-suppa-tone-bender-lv2")
3209 (version "0.1")
3210 (source (origin
48b95a19
RW
3211 (method git-fetch)
3212 (uri (git-reference
3213 (url "https://github.com/brummer10/GxSuppaToneBender.lv2.git")
3214 (commit (string-append "v" version))))
3215 (file-name (string-append name "-" version "-checkout"))
f959991d
RW
3216 (sha256
3217 (base32
48b95a19 3218 "01x6bjmllkmvxfzc5xwdix7w021j26js71awv728cxsmkxgqw0zy"))))
f959991d
RW
3219 (home-page "https://github.com/brummer10/GxSuppaToneBender.lv2")
3220 (synopsis "Simulation of the Vox Suppa Tone Bender pedal")
3221 (description "This package provides the LV2 plugin
3eb1a964 3222\"GxSuppaToneBender\", a simulation modelled after the Vox Suppa Tone Bender
f959991d 3223pedal.")))
664f677f
RW
3224
3225(define-public gx-saturator-lv2
d9f65bd3
RW
3226 (let ((commit "605330f432c94b6eb3f8203cbe472befae959532")
3227 (revision "3"))
ad67ca3d 3228 (package (inherit gx-vbass-preamp-lv2)
664f677f
RW
3229 (name "gx-saturator-lv2")
3230 (version (string-append "0-" revision "." (string-take commit 9)))
3231 (source (origin
3232 (method git-fetch)
3233 (uri (git-reference
3234 (url "https://github.com/brummer10/GxSaturator.lv2")
3235 (commit commit)))
3236 (sha256
3237 (base32
d9f65bd3 3238 "1w4nvh0rmxrv3s3hmh4fs74f3hc0jn31v00j769j7v68mqr7kawy"))
664f677f
RW
3239 (file-name (string-append name "-" version "-checkout"))))
3240 (home-page "https://github.com/brummer10/GxSaturator.lv2")
3241 (synopsis "Saturation effect")
3242 (description "This package provides the LV2 plugin \"GxSaturator\", a
3243saturation effect."))))
89412238
RW
3244
3245(define-public gx-hyperion-lv2
4396e9b5
RW
3246 (package (inherit gx-guvnor-lv2)
3247 (name "gx-hyperion-lv2")
3248 (version "0.1")
3249 (source (origin
37519239
RW
3250 (method git-fetch)
3251 (uri (git-reference
3252 (url "https://github.com/brummer10/GxHyperion.lv2.git")
3253 (commit (string-append "v" version))))
3254 (file-name (string-append name "-" version "-checkout"))
4396e9b5
RW
3255 (sha256
3256 (base32
37519239 3257 "1vx79s6s9if117y2g0ppdja2sv2wcny6xcfl3j1z4cipahnildxf"))))
4396e9b5
RW
3258 (home-page "https://github.com/brummer10/GxHyperion.lv2")
3259 (synopsis "Simulation of the Hyperion Fuzz pedal")
3260 (description "This package provides the LV2 plugin \"GxHyperion\", a
3261simulation of the Hyperion Fuzz pedal.")))
32536f00
RW
3262
3263(define-public gx-voodoo-fuzz-lv2
cf44ebeb
RW
3264 (package (inherit gx-guvnor-lv2)
3265 (name "gx-voodoo-fuzz-lv2")
3266 (version "0.1")
3267 (source (origin
d42c6613
RW
3268 (method git-fetch)
3269 (uri (git-reference
3270 (url "https://github.com/brummer10/GxVoodoFuzz.lv2.git")
3271 (commit (string-append "v" version))))
3272 (file-name (string-append name "-" version "-checkout"))
cf44ebeb
RW
3273 (sha256
3274 (base32
d42c6613 3275 "1v0scphivri1fk4hl20j13f92i48mnx1zsil4hgnadsmm4nsfw43"))))
cf44ebeb
RW
3276 (home-page "https://github.com/brummer10/GxVoodoFuzz.lv2")
3277 (synopsis "Fuzz effect modelled after the Voodoo Lab SuperFuzz")
3278 (description "This package provides the LV2 plugin \"GxVoodooFuzz\", a
32536f00
RW
3279simulation modelled after the Voodoo Lab SuperFuzz pedal. It's basically a
3280Bosstone circuit, followed by the tone control of the FoxToneMachine in
cf44ebeb 3281parallel with a DarkBooster, followed by a volume control.")))
29f63222
RW
3282
3283(define-public gx-super-fuzz-lv2
34a3ecfe
RW
3284 (package (inherit gx-guvnor-lv2)
3285 (name "gx-super-fuzz-lv2")
3286 (version "0.1")
3287 (source (origin
5057535f
RW
3288 (method git-fetch)
3289 (uri (git-reference
3290 (url "https://github.com/brummer10/GxSuperFuzz.lv2.git")
3291 (commit (string-append "v" version))))
3292 (file-name (string-append name "-" version "-checkout"))
34a3ecfe
RW
3293 (sha256
3294 (base32
5057535f 3295 "1jlljd9hlgfflbiizq47lv1xbbgjyx3v835mf24zmh1q5zsw4np4"))))
34a3ecfe
RW
3296 (home-page "https://github.com/brummer10/GxSuperFuzz.lv2")
3297 (synopsis "Fuzz effect modelled after the UniVox SuperFuzz")
a6f39d7c 3298 (description "This package provides the LV2 plugin \"GxSuperFuzz\", an
29f63222 3299analog simulation of the UniVox SuperFuzz pedal. In this simulation the trim
d1e4ad1b 3300pot, which is usually in the housing, is exposed as a control parameter. It
34a3ecfe 3301adjusts the amount of harmonics.")))
40bffdfa
RW
3302
3303(define-public gx-vintage-fuzz-master-lv2
38050923
RW
3304 (package (inherit gx-guvnor-lv2)
3305 (name "gx-vintage-fuzz-master-lv2")
3306 (version "0.1")
3307 (source (origin
0febd673
RW
3308 (method git-fetch)
3309 (uri (git-reference
3310 (url "https://github.com/brummer10/GxVintageFuzzMaster.lv2.git")
3311 (commit (string-append "v" version))))
3312 (file-name (string-append name "-" version "-checkout"))
38050923
RW
3313 (sha256
3314 (base32
0febd673 3315 "02jb211z8rw2qr5r1z5mdxlqgiw6cbc319xpqplvn6k21c59mskv"))))
38050923
RW
3316 (home-page "https://github.com/brummer10/GxVintageFuzzMaster.lv2")
3317 (synopsis "Fuzz effect simulation of the vintage Fuzz Master")
3318 (description "This package provides the LV2 plugin
3319\"GxVintageFuzzMaster\", a simulation of the vintage Fuzz Master pedal.")))
631f8175
RW
3320
3321(define-public gx-slow-gear-lv2
d921a1f4
RW
3322 (let ((commit "5d37e775b0feef1d82feee94e2a7a2d7e57efe2d")
3323 (revision "3"))
ad67ca3d 3324 (package (inherit gx-vbass-preamp-lv2)
631f8175
RW
3325 (name "gx-slow-gear-lv2")
3326 (version (string-append "0-" revision "." (string-take commit 9)))
3327 (source (origin
3328 (method git-fetch)
3329 (uri (git-reference
3330 (url "https://github.com/brummer10/GxSlowGear.lv2")
3331 (commit commit)))
3332 (sha256
3333 (base32
d921a1f4 3334 "141mz69zkhk3lm54bb6wgpnghb92zm1ig7fv07240cmhydqji1q1"))
631f8175
RW
3335 (file-name (string-append name "-" version "-checkout"))))
3336 (home-page "https://github.com/brummer10/GxSlowGear.lv2")
3337 (synopsis "Slow gear audio effect")
3338 (description "This package provides the LV2 plugin \"GxSlowGear\", a
3339slow gear audio effect to produce volume swells."))))
d75e8f5a
RW
3340
3341(define-public gx-switchless-wah-lv2
cfcef2c2
RW
3342 (let ((commit "7b08691203314612999f0ce2328cdc1161cd6665")
3343 (revision "2"))
1b74b126 3344 (package (inherit gx-guvnor-lv2)
d75e8f5a
RW
3345 (name "gx-switchless-wah-lv2")
3346 (version (string-append "0-" revision "." (string-take commit 9)))
3347 (source (origin
3348 (method git-fetch)
3349 (uri (git-reference
3350 (url "https://github.com/brummer10/GxSwitchlessWah.lv2")
3351 (commit commit)))
3352 (sha256
3353 (base32
cfcef2c2 3354 "04jqfpncmrrqn34p21w4v9m2x5a5wsqwbm4f3byxvq4vcibwxzk2"))
d75e8f5a
RW
3355 (file-name (string-append name "-" version "-checkout"))))
3356 (home-page "https://github.com/brummer10/GxSwitchlessWah.lv2")
3357 (synopsis "Wah emulation with switchless activation")
3358 (description "This package provides the LV2 plugin \"GxSwitchlessWah\",
3359a simulation of an analog Wah pedal with switchless activation."))))
84d53724 3360
a734da86
RW
3361(define-public rkrlv2
3362 (let ((commit "d8c17d3c976107e5c012970276d7cf0aa059f15b")
3363 (revision "1"))
3364 (package
3365 (name "rkrlv2")
3366 (version (git-version "0" revision commit))
3367 (source (origin
3368 (method git-fetch)
3369 (uri (git-reference
3370 (url "https://github.com/ssj71/rkrlv2.git")
3371 (commit commit)))
3372 (sha256
3373 (base32
3374 "035z068rlafb7ibgqf34ck2lm4fab8yzlx41qh061x2xi4hxkvp0"))
3375 (file-name (git-file-name name version))))
3376 (build-system cmake-build-system)
3377 (arguments '(#:tests? #f)) ; there are no tests
3378 (inputs
3379 `(("fftw" ,fftw)
3380 ("libsamplerate" ,libsamplerate)
3381 ("lv2" ,lv2)))
3382 (native-inputs
3383 `(("pkg-config" ,pkg-config)))
3384 (home-page "https://github.com/ssj71/rkrlv2")
3385 (synopsis "Rakarrack effects ported to LV2 plugins")
3386 (description "This package provides the Rakarrack effects as LV2
3387plugins. The ports are done such that hopefully when Rakarrack gets an active
3388maintainer these will get merged into the original project.")
3389 (license license:gpl2))))
3390
84d53724 3391(define-public mod-utilities
fe049d21
RW
3392 (let ((commit "80ea3ea9f52fab7f191671f4810bf90fc955a046")
3393 (revision "2"))
84d53724
RW
3394 (package
3395 (name "mod-utilities")
3396 (version (string-append "0-" revision "." (string-take commit 9)))
3397 (source (origin
3398 (method git-fetch)
3399 (uri (git-reference
3400 (url "https://github.com/moddevices/mod-utilities.git")
3401 (commit commit)))
fe049d21 3402 (file-name (string-append name "-" version "-checkout"))
84d53724
RW
3403 (sha256
3404 (base32
fe049d21 3405 "1v55zmzmlg0ka7341x5lsvb44amy17vk27s669ps1basd1bk5s5v"))))
84d53724
RW
3406 (build-system gnu-build-system)
3407 (arguments
3408 `(#:tests? #f ; there are no tests
3409 #:make-flags
3410 (list (string-append "INSTALL_PATH="
3411 (assoc-ref %outputs "out")
fe049d21
RW
3412 "/lib/lv2")
3413 (string-append "PREFIX=" (assoc-ref %outputs "out"))
3414 "CC=gcc")
84d53724
RW
3415 #:phases
3416 (modify-phases %standard-phases
3417 (delete 'configure))))
3418 (inputs
3419 `(("lv2" ,lv2)))
3420 (home-page "https://github.com/moddevices/mod-utilities")
3421 (synopsis "LV2 utility plugins")
3422 (description "This package provides LV2 audio utility plugins, such as
3423filters, crossovers, simple gain plugins without zipper noise, switch box
3424plugins, a switch trigger, a toggle switch, and a peakmeter.")
3425 (license license:gpl2+))))
d3db5efb 3426
951581a2 3427(define-public ingen
19748414
RW
3428 (let ((commit "cc4a4db33f4d126a07a4a498e053c5fb9a883be3")
3429 (revision "2"))
951581a2
RW
3430 (package
3431 (name "ingen")
3432 (version (string-append "0.0.0-" revision "."
3433 (string-take commit 9)))
3434 (source
3435 (origin
3436 (method git-fetch)
3437 (uri (git-reference
0d0252e4 3438 (url "https://git.drobilla.net/ingen.git")
951581a2
RW
3439 (commit commit)))
3440 (file-name (string-append name "-" version "-checkout"))
3441 (sha256
3442 (base32
19748414 3443 "1wg47vjw9djn99gbnsl2bcwj4xhdid61m4wrbn2nlp797flj91ic"))))
951581a2
RW
3444 (build-system waf-build-system)
3445 (arguments
f9dcf79f
RW
3446 `(#:python ,python-2
3447 #:tests? #f ; no "check" target
951581a2
RW
3448 #:configure-flags (list "--no-webkit")
3449 #:phases
3450 (modify-phases %standard-phases
3451 (add-after 'unpack 'patch-wscript
3452 (lambda* (#:key outputs #:allow-other-keys)
3453 (let ((out (assoc-ref outputs "out")))
3454 (substitute* "wscript"
3455 ;; FIXME: Our version of lv2specgen.py does not behave as
3456 ;; expected. Maybe this requires a development version of
3457 ;; LV2.
3458 (("lv2specgen.py") "touch ingen.lv2/ingen.html; echo")
3459 ;; Add libraries to RUNPATH.
3460 (("^(.+)target.*= 'src/ingen/ingen'," line prefix)
3461 (string-append prefix
3462 "linkflags=[\"-Wl,-rpath="
3463 out "/lib" "\"]," line)))
3464 (substitute* '("src/wscript"
3465 "src/server/wscript")
3466 ;; Add libraries to RUNPATH.
3467 (("bld.env.PTHREAD_LINKFLAGS" line)
3468 (string-append line
3469 " + [\"-Wl,-rpath=" out "/lib" "\"]")))
3470 (substitute* "src/client/wscript"
3471 ;; Add libraries to RUNPATH.
3472 (("^(.+)target.*= 'ingen_client'," line prefix)
3473 (string-append prefix
3474 "linkflags=[\"-Wl,-rpath="
3475 out "/lib" "\"]," line)))
3476 (substitute* "src/gui/wscript"
3477 ;; Add libraries to RUNPATH.
3478 (("^(.+)target.* = 'ingen_gui.*" line prefix)
3479 (string-append prefix
3480 "linkflags=[\"-Wl,-rpath="
3481 out "/lib" "\"]," line))))
3482 #t)))))
3483 (inputs
3484 `(("boost" ,boost)
3485 ("python-rdflib" ,python-rdflib)
3486 ("python" ,python)
3487 ("jack" ,jack-1)
a2467954 3488 ("lv2" ,lv2)
951581a2
RW
3489 ("lilv" ,lilv)
3490 ("raul" ,raul-devel)
3491 ("ganv" ,ganv-devel)
3492 ("suil" ,suil)
3493 ("serd" ,serd)
3494 ("sord" ,sord)
3495 ("sratom" ,sratom)
3496 ("gtkmm" ,gtkmm-2)))
3497 (native-inputs
3498 `(("pkg-config" ,pkg-config)
3499 ("python-pygments" ,python-pygments)))
0d0252e4 3500 (home-page "https://drobilla.net/software/ingen")
951581a2
RW
3501 (synopsis "Modular audio processing system")
3502 (description "Ingen is a modular audio processing system for JACK and
3503LV2 based systems. Ingen is built around LV2 technology and a strict
3504separation of engine from user interface. The engine is controlled
3505exclusively through a protocol, and can execute as a headless process, with an
3506in-process GUI, or as an LV2 plugin. The GUI can run as a program which
3507communicates over a Unix or TCP/IP socket, or as an embeddable LV2 GUI which
3508communicates via LV2 ports. Any saved Ingen graph can be loaded as an LV2
3509plugin on any system where Ingen is installed. This allows users to visually
3510develop custom plugins for use in other applications without programming.")
3511 (license license:agpl3+))))
3512
b3410b44
RW
3513(define-public qmidiarp
3514 (package
3515 (name "qmidiarp")
b6313997 3516 (version "0.6.5")
b3410b44
RW
3517 (source (origin
3518 (method url-fetch)
3519 (uri (string-append "mirror://sourceforge/qmidiarp/qmidiarp/"
3520 version "/qmidiarp-" version ".tar.bz2"))
3521 (sha256
3522 (base32
b6313997 3523 "043yh1p0rrbj1v840y27529m9260g55gvh1km8az4jxy7mns58r2"))))
b3410b44
RW
3524 (build-system gnu-build-system)
3525 (arguments
3526 `(#:configure-flags
3527 (list "--enable-qt5"
3528 "CXXFLAGS=-std=gnu++11")))
3529 (inputs
3530 `(("qtbase" ,qtbase)
3531 ("alsa-lib" ,alsa-lib)
3532 ("jack" ,jack-1)
3533 ("liblo" ,liblo)
3534 ("lv2" ,lv2)))
3535 (native-inputs
3536 `(("pkg-config" ,pkg-config)
3537 ("qttools" ,qttools)))
3538 (home-page "http://qmidiarp.sourceforge.net/")
3539 (synopsis "MIDI arpeggiator")
3540 (description "QMidiArp is an advanced MIDI arpeggiator, programmable step
3541sequencer and LFO. It can hold any number of arpeggiator, sequencer, or LFO
3542modules running in parallel.")
3543 (license license:gpl2+)))
3544
ff49437d
RW
3545(define-public qmidiroute
3546 (package
3547 (name "qmidiroute")
3548 (version "0.4.0")
3549 (source (origin
3550 (method url-fetch)
3551 (uri (string-append "mirror://sourceforge/alsamodular/QMidiRoute/"
3552 version "/qmidiroute-" version ".tar.bz2"))
3553 (sha256
3554 (base32
3555 "19v1ppbglgl3z9v7xdqc0k33w71cqq8a7d6ihvfs7iz77dygrih9"))))
3556 (build-system gnu-build-system)
3557 (arguments
3558 `(#:configure-flags
3559 (list "--enable-qt5"
3560 "CXXFLAGS=-std=gnu++11")))
3561 (inputs
3562 `(("qtbase" ,qtbase)
3563 ("alsa-lib" ,alsa-lib)))
3564 (native-inputs
3565 `(("pkg-config" ,pkg-config)
3566 ("qttools" ,qttools)))
3567 (home-page "http://alsamodular.sourceforge.net/")
3568 (synopsis "MIDI event router and filter")
3569 (description "QMidiRoute is a MIDI event router and filter. MIDI note,
3570control change, program change and pitch bend events are logged, and can be
3571filtered, redirected and transformed into other events according to MIDI maps
3572defined as tabs in the main control surface.")
3573 (license license:gpl2+)))
3574
5a66e25c
RW
3575(define-public seq24
3576 (package
3577 (name "seq24")
3578 (version "0.9.3")
3579 (source (origin
3580 (method url-fetch)
3581 (uri (string-append "https://launchpad.net/seq24/trunk/"
3582 version "/+download/seq24-"
3583 version ".tar.bz2"))
3584 (sha256
3585 (base32
3586 "12dphdhnvfk1k0vmagi1v2lhyxjyj1j3cz6ksjw0ydcvid1x8ap2"))
3587 (patches (search-patches "seq24-rename-mutex.patch"))))
3588 (build-system gnu-build-system)
3589 (arguments
3590 `(#:configure-flags
3591 (list "CXXFLAGS=-std=gnu++11")))
3592 (inputs
3593 `(("gtkmm" ,gtkmm-2)
3594 ("alsa-lib" ,alsa-lib)
3595 ("jack" ,jack-1)
3596 ("lash" ,lash)))
3597 (native-inputs
3598 `(("pkg-config" ,pkg-config)))
3599 (home-page "https://edge.launchpad.net/seq24/")
3600 (synopsis "Real-time MIDI sequencer")
3601 (description "Seq24 is a real-time MIDI sequencer. It was created to
3602provide a very simple interface for editing and playing MIDI loops.")
3603 (license license:gpl2+)))
3604
d3db5efb
LF
3605(define-public python-discogs-client
3606 (package
3607 (name "python-discogs-client")
3608 (version "2.2.1")
3609 (source (origin
3610 (method url-fetch)
3611 (uri (pypi-uri "discogs-client" version))
3612 (sha256
3613 (base32
3614 "053ld2psh0yj3z0kg6z5bn4y3cr562m727494n0ayhgzbkjbacly"))))
3615 (build-system python-build-system)
3616 (propagated-inputs
3617 `(("python-oauthlib" ,python-oauthlib)
3618 ("python-requests" ,python-requests)))
3619 (native-inputs
3620 `(("python-six" ,python-six)))
3621 (home-page "https://github.com/discogs/discogs_client")
3622 (synopsis "Official Python client for the Discogs API")
3623 (description "This is the official Discogs API client for Python. It enables
3624you to query the Discogs database for information on artists, releases, labels,
3625users, Marketplace listings, and more. It also supports OAuth 1.0a
3626authorization, which allows you to change user data such as profile information,
3627collections and wantlists, inventory, and orders.")
80983df3 3628 (license license:bsd-2)))
d3db5efb
LF
3629
3630(define-public python2-discogs-client
80983df3 3631 (package-with-python2 python-discogs-client))
a4f05b46 3632
3633(define-public libsmf
3634 (package
3635 (name "libsmf")
3636 (version "1.3")
3637 (source
3638 (origin
3639 (method url-fetch)
3640 ;; SF download page says development moved, but the link it points to
3641 ;; is gone (https://github.com/nilsgey/libsmf). Someone else adopted
3642 ;; it but made no release so far (https://github.com/stump/libsmf).
3643 (uri (string-append "mirror://sourceforge/libsmf/libsmf/"
3644 version "/libsmf-" version ".tar.gz"))
3645 (sha256
3646 (base32
3647 "16c0n40h0r56gzbh5ypxa4dwp296dan3jminml2qkb4lvqarym6k"))))
3648 (build-system gnu-build-system)
3649 (outputs '("out"
3650 "static")) ; 88KiB of .a files
3651 (arguments
3652 `(#:phases
3653 (modify-phases %standard-phases
3654 (add-after 'install 'move-static-libraries
3655 (lambda* (#:key outputs #:allow-other-keys)
3656 ;; Move static libraries to the "static" output.
3657 (let* ((out (assoc-ref outputs "out"))
3658 (lib (string-append out "/lib"))
3659 (static (assoc-ref outputs "static"))
3660 (slib (string-append static "/lib")))
3661 (mkdir-p slib)
3662 (for-each (lambda (file)
3663 (install-file file slib)
3664 (delete-file file))
3665 (find-files lib "\\.a$"))
3666 #t))))))
3667 (inputs
3668 `(("readline" ,readline)
3669 ("glib" ,glib)))
3670 (native-inputs
3671 `(("doxygen" ,doxygen)
3672 ("pkg-config" ,pkg-config)))
3673 (home-page "http://libsmf.sourceforge.net/")
3674 (synopsis "Standard MIDI File format library")
3675 (description
3676 "LibSMF is a C library for handling SMF (\"*.mid\") files. It transparently handles
3677conversions between time and pulses, tempo map handling and more. The only dependencies
3678are a C compiler and glib. Full API documentation and examples are included.")
3679 (license license:bsd-2)))
a42619e5
RF
3680
3681(define-public lmms
3682 (package
3683 (name "lmms")
3684 (version "1.1.3")
3685 (source
3686 (origin
3a0592ae
RW
3687 (method git-fetch)
3688 (uri (git-reference
3689 (url "https://github.com/LMMS/lmms.git")
3690 (commit (string-append "v" version))))
3691 (file-name (git-file-name name version))
a42619e5
RF
3692 (sha256
3693 (base32
3a0592ae 3694 "03hhymc6d73fa3wbcqb7rm1l03zkw605k5i9kvkvjmv488bqh3pd"))))
a42619e5
RF
3695 (build-system cmake-build-system)
3696 (arguments
3697 `(#:tests? #f ; no tests
3698 #:phases
3699 (modify-phases %standard-phases
ab2ccf4c
KK
3700 (add-before 'configure 'set-ldflags
3701 (lambda* (#:key outputs #:allow-other-keys)
3702 (setenv "LDFLAGS"
3703 (string-append
3704 "-Wl,-rpath=\""
3705 (assoc-ref outputs "out") "/lib/lmms"
3706 ":"
3707 (assoc-ref outputs "out") "/lib/lmms/ladspa"
3708 "\""))
3709 #t))
3710 (add-before 'configure 'remove-Werror
3711 (lambda _
3712 (substitute* "CMakeLists.txt"
3713 (("SET\\(WERROR_FLAGS \"\\$\\{WERROR_FLAGS\\} -Werror")
3714 "SET(WERROR_FLAGS \"${WERROR_FLAGS}"))
3715 #t))
3716 (add-before 'reset-gzip-timestamps 'make-manpages-writable
3717 (lambda* (#:key outputs #:allow-other-keys)
3718 (map (lambda (file)
3719 (make-file-writable file))
3720 (find-files (string-append (assoc-ref outputs "out")
3721 "/share/man")
3722 ".*\\.gz$"))
3723 #t)))))
a42619e5
RF
3724 (native-inputs
3725 `(("pkg-config" ,pkg-config)))
3726 (inputs
3727 `(("sdl" ,sdl)
3728 ("qt" ,qt-4)
3729 ("fltk" ,fltk)
3730 ("libogg" ,libogg)
3731 ("libsamplerate" ,libsamplerate)
9b6dc31b 3732 ("fluidsynth" ,fluidsynth-1) ;XXX: try using 2.x when updating
a42619e5
RF
3733 ("libvorbis" ,libvorbis)
3734 ("alsa-lib" ,alsa-lib)
3735 ("portaudio" ,portaudio)
3736 ("ladspa" ,ladspa)
3737 ("libsndfile1" ,libsndfile)
3738 ("libxft" ,libxft)
3739 ("freetype2" ,freetype)
3740 ("fftw3f" ,fftwf)))
3741 (home-page "https://lmms.io/")
3742 (synopsis "Music composition tool")
3743 (description "LMMS is a digital audio workstation. It includes tools for sequencing
3744melodies and beats and for mixing and arranging songs. LMMS includes instruments based on
3745audio samples and various soft sythesizers. It can receive input from a MIDI keyboard.")
3746 (license license:gpl2+)))
a7a7186c
NG
3747
3748(define-public musescore
3749 (package
3750 (name "musescore")
032ca4ba 3751 (version "3.2.3")
a7a7186c 3752 (source (origin
545ceac8
NG
3753 (method git-fetch)
3754 (uri (git-reference
3755 (url "https://github.com/musescore/MuseScore.git")
3756 (commit (string-append "v" version))))
3757 (file-name (git-file-name name version))
a7a7186c
NG
3758 (sha256
3759 (base32
032ca4ba 3760 "17wx1wl8ns2k31qvrr888dxnrsa13vazg04zh2sn2q4vzd869a7v"))
a7a7186c
NG
3761 (modules '((guix build utils)))
3762 (snippet
3763 ;; Un-bundle OpenSSL and remove unused libraries.
3764 '(begin
3765 (substitute* "thirdparty/kQOAuth/CMakeLists.txt"
3766 (("-I \\$\\{PROJECT_SOURCE_DIR\\}/thirdparty/openssl/include ")
3767 ""))
3768 (substitute* "thirdparty/kQOAuth/kqoauthutils.cpp"
3769 (("#include <openssl/.*") ""))
3770 (for-each delete-file-recursively
3771 '("thirdparty/freetype"
3772 "thirdparty/openssl"
3773 "thirdparty/portmidi"))
8d611ef0 3774 #t))))
11d44d0b 3775 (build-system cmake-build-system)
a7a7186c 3776 (arguments
11d44d0b 3777 `(#:configure-flags
8d611ef0 3778 `("-DBUILD_CRASH_REPORTER=OFF"
11d44d0b 3779 "-DBUILD_WEBENGINE=OFF"
8d611ef0
NG
3780 "-DDOWNLOAD_SOUNDFONT=OFF"
3781 "-DUSE_SYSTEM_FREETYPE=ON")
11d44d0b
NG
3782 ;; There are tests, but no simple target to run. The command used to
3783 ;; run them is:
a7a7186c
NG
3784 ;;
3785 ;; make debug && sudo make installdebug && cd \
3786 ;; build.debug/mtest && make && ctest
3787 ;;
3788 ;; Basically, it requires to start a whole new build process.
3789 ;; So we simply skip them.
11d44d0b 3790 #:tests? #f))
a7a7186c
NG
3791 (inputs
3792 `(("alsa-lib" ,alsa-lib)
3793 ("freetype" ,freetype)
3794 ("gtk+-bin" ,gtk+ "bin") ;for gtk-update-icon-cache
3795 ("jack" ,jack-1)
3796 ("lame" ,lame)
3797 ("libogg" ,libogg)
3798 ("libsndfile" ,libsndfile)
3799 ("libvorbis" ,libvorbis)
3800 ("portaudio" ,portaudio)
b3891a25 3801 ("portmidi" ,portmidi)
a7a7186c
NG
3802 ("pulseaudio" ,pulseaudio)
3803 ("qtbase" ,qtbase)
3804 ("qtdeclarative" ,qtdeclarative)
3805 ("qtscript" ,qtscript)
3806 ("qtsvg" ,qtsvg)
a7a7186c
NG
3807 ("qtxmlpatterns" ,qtxmlpatterns)))
3808 (native-inputs
11d44d0b 3809 `(("pkg-config" ,pkg-config)
a7a7186c
NG
3810 ("qttools" ,qttools)))
3811 (synopsis "Music composition and notation software")
3812 (description "MuseScore is a music score typesetter. Its main purpose is
3813the creation of high-quality engraved musical scores in a WYSIWYG environment.
3814
3815It supports unlimited staves, linked parts and part extraction, tablature,
3816MIDI input, percussion notation, cross-staff beaming, automatic transposition,
3817lyrics (multiple verses), fretboard diagrams, and in general everything
3818commonly used in sheet music. Style options and style sheets to change the
3819appearance and layout are provided.
3820
3821MuseScore can also play back scores through the built-in sequencer and SoundFont
3822sample library.")
3823 (home-page "https://musescore.org")
3824 (license license:gpl2)))
2434f5ce 3825
43188faf
RW
3826(define-public muse-sequencer
3827 (package
3828 (name "muse-sequencer")
3829 (version "3.0.0")
3830 (source (origin
3831 (method git-fetch)
3832 (uri (git-reference
3833 (url "https://github.com/muse-sequencer/muse.git")
3834 (commit (string-append "muse_"
3835 (string-map (lambda (c)
3836 (if (char=? c #\.)
3837 #\_ c)) version)))))
3838 (file-name (string-append name "-" version "-checkout"))
3839 (sha256
3840 (base32
3841 "1nninz8qyqlxxjdnrm79y3gr3056pga9l2fsqh674jd3cjvafya3"))))
3842 (build-system cmake-build-system)
3843 (arguments
3844 `(#:tests? #f ; there is no test target
3845 #:configure-flags
3846 (list "-DENABLE_LV2_SUPPLIED=OFF"
3847 "-DENABLE_RTAUDIO=OFF" ; FIXME: not packaged
3848 "-DENABLE_INSTPATCH=OFF" ; FIXME: not packaged
3849 "-DENABLE_VST_NATIVE=OFF")
3850 #:phases
3851 (modify-phases %standard-phases
3852 (add-after 'unpack 'chdir
3853 (lambda _ (chdir "muse3"))))))
3854 (inputs
3855 `(("alsa-lib" ,alsa-lib)
3856 ("lash" ,lash)
3857 ("jack" ,jack-1)
3858 ("liblo" ,liblo)
3859 ("dssi" ,dssi)
3860 ("ladspa" ,ladspa)
3861 ("lv2" ,lv2)
3862 ("lilv" ,lilv)
3863 ("sord" ,sord)
3864 ("libsndfile" ,libsndfile)
3865 ("libsamplerate" ,libsamplerate)
3866 ("fluidsynth" ,fluidsynth)
3867 ("pcre" ,pcre)
3868 ("qtbase" ,qtbase)
3869 ("qtsvg" ,qtsvg)))
3870 (native-inputs
3871 `(("pkg-config" ,pkg-config)
3872 ("qttools" ,qttools)))
3873 (home-page "http://muse-sequencer.org")
3874 (synopsis "MIDI/Audio sequencer")
3875 (description "MusE is a MIDI/Audio sequencer with recording and editing
3876capabilities. Its audio sequencer supports the LADSPA, DSSI, and LV2 audio
3877plugin formats; the MIDI sequencer provides a piano roll, a drum editor, a
3878list view, and a score editor. MusE aims to be a complete multitrack virtual
3879studio.")
3880 (license license:gpl2+)))
3881
2434f5ce
DM
3882(define-public dssi
3883 (package
3884 (name "dssi")
3885 (version "1.1.1")
3886 (source (origin
3887 (method url-fetch)
3888 (uri (string-append
3889 "mirror://sourceforge/dssi/dssi/" version
3890 "/dssi-" version ".tar.gz"))
3891 (sha256
3892 (base32
3893 "0kl1hzhb7cykzkrqcqgq1dk4xcgrcxv0jja251aq4z4l783jpj7j"))))
3894 (build-system gnu-build-system)
3895 (inputs
3896 `(("alsa-lib" ,alsa-lib)
0e78801a 3897 ("jack" ,jack-1)
2434f5ce
DM
3898 ("ladspa" ,ladspa)
3899 ("libsamplerate" ,libsamplerate)
3900 ("libsndfile" ,libsndfile)
3901 ("liblo" ,liblo)))
3902 (native-inputs
3903 `(("pkg-config" ,pkg-config)))
3904 (synopsis "Audio plugin API for soft synths and effects")
3905 (description "DSSI is a plugin API for software instruments with user
3906interfaces, permitting them to be hosted in-process by audio applications.
3907It is intended to be simple, GUI-toolkit-agnostic, and slightly biased
3908towards familiarity with MIDI. The DSSI distribution package contains
3909a JACK/ALSA-sequencer reference host and some plugins as well as the
3910specification and header.")
3911 (home-page "http://dssi.sourceforge.net/")
3912 ;; The DSSI interface is LGPL2.1+, some tests and examples are GPL2+.
3913 ;; The vast majority of examples are in the public domain.
3914 (license (list license:lgpl2.1+ license:gpl2+))))
9bc38f28
DM
3915
3916(define-public rosegarden
3917 (package
3918 (name "rosegarden")
0d5101c3 3919 (version "18.12")
9bc38f28
DM
3920 (source (origin
3921 (method url-fetch)
3922 (uri (string-append
3923 "mirror://sourceforge/rosegarden/rosegarden/"
3924 version "/rosegarden-" version ".tar.bz2"))
3925 (sha256
3926 (base32
0d5101c3 3927 "15i9fm0vkn3wsgahaxqi1j5zs0wc0j3wdwml0x49084gk2p328vb"))))
9bc38f28
DM
3928 (build-system cmake-build-system)
3929 (arguments
0d5101c3 3930 `(#:configure-flags '("-DCMAKE_BUILD_TYPE=Release")
9bc38f28
DM
3931 #:phases
3932 (modify-phases %standard-phases
3933 (add-after 'unpack 'patch-tests
3934 (lambda _
3935 (substitute* "CMakeLists.txt"
3936 (("BUILD_TESTING OFF") "BUILD_TESTING ON")
3937 ;; Make tests work.
3938 ((" -fvisibility=hidden") ""))
3939 #t))
3940 (add-after 'unpack 'fix-references
3941 (lambda* (#:key inputs #:allow-other-keys)
3942 (substitute* "src/gui/general/ProjectPackager.cpp"
3943 (("\"flac\\>")
3944 (string-append "\"" (assoc-ref inputs "flac") "/bin/flac"))
3945 (("\"wavpack\\>")
3946 (string-append "\"" (assoc-ref inputs "wavpack") "/bin/wavpack"))
3947 (("\"wvunpack\\>")
3948 (string-append "\"" (assoc-ref inputs "wavpack") "/bin/wvunpack"))
3949 (("\"bash\\>")
3950 (string-append "\"" (assoc-ref inputs "bash") "/bin/bash"))
3951 (("\"tar\\>")
3952 (string-append "\"" (assoc-ref inputs "tar") "/bin/tar")))
3953 (substitute* "src/gui/general/LilyPondProcessor.cpp"
3954 (("\"convert-ly\\>")
3955 (string-append "\"" (assoc-ref inputs "lilypond") "/bin/convert-ly"))
3956 (("\"lilypond\\>")
3957 (string-append "\"" (assoc-ref inputs "lilypond") "/bin/lilypond")))
3958 #t))
3959 (add-after 'unpack 'make-reproducible
3960 (lambda _
3961 ;; Prevent Last-Modified from being written.
3962 ;; The "*.qm" files that are used in locale.qrc would have a new
3963 ;; mtime otherwise that is written into qrc_locale.cpp in the
3964 ;; end - except when we disable it.
3965 (substitute* "src/CMakeLists.txt"
3966 (("COMMAND [$][{]QT_RCC_EXECUTABLE[}]")
3967 "COMMAND ${QT_RCC_EXECUTABLE} --format-version 1")
3968 ;; Extraneous.
3969 ;(("qt5_add_resources[(]rg_SOURCES ../data/data.qrc[)]")
3970 ; "qt5_add_resources(rg_SOURCES ../data/data.qrc OPTIONS --format-version 1)")
3971 )
3972 ;; Make hashtable traversal order predicable.
3973 (setenv "QT_RCC_TEST" "1") ; important
3974 #t))
3975 (add-before 'check 'prepare-check
3976 (lambda _
3977 (setenv "QT_QPA_PLATFORM" "offscreen")
3978 ;; Tests create files in $HOME/.local/share/rosegarden .
3979 (mkdir-p "/tmp/foo")
3980 (setenv "HOME" "/tmp/foo")
9bf98520 3981 (setenv "XDG_RUNTIME_DIR" "/tmp/foo")
9bc38f28
DM
3982 #t)))))
3983 (inputs
3984 `(("alsa-lib" ,alsa-lib)
3985 ("bash" ,bash)
3986 ("dssi" ,dssi)
3987 ("flac" ,flac)
3988 ("fftwf" ,fftwf)
b94f250e 3989 ("jack" ,jack-1)
9bc38f28
DM
3990 ("ladspa" ,ladspa)
3991 ("liblo" ,liblo)
3992 ("libsamplerate" ,libsamplerate)
3993 ("lilypond" ,lilypond)
3994 ("lrdf" ,lrdf)
3995 ("qtbase" ,qtbase)
3996 ("tar" ,tar)
3997 ("lirc" ,lirc)
3998 ("wavpack" ,wavpack)
3999 ("zlib" ,zlib)))
4000 (native-inputs
4001 `(("pkg-config" ,pkg-config)
4002 ("qtlinguist" ,qttools)))
4003 (synopsis "Music composition and editing environment based around a MIDI
4004sequencer")
4005 (description "Rosegarden is a music composition and editing environment
4006based around a MIDI sequencer that features a rich understanding of music
4007notation and includes basic support for digital audio.")
9bf98520 4008 (home-page "https://www.rosegardenmusic.com/")
9bc38f28 4009 (license license:gpl2)))
30655652 4010
643817e4 4011(define-public patchmatrix
2394afa4
RW
4012 ;; There have been no releases for more than a year.
4013 (let ((commit "a0b0b1e791f4574d5abd059cfe1819c71e8b18d5")
4014 (revision "1"))
4015 (package
4016 (name "patchmatrix")
4017 (version (git-version "0.12.0" revision commit))
4018 (source (origin
4019 (method git-fetch)
4020 (uri (git-reference
4021 (url "https://github.com/OpenMusicKontrollers/patchmatrix.git")
4022 (commit commit)))
4023 (file-name (string-append "patchmatrix-" version "-checkout"))
4024 (sha256
4025 (base32
4026 "0pph4ra7aci3rbpqvvr564pi16vxrk448bmvp8985cd9lbjlrp3m"))))
4027 (build-system meson-build-system)
4028 (arguments
4029 '(#:tests? #f ; no test target
4030 #:phases
4031 (modify-phases %standard-phases
4032 (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
4033 (lambda* (#:key outputs #:allow-other-keys)
4034 (map make-file-writable
4035 (find-files (assoc-ref outputs "out") ".*\\.gz$"))
4036 #t)))))
4037 (inputs
4038 `(("jack" ,jack-1)
4039 ("lv2" ,lv2)
4040 ("mesa" ,mesa)))
4041 (native-inputs
4042 `(("pkg-config" ,pkg-config)))
4043 (home-page "https://github.com/OpenMusicKontrollers/patchmatrix")
4044 (synopsis "Simple JACK patch bay")
4045 (description "PatchMatrix is a patch bay for the JACK audio connection
643817e4
RW
4046kit. It provides a patch bay in flow matrix style for audio, MIDI, CV, and
4047OSC connections.")
2394afa4 4048 (license license:artistic2.0))))
643817e4 4049
30655652
RW
4050(define-public sorcer
4051 (package
4052 (name "sorcer")
4053 (version "1.1.3")
4054 (source (origin
4055 (method url-fetch)
4056 (uri (string-append "https://github.com/openAVproductions/"
4057 "openAV-Sorcer/archive/release-"
4058 version ".tar.gz"))
4059 (file-name (string-append name "-" version ".tar.gz"))
4060 (sha256
4061 (base32
4062 "07iyqj28wm0xc4arrq893bm12xjpz65db7ynrlmf6w8krg8wjmd0"))))
4063 (build-system cmake-build-system)
4064 (arguments
4065 `(#:tests? #f ; no tests included
4066 #:phases
4067 (modify-phases %standard-phases
e5af1f4a
EF
4068 (add-after 'unpack 'remove-architecture-specific-flags
4069 (lambda _
4070 (substitute* "CMakeLists.txt"
4071 (("-msse2 -mfpmath=sse") ""))
4072 #t))
30655652
RW
4073 (add-after 'unpack 'build-faust-sources
4074 (lambda* (#:key inputs #:allow-other-keys)
4075 (with-directory-excursion "faust"
4076 (delete-file "main.cpp")
d7e24652
RW
4077 (invoke "faust" "-i"
4078 "-a" "lv2synth.cpp"
4079 "-o" "main.cpp" "main.dsp")))))))
30655652
RW
4080 (inputs
4081 `(("boost" ,boost)
4082 ("lv2" ,lv2)
4083 ("ntk" ,ntk)))
4084 (native-inputs
4085 `(("faust" ,faust)
4086 ("pkg-config" ,pkg-config)))
4087 (home-page "http://openavproductions.com/sorcer/")
4088 (synopsis "Wavetable LV2 plugin synth")
4089 (description "Sorcer is a wavetable LV2 plugin synthesizer, targeted at
4090the electronic or dubstep genre.")
4091 (license license:gpl3+)))
60b7ed9c 4092
f7ce2134
RW
4093(define-public sonivox-eas
4094 (package
4095 (name "sonivox-eas")
4096 (version "1.1.0")
4097 (source (origin
4098 (method git-fetch)
4099 (uri (git-reference
4100 (url "https://github.com/pedrolcl/Linux-SonivoxEas.git")
4101 (commit (string-append "v" version))))
4102 (file-name (string-append name "-" version "-checkout"))
4103 (sha256
4104 (base32
4105 "0l9gs00p5g4k4qy6i7nv1mfi2n2wnsycwjrgrh9hxzam4irf2mw2"))))
4106 (build-system cmake-build-system)
4107 (arguments '(#:tests? #f)) ; there are no tests
4108 (inputs
4109 `(("alsa-lib" ,alsa-lib)
4110 ("drumstick" ,drumstick)
4111 ("pulseaudio" ,pulseaudio)
4112 ("qtbase" ,qtbase)))
4113 (native-inputs
4114 `(("pkg-config" ,pkg-config)))
4115 (home-page "https://github.com/pedrolcl/Linux-SonivoxEas")
4116 (synopsis "MIDI synthesizer library")
4117 (description "This project is a real time General MIDI synthesizer based
4118on the Sonivox EAS Synthesizer by Google. It does not need external
4119soundfonts, using embedded samples instead.")
4120 ;; Sonivox is released under the ASL2.0; the rest of the code is under
4121 ;; GPLv2+.
4122 (license (list license:gpl2+ license:asl2.0))))
92b36e3a
RW
4123
4124(define-public whysynth
4125 (package
4126 (name "whysynth")
4127 (version "20170701")
4128 (source (origin
4129 (method url-fetch)
4130 (uri (string-append "http://smbolton.com/whysynth/whysynth-"
4131 version ".tar.bz2"))
4132 (sha256
4133 (base32
4134 "02qbn0hbvn1iym4zxv35b201blg31yjpgh71h8db0j5zls2xc0m6"))))
4135 (build-system gnu-build-system)
4136 (inputs
4137 `(("dssi" ,dssi)
4138 ("liblo" ,liblo)
4139 ("fftwf" ,fftwf)
4140 ("gtk+" ,gtk+-2)
4141 ("ladspa" ,ladspa)
4142 ("alsa-lib" ,alsa-lib)))
4143 (native-inputs
4144 `(("pkg-config" ,pkg-config)))
4145 (home-page "http://smbolton.com/whysynth.html")
4146 (synopsis "DSSI software synthesizer")
4147 (description "WhySynth is a versatile softsynth which operates as a plugin
4148for the DSSI Soft Synth Interface. A brief list of features:
4149
4150@enumerate
4151@item 4 oscillators, 2 filters, 3 LFOs, and 5 envelope generators per voice.
4152@item 11 oscillator modes: minBLEP, wavecycle, chorused wavecycle,
4153 asynchronous granular, three FM modes, waveshaper, noise, PADsynth, and phase
4154 distortion.
4155@item 10 filter modes.
4156@item flexible modulation and mixdown options, plus effects.
4157@end enumerate
4158")
4159 (license license:gpl2+)))
6b445c57 4160
4161(define-public libdiscid
4162 (package
4163 (name "libdiscid")
4164 (version "0.6.2")
4165 (source
4166 (origin
4167 (method url-fetch)
4168 (uri (string-append
4169 "http://ftp.musicbrainz.org/pub/musicbrainz/libdiscid/libdiscid-"
4170 version ".tar.gz"))
4171 (sha256
4172 (base32
4173 "1f9irlj3dpb5gyfdnb1m4skbjvx4d4hwiz2152f83m0d9jn47r7r"))))
4174 (arguments `(#:test-target "check"))
4175 (build-system cmake-build-system)
4176 (home-page "https://musicbrainz.org/doc/libdiscid")
4177 (synopsis "Disc id reader library")
4178 (description "libdiscid is a C library for creating MusicBrainz and freedb
4179disc IDs from audio CDs. It reads a CD's table of contents (TOC) and generates
4180an identifier which can be used to lookup the CD at MusicBrainz. Additionally,
4181it provides a submission URL for adding the disc ID to the database and gathers
4182ISRCs and the MCN (=UPC/EAN) from disc.")
4183 (license license:lgpl2.1+)))
1ea29aa0 4184
1331a6c0
GH
4185(define-public python-discid
4186 (package
4187 (name "python-discid")
4188 (version "1.1.1")
4189 (source
4190 (origin
4191 (method url-fetch)
4192 (uri (pypi-uri "discid" version))
4193 (sha256
4194 (base32
4195 "1fgp67nhqlbvhhwrcxq5avil7alpzw4s4579hlyvxzbphdnbz8vq"))))
4196 (build-system python-build-system)
4197 (inputs
4198 `(("libdiscid" ,libdiscid)))
4199 (arguments
4200 `(#:phases
4201 (modify-phases %standard-phases
4202 (add-before 'build 'set-libdiscid
4203 ;; Set path of libdiscid
4204 (lambda* (#:key inputs #:allow-other-keys)
4205 (let ((discid (assoc-ref inputs "libdiscid")))
4206 (substitute* "discid/libdiscid.py"
4207 (("lib_name = (.*)$" all name)
4208 (string-append "lib_name = \"" discid
4209 "/lib/libdiscid.so.0\"\n")))
4210 #t))))))
4211 (home-page "https://python-discid.readthedocs.io/")
4212 (synopsis "Python bindings for Libdiscid")
4213 (description
4214 "This package provides Python bindings for the Libdiscid library. The
4215main purpose is the calculation of @url{https://musicbrainz.org/doc/Disc%20ID,
4216Disc IDs} for use with the MusicBrainz database. Additionally the disc
4217@dfn{Media Catalog Number} (MCN) and track @dfn{International Standard
4218Recording Code} (ISRC) can be extracted.}")
4219 (license license:lgpl3+)))
4220
1ea29aa0 4221(define-public libmusicbrainz
4222 (package
4223 (name "libmusicbrainz")
4224 (version "5.1.0")
4225 (source
4226 (origin
4227 (method url-fetch)
4228 (uri (string-append
4229 "https://github.com/metabrainz/libmusicbrainz/releases/download/release-"
4230 version "/libmusicbrainz-" version ".tar.gz"))
4231 (sha256
4232 (base32
8c71a52c 4233 "0ikb9igyyk28jm34raxfzkw2qyn4nzzwsymdyprp7cmvi6g2ajb7"))))
1ea29aa0 4234 (build-system cmake-build-system)
69cb939e
RW
4235 (arguments
4236 `(#:phases
4237 (modify-phases %standard-phases
4238 (replace 'check
4239 (lambda _
4240 ;; requires network connections
4241 ;; (invoke "tests/mbtest")
4242 (invoke "tests/ctest")
4243 #t)))))
1ea29aa0 4244 (inputs `(("neon" ,neon)
4245 ("libxml2" ,libxml2)))
4246 (native-inputs `(("pkg-config" ,pkg-config)))
4247 (home-page "https://musicbrainz.org/doc/libmusicbrainz")
4248 (synopsis "MusicBrainz client library")
4249 (description "The MusicBrainz Client Library (libmusicbrainz), also known as
4250mb_client, is a development library geared towards developers who wish to add
4251MusicBrainz lookup capabilities to their applications.")
4252 (license license:lgpl2.1+)))
87d1b7b0 4253
b0c2c5ab
LC
4254(define-public perl-musicbrainz-discid
4255 (package
4256 (name "perl-musicbrainz-discid")
4257 (version "0.04")
4258 (source (origin
4259 (method url-fetch)
4260 (uri (string-append
4261 "mirror://cpan/authors/id/N/NJ/NJH/MusicBrainz-DiscID-"
4262 version ".tar.gz"))
4263 (sha256
4264 (base32
4265 "1i4qk1qfcmxdibqkyfjrrjdq2zk42vjcz590qgiyc47fi9p6xx1j"))))
4266 (build-system perl-build-system)
4267 (native-inputs `(("pkg-config" ,pkg-config)
4268 ("which" ,which)))
4269 (inputs `(("libdiscid" ,libdiscid)))
4270 (home-page "https://metacpan.org/release/MusicBrainz-DiscID")
4271 (synopsis "Perl interface to the MusicBrainz libdiscid library")
4272 (description
4273 "The @code{MusicBrainz::DiscID} module is a Perl interface to the
4274MusicBrainz libdiscid library, allowing you to manipulate digital audio
4275compact disc (CDDA) identifiers.")
4276 (license license:gpl2)))
4277
b2961dda
LC
4278(define-public perl-webservice-musicbrainz
4279 (package
4280 (name "perl-webservice-musicbrainz")
b0842a8e 4281 (version "1.0.5")
b2961dda
LC
4282 (source (origin
4283 (method url-fetch)
4284 (uri (string-append
4285 "mirror://cpan/authors/id/B/BF/BFAIST/WebService-MusicBrainz-"
4286 version ".tar.gz"))
4287 (sha256
4288 (base32
b0842a8e 4289 "16chs1l58cf000d5kalkyph3p31ci73p1rlyx98mfv10d2cq6fsj"))))
b2961dda
LC
4290 (build-system perl-build-system)
4291 (arguments
4292 ;; Tests try to connect to http://musicbrainz.org.
4293 '(#:tests? #f))
4294 (native-inputs
4295 `(("perl-module-build" ,perl-module-build)))
4296 (propagated-inputs
4297 `(("perl-mojolicious" ,perl-mojolicious)))
4298 (home-page "https://metacpan.org/release/WebService-MusicBrainz")
4299 (synopsis "Web service API to the MusicBrainz database")
4300 (description
4301 "This module searches the MusicBrainz database through their web service
4302at @code{musicbrainz.org}.")
4303 (license license:perl-license)))
4304
87d1b7b0
PN
4305(define-public clyrics
4306 (package
4307 (name "clyrics")
7f56f107 4308 (version "0.11")
87d1b7b0
PN
4309 (source
4310 (origin
234a1825
RW
4311 (method git-fetch)
4312 (uri (git-reference
4313 (url "https://github.com/trizen/clyrics.git")
4314 (commit version)))
4315 (file-name (git-file-name name version))
87d1b7b0
PN
4316 (sha256
4317 (base32
7f56f107 4318 "0vfjy555achgi5zwa34x4q7r692nc6bq4jx518a5w4m7k5fvm71j"))))
87d1b7b0 4319 (build-system trivial-build-system)
87d1b7b0 4320 (inputs
7f56f107 4321 `(("bash" ,bash) ; for the wrapped program
87d1b7b0
PN
4322 ("perl" ,perl)
4323 ("perl-www-mechanize" ,perl-www-mechanize)
4324 ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
4325 ;; Required or else LWP will fail with "GET https://www.google.com/ ==>
4326 ;; 500 Can't verify SSL peers without knowing which Certificate
4327 ;; Authorities to trust".
4328 ("perl-mozilla-ca" ,perl-mozilla-ca)))
4329 (arguments
4330 `(#:modules ((guix build utils))
4331 #:builder (begin
4332 (use-modules (guix build utils)
4333 (ice-9 match)
4334 (srfi srfi-26))
4335 (let* ((source (assoc-ref %build-inputs "source"))
87d1b7b0
PN
4336 (output (assoc-ref %outputs "out")))
4337 (setenv "PATH"
4338 (string-append
87d1b7b0
PN
4339 (assoc-ref %build-inputs "bash") "/bin" ":"
4340 (assoc-ref %build-inputs "perl") "/bin" ":"))
234a1825 4341 (copy-recursively source (getcwd))
87d1b7b0
PN
4342 (patch-shebang "clyrics")
4343 (substitute* "clyrics"
4344 (("/usr/share") output))
4345 (install-file "clyrics" (string-append output "/bin"))
4346 (wrap-program (string-append output "/bin/clyrics")
4347 `("PERL5LIB" ":" =
4348 ,(delete
4349 ""
4350 (map (match-lambda
7f56f107
TGR
4351 (((? (cut string-prefix? "perl-" <>) name) . dir)
4352 (string-append dir "/lib/perl5/site_perl"))
4353 (_ ""))
87d1b7b0
PN
4354 %build-inputs))))
4355 (copy-recursively "plugins" (string-append output "/clyrics"))
4356 #t))))
4357 (home-page "https://github.com/trizen/clyrics")
4358 (synopsis "Extensible lyrics fetcher")
4359 (description
4360 "Clyrics is an extensible command-line tool to fetch the lyrics of songs.
4361It can be used in daemon mode along with the Music-on-Console (MOC) and cmus
4362console music players.")
4363 (license license:gpl3+)))
5703380b
PN
4364
4365(define-public demlo
4366 (let ((commit "fe9ec4c8ac2fa995ec18e6ac86d50d46df06ec01")
4367 (revision "0"))
4368 (package
4369 (name "demlo")
4370 (version (git-version "3.8" revision commit))
4371 (source
4372 (origin
4373 (method git-fetch)
4374 (uri (git-reference
4375 (url
4376 "https://gitlab.com/ambrevar/demlo")
4377 (commit commit)))
4378 (file-name (git-file-name name version))
4379 (sha256
4380 (base32
4381 "1afkbqhzn6da7zaf5ab7dvyqj1izqhzprwfb4hw448fllda9bdvk"))))
4382 (build-system go-build-system)
4383 (native-inputs
4384 `(("lua" ,lua)
4385 ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
4386 ("go-github-com-mattn-go-colorable" ,go-github-com-mattn-go-colorable)
4387 ("go-github-com-aarzilli-golua" ,go-github-com-aarzilli-golua)
4388 ("go-gitlab-com-ambrevar-damerau" ,go-gitlab-com-ambrevar-damerau)
4389 ("go-gitlab-com-ambrevar-golua-unicode" ,go-gitlab-com-ambrevar-golua-unicode)
4390 ("go-github-com-mgutz-ansi" ,go-github-com-mgutz-ansi)
4391 ("go-github-com-michiwend-gomusicbrainz" ,go-github-com-michiwend-gomusicbrainz)
4392 ("go-github-com-stevedonovan-luar" ,go-github-com-stevedonovan-luar)
4393 ("go-github-com-wtolson-go-taglib" ,go-github-com-wtolson-go-taglib)
4394 ("go-github-com-yookoala-realpath" ,go-github-com-yookoala-realpath)))
4395 (inputs
4396 `(("chromaprint" ,chromaprint)
4397 ("ffmpeg" ,ffmpeg)))
4398 (arguments
4399 `(#:import-path "gitlab.com/ambrevar/demlo"
4400 #:phases
4401 (modify-phases %standard-phases
4402 (add-after 'install 'wrap-program
4403 (lambda* (#:key inputs outputs #:allow-other-keys)
4404 (let ((out (assoc-ref outputs "out"))
4405 (ffmpeg (assoc-ref inputs "ffmpeg"))
4406 (chromaprint (assoc-ref inputs "chromaprint")))
4407 (wrap-program (string-append out "/bin/demlo")
4408 `("XDG_DATA_DIRS" ":" prefix (,out))
4409 `("PATH" ":" prefix
4410 ,(map (lambda (dir)
4411 (string-append dir "/bin:"
4412 dir "/sbin"))
4413 (list ffmpeg chromaprint))))
4414 #t)))
e3900a4d 4415 (add-after 'install 'install-scripts
5703380b
PN
4416 (lambda* (#:key outputs #:allow-other-keys)
4417 (let* ((out (assoc-ref outputs "out"))
4418 (root (string-append out "/src/gitlab.com/ambrevar/demlo"))
4419 (xdg-data-dirs (string-append out "/demlo")))
4420 (copy-recursively (string-append root "/actions")
4421 (string-append xdg-data-dirs "/actions"))
4422 (copy-recursively (string-append root "/scripts")
4423 (string-append xdg-data-dirs "/scripts"))
4424 (install-file (string-append root "/config.lua") xdg-data-dirs)
4425 ;; TODO: Test fish completion.
4426 (install-file (string-append root "/completion/demlo.fish")
4427 (string-append out "/share/fish/vendor_completions.d"))
4428 #t))))))
4429 (home-page "https://gitlab.com/ambrevar/demlo")
4430 (synopsis "Dynamic and extensible music library organizer")
4431 (description "Demlo is a music library organizer. It can encode, fix
4432case, change folder hierarchy according to tags or file properties, tag from
4433an online database, copy covers while ignoring duplicates or those below a
4434quality threshold, and much more. It makes it possible to manage your
4435libraries uniformly and dynamically. You can write your own rules to fit your
4436needs best.
4437
4438Demlo can address any of these recurring music library issues (and much more):
4439
4440@itemize
4441@item Fix the lack of folder structure.
4442@item Normalize tags, fix their case, chose which tags to keep and which to
4443discard.
4444@item Handle lossy and lossless audio differently.
4445@item Handle mp3 id3tags hell...
4446@item Handle multiple covers, whether embedded and/or external, resize covers,
4447discard bad quality ones.
4448@end itemize\n")
4449 (license license:expat))))
e42ba3da
LF
4450
4451(define-public lpd8editor
4452 (package
4453 (name "lpd8editor")
83b9ba26 4454 (version "0.0.13")
e42ba3da
LF
4455 (source (origin
4456 (method git-fetch)
4457 (uri (git-reference
4458 (url "https://github.com/charlesfleche/lpd8editor.git")
4459 (commit (string-append "v" version))))
4460 (file-name (git-file-name name version))
4461 (sha256
4462 (base32
83b9ba26 4463 "0lsz3v493ilq2zr016m7kvymrplxd0n3pqv1pjglpq1h7sjw9764"))))
e42ba3da
LF
4464 (build-system gnu-build-system)
4465 (arguments
4466 '(#:phases
4467 (modify-phases %standard-phases
4468 (add-after 'unpack 'setenv
4469 (lambda _
4470 (setenv "INSTALL_PREFIX"
4471 (assoc-ref %outputs "out"))))
4472 (delete 'configure) ; no configure script
4473 (add-before 'build 'qmake
4474 (lambda _ (invoke "qmake"))))))
4475 (native-inputs
4476 `(("pkg-config" ,pkg-config)))
4477 (inputs
4478 `(("alsa" ,alsa-lib)
4479 ("qtbase" ,qtbase)
4480 ("qtsvg" ,qtsvg)))
4481 (synopsis "Graphical editor for the Akai LPD8 MIDI controller")
4482 (description "lpd8editor is a graphical patch editor for the Akai LPD8 MIDI
4483controller.")
4484 (home-page "https://github.com/charlesfleche/lpd8editor")
4485 (license license:expat)))