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