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