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