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