projects/guix·blob java-team · refs

8287 lines · 316.7 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2014, 2019 Eric Bavier <[email protected]>
3;;; Copyright © 2015-2025 Ricardo Wurmus <[email protected]>
4;;; Copyright © 2015 Paul van der Walt <[email protected]>
5;;; Copyright © 2016 Al McElrath <[email protected]>
6;;; Copyright © 2016, 2017, 2019, 2021-2024 Efraim Flashner <[email protected]>
7;;; Copyright © 2016, 2018, 2021, 2024 Leo Famulari <[email protected]>
8;;; Copyright © 2016, 2017, 2019 Kei Kebreau <[email protected]>
9;;; Copyright © 2016 John J. Foerch <[email protected]>
10;;; Copyright © 2016 Alex Griffin <[email protected]>
11;;; Copyright © 2017 nikita <[email protected]>
12;;; Copyright © 2017 Rodger Fox <[email protected]>
13;;; Copyright © 2017–2025 Nicolas Goaziou <[email protected]>
14;;; Copyright © 2017, 2018, 2019, 2021 Pierre Langlois <[email protected]>
15;;; Copyright © 2017 Arun Isaac <[email protected]>
16;;; Copyright © 2017–2022 Tobias Geerinckx-Rice <[email protected]>
17;;; Copyright © 2018 nee <[email protected]>
18;;; Copyright © 2018, 2021 Stefan Reichör <[email protected]>
19;;; Copyright © 2018 Pierre Neidhardt <[email protected]>
20;;; Copyright © 2018-2019, 2021-2022 Ludovic Courtès <[email protected]>
21;;; Copyright © 2018 Björn Höfling <[email protected]>
22;;; Copyright © 2019 Gabriel Hondet <[email protected]>
23;;; Copyright © 2019 Timotej Lazar <[email protected]>
24;;; Copyright © 2019 Jakob L. Kreuze <[email protected]>
25;;; Copyright © 2019 raingloom <[email protected]>
26;;; Copyright © 2019 David Wilson <[email protected]>
27;;; Copyright © 2019, 2020, 2021 Alexandros Theodotou <[email protected]>
28;;; Copyright © 2020 Vincent Legoll <[email protected]>
29;;; Copyright © 2020 Lars-Dominik Braun <[email protected]>
30;;; Copyright © 2020, 2024 Giacomo Leidi <[email protected]>
31;;; Copyright © 2020, 2022, 2023 Michael Rohleder <[email protected]>
32;;; Copyright © 2020 Tanguy Le Carrour <[email protected]>
33;;; Copyright © 2020, 2022 Marius Bakke <[email protected]>
34;;; Copyright © 2019 Riku Viitanen <[email protected]>
35;;; Copyright © 2020 Ryan Prior <[email protected]>
36;;; Copyright © 2021 Liliana Marie Prikler <[email protected]>
37;;; Copyright © 2021, 2022, 2023, 2024 Vinicius Monego <[email protected]>
38;;; Copyright © 2021 Brendan Tildesley <[email protected]>
39;;; Copyright © 2021 Bonface Munyoki Kilyungi <[email protected]>
40;;; Copyright © 2021 Frank Pursel <[email protected]>
41;;; Copyright © 2021, 2024, 2025 Rovanion Luckey <[email protected]>
42;;; Copyright © 2021 Justin Veilleux <[email protected]>
43;;; Copyright © 2021, 2022, 2023 Felix Gruber <[email protected]>
44;;; Copyright © 2021 Simon Streit <[email protected]>
45;;; Copyright © 2021 Xinglu Chen <[email protected]>
46;;; Copyright © 2021 Thomas Albers Raviola <[email protected]>
47;;; Copyright © 2021 Maxime Devos <[email protected]>
48;;; Copyright © 2022, 2023, 2024, 2026 Sughosha <[email protected]>
49;;; Copyright © 2022, 2025, 2026 Remco van 't Veer <[email protected]>
50;;; Copyright © 2022, 2023, 2025 Maxim Cournoyer <[email protected]>
51;;; Copyright © 2022 Wamm K. D. <[email protected]>
52;;; Copyright © 2022 Jose G Perez Taveras <[email protected]>
53;;; Copyright © 2022 jgart <[email protected]>
54;;; Copyright © 2023 Jonathan Brielmaier <[email protected]>
55;;; Copyright © 2023 Antero Mejr <[email protected]>
56;;; Copyright © 2023, 2024 Sharlatan Hellseher <[email protected]>
57;;; Copyright © 2023 Yovan Naumovski <[email protected]>
58;;; Copyright © 2023 Zheng Junjie <[email protected]>
59;;; Copyright © 2024 Parnikkapore <[email protected]>
60;;; Copyright © 2024 hapster <[email protected]>
61;;; Copyright © 2024 Nikita Domnitskii <[email protected]>
62;;; Copyright © 2024 Ashish SHUKLA <[email protected]>
63;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
64;;; Copyright © 2025 Junker <[email protected]>
65;;; Copyright © 2026 Ivan Vilata i Balaguer <[email protected]>
66;;; Copyright © 2026 Evgeny Pisemsky <[email protected]>
67;;; Copyright © 2026 Artyom V. Poptsov <[email protected]>
68;;;
69;;; This file is part of GNU Guix.
70;;;
71;;; GNU Guix is free software; you can redistribute it and/or modify it
72;;; under the terms of the GNU General Public License as published by
73;;; the Free Software Foundation; either version 3 of the License, or (at
74;;; your option) any later version.
75;;;
76;;; GNU Guix is distributed in the hope that it will be useful, but
77;;; WITHOUT ANY WARRANTY; without even the implied warranty of
78;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
79;;; GNU General Public License for more details.
80;;;
81;;; You should have received a copy of the GNU General Public License
82;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
83
84(define-module (gnu packages music)
85 #:use-module ((guix licenses) #:prefix license:)
86 #:use-module (guix build-system ant)
87 #:use-module (gnu packages base)
88 #:use-module (guix build-system cmake)
89 #:use-module (guix build-system emacs)
90 #:use-module (gnu packages gawk)
91 #:use-module (guix build-system glib-or-gtk)
92 #:use-module (guix build-system gnu)
93 #:use-module (guix build-system go)
94 #:use-module (guix build-system meson)
95 #:use-module (guix build-system perl)
96 #:use-module (guix build-system pyproject)
97 #:use-module (guix build-system qt)
98 #:use-module (guix build-system scons)
99 #:use-module (guix build-system trivial)
100 #:use-module (guix build-system waf)
101 #:use-module (guix download)
102 #:use-module (guix gexp)
103 #:use-module (guix git-download)
104 #:use-module (guix packages)
105 #:use-module (guix utils)
106 #:use-module (gnu packages)
107 #:use-module (gnu packages admin)
108 #:use-module (gnu packages algebra)
109 #:use-module (gnu packages apr)
110 #:use-module (gnu packages assembly)
111 #:use-module (gnu packages audio)
112 #:use-module (gnu packages autotools)
113 #:use-module (gnu packages backup)
114 #:use-module (gnu packages base) ;libbdf
115 #:use-module (gnu packages bash)
116 #:use-module (gnu packages benchmark)
117 #:use-module (gnu packages bison)
118 #:use-module (gnu packages boost)
119 #:use-module (gnu packages build-tools)
120 #:use-module (gnu packages cdrom)
121 #:use-module (gnu packages check)
122 #:use-module (gnu packages cmake)
123 #:use-module (gnu packages code)
124 #:use-module (gnu packages compression)
125 #:use-module (gnu packages cpio)
126 #:use-module (gnu packages cpp)
127 #:use-module (gnu packages crypto)
128 #:use-module (gnu packages curl)
129 #:use-module (gnu packages cyrus-sasl)
130 #:use-module (gnu packages datastructures)
131 #:use-module (gnu packages digest)
132 #:use-module (gnu packages docbook)
133 #:use-module (gnu packages documentation)
134 #:use-module (gnu packages emacs)
135 #:use-module (gnu packages file)
136 #:use-module (gnu packages compiler-tools)
137 #:use-module (gnu packages fltk)
138 #:use-module (gnu packages fonts)
139 #:use-module (gnu packages fontutils)
140 #:use-module (gnu packages freedesktop)
141 #:use-module (gnu packages gcc)
142 #:use-module (gnu packages gettext)
143 #:use-module (gnu packages ghostscript)
144 #:use-module (gnu packages gl)
145 #:use-module (gnu packages glib)
146 #:use-module (gnu packages gnome)
147 #:use-module (gnu packages gnunet)
148 #:use-module (gnu packages gnupg)
149 #:use-module (gnu packages golang)
150 #:use-module (gnu packages golang-xyz)
151 #:use-module (gnu packages gpodder)
152 #:use-module (gnu packages graphics)
153 #:use-module (gnu packages graphviz)
154 #:use-module (gnu packages gstreamer)
155 #:use-module (gnu packages gtk)
156 #:use-module (gnu packages guile)
157 #:use-module (gnu packages haskell)
158 #:use-module (gnu packages haskell-xyz)
159 #:use-module (gnu packages icu4c)
160 #:use-module (gnu packages image)
161 #:use-module (gnu packages image-viewers)
162 #:use-module (gnu packages imagemagick)
163 #:use-module (gnu packages iso-codes)
164 #:use-module (gnu packages java)
165 #:use-module (gnu packages kde-frameworks)
166 #:use-module (gnu packages libevent)
167 #:use-module (gnu packages libffi)
168 #:use-module (gnu packages libusb)
169 #:use-module (gnu packages linux) ; for alsa-utils
170 #:use-module (gnu packages lirc)
171 #:use-module (gnu packages llvm)
172 #:use-module (gnu packages lua)
173 #:use-module (gnu packages machine-learning)
174 #:use-module (gnu packages man)
175 #:use-module (gnu packages maths)
176 #:use-module (gnu packages messaging)
177 #:use-module (gnu packages mp3)
178 #:use-module (gnu packages mpd)
179 #:use-module (gnu packages mruby-xyz)
180 #:use-module (gnu packages ncurses)
181 #:use-module (gnu packages netpbm)
182 #:use-module (gnu packages networking)
183 #:use-module (gnu packages pantheon)
184 #:use-module (gnu packages pcre)
185 #:use-module (gnu packages pdf)
186 #:use-module (gnu packages perl)
187 #:use-module (gnu packages perl-check)
188 #:use-module (gnu packages perl-web)
189 #:use-module (gnu packages php)
190 #:use-module (gnu packages pkg-config)
191 #:use-module (gnu packages protobuf)
192 #:use-module (gnu packages pulseaudio) ;libsndfile
193 #:use-module (gnu packages python)
194 #:use-module (gnu packages python-build)
195 #:use-module (gnu packages python-check)
196 #:use-module (gnu packages python-compression)
197 #:use-module (gnu packages python-web)
198 #:use-module (gnu packages python-xyz)
199 #:use-module (gnu packages qt)
200 #:use-module (gnu packages rdf)
201 #:use-module (gnu packages readline)
202 #:use-module (gnu packages rsync)
203 #:use-module (gnu packages ruby)
204 #:use-module (gnu packages scsi)
205 #:use-module (gnu packages sdl)
206 #:use-module (gnu packages serialization)
207 #:use-module (gnu packages sphinx)
208 #:use-module (gnu packages sqlite)
209 #:use-module (gnu packages stb)
210 #:use-module (gnu packages tcl)
211 #:use-module (gnu packages terminals)
212 #:use-module (gnu packages tex)
213 #:use-module (gnu packages texinfo)
214 #:use-module (gnu packages textutils)
215 #:use-module (gnu packages time)
216 #:use-module (gnu packages tls)
217 #:use-module (gnu packages valgrind)
218 #:use-module (gnu packages version-control)
219 #:use-module (gnu packages video)
220 #:use-module (gnu packages vim) ;for 'xxd'
221 #:use-module (gnu packages web)
222 #:use-module (gnu packages webkit)
223 #:use-module (gnu packages window-management)
224 #:use-module (gnu packages wxwidgets)
225 #:use-module (gnu packages xdisorg)
226 #:use-module (gnu packages xiph)
227 #:use-module (gnu packages xml)
228 #:use-module (gnu packages xorg)
229 #:use-module (gnu packages wine)
230 #:use-module ((srfi srfi-1) #:select (last)))
231
232(define-public alsa-scarlett-gui
233 (package
234 (name "alsa-scarlett-gui")
235 (version "0.5.1")
236 (source (origin
237 (method git-fetch)
238 (uri (git-reference
239 (url "https://github.com/geoffreybennett/alsa-scarlett-gui")
240 (commit version)))
241 (file-name (git-file-name name version))
242 (sha256
243 (base32
244 "161x5kqwkca46wmwv5jxywhpl772vw4qmqksk9wb1sqkmlqfjiqf"))))
245 (build-system gnu-build-system)
246 (arguments
247 (list
248 #:tests? #false ;there is no check target
249 #:make-flags
250 #~(list (string-append "CC=" #$(cc-for-target))
251 (string-append "PREFIX=" #$output))
252 #:phases
253 #~(modify-phases %standard-phases
254 (add-after 'unpack 'chdir
255 (lambda _
256 (substitute* "src/Makefile"
257 ((" cc -o")
258 (string-append " "
259 #$(cc-for-target) " -o"))
260 (("-Werror") ""))
261 (chdir "src")))
262 (add-after 'install 'wrap-program
263 (lambda* (#:key inputs #:allow-other-keys)
264 (wrap-program (string-append #$output "/bin/alsa-scarlett-gui")
265 ;; For GtkFileChooserDialog.
266 `("GSETTINGS_SCHEMA_DIR" =
267 (,(string-append #$(this-package-input "gtk")
268 "/share/glib-2.0/schemas"))))))
269 (delete 'configure))))
270 (inputs
271 (list alsa-lib glib gtk openssl))
272 (native-inputs
273 (list `(,glib "bin") pkg-config))
274 (home-page "https://github.com/geoffreybennett/alsa-scarlett-gui")
275 (synopsis "ALSA Scarlett2 control panel")
276 (description "This package provides a Gtk4 GUI for the ALSA controls
277presented by the Linux kernel Focusrite Scarlett2 USB Protocol Mixer Driver.")
278 (license license:gpl3+)))
279
280(define-public audacious
281 (package
282 (name "audacious")
283 (version "4.4.2")
284 (source
285 (origin
286 (method url-fetch)
287 (uri (string-append "https://distfiles.audacious-media-player.org/"
288 "audacious-" version ".tar.bz2"))
289 (sha256
290 (base32 "01ahr6p7nvzj6mixahifcwv12s7h34sp09yq4023ffy9z029al1l"))))
291 (build-system gnu-build-system)
292 (arguments
293 (list
294 #:configure-flags
295 #~(list (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")
296 "--disable-gtk")
297 #:tests? #f ; no check target
298 #:phases
299 #~(modify-phases %standard-phases
300 (add-after 'install 'unpack-plugins
301 (lambda* (#:key inputs #:allow-other-keys)
302 (invoke "tar" "xvf"
303 #$(this-package-native-input "audacious-plugins"))))
304 (add-after 'unpack-plugins 'configure-plugins
305 (lambda* (#:key configure-flags outputs #:allow-other-keys)
306 (with-directory-excursion
307 (string-append "audacious-plugins-" #$version)
308 (substitute* "configure"
309 (("/bin/sh") (which "sh")))
310 (apply invoke "./configure"
311 (append configure-flags
312 ;; audacious-plugins requires audacious to build.
313 (list (string-append "PKG_CONFIG_PATH="
314 #$output "/lib/pkgconfig:"
315 (getenv "PKG_CONFIG_PATH"))
316 (string-append "--prefix=" #$output)))))))
317 (add-after 'configure-plugins 'build-plugins
318 (lambda _
319 (with-directory-excursion
320 (string-append "audacious-plugins-" #$version)
321 (invoke "make" "-j" (number->string (parallel-job-count))))))
322 (add-after 'build-plugins 'install-plugins
323 (lambda _
324 (with-directory-excursion
325 (string-append "audacious-plugins-" #$version)
326 (invoke "make" "install")))))))
327 (native-inputs
328 `(("audacious-plugins"
329 ,(origin
330 (method url-fetch)
331 (uri (string-append "https://distfiles.audacious-media-player.org/"
332 "audacious-plugins-" version ".tar.bz2"))
333 (sha256
334 (base32 "1gfl33gsxn69cmxdfk4m3v0578wa29y6d33iza066cbb7dlr9x2h"))))
335 ("gettext" ,gettext-minimal)
336 ("glib:bin" ,glib "bin") ; for gdbus-codegen
337 ("pkg-config" ,pkg-config)))
338 (inputs
339 (list dbus
340 qtbase
341 qtsvg
342 ;; Plugin dependencies
343 alsa-lib
344 curl
345 faad2
346 ffmpeg
347 flac
348 fluidsynth
349 jack-1
350 lame
351 libbs2b
352 libcddb
353 libcdio-paranoia
354 libcue
355 libmpg123
356 libnotify
357 libogg
358 libopenmpt
359 libsamplerate
360 libsndfile
361 libvorbis
362 libxcomposite
363 libxml2
364 libxrender
365 lirc
366 mesa
367 neon
368 opusfile
369 pulseaudio
370 sdl2
371 soxr
372 wavpack))
373 (home-page "https://audacious-media-player.org")
374 (synopsis "Modular and skinnable audio player")
375 (description
376 "Audacious is an audio player descended from XMMS. Drag and drop
377folders and individual song files, search for artists and albums in
378your entire music library, or create and edit your own custom
379playlists. Listen to CD’s or stream music from the Internet. Tweak
380the sound with the graphical equalizer or experiment with LADSPA
381effects. Enjoy the modern GTK-themed interface or change things up
382with Winamp Classic skins. Use the plugins included with Audacious to
383fetch lyrics for your music, to set an alarm in the morning, and
384more.")
385 ;; According to COPYING, Audacious and its plugins are licensed
386 ;; under the BSD 2-clause license and libguess is licensed under
387 ;; the BSD 3-clause license.
388 (license (list license:bsd-2
389 license:bsd-3
390 ;; Plugin licenses that aren't BSD 2- or 3-clause.
391 license:lgpl2.1
392 license:gpl2
393 license:gpl3
394 license:expat
395 license:isc
396 license:lgpl2.0))))
397
398(define-public aria-maestosa
399 (package
400 (name "aria-maestosa")
401 (version "1.4.13")
402 (source
403 (origin
404 (method url-fetch)
405 (uri (string-append "mirror://sourceforge/ariamaestosa/ariamaestosa/"
406 version "/AriaSrc-" version ".tar.bz2"))
407 (sha256
408 (base32 "1cs3z6frx2ch7rm5ammx9p0rxcjrbj1vq14hvcbimpaw39rdsn3d"))
409 (patches
410 (search-patches "aria-maestosa-scons-python3.patch"))))
411 (build-system scons-build-system)
412 (arguments
413 (list
414 #:tests? #f ;no tests
415 #:scons-flags
416 #~(list (string-append "prefix=" (assoc-ref %outputs "out")))
417 #:phases
418 #~(modify-phases %standard-phases
419 (delete 'configure)
420 (add-after 'unpack 'scons-propagate-environment
421 (lambda _
422 ;; By design, SCons does not, by default, propagate
423 ;; environment variables to subprocesses. See:
424 ;; <http://comments.gmane.org/gmane.linux.distributions.nixos/4969>
425 ;; Here, we modify the SConstruct file to arrange for
426 ;; environment variables to be propagated.
427 (substitute* "SConstruct"
428 (("env = Environment\\(\\)")
429 "env = Environment(ENV=os.environ)")
430 ;; Scons errors out when copying subdirectories from Resources,
431 ;; so we move them instead.
432 (("Copy") "Move")
433 ;; We move the "score" and "Documentation" directories at once,
434 ;; so we have to ignore files contained therein.
435 (("if \".svn\" in file" line)
436 (string-append line
437 " or \"score/\" in file"
438 " or \"Documentation/\" in file")))))
439 (add-after 'install 'fix-directory-permissions
440 (lambda _
441 (with-directory-excursion (string-append #$output "/share/Aria")
442 (chmod "Documentation" #o555)
443 (chmod "score" #o555)))))))
444 (inputs (list wxwidgets glib alsa-lib))
445 (native-inputs (list pkg-config))
446 (home-page "https://ariamaestosa.sourceforge.net/")
447 (synopsis "MIDI sequencer and editor")
448 (description
449 "Aria Maestosa is a MIDI sequencer and editor. It lets you compose, edit
450and play MIDI files with a few clicks in a user-friendly interface offering
451score, keyboard, guitar, drum and controller views.")
452 (license license:gpl3+)))
453
454(define-public libgpod
455 (package
456 (name "libgpod")
457 (version "0.8.3")
458 (source
459 (origin
460 (method git-fetch)
461 (uri (git-reference
462 (url "https://git.code.sf.net/p/gtkpod/libgpod")
463 (commit "8dc5015ae036b219c4c9579a156886aa3a722aa5")))
464 (file-name (git-file-name name version))
465 (sha256
466 (base32 "1yzngb7h1mibz4x56w9fh02vx8xi4wyq4fjc3ad0jayv3hxjjkqv"))))
467 (arguments
468 (list
469 #:configure-flags
470 #~(list
471 "--without-hal"
472 "--enable-udev"
473 (string-append "--with-udev-dir=" #$output "/lib/udev")
474 (string-append "--prefix=" #$output)
475 (string-append "CFLAGS="
476 "-Wno-error=incompatible-pointer-types "
477 "-Wno-error=implicit-int"))
478 #:phases
479 #~(modify-phases %standard-phases
480 (add-after 'unpack 'patch-autotools-version-requirement
481 (lambda _
482 (setenv "ACLOCAL_FLAGS"
483 (string-join
484 (map (lambda (s) (string-append "-I " s))
485 (string-split (getenv "ACLOCAL_PATH") #\:))
486 " "))
487 (substitute* "configure.ac"
488 (("libplist >= 1\\.0") "libplist-2.0 >= 2.2")
489 (("-Werror") ""))
490 ;; patch for plist-2.0
491 (substitute* "tools/ipod-lockdown.c"
492 (("plist_dict_insert_item") "plist_dict_set_item"))
493 ;; it expects version-suffixed binary
494 (substitute* "gnome-autogen.sh"
495 (("automake-1\\.13") "automake")))))))
496
497 (build-system gnu-build-system)
498 (native-inputs
499 (list automake libtool autoconf intltool pkg-config `(,glib "bin")
500 gtk-doc/stable))
501 (propagated-inputs (list libimobiledevice gdk-pixbuf))
502 (inputs (list libxml2 sg3-utils sqlite taglib libplist))
503 (home-page "https://sourceforge.net/projects/gtkpod")
504 (synopsis "Library to access iPod contents")
505 (description "This package provides a library to access iPod contents. It
506enables iPod support in music players such as Clementine.")
507 (license license:lgpl2.1+)))
508
509(define-public mopidy
510 (package
511 (name "mopidy")
512 (version "3.4.2") ;4+ needs Python 3.13
513 (source
514 (origin
515 (method git-fetch)
516 (uri (git-reference
517 (url "https://github.com/mopidy/mopidy")
518 (commit (string-append "v" version))))
519 (file-name (git-file-name name version))
520 (sha256
521 (base32 "0fdnsbb13xqxwbfqzmgd1jxyqzfnifyc968rlv8syhnsc6zmmqfq"))))
522 (build-system pyproject-build-system)
523 (arguments
524 (list
525 ;; tests: 1451 passed, 9 deselected, 2 warnings
526 #:test-flags
527 ;; This test is not compatible with our build environment.
528 #~(list "-k" (string-join
529 (list "not test_help_has_mopidy_options"
530 ;; Tests fail with not equal assertion, and
531 ;; AssertionError: expected call not found.
532 "test_path_to_uri"
533 "test_missing_positionals"
534 "test_missing_positionals_subcommand")
535 " and not "))
536 #:phases
537 #~(modify-phases %standard-phases
538 (add-after 'unpack 'set-env
539 (lambda _
540 ;; Fix "Fontconfig error: No writable cache directories"
541 (setenv "HOME" "/tmp")))
542 (add-after 'wrap 'wrap-gstreamer
543 (lambda _
544 (wrap-program (string-append #$output "/bin/mopidy")
545 `("GI_TYPELIB_PATH" =
546 (,(getenv "GI_TYPELIB_PATH")))
547 `("GST_PLUGIN_SYSTEM_PATH" =
548 (,(getenv "GST_PLUGIN_SYSTEM_PATH")))))))))
549 (native-inputs
550 (list python-pytest
551 python-responses
552 python-setuptools
553 python-setuptools-scm))
554 (inputs
555 (list bash-minimal
556 gst-libav))
557 (propagated-inputs
558 (list python-gst
559 python-pygobject
560 python-pykka
561 python-requests
562 python-tornado))
563 (home-page "https://mopidy.com")
564 (synopsis "Extensible music server")
565 (description
566 "Mopidy is an extensible music server written in Python. It plays music
567from local disk or cloud services, and can be controlled using a variety of
568MPD and web clients.")
569 (license license:asl2.0)))
570
571(define-public mopidy-local
572 (package
573 (name "mopidy-local")
574 (version "3.3.0")
575 (source
576 (origin
577 (method git-fetch)
578 (uri (git-reference
579 (url "https://github.com/mopidy/mopidy-local")
580 (commit (string-append "v" version))))
581 (file-name (git-file-name name version))
582 (sha256
583 (base32 "1fqw6rq39w4q53w6jgl80x358rhzl4c9gdqb9kfgckmcz6vbcfm1"))))
584 (build-system pyproject-build-system)
585 (native-inputs
586 (list python-pytest
587 python-setuptools))
588 (propagated-inputs
589 (list mopidy
590 python-pykka
591 python-uritools))
592 (home-page "https://mopidy.com/ext/local/")
593 (synopsis "Mopidy extension for playing music from local file archive")
594 (description
595 "This package provides Mopidy's extension for playing music from local
596file archive.
597
598In contrast to @url{https://mopidy.com/ext/file, Mopidy-File}, Mopidy-Local
599builds an index of archive’s metadata ahead of time, and can thus provide
600additional features like search.
601
602The music metadata is stored in a SQLite database. This lets users to browse
603their music collection by album, artist, composer and performer, and provides
604full-text search capabilities based on SQLite’s FTS modules. It also notices
605updates via @command{mopidy local scan} while Mopidy is running, so you can
606scan your media library periodically, for example from a cron job.")
607 (license license:asl2.0)))
608
609(define-public mopidy-mopiqtt
610 (package
611 (name "mopidy-mopiqtt")
612 (version "1.2.1")
613 (source
614 (origin
615 (method git-fetch)
616 (uri (git-reference
617 (url "https://github.com/fmarzocca/mopiqtt")
618 (commit (string-append "v" version))))
619 (file-name (git-file-name name version))
620 (sha256
621 (base32 "1044y8si6lan7m9cyg0s7k53x1wmldjj6c0nwq1zdgs19xcsd703"))))
622 (build-system pyproject-build-system)
623 (native-inputs (list python-pytest python-setuptools))
624 (propagated-inputs (list mopidy python-paho-mqtt python-pykka))
625 (home-page "https://github.com/fmarzocca/mopiqtt")
626 (synopsis "MQTT interface for Mopidy")
627 (description
628 "This package provides an MQTT interface extension for Mopidy music server.")
629 (license license:asl2.0)))
630
631(define-public clementine
632 ;; Clementine has one automatic release per commit at
633 ;; <https://github.com/clementine-player/Clementine/releases>.
634 (let ((commit "12e8519370e4e7af2daca280cd31f039289a6450")
635 (revision "48"))
636 (package
637 (name "clementine")
638 (version (git-version "1.4.1" revision commit))
639 (source (origin
640 (method git-fetch)
641 (uri (git-reference
642 (url "https://github.com/clementine-player/Clementine")
643 (commit commit)))
644 (file-name (git-file-name name version))
645 (sha256
646 (base32
647 "06sl9ywrpkmwdr3v75q0x6j111xgb4w2d1fcykmfwp26i77hvh1g"))
648 (modules '((guix build utils)
649 (ice-9 regex)))
650 (snippet
651 '(begin
652 (use-modules ((ice-9 regex)))
653 (for-each
654 (lambda (dir)
655 ;; TODO: The following dependencies are still bundled:
656 ;; - "qxt": Appears to be unmaintained upstream.
657 ;; - "qsqlite"
658 ;; - "qtsingleapplication"
659 ;; - "qocoa"
660 ;; - "qtiocompressor"
661 ;; - "projectm" Uses an old version with custom patches.
662 (let ((bundled '("qsqlite"
663 "qtsingleapplication"
664 "qxt"
665 "qocoa"
666 "qtiocompressor"
667 "projectm")))
668 (if (not
669 (string-match
670 (string-append ".?*(" (string-join bundled "|") ")")
671 dir))
672 (delete-file-recursively dir))))
673 (find-files "3rdparty"
674 (lambda (file stat)
675 (string-match "^3rdparty/[^/]*$" file))
676 #:directories? #t))))))
677 (build-system cmake-build-system)
678 (arguments
679 (list
680 #:configure-flags
681 #~(list
682 "-DENABLE_VISUALISATIONS=ON"
683 ;; Otherwise it may try to download a non-free library at run-time.
684 ;; TODO In an origin snippet, remove the code that performs the
685 ;; download.
686 "-DHAVE_SPOTIFY_DOWNLOADER=FALSE"
687 (string-append "-DFORCE_GIT_REVISION=" #$commit))
688 #:modules '((guix build cmake-build-system)
689 ((guix build gnu-build-system) #:prefix gnu:)
690 (guix build utils))
691 #:phases
692 #~(modify-phases %standard-phases
693 (replace 'check
694 (lambda* (#:rest args)
695 (apply (assoc-ref gnu:%standard-phases 'check)
696 #:test-target "clementine_test" args)))
697 (add-after 'install 'wrap-program
698 (lambda* (#:key inputs outputs #:allow-other-keys)
699 (let ((out (assoc-ref outputs "out"))
700 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
701 (wrap-program (string-append out "/bin/clementine")
702 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix
703 (,gst-plugin-path)))))))))
704 (native-inputs
705 (list gettext-minimal
706 googletest
707 pkg-config
708 qttools-5))
709 (inputs
710 (list bash-minimal
711 boost
712 chromaprint
713 fftw
714 glib
715 glu
716 gstreamer
717 gst-plugins-base
718 gst-plugins-good
719 gst-libav
720 libcdio
721 libmygpo-qt5
722 libgpod
723 libmtp
724 libxml2
725 glew
726 protobuf
727 pulseaudio
728 qtbase-5
729 qtx11extras
730 sqlite
731 sparsehash
732 taglib))
733 (home-page "https://clementine-player.org")
734 (synopsis "Music player and library organizer")
735 (description "Clementine is a multiplatform music player. It is inspired
736by Amarok 1.4, focusing on a fast and easy-to-use interface for searching and
737playing your music.")
738 (license (list
739 ;; clementine and qtiocompressor are under GPLv3.
740 license:gpl3+
741 ;; qxt is under CPL1.0.
742 license:cpl1.0
743 ;; qsqlite, libprojectm and qtsingleapplication are under LGPL2.1+.
744 license:lgpl2.1+
745 ;; qocoa is under MIT and CC by-sa for the icons.
746 license:cc-by-sa3.0)))))
747
748(define-public qmmp
749 (package
750 (name "qmmp")
751 (version "2.3.0")
752 (source
753 (origin
754 (method url-fetch)
755 (uri (string-append "https://qmmp.ylsoftware.com/files/qmmp/"
756 (version-major+minor version) "/"
757 "qmmp-" version ".tar.bz2"))
758 (sha256
759 (base32 "0qrh6g42mq92az7mzrnp5wspm94lyqh4sn8ms661g1f8cw1y7hq1"))))
760 (build-system qt-build-system)
761 (arguments
762 (list #:qtbase qtbase
763 #:tests? #f ; there are no tests
764 #:phases
765 #~(modify-phases %standard-phases
766 (add-after 'unpack 'set-paths
767 (lambda* (#:key inputs #:allow-other-keys)
768 (substitute* "src/plugins/Ui/skinned/skinreader.cpp"
769 (("\"(tar|unzip)\"" _ name)
770 (let ((file (string-append "/bin/" name)))
771 (string-append "\"" (search-input-file inputs file) "\"")))))))))
772 (inputs
773 ;; Missing optional inputs:
774 ;; libsidplay2 ; input plugin
775 ;; projectm ; visualization plugin
776 (list alsa-lib
777 curl
778 enca
779 faad2
780 ffmpeg
781 flac
782 jack-2
783 libarchive
784 libbs2b
785 libcddb
786 libcdio-paranoia
787 libgme
788 libmad
789 libshout
790 libsndfile
791 libvorbis
792 libxmp
793 opusfile
794 opus
795 pipewire
796 pulseaudio
797 qtmultimedia
798 qttools
799 soxr
800 taglib
801 tar ; for loading skins
802 unzip ; for loading skins
803 wavpack
804 wildmidi))
805 (native-inputs
806 (list pkg-config))
807 (home-page "https://qmmp.ylsoftware.com")
808 (properties
809 `((release-monitoring-url . "https://qmmp.ylsoftware.com/downloads.php")))
810 (synopsis "Qt-based music player")
811 (description "Music player with support for most common audio formats, and
812plugins for various additional features such as visualization, effects and
813online service integration. In addition to a Qt-based interface it supports
814Winamp/XMMS skins.")
815 (license (list license:gpl2+ ; code
816 license:cc-by-sa4.0)))) ; src/plugins/Ui/skinned/glare
817
818(define-public strawberry
819 (package
820 (name "strawberry")
821 (version "1.2.19")
822 (source (origin
823 (method git-fetch)
824 (uri (git-reference
825 (url "https://github.com/strawberrymusicplayer/strawberry")
826 (commit version)))
827 (file-name (git-file-name name version))
828 (sha256
829 (base32
830 "1bxrqqi2xi057v9qaz73dl44jyyhpqvi51pjs6pzprfiqgy1gi11"))))
831 (build-system qt-build-system)
832 (arguments
833 (list
834 #:qtbase qtbase
835 #:modules '((guix build qt-build-system)
836 ((guix build gnu-build-system) #:prefix gnu:)
837 (guix build utils))
838 #:phases
839 #~(modify-phases %standard-phases
840 (add-before 'check 'pre-check
841 (lambda* (#:key native-inputs inputs #:allow-other-keys)
842 (system (format #f "~a :1 &"
843 (search-input-file (or native-inputs inputs)
844 "bin/Xvfb")))
845 (setenv "DISPLAY" ":1")
846 (setenv "HOME" (getcwd))))
847 (replace 'check
848 (lambda* (#:rest args)
849 (apply (assoc-ref gnu:%standard-phases 'check)
850 #:test-target "run_strawberry_tests" args)))
851 (add-after 'install 'wrap-program
852 (lambda* (#:key outputs #:allow-other-keys)
853 (wrap-program (search-input-file outputs "bin/strawberry")
854 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix
855 (,(getenv "GST_PLUGIN_SYSTEM_PATH")))))))))
856 (native-inputs
857 (list bash-minimal
858 gettext-minimal
859 googletest
860 pkg-config
861 qttools
862 xorg-server-for-tests))
863 (inputs
864 (list alsa-lib
865 boost
866 chromaprint
867 dbus
868 fftw
869 gdk-pixbuf
870 glib
871 gnutls
872 gstreamer
873 gst-plugins-base
874 gst-plugins-good
875 icu4c
876 kdsingleapplication
877 libcdio
878 libebur128
879 libgpod
880 libmtp
881 protobuf
882 pulseaudio
883 qtbase
884 qtwayland
885 rapidjson
886 sparsehash
887 sqlite
888 taglib))
889 (home-page "https://www.strawberrymusicplayer.org/")
890 (synopsis "Music player and library organizer")
891 (description "Strawberry is a music player and music collection organizer.
892It is a fork of Clementine aimed at music collectors and audiophiles.")
893 (license (list
894 ;; strawberry.
895 license:gpl3+
896 ;; icons.
897 license:cc-by-sa3.0))))
898
899(define-public cmus
900 (package
901 (name "cmus")
902 (version "2.12.0")
903 (source (origin
904 (method git-fetch)
905 (uri (git-reference
906 (url "https://github.com/cmus/cmus")
907 (commit (string-append "v" version))))
908 (file-name (git-file-name name version))
909 (sha256
910 (base32
911 "17ljajx0098q8qx02krkc71nd502i24n0gf2kkg0r2v4ddn2467j"))))
912 (build-system gnu-build-system)
913 (arguments
914 (list
915 #:tests? #f ; cmus does not include tests
916 #:phases
917 #~(modify-phases %standard-phases
918 (replace 'configure
919 (lambda _
920 ;; It's an idiosyncratic configure script that doesn't
921 ;; understand --prefix=..; it wants prefix=.. instead.
922 (invoke "./configure" (string-append "prefix=" #$output)))))))
923 ;; TODO: cmus optionally supports the following formats, which haven't yet
924 ;; been added to Guix:
925 ;;
926 ;; - Roar, libroar
927 ;;
928 ;; - DISCID_LIBS, apparently different from cd-discid which is included in
929 ;; Guix. See <http://sourceforge.net/projects/discid/>
930 (native-inputs
931 (list pkg-config))
932 (inputs
933 (list alsa-lib
934 ao
935 elogind ;for MPRIS support
936 faad2
937 ffmpeg-6 ;ip/ffmpeg.so fails to build with ffmpeg 8
938 flac
939 jack-1
940 libcddb
941 libcdio-paranoia
942 libcue
943 libmad
944 libmodplug
945 libmpcdec
946 libsamplerate
947 libvorbis
948 ncurses
949 opusfile
950 pulseaudio
951 wavpack))
952 (home-page "https://cmus.github.io/")
953 (synopsis "Small console music player")
954 (description "Cmus is a small and fast console music player. It supports
955many input formats and provides a customisable Vi-style user interface.")
956 (license license:gpl2+)))
957
958(define-public ctune
959 (package
960 (name "ctune")
961 (version "1.3.10")
962 (source
963 (origin
964 (method git-fetch)
965 (uri (git-reference
966 (url "https://github.com/An7ar35/ctune")
967 (commit (string-append "v" version))))
968 (file-name (git-file-name name version))
969 (sha256
970 (base32 "0g7a2yz5nnhd4dln07hiax5701hc4b7sn97c36jgvm8pq6ap2bd4"))))
971 (build-system cmake-build-system)
972 (arguments
973 (list
974 #:tests? #f ;no check target
975 ;; We do not have the headers of ncurses inside 'ncursesw' subdirectory.
976 #:configure-flags
977 #~(list "-DNO_NCURSESW=ON")))
978 (native-inputs (list pkg-config
979 json-c
980 ffmpeg-6
981 pandoc ;for documentation
982 curl))
983 (inputs (list openssl
984 curl
985 ncurses
986 (list util-linux "lib") ;for libuuid
987 ffmpeg
988 pulseaudio))
989 (home-page "https://github.com/An7ar35/ctune")
990 (synopsis "Ncurses internet radio player for Linux")
991 (description "cTune is a ncurses based internet radio player written in C
992for Linux. Aside from playing a radio stream you can search and browse stations
993as well as keep a list of favourites. It uses the RadioBrowser API to search
994and get radio stream information.")
995 (license license:agpl3+)))
996
997(define-public denemo
998 (package
999 (name "denemo")
1000 (version "2.6.49")
1001 (source
1002 (origin
1003 (method git-fetch)
1004 (uri (git-reference
1005 (url "git://git.git.savannah.gnu.org/denemo")
1006 (commit (string-append "v" version))))
1007 (file-name (git-file-name name version))
1008 (sha256
1009 (base32
1010 "0xpkgyw2nmy4mbq2ilw58nn4cqc39gzni789gjvh5ax1w0c5lisd"))))
1011 (build-system gnu-build-system)
1012 (arguments
1013 (list
1014 #:configure-flags
1015 #~(list (string-append
1016 "CFLAGS="
1017 (string-join (list "-Wno-error=incompatible-pointer-types"
1018 "-Wno-error=implicit-function-declaration")
1019 " ")))
1020 #:phases
1021 #~(modify-phases %standard-phases
1022 (add-before 'bootstrap 'patch-autogen
1023 (lambda _
1024 (substitute* "autogen.sh"
1025 (("/usr/share/aclocal")
1026 (string-append #$(this-package-native-input "automake")
1027 "/share/aclocal")))))
1028 (replace 'check
1029 (lambda* (#:key inputs tests? #:allow-other-keys)
1030 ;; Tests require to write $HOME.
1031 (when tests?
1032 (setenv "HOME" (getcwd))
1033 ;; Replace hard-coded diff file name.
1034 (substitute* "tests/integration.c"
1035 (("/usr/bin/diff")
1036 (search-input-file inputs "/bin/diff")))
1037 ;; Denemo's documentation says to use this command to run its
1038 ;; test suite.
1039 (invoke "make" "-C" "tests" "unit"))))
1040 (add-before 'build 'set-lilypond
1041 ;; This phase sets the default path for lilypond to its current
1042 ;; location in the store.
1043 (lambda* (#:key inputs #:allow-other-keys)
1044 (let* ((lilypond (search-input-file inputs "/bin/lilypond")))
1045 (substitute* "src/core/prefops.c"
1046 (("g_string_new \\(\"lilypond\"\\);")
1047 (string-append "g_string_new (\""
1048 lilypond
1049 "\");")))))))))
1050 (native-inputs
1051 (list autoconf
1052 automake
1053 diffutils
1054 `(,glib "bin") ; for gtester
1055 gtk-doc/stable
1056 intltool
1057 libtool
1058 pkg-config))
1059 (inputs
1060 (list alsa-lib
1061 aubio
1062 evince
1063 fftw
1064 fluidsynth
1065 glib
1066 gtk+
1067 gtksourceview-3
1068 guile-3.0-latest
1069 (librsvg-for-system)
1070 libsndfile
1071 libxml2
1072 lilypond
1073 portaudio
1074 portmidi
1075 rubberband))
1076 (synopsis "Graphical music notation, front-end to GNU Lilypond")
1077 (description
1078 "GNU Denemo is a music notation editor that provides a convenient
1079interface to the powerful music engraving program Lilypond. Music can be
1080typed in using the computer keyboard, played in using a MIDI keyboard, or
1081even input via a microphone connected to the sound card. The final product
1082is publication-quality music notation that is continuously generated in the
1083background while you work.")
1084 (home-page "https://www.denemo.org")
1085 (license license:gpl3+)))
1086
1087(define-public dumb
1088 (package
1089 (name "dumb")
1090 (version "2.0.3")
1091 (source
1092 (origin
1093 (method git-fetch)
1094 (uri (git-reference
1095 (url "https://github.com/kode54/dumb")
1096 (commit version)))
1097 (sha256
1098 (base32 "1cnq6rb14d4yllr0yi32p9jmcig8avs3f43bvdjrx4r1mpawspi6"))
1099 (file-name (git-file-name name version))))
1100 (build-system cmake-build-system)
1101 (arguments
1102 '(#:tests? #f ; no check target
1103 #:configure-flags
1104 (list "-DBUILD_ALLEGRO4=OFF"
1105 "-DBUILD_SHARED_LIBS=ON"
1106 "-DBUILD_EXAMPLES=OFF")))
1107 (home-page "https://github.com/kode54/dumb")
1108 (synopsis "Module audio renderer library")
1109 (description
1110 "DUMB is a tracker library with support for IT, XM, S3M and MOD files. It
1111targets maximum accuracy to the original formats, with low-pass resonant filters
1112for the IT files, accurate timing and pitching, and three resampling quality
1113settings (aliasing, linear interpolation and cubic interpolation).")
1114 ;; The DUMB license is a bit peculiar.
1115 ;; Clause 8 states that clauses 4, 5 and 6 are null and void, leaving only
1116 ;; the first three clauses for genuine consideration.
1117 ;; Clauses 1, 2 and 3 are analogous to clauses 1, 2 and 3 of the zlib
1118 ;; license, a known free software license.
1119 ;; Therefore, the DUMB license may be considered a free software license.
1120 (license (license:fsf-free "file://LICENSE"))))
1121
1122(define-public hydrogen
1123 (package
1124 (name "hydrogen")
1125 (version "1.2.6")
1126 (source
1127 (origin
1128 (method git-fetch)
1129 (uri (git-reference
1130 (url "https://github.com/hydrogen-music/hydrogen")
1131 (commit version)))
1132 (file-name (git-file-name name version))
1133 (sha256
1134 (base32 "0fwyabkvrh1q30sqyhylly0c28cryq39lnqzgsv69jqvcc001bi4"))))
1135 (build-system qt-build-system)
1136 (arguments
1137 (list
1138 #:tests? #f ; require audio subsystem
1139 #:configure-flags #~(list "-DWANT_QT6=ON")
1140 #:phases
1141 #~(modify-phases %standard-phases
1142 (add-after 'unpack 'fix-data-directory
1143 (lambda* (#:key outputs #:allow-other-keys)
1144 (substitute* "CMakeLists.txt"
1145 (("/usr/share/pixmaps")
1146 (string-append #$output "/share/pixmaps"))))))))
1147 (native-inputs
1148 (list cppunit
1149 pkg-config
1150 qttools))
1151 (inputs
1152 (list alsa-lib
1153 jack-1
1154 ;; ("ladspa" ,ladspa) ; require LADSPA_PATH to be set
1155 libarchive
1156 liblo
1157 libsndfile
1158 lrdf
1159 pulseaudio
1160 qtbase
1161 qtsvg
1162 qtwayland
1163 zlib))
1164 (home-page "http://hydrogen-music.org/")
1165 (synopsis "Drum machine")
1166 (description
1167 "Hydrogen is an advanced drum machine for GNU/Linux. Its main goal is to
1168enable professional yet simple and intuitive pattern-based drum programming.")
1169 (license license:gpl2+)))
1170
1171(define-public flacon
1172 (package
1173 (name "flacon")
1174 (version "12.0.0")
1175 (source
1176 (origin
1177 (method git-fetch)
1178 (uri
1179 (git-reference
1180 (url "https://github.com/flacon/flacon")
1181 (commit (string-append "v" version))
1182 (recursive? #t)))
1183 (file-name (git-file-name name version))
1184 (sha256
1185 (base32 "1r8sr4cd1djackfwk7m3qvjlbvh54kcm5cgdqh3clk491r19vm5g"))))
1186 (build-system qt-build-system)
1187 (arguments
1188 ;; The tests fail while attempting to exercise MacOS functionality.
1189 (list #:tests? #f
1190 #:qtbase qtbase))
1191 (native-inputs (list pkg-config qttools))
1192 (inputs
1193 (list taglib
1194 uchardet
1195 zlib))
1196 (home-page "https://flacon.github.io/")
1197 (synopsis "Split audio tracks from an audio CD image to separate tracks")
1198 (description "Flacon extracts individual tracks from one big audio file
1199containing an entire CD of music and saves them as separate audio files. To do
1200this, it uses information from the appropriate CUE file. Also, Flacon makes it
1201possible to conveniently revise or specify tags both for all tracks at once or
1202for each tag separately.")
1203 (license license:lgpl2.1+)))
1204
1205(define-public fluida-lv2
1206 (package
1207 (name "fluida-lv2")
1208 (version "0.6")
1209 (source
1210 (origin
1211 (method git-fetch)
1212 (uri
1213 (git-reference
1214 (url "https://github.com/brummer10/Fluida.lv2")
1215 (commit (string-append "v" version))
1216 (recursive? #t))) ; references specific commit of libxputty
1217 (file-name (git-file-name name version))
1218 (sha256
1219 (base32
1220 "1v0bh4wcx79y832qigc3my8ixq0r4ica6z5fg2rg946pkh20x1a2"))))
1221 (build-system gnu-build-system)
1222 (arguments
1223 `(#:tests? #f ; no "check" target
1224 #:make-flags
1225 (list (string-append "INSTALL_DIR="
1226 (assoc-ref %outputs "out") "/lib/lv2")
1227 "CC=gcc")
1228 #:phases
1229 (modify-phases %standard-phases
1230 (delete 'configure))))
1231 (inputs
1232 (list cairo libx11 lv2 fluidsynth))
1233 (native-inputs
1234 (list pkg-config))
1235 (home-page "https://github.com/brummer10/Fluida.lv2")
1236 (synopsis "Fluidsynth as an LV2 audio plugin")
1237 (description "Fluida is an audio plugin in the LV2 format that acts as
1238a frontend for fluidsynth.")
1239 (license license:gpl2+)))
1240
1241(define-public klick
1242 (package
1243 (name "klick")
1244 (version "0.12.2")
1245 (source
1246 (origin
1247 (method url-fetch)
1248 (uri (string-append "http://das.nasophon.de/download/klick-" version
1249 ".tar.gz"))
1250 (sha256
1251 (base32 "0hmcaywnwzjci3pp4xpvbijnnwvibz7gf9xzcdjbdca910y5728j"))))
1252 (build-system scons-build-system)
1253 (arguments
1254 (list
1255 #:scons-flags
1256 #~(list (string-append "PREFIX=" %output))
1257 #:tests? #f ;no "check" target
1258 #:phases
1259 #~(modify-phases %standard-phases
1260 (add-after 'unpack 'be-permissive
1261 (lambda _
1262 (substitute* "SConstruct"
1263 (("'-Wall'")
1264 "'-Wall', '-fpermissive'"))))
1265 (add-after 'unpack 'replace-removed-scons-syntax
1266 (lambda _
1267 (substitute* "SConstruct"
1268 (("BoolOption")
1269 "BoolVariable")
1270 (("PathOption")
1271 "PathVariable")
1272 (("Options")
1273 "Variables")))))))
1274 (inputs (list boost
1275 jack-1
1276 libsndfile
1277 libsamplerate
1278 liblo
1279 rubberband))
1280 (native-inputs (list pkg-config))
1281 (home-page "http://das.nasophon.de/klick/")
1282 (synopsis "Metronome for JACK")
1283 (description
1284 "klick is an advanced command-line based metronome for JACK. It allows
1285you to define complex tempo maps for entire songs or performances.")
1286 (license license:gpl2+)))
1287
1288(define-public glyr
1289 (package
1290 (name "glyr")
1291 (version "1.0.10")
1292 (source (origin
1293 (method git-fetch)
1294 (uri (git-reference
1295 (url "https://github.com/sahib/glyr")
1296 (commit version)))
1297 (file-name (git-file-name name version))
1298 (sha256
1299 (base32
1300 "1miwbqzkhg0v3zysrwh60pj9sv6ci4lzq2vq2hhc6pc6hdyh8xyr"))))
1301 (build-system cmake-build-system)
1302 (arguments
1303 '(#:configure-flags '("-DTEST=true")
1304 #:phases
1305 (modify-phases %standard-phases
1306 (add-after 'unpack 'patch-tests
1307 (lambda _
1308 (substitute* "spec/capi/check_api.c"
1309 (("fail_unless \\(c != NULL,\"Could not load www.google.de\"\\);")
1310 ""))
1311 #t))
1312 (replace 'check
1313 (lambda* (#:key tests? #:allow-other-keys)
1314 (when tests?
1315 ;; capi tests
1316 (invoke "bin/check_api")
1317 ;; (invoke "bin/check_opt") TODO Very dependent on the network
1318 (invoke "bin/check_dbc"))
1319
1320 ;; TODO Work out how to run the spec/providers Python tests
1321 #t)))))
1322 (inputs
1323 (list glib curl sqlite))
1324 (native-inputs
1325 (list pkg-config check))
1326 (home-page "https://github.com/sahib/glyr")
1327 (synopsis "Search engine for music related metadata")
1328 (description
1329 "Glyr comes both in a command-line interface tool (@command{glyrc}) and
1330as a C library (libglyr).
1331
1332The sort of metadata glyr is searching (and downloading) is usually the data
1333you see in your musicplayer. And indeed, originally it was written to serve
1334as internally library for a musicplayer, but has been extended to work as a
1335standalone program which is able to download cover art, lyrics, photos,
1336biographies, reviews and more.")
1337 (license license:lgpl3+)))
1338
1339(define-public gtick
1340 (package
1341 (name "gtick")
1342 (version "0.5.5")
1343 (source
1344 (origin
1345 (method url-fetch)
1346 (uri (string-append "https://www.antcom.de/gtick/download/"
1347 name "-" version ".tar.gz"))
1348 (sha256
1349 (base32
1350 "0j6wggp1fhyx0vyip1k27pp28xpy9pqgwg46glm7nm83r6r32hz2"))))
1351 (build-system gnu-build-system)
1352 (arguments
1353 (list
1354 #:phases
1355 #~(modify-phases %standard-phases
1356 (add-after 'unpack 'patch-desktop-file
1357 (lambda _
1358 (substitute* "gtick.desktop"
1359 (("/usr/bin")
1360 (string-append #$output "/bin"))
1361 (("/usr/share")
1362 (string-append #$output "/share")))))
1363 (add-after 'unpack 'do-not-require-dmalloc
1364 ;; The use of dmalloc causes build errors like "expected
1365 ;; declaration specifiers or ‘...’ before string constant" (see
1366 ;; <https://mail.gnu.org/archive/html/gtick-devel/2025-11/msg00001.html>).
1367 (lambda _
1368 (substitute* "testsuite/Makefile.in"
1369 ((" -DUSE_DMALLOC") "")))))))
1370 (native-inputs (list check pkg-config))
1371 (inputs (list gtk+-2 libsndfile pulseaudio))
1372 (home-page "https://www.antcom.de/gtick/")
1373 (synopsis "Customizable metronome application")
1374 (description "GTick is a metronome application. It supports different
1375meters, such as 2/4, 3/4, 4/4, etc. It also supports a wide range of speeds,
1376from 10 to 1000 BPM. It provides a GTK+-based user interface and it can use
1377both OSS and ALSA as the audio back-end.")
1378 (license license:gpl3+)))
1379
1380(define-public lingot
1381 (package
1382 (name "lingot")
1383 (version "1.1.1")
1384 (source
1385 (origin
1386 (method git-fetch)
1387 (uri (git-reference
1388 (url "https://github.com/ibancg/lingot")
1389 (commit (string-append "v" version))))
1390 (file-name (git-file-name name version))
1391 (sha256
1392 (base32 "04lcjzfhddbyskxr2068z609y6x0s2gjx1wl78w0dkxdi459zrn9"))))
1393 (build-system gnu-build-system)
1394 (native-inputs
1395 (list autoconf
1396 automake
1397 cunit
1398 `(,glib "bin") ; for glib-compile-resources
1399 intltool
1400 libtool
1401 pkg-config))
1402 (inputs
1403 (list alsa-lib
1404 fftw
1405 gtk+
1406 jack-2
1407 json-c
1408 pulseaudio))
1409 (home-page "https://lingot.nongnu.org/")
1410 (synopsis "Accurate & configurable musical instrument tuner")
1411 (description
1412 "LINGOT is a musical instrument tuner. It's accurate, easy to use, and
1413highly configurable. Originally conceived to tune electric guitars, it can now
1414be used to tune other instruments.
1415
1416It looks like an analogue tuner, with a gauge indicating the relative shift to a
1417certain note, determined automatically as the closest note to the estimated
1418frequency.")
1419 (license license:gpl2+)))
1420
1421(define-public ninjas2
1422 (package
1423 (name "ninjas2")
1424 (version "0.2.0")
1425 (source
1426 (origin
1427 (method git-fetch)
1428 (uri
1429 (git-reference
1430 (url "https://github.com/clearly-broken-software/ninjas2")
1431 (commit (string-append "v" version))
1432 ;; Bundles a specific commit of the DISTRHO plugin framework.
1433 (recursive? #t)))
1434 (file-name (git-file-name name version))
1435 (sha256
1436 (base32 "1kwp6pmnfar2ip9693gprfbcfscklgri1k1ycimxzlqr61nkd2k9"))))
1437 (build-system gnu-build-system)
1438 (arguments
1439 `(#:tests? #f ;no tests
1440 #:make-flags
1441 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
1442 (string-append "CC=" ,(cc-for-target)))
1443 #:phases
1444 (modify-phases %standard-phases
1445 (delete 'configure) ;no configure target
1446 (replace 'install ;no install target
1447 (lambda* (#:key outputs #:allow-other-keys)
1448 (let* ((out (assoc-ref outputs "out"))
1449 (bin (string-append out "/bin"))
1450 (lv2 (string-append out "/lib/lv2")))
1451 ;; Install LV2.
1452 (for-each
1453 (lambda (file)
1454 (copy-recursively file
1455 (string-append lv2 "/" (basename file))))
1456 (find-files "bin" "\\.lv2$" #:directories? #t))
1457 ;; Install executables.
1458 (for-each
1459 (lambda (file)
1460 (install-file file bin))
1461 (find-files "bin"
1462 (lambda (name stat)
1463 (and
1464 (equal? (dirname name) "bin")
1465 (not (string-suffix? ".so" name))
1466 (not (string-suffix? ".lv2" name))))))
1467 #t))))))
1468 (inputs
1469 (list fftwf
1470 jack-1 ; for the standalone JACK application
1471 libsamplerate
1472 mesa
1473 libsndfile))
1474 (native-inputs
1475 (list ladspa lv2 pkg-config))
1476 (synopsis "Sample slicer audio plugin")
1477 (description
1478 "Ninjas 2 is a rewrite of the Ninjas sample slicer audio plugin.
1479Its goal is to be an easy to use sample slicer with quick slicing of samples
1480and auto-mapping slices to MIDI note numbers.")
1481 (home-page "https://github.com/clearly-broken-software/ninjas2")
1482 (license license:gpl3+)))
1483
1484;; This package tracks the stable release of LilyPond.
1485(define-public lilypond
1486 (package
1487 (name "lilypond")
1488 (version "2.26.0")
1489 (source
1490 (origin
1491 (method url-fetch)
1492 (uri (string-append "http://lilypond.org/download/sources/"
1493 "v" (version-major+minor version) "/"
1494 "lilypond-" version ".tar.gz"))
1495 (sha256
1496 (base32 "01gy0s5j1x01pgjzs5gqx2kaz76ql0sa27wdrpfrjzvzpaz2vs5v"))))
1497 (build-system gnu-build-system)
1498 (arguments
1499 (list #:tests? #f ;out-test/collated-files.html fails
1500 #:out-of-source? #t
1501 #:configure-flags
1502 #~(list "--disable-documentation" "GUILE_FLAVOR=guile-3.0")
1503 #:phases
1504 #~(modify-phases %standard-phases
1505 (add-after 'unpack 'fix-path-references
1506 (lambda* (#:key inputs #:allow-other-keys)
1507 (substitute* "scm/backend-library.scm"
1508 (("\\(search-executable '\\(\"gs\"\\)\\)")
1509 (string-append "\"" (search-input-file inputs "bin/gs") "\""))
1510 (("\"/bin/sh\"")
1511 (string-append "\"" (search-input-file inputs "bin/sh") "\""))))))))
1512 (inputs
1513 (list extractpdfmark
1514 font-dejavu
1515 font-tex-gyre
1516 fontconfig
1517 freetype
1518 ghostscript
1519 guile-3.0
1520 pango
1521 python))
1522 (native-inputs
1523 (list bison
1524 dblatex/stable
1525 flex
1526 fontforge
1527 gettext-minimal
1528 imagemagick
1529 netpbm
1530 perl
1531 pkg-config
1532 rsync
1533 texinfo
1534 texi2html-1.82
1535 (texlive-local-tree
1536 (list texlive-cyrillic
1537 texlive-epsf
1538 texlive-fontinst
1539 texlive-lh
1540 texlive-lm
1541 texlive-metapost
1542 texlive-t1utils))
1543 zip))
1544 (home-page "https://lilypond.org")
1545 (synopsis "Music typesetting")
1546 (description
1547 "GNU LilyPond is a music typesetter, which produces high-quality sheet
1548music. Music is input in a text file containing control sequences which are
1549interpreted by LilyPond to produce the final document. It is extendable with
1550Guile.")
1551 (license license:gpl3+)
1552
1553 ;; On armhf and mips64el, building the documentation sometimes leads to
1554 ;; more than an hour of silence, so double the max silent time.
1555 (properties `((max-silent-time . 7200)))))
1556
1557;; This package tracks the unstable release of LilyPond.
1558(define-public lilypond-next
1559 (package
1560 (inherit lilypond)
1561 (name "lilypond-next")
1562 (version "2.27.1")
1563 (source
1564 (origin
1565 (method url-fetch)
1566 (uri (string-append "http://lilypond.org/download/sources/"
1567 "v" (version-major+minor version) "/"
1568 "lilypond-" version ".tar.gz"))
1569 (sha256
1570 (base32 "14ykhp9bzw9hhzcy215dj3ylfil3hxnyy2wqy0xdniz23r2sr0db"))))))
1571
1572(define-public emacs-lilypond-mode
1573 (package
1574 (name "emacs-lilypond-mode")
1575 (version (package-version lilypond))
1576 (source (package-source lilypond))
1577 (build-system emacs-build-system)
1578 (arguments
1579 (list
1580 #:lisp-directory "elisp"))
1581 (home-page (package-home-page lilypond))
1582 (synopsis "Major mode for editing GNU LilyPond music scores")
1583 (description
1584 "This package provides an Emacs major mode for editing GNU LilyPond music
1585scores.")
1586 (license (package-license lilypond))))
1587
1588(define-public python-music21
1589 (package
1590 (name "python-music21")
1591 (version "10.5.0")
1592 (source
1593 (origin
1594 (method url-fetch)
1595 (uri (pypi-uri "music21" version))
1596 (sha256
1597 (base32 "1cixrvrcwpwvxiaqmal8j3w4ci1319mj9fz3njzr5d9wjpxpc9pp"))))
1598 (build-system pyproject-build-system)
1599 (arguments
1600 `(#:phases
1601 (modify-phases %standard-phases
1602 (replace 'check
1603 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
1604 (when tests?
1605 (add-installed-pythonpath inputs outputs)
1606 ;; See: https://github.com/cuthbertLab/music21/issues/1164
1607 (invoke "python" "-m" "music21.stream.tests")))))))
1608 (native-inputs (list python-hatchling))
1609 (propagated-inputs
1610 (list python-chardet
1611 python-joblib
1612 python-jsonpickle
1613 python-matplotlib
1614 python-more-itertools
1615 python-numpy
1616 python-requests
1617 python-webcolors))
1618 (home-page "https://web.mit.edu/music21/")
1619 (synopsis "Toolkit for Computational Musicology")
1620 (description
1621 "Music21 is a set of tools for helping scholars and other active
1622listeners answer questions about music quickly and simply.")
1623 ;; Software is dual-licensed.
1624 (license (list license:bsd-3 license:lgpl3+))))
1625
1626(define-public stk
1627 (package
1628 (name "stk")
1629 (version "5.0.1")
1630 (source (origin
1631 (method git-fetch)
1632 (uri (git-reference
1633 (url "https://github.com/thestk/stk")
1634 (commit version)))
1635 (sha256
1636 (base32
1637 "0z16614ljbvqa1ax6wl0nkzpqffaz1y59g4r09ch8x45wmy0xknb"))
1638 (file-name (git-file-name name version))
1639 (patches
1640 (search-patches "stk-5.0.1-fix-typo.patch"))))
1641 (build-system cmake-build-system)
1642 (arguments
1643 (list #:tests? #f ;no tests
1644 #:modules
1645 '((guix build cmake-build-system)
1646 (guix build utils)
1647 (srfi srfi-26))
1648 #:phases
1649 #~(modify-phases %standard-phases
1650 (add-after 'unpack 'patch-paths
1651 (lambda _
1652 ;; Patch rawwaves path.
1653 (substitute* (find-files "." "(\\.h$|\\.cpp$)")
1654 (("\\.\\./\\.\\./rawwaves")
1655 (string-append #$output "/share/stk/rawwaves"))
1656 (("\"rawwaves")
1657 (string-append "\"" #$output "/share/stk/rawwaves")))
1658 ;; Patch tk and tcl paths.
1659 (with-directory-excursion "projects"
1660 (for-each (lambda (file)
1661 (substitute* (string-drop-right file 4)
1662 (("wish") (which "wish"))
1663 (("< tcl") (string-append "< " #$output:gui
1664 "/share/stk/tcl"))
1665 (("\\./") (string-append #$output "/bin/"))))
1666 (find-files "." "\\.bat$"))
1667 (substitute* (find-files "share/stk/tcl" "\\.tcl$")
1668 (("tcl/bitmaps")
1669 (string-append #$output:gui "/share/stk/tcl/bitmaps"))))))
1670 (add-after 'install 'install-rawwaves-and-projects
1671 (lambda _
1672 (let* ((bin (string-append #$output "/bin"))
1673 (data (string-append #$output "/share/stk"))
1674 (rawwaves (string-append data "/rawwaves"))
1675 (scores (string-append data "/scores"))
1676 (gui (string-append #$output:gui "/bin"))
1677 (tcl (string-append #$output:gui "/share/stk/tcl")))
1678 (mkdir-p data)
1679 ;; Install rawwaves.
1680 (copy-recursively "rawwaves" rawwaves)
1681 ;; Install projects.
1682 (with-directory-excursion "../source/projects"
1683 ;; Install project binaries.
1684 (for-each (cut install-file <> bin)
1685 '("demo/stk-demo"
1686 "effects/effects"
1687 "examples/audioprobe"
1688 "examples/bethree"
1689 "examples/controlbee"
1690 "examples/crtsine"
1691 "examples/duplex"
1692 "examples/foursine"
1693 "examples/grains"
1694 "examples/inetIn"
1695 "examples/inetOut"
1696 "examples/midiprobe"
1697 "examples/play"
1698 "examples/playsmf"
1699 "examples/record"
1700 "examples/rtsine"
1701 "examples/sine"
1702 "examples/sineosc"
1703 "examples/threebees"
1704 "eguitar/eguitar"
1705 "ragamatic/ragamat"))
1706 ;; Install project rawwaves.
1707 (for-each (cut copy-recursively <> rawwaves)
1708 '("examples/rawwaves"
1709 "ragamatic/rawwaves"))
1710 ;; Install project scores.
1711 (for-each (cut copy-recursively <> scores)
1712 '("demo/scores"
1713 "eguitar/scores"
1714 "examples/scores"))
1715 ;; Install GUI scripts.
1716 (for-each (lambda (file)
1717 (install-file (string-drop-right file 4) gui))
1718 (find-files "." "\\.bat"))
1719 ;; Install TCL files.
1720 (for-each (cut copy-recursively <> tcl)
1721 '("demo/tcl"
1722 "effects/tcl"
1723 "eguitar/tcl"
1724 "ragamatic/tcl")))))))))
1725 (outputs
1726 '("out" "gui"))
1727 (inputs
1728 (list alsa-lib jack-2 tk))
1729 (home-page "https://ccrma.stanford.edu/software/stk/")
1730 (synopsis "Audio signal processing and algorithmic synthesis classes")
1731 (description
1732 "Synthesis ToolKit in C++ (STK) is a set of audio signal processing and
1733algorithmic synthesis classes written in C++.
1734
1735This package also provides its demo project, examples, ElectricGuitar,
1736RagaMatic and Effects.")
1737 (license (license:non-copyleft "file:///LICENSE"))))
1738
1739(define-public non-sequencer
1740 ;; The latest tagged release is three years old and uses a custom build
1741 ;; system, so we take the last commit.
1742 (let ((commit "257ec5951e7d4086344d98c99ebbe569f7c31211")
1743 (revision "5"))
1744 (package
1745 (name "non-sequencer")
1746 (version (git-version "1.9.5" revision commit))
1747 (source (origin
1748 (method git-fetch)
1749 (uri (git-reference
1750 (url "https://github.com/falkTX/non/")
1751 (commit commit)))
1752 (sha256
1753 (base32
1754 "0h6ycm3nbb5lvjvhymz5xlj8wqm3z3ggzn4ghmw6xyzd0l7c3m8b"))
1755 (file-name (git-file-name name version))))
1756 (build-system waf-build-system)
1757 (arguments
1758 `(#:tests? #f ;no "check" target
1759 #:configure-flags
1760 (list "--project=sequencer"
1761 ;; Disable the use of SSE unless on x86_64.
1762 ,@(if (not (string-prefix? "x86_64" (or (%current-target-system)
1763 (%current-system))))
1764 '("--disable-sse")
1765 '()))
1766 #:phases
1767 (modify-phases %standard-phases
1768 (add-before 'configure 'setup-waf
1769 (lambda* (#:key inputs #:allow-other-keys)
1770 (let ((waf (assoc-ref inputs "waf")))
1771 (copy-file (string-append waf "/bin/waf") "waf")))))))
1772 (inputs
1773 (list jack-1 libsigc++-2 liblo ntk))
1774 (native-inputs
1775 (list waf pkg-config))
1776 (home-page "https://non.tuxfamily.org/wiki/Non%20Sequencer")
1777 (synopsis "Pattern-based MIDI sequencer")
1778 (description
1779 "The Non Sequencer is a powerful, lightweight, real-time,
1780pattern-based MIDI sequencer. It utilizes the JACK Audio Connection Kit for
1781MIDI I/O and the NTK GUI toolkit for its user interface. Everything in Non
1782Sequencer happens on-line, in real-time. Music can be composed live, while the
1783transport is rolling.")
1784 (license license:gpl2+))))
1785
1786(define-public new-session-manager
1787 (package
1788 (name "new-session-manager")
1789 (version "1.6.0")
1790 (source (origin
1791 (method git-fetch)
1792 (uri (git-reference
1793 (url "https://github.com/jackaudio/new-session-manager")
1794 (commit (string-append "v" version))))
1795 (file-name (git-file-name name version))
1796 (sha256
1797 (base32
1798 "0ihngqbnc50izfy6x7nhgaah00byk8nl6n5smxbyb8fkhm2s8p21"))))
1799 (build-system meson-build-system)
1800 (native-inputs (list pkg-config))
1801 (inputs (list fltk jack-2 liblo libx11))
1802 (home-page "https://new-session-manager.jackaudio.org/")
1803 (synopsis "Music production session management tool")
1804 (description "New Session Manager (NSM) is a tool to assist music
1805production by grouping standalone programs into sessions. It can be used
1806create a session, or project, and add programs to it and then use commands to
1807save, start/stop, hide/show all programs at once, or individually. The
1808session can be interrupted and easily resumed at a later time.")
1809 (license license:gpl3+)))
1810
1811(define-public non-mixer
1812 (package (inherit non-sequencer)
1813 (name "non-mixer")
1814 (arguments
1815 (substitute-keyword-arguments arguments
1816 ((#:configure-flags flags)
1817 `(cons "--project=mixer"
1818 (delete "--project=sequencer" ,flags)))))
1819 (inputs
1820 (list jack-1 liblo ladspa lrdf ntk lv2 lilv))
1821 (native-inputs
1822 (list waf pkg-config))
1823 (home-page "https://non.tuxfamily.org/wiki/Non%20Mixer")
1824 (synopsis "Modular digital audio mixer")
1825 (description
1826 "The Non Mixer is a powerful, reliable and fast modular digital audio
1827mixer. It utilizes JACK for inter-application audio I/O and the NTK GUI
1828toolkit for a fast and lightweight user interface. Non Mixer can be used
1829alone or in concert with Non Timeline and Non Sequencer to form a complete
1830studio.")
1831 (license license:gpl2+)))
1832
1833(define-public non-timeline
1834 (package (inherit non-sequencer)
1835 (name "non-timeline")
1836 (arguments
1837 (substitute-keyword-arguments arguments
1838 ((#:configure-flags flags)
1839 `(cons "--project=timeline"
1840 (delete "--project=sequencer" ,flags)))))
1841 (inputs
1842 (list jack-1 liblo libsndfile ntk))
1843 (native-inputs
1844 (list waf pkg-config))
1845 (home-page "https://non.tuxfamily.org/wiki/Non%20Timeline")
1846 (synopsis "Modular digital audio timeline arranger")
1847 (description
1848 "The Non Timeline is a powerful, reliable and fast modular digital audio
1849timeline arranger. It utilizes JACK for inter-application audio I/O and the
1850NTK GUI toolkit for a fast and lightweight user interface. Non Timeline can
1851be used alone or in concert with Non Mixer and Non Sequencer to form a
1852complete studio.")
1853 (license license:gpl2+)))
1854
1855(define-public tascam-gtk
1856 ;; This commit represents the latest version at the time of this writing.
1857 (let ((commit "6419a3be8fd9678ebcfd79812bfbcc55b44fc3a6")
1858 (revision "1"))
1859 (package
1860 (name "tascam-gtk")
1861 (version (git-version "0.4" revision commit))
1862 (source (origin
1863 (method git-fetch)
1864 (uri (git-reference
1865 (url "https://github.com/onkelDead/tascam-gtk")
1866 (commit commit)))
1867 (file-name (git-file-name name version))
1868 (sha256
1869 (base32
1870 "1gsnac7x3djvbwf807vz58zrqf09sdr01kfdvp1pdf6j3zsxz0bb"))))
1871 (build-system gnu-build-system)
1872 (inputs
1873 (list liblo gtkmm-3 alsa-lib libxml++))
1874 (native-inputs
1875 (list autoconf automake `(,glib "bin") pkg-config))
1876 (home-page "https://github.com/onkelDead/tascam-gtk")
1877 (synopsis "GTK+ based application to control Tascam US-16x08 DSP mixer")
1878 (description "This is a mixer application to control the Tascam US-16x08
1879audio interface. This device contains about 280 control elements and this
1880mixer application aims to provide comfortable access to the DSP effects the
1881device supports.")
1882 (license license:expat))))
1883
1884(define-public bsequencer
1885 (package
1886 (name "bsequencer")
1887 (version "1.8.10")
1888 (source (origin
1889 (method git-fetch)
1890 (uri (git-reference
1891 (url "https://github.com/sjaehn/BSEQuencer")
1892 (commit version)))
1893 (file-name (git-file-name name version))
1894 (sha256
1895 (base32
1896 "0w3m7x0619iq8rafcy0bal4gwh9m9h7iq93q7gkpxhv6dq58ix6l"))))
1897 (build-system gnu-build-system)
1898 (arguments
1899 `(#:make-flags
1900 (list (string-append "CC=" ,(cc-for-target))
1901 (string-append "PREFIX=" (assoc-ref %outputs "out")))
1902 #:tests? #f ; there are none
1903 #:phases
1904 (modify-phases %standard-phases
1905 (delete 'configure))))
1906 (inputs
1907 (list cairo lv2 libx11))
1908 (native-inputs
1909 (list pkg-config))
1910 (home-page "https://github.com/sjaehn/BSEQuencer")
1911 (synopsis "Multi-channel MIDI step sequencer LV2 plugin")
1912 (description
1913 "This package provides a multi-channel MIDI step sequencer LV2 plugin
1914with a selectable pattern matrix size.")
1915 (license license:gpl3+)))
1916
1917(define-public bchoppr
1918 (package
1919 (inherit bsequencer)
1920 (name "bchoppr")
1921 (version "1.12.8")
1922 (source
1923 (origin
1924 (method git-fetch)
1925 (uri (git-reference
1926 (url "https://github.com/sjaehn/BChoppr")
1927 (commit version)
1928 (recursive? #t))) ;for BWidgets
1929 (file-name (git-file-name name version))
1930 (sha256
1931 (base32 "1d48jiwgw82swwv7ikj5dj8b8viklhfvnq1d3qsq8wk91s4npd6d"))))
1932 (native-inputs (list pkg-config))
1933 (inputs (list cairo cpio libsndfile lv2))
1934 (synopsis "Audio stream-chopping LV2 plugin")
1935 (description "B.Choppr cuts the audio input stream into a repeated
1936sequence of up to 16 chops. Each chop can be leveled up or down (gating).
1937B.Choppr is the successor of B.Slizr.")
1938 (home-page "https://github.com/sjaehn/BChoppr")
1939 (license license:gpl3+)))
1940
1941(define-public bshapr
1942 (package
1943 (inherit bsequencer)
1944 (name "bshapr")
1945 (version "0.13")
1946 (source
1947 (origin
1948 (method git-fetch)
1949 (uri (git-reference
1950 (url "https://github.com/sjaehn/BShapr")
1951 (commit (string-append "v" version))))
1952 (file-name (git-file-name name version))
1953 (sha256
1954 (base32 "1qr3fxqcplgb6iqi2vxc27jghhv6qsidww2by15zb2vs34yh73pl"))))
1955 (synopsis "Beat/envelope shaper LV2 plugin")
1956 (description "B.Shapr is a beat/envelope shaper LV2 plugin.")
1957 (home-page "https://github.com/sjaehn/BShapr")
1958 (license license:gpl3+)))
1959
1960(define-public bjumblr
1961 (package
1962 (inherit bsequencer)
1963 (name "bjumblr")
1964 (version "1.6.8")
1965 (source
1966 (origin
1967 (method git-fetch)
1968 (uri (git-reference
1969 (url "https://github.com/sjaehn/BJumblr")
1970 (commit version)))
1971 (file-name (git-file-name name version))
1972 (sha256
1973 (base32 "00fgax8aqqggs54pjpagw5pc30kgxaghh8mrzpqwhs06cnchcam9"))))
1974 (inputs
1975 (list cairo libsndfile lv2))
1976 (synopsis "Pattern-controlled audio stream/sample re-sequencer LV2 plugin")
1977 (description "B.Jumblr is a pattern-controlled audio stream / sample
1978re-sequencer LV2 plugin.")
1979 (home-page "https://github.com/sjaehn/BJumblr")
1980 (license license:gpl3+)))
1981
1982(define-public bschaffl
1983 (package
1984 (inherit bsequencer)
1985 (name "bschaffl")
1986 (version "1.4.10")
1987 (source
1988 (origin
1989 (method git-fetch)
1990 (uri (git-reference
1991 (url "https://github.com/sjaehn/BSchaffl")
1992 (commit version)))
1993 (file-name (git-file-name name version))
1994 (sha256
1995 (base32 "1az938a2bwpsmy39rcsayz41pyi2i1yvbnbfay3xal0ygrh4zy6d"))))
1996 (inputs
1997 `(("cairo" ,cairo)
1998 ("fontconfig" ,fontconfig)
1999 ("libsndfile" ,libsndfile)
2000 ("libx11" ,libx11)
2001 ("lv2" ,lv2)))
2002 (home-page "https://github.com/sjaehn/BSchaffl")
2003 (synopsis "Pattern-controlled MIDI amp & time stretch LV2 plugin")
2004 (description "This package provides an LV2 plugin that allows for
2005pattern-controlled MIDI amp & time stretching to produce shuffle / swing
2006effects.
2007
2008Key features include:
2009
2010@enumerate
2011@item MIDI velocity amplification and timing manipulation plugin
2012@item Swing and shuffle rhythms
2013@item Pre-generator dynamics
2014@item Tempo rubato
2015@item Pattern (sliders) or shape-controlled
2016@item MIDI filters
2017@item Smart quantization
2018@end itemize
2019")
2020 (license license:gpl3+)))
2021
2022(define-public solfege
2023 (package
2024 (name "solfege")
2025 (version "3.23.5pre2")
2026 (source (origin
2027 (method git-fetch)
2028 (uri (git-reference
2029 (url "https://git.savannah.gnu.org/git/solfege.git")
2030 (commit version)))
2031 (file-name (git-file-name name version))
2032 (sha256
2033 (base32
2034 "1lmzp4kn0xh58yc8gzriz1i34g5qaa2xxrxzpmr7v9jyk19dqmcm"))))
2035 (build-system gnu-build-system)
2036 (arguments
2037 (list
2038 #:tests? #f ;xmllint attempts to download DTD
2039 #:test-target "test"
2040 #:configure-flags
2041 #~(list (string-append "--enable-docbook-stylesheet="
2042 #$(this-package-native-input "docbook-xsl")
2043 "/xml/xsl/"
2044 #$(package-name docbook-xsl) "-"
2045 #$(package-version docbook-xsl)
2046 "/html/chunk.xsl"))
2047 #:phases
2048 #~(modify-phases %standard-phases
2049 (add-after 'unpack 'set-version
2050 (lambda _
2051 (substitute* "autogen.sh"
2052 (("python3 -c \"import tools.*create_versions_file.*")
2053 (string-append "echo \"version_info = '"
2054 #$version "' > solfege/_version.py\"\n")))
2055 (substitute* "Makefile.in"
2056 (("\\$\\(PYTHON) -c \"import tools.*create_versions_file.*")
2057 "true\n"))
2058 (substitute* "solfege/buildinfo.py.in"
2059 (("from solfege._version import version_info")
2060 "version_info = {'git_sha': 'N/A'}"))))
2061 (add-after 'unpack 'fix-configuration
2062 (lambda* (#:key inputs #:allow-other-keys)
2063 (substitute* "default.config"
2064 (("/usr/bin/aplay") "aplay")
2065 (("/usr/bin/timidity") "timidity")
2066 (("/usr/bin/mpg123") "mpg123")
2067 (("/usr/bin/ogg123") "ogg123"))))
2068 (add-before 'build 'patch-python-shebangs
2069 (lambda* (#:key inputs #:allow-other-keys)
2070 ;; Two python scripts begin with a Unicode BOM, so patch-shebang
2071 ;; has no effect.
2072 (substitute* '("solfege/parsetree.py"
2073 "solfege/presetup.py")
2074 (("#!/usr/bin/python")
2075 (string-append "#!" search-input-file inputs "bin/python")))))
2076 (add-before 'build 'add-sitedirs
2077 ;; .pth files are not automatically interpreted unless the
2078 ;; directories containing them are added as "sites". The
2079 ;; directories are then added to those in the PYTHONPATH. This is
2080 ;; required for the operation of pygtk and pygobject.
2081 (lambda _
2082 (substitute* "run-solfege.py"
2083 (("import os")
2084 "import os, site
2085for path in [path for path in sys.path if 'site-packages' in path]: site.addsitedir(path)"))))
2086 (add-before 'build 'adjust-config-file-prefix
2087 (lambda _
2088 (substitute* "run-solfege.py"
2089 (("prefix = os.path.*$")
2090 (string-append "prefix = " #$output)))))
2091 (add-after 'build 'build-manual
2092 (lambda _
2093 (invoke "make" "update-manual")))
2094 (add-after 'install 'wrap-program
2095 (lambda* (#:key outputs #:allow-other-keys)
2096 ;; Make sure 'solfege' runs with the correct PYTHONPATH.
2097 (let ((python-path (getenv "GUIX_PYTHONPATH"))
2098 (typelib-path (getenv "GI_TYPELIB_PATH")))
2099 (wrap-program (search-input-file outputs "bin/solfege")
2100 `("GUIX_PYTHONPATH" ":" prefix (,python-path))
2101 `("GI_TYPELIB_PATH" ":" prefix (,typelib-path)))))))))
2102 (inputs
2103 (list bash-minimal
2104 python-wrapper
2105 python-pycairo
2106 python-pygobject
2107 gettext-minimal
2108 gtk+
2109 lilypond))
2110 (propagated-inputs
2111 (list timidity++)) ; default player
2112 (native-inputs
2113 (list autoconf
2114 automake
2115 pkg-config
2116 txt2man
2117 libxml2 ; for tests
2118 docbook-xsl ; for manual
2119 docbook-xml-4.1.2
2120 itstool
2121 libxslt
2122 ghostscript
2123 texinfo))
2124 (home-page "https://www.gnu.org/software/solfege/")
2125 (synopsis "Ear training")
2126 (description
2127 "GNU Solfege is a program for practicing musical ear-training. With it,
2128you can practice your recognition of various musical intervals and chords. It
2129features a statistics overview so you can monitor your progress across several
2130sessions. Solfege is also designed to be extensible so you can easily write
2131your own lessons.")
2132 (license license:gpl3+)))
2133
2134(define-public powertabeditor
2135 (package
2136 (name "powertabeditor")
2137 (version "2.0.22")
2138 (source (origin
2139 (method git-fetch)
2140 (uri (git-reference
2141 (url "https://github.com/powertab/powertabeditor")
2142 (commit version)))
2143 (file-name (git-file-name name version))
2144 (sha256
2145 (base32
2146 "1pn8wcmxsvffh8b3slsrbdb6l5s1mdbl3x41i4l170ld0p6fv92n"))))
2147 (build-system qt-build-system)
2148 (arguments
2149 (list
2150 #:qtbase qtbase
2151 #:phases
2152 '(modify-phases %standard-phases
2153 (replace 'check
2154 (lambda* (#:key tests? #:allow-other-keys)
2155 (when tests? (invoke "bin/pte_tests")))))))
2156 (inputs
2157 (list alsa-lib
2158 boost
2159 minizip
2160 nlohmann-json
2161 pugixml
2162 qtbase
2163 qttools ;for QtLinguistTools
2164 qtwayland
2165 rtmidi
2166 timidity++
2167 zlib))
2168 (native-inputs
2169 (list doctest pkg-config))
2170 (home-page "https://github.com/powertab/powertabeditor")
2171 (synopsis "Guitar tablature editor")
2172 (description
2173 "Power Tab Editor 2.0 is the successor to the famous original Power Tab
2174Editor. It is compatible with Power Tab Editor 1.7 and Guitar Pro.")
2175 (license license:gpl3+)))
2176
2177(define-public jalv-select
2178 (package
2179 (name "jalv-select")
2180 (version "1.3")
2181 (source (origin
2182 (method git-fetch)
2183 (uri (git-reference
2184 (url "https://github.com/brummer10/jalv_select")
2185 (commit (string-append "v" version))))
2186 (file-name (git-file-name name version))
2187 (sha256
2188 (base32
2189 "15yanq1wra0hyh6x72ji7pk562iddg476g3vksj495x91zhnl6vm"))))
2190 (build-system gnu-build-system)
2191 (arguments
2192 (list #:make-flags
2193 #~(list (string-append "PREFIX=" #$output))
2194 #:phases
2195 #~(modify-phases %standard-phases
2196 (delete 'configure)
2197 (add-after 'unpack 'ignore-PATH
2198 (lambda _
2199 (substitute* "jalv.select.cpp"
2200 (("echo \\$PATH.*tr ':'.*xargs ls")
2201 (string-append "ls -1 "
2202 #$(this-package-input "jalv") "/bin")))))
2203 (add-after 'install 'wrap
2204 (lambda _
2205 (wrap-program (string-append #$output "/bin/jalv.select")
2206 `("PATH" ":" prefix
2207 (,(string-append #$(this-package-input "coreutils")
2208 "/bin")
2209 ,(string-append #$(this-package-input "gawk") "/bin")
2210 ,(string-append #$(this-package-input "grep") "/bin")
2211 ,(string-append #$(this-package-input "jalv")
2212 "/bin")))))))))
2213 (inputs
2214 (list bash-minimal
2215 lilv
2216 lv2
2217 jalv
2218 gtkmm-2
2219 ;; For finding jalv executables
2220 coreutils gawk grep))
2221 (native-inputs
2222 (list pkg-config))
2223 (native-search-paths
2224 (list (search-path-specification
2225 (variable "LV2_PATH")
2226 (files '("lib/lv2")))))
2227 (home-page "https://github.com/brummer10/jalv_select")
2228 (synopsis "GUI to select LV2 plugins and run them with jalv")
2229 (description
2230 "The jalv.select package provides a graphical user interface allowing
2231users to select LV2 plugins and run them with jalv.")
2232 (license license:public-domain)))
2233
2234(define-public petri-foo
2235 (package
2236 (name "petri-foo")
2237 (version "0.1.87")
2238 (source (origin
2239 (method url-fetch)
2240 (uri (string-append "mirror://sourceforge/petri-foo/Source"
2241 "/petri-foo-" version ".tar.bz2"))
2242 (sha256
2243 (base32
2244 "0b25iicgn8c42487fdw32ycfrll1pm2zjgy5djvgw6mfcaa4gizh"))
2245 (modules '((guix build utils)))
2246 ;; https://github.com/petri-foo/Petri-Foo/pull/43
2247 (snippet '(begin
2248 (substitute* "gui/gui.c"
2249 (("#include \\\"waveform\\.h\\\"")
2250 (string-append
2251 "#include \"waveform.h\""
2252 "\n\nGtkRecentManager *recent_manager;")))
2253 (substitute* "gui/gui.h"
2254 (("GtkRecentManager \\*recent_manager;")
2255 "extern GtkRecentManager *recent_manager;"))))))
2256 (build-system cmake-build-system)
2257 (arguments (list #:tests? #f)) ;no test target
2258 (native-inputs (list pkg-config))
2259 (inputs (list alsa-lib
2260 glib
2261 jack-1
2262 libgnomecanvas
2263 liblo
2264 libsamplerate
2265 libsndfile
2266 libxml2
2267 openssl))
2268 (home-page "https://petri-foo.sourceforge.net/")
2269 (synopsis "Audio sampler for JACK")
2270 (description
2271 "Petri-Foo is a fork of the Specimen sampler project intended to run under
2272a JACK session.")
2273 (license license:gpl2)))
2274
2275(define-public mixxx
2276 (package
2277 (name "mixxx")
2278 (version "2.5.6")
2279 (source
2280 (origin
2281 (method git-fetch)
2282 (uri (git-reference
2283 (url "https://github.com/mixxxdj/mixxx")
2284 (commit version)))
2285 (file-name (git-file-name name version))
2286 (sha256
2287 (base32 "0xamfakn6a4vykm66xhp4fdlfkcnxv91gvdaizx8npijlfpx320v"))
2288 (modules '((guix build utils)))
2289 (snippet
2290 ;; Delete libraries that we already have or don't need.
2291 ;; TODO: try to unbundle more (see lib/).
2292 `(begin
2293 (let ((third-parties '("apple" "hidapi" "libshout-idjc")))
2294 (with-directory-excursion "lib"
2295 (map (lambda (third-party)
2296 (delete-file-recursively third-party)) third-parties)))
2297 #t))))
2298 (build-system qt-build-system)
2299 (arguments
2300 (list
2301 #:qtbase qtbase
2302 #:phases
2303 #~(modify-phases %standard-phases
2304 (add-after 'unpack 'qualify-paths
2305 (lambda* (#:key inputs #:allow-other-keys)
2306 (substitute* "src/sources/libfaadloader.cpp"
2307 (("libfaad\\.so")
2308 (search-input-file inputs "lib/libfaad.so")))))
2309 (add-after 'unpack 'disable-bugged-test
2310 ;; This test regularly fails and aborts the build process, hence it
2311 ;; was disabled (no impact on functionality). It appears this is a
2312 ;; problem for some upstream as well, as indicated by:
2313 ;; https://github.com/mixxxdj/mixxx/issues/12887 (featuring a
2314 ;; reference to another issue related to the same problem).
2315 (lambda _
2316 (substitute* "src/test/soundproxy_test.cpp"
2317 (("TEST_F\\(SoundSourceProxyTest, firstSoundTest\\)")
2318 "TEST_F(SoundSourceProxyTest, DISABLED_firstSoundTest)")))))))
2319 (native-inputs (list benchmark googletest pkg-config python-wrapper qttools
2320 xorg-server-for-tests))
2321 (inputs (list bash-minimal
2322 chromaprint
2323 eudev
2324 libxkbcommon ;required by qtbase
2325 faad2
2326 ffmpeg
2327 fftw
2328 flac
2329 glu
2330 hidapi
2331 lame
2332 libdjinterop
2333 libebur128
2334 libid3tag
2335 libkeyfinder
2336 libmad
2337 libmp4v2
2338 libmodplug
2339 libsndfile
2340 libshout-idjc
2341 libusb
2342 libvorbis
2343 lilv
2344 mp3guessenc
2345 openssl
2346 opusfile
2347 portaudio
2348 portmidi
2349 protobuf
2350 qtbase
2351 qtdeclarative
2352 qtkeychain-qt6
2353 qtsvg
2354 qtshadertools
2355 qtwayland
2356 qt5compat
2357 rubberband
2358 soundtouch
2359 sqlite
2360 taglib
2361 upower
2362 vamp
2363 wavpack
2364 c++-gsl))
2365 (home-page "https://mixxx.org/")
2366 (synopsis "DJ software to perform live mixes")
2367 (description "Mixxx is a DJ software. It integrates the tools DJs need to
2368perform creative live mixes with digital music files.")
2369 (license license:gpl2+)))
2370
2371(define-public synthv1
2372 (package
2373 (name "synthv1")
2374 (version "1.4.2")
2375 (source (origin
2376 (method url-fetch)
2377 (uri
2378 (string-append "mirror://sourceforge/synthv1/synthv1/" version
2379 "/synthv1-" version ".tar.gz"))
2380 (sha256
2381 (base32
2382 "10bx0hs250kgvlblrqhxsr1pjfrcrfzry7n4plfvpm7gbxibb1bs"))))
2383 (build-system cmake-build-system)
2384 (arguments
2385 `(#:tests? #f)) ; there are no tests
2386 (inputs
2387 (list jack-1
2388 lv2
2389 alsa-lib
2390 new-session-manager
2391 liblo
2392 qtbase
2393 qtsvg))
2394 (native-inputs
2395 (list pkg-config qttools))
2396 (home-page "https://synthv1.sourceforge.io")
2397 (synopsis "Polyphonic subtractive synthesizer")
2398 (description
2399 "Synthv1 is an old-school subtractive polyphonic synthesizer with four
2400oscillators and stereo effects.")
2401 (license license:gpl2+)))
2402
2403(define-public drumkv1
2404 (package
2405 (name "drumkv1")
2406 (version "1.4.2")
2407 (source (origin
2408 (method url-fetch)
2409 (uri
2410 (string-append "mirror://sourceforge/drumkv1/drumkv1/" version
2411 "/drumkv1-" version ".tar.gz"))
2412 (sha256
2413 (base32
2414 "1h9qna9p2h8gxp79fdd0kzmds3lzsj3w1fn7r02jgbw270xr6cwd"))))
2415 (build-system cmake-build-system)
2416 (arguments
2417 `(#:tests? #f)) ; there are no tests
2418 (inputs
2419 (list jack-1
2420 lv2
2421 libsndfile
2422 alsa-lib
2423 new-session-manager
2424 liblo
2425 qtbase
2426 qtsvg))
2427 (native-inputs
2428 (list pkg-config qttools))
2429 (home-page "https://drumkv1.sourceforge.io")
2430 (synopsis "Drum-kit sampler synthesizer with stereo effects")
2431 (description
2432 "Drumkv1 is an old-school drum-kit sampler synthesizer with stereo
2433effects.")
2434 (license license:gpl2+)))
2435
2436(define-public samplv1
2437 (package
2438 (name "samplv1")
2439 (version "1.3.2")
2440 (source (origin
2441 (method url-fetch)
2442 (uri
2443 (string-append "mirror://sourceforge/samplv1/samplv1/" version
2444 "/samplv1-" version ".tar.gz"))
2445 (sha256
2446 (base32
2447 "0n44006jx7mxvi4fpj4crv4app86wfhh6p87ia06plqg23snsb30"))))
2448 (build-system cmake-build-system)
2449 (arguments
2450 `(#:tests? #f)) ; there are no tests
2451 (inputs
2452 (list jack-1
2453 lv2
2454 libsndfile
2455 alsa-lib
2456 new-session-manager
2457 liblo
2458 qtbase
2459 qtsvg))
2460 (native-inputs
2461 (list pkg-config qttools))
2462 (home-page "https://samplv1.sourceforge.io")
2463 (synopsis "Polyphonic sampler synthesizer with stereo effects")
2464 (description
2465 "Samplv1 is an old-school polyphonic sampler synthesizer with stereo
2466effects.")
2467 (license license:gpl2+)))
2468
2469(define-public padthv1
2470 (package
2471 (name "padthv1")
2472 (version "1.4.2")
2473 (source (origin
2474 (method url-fetch)
2475 (uri
2476 (string-append "mirror://sourceforge/padthv1/padthv1/" version
2477 "/padthv1-" version ".tar.gz"))
2478 (sha256
2479 (base32
2480 "0qj1163n71lhpibafhdkf664lyfplcq669qc791aawqdbwivbsha"))))
2481 (build-system cmake-build-system)
2482 (arguments
2483 `(#:tests? #f)) ; there are no tests
2484 (inputs
2485 (list jack-1
2486 lv2
2487 alsa-lib
2488 new-session-manager
2489 liblo
2490 fftwf
2491 qtbase
2492 qtsvg))
2493 (native-inputs
2494 (list pkg-config qttools))
2495 (home-page "https://padthv1.sourceforge.io")
2496 (synopsis "Polyphonic additive synthesizer")
2497 (description
2498 "Padthv1 is an old-school polyphonic additive synthesizer with stereo
2499effects. Padthv1 is based on the PADsynth algorithm by Paul Nasca, as a
2500special variant of additive synthesis.")
2501 (license license:gpl2+)))
2502
2503(define-public amsynth
2504 (package
2505 (name "amsynth")
2506 (version "1.13.4")
2507 (source
2508 (origin
2509 (method url-fetch)
2510 (uri (string-append "https://github.com/amsynth/amsynth/releases/"
2511 "download/release-" version
2512 "/amsynth-" version ".tar.gz"))
2513 (sha256
2514 (base32 "1yryhwx05v1kzj44kxamgvwc65r65d7vlk4nbkaa6kjy7yy9lrwm"))))
2515 (build-system gnu-build-system)
2516 (arguments
2517 (list #:phases
2518 #~(modify-phases %standard-phases
2519 (add-after 'unpack 'patch-file-names
2520 (lambda* (#:key inputs #:allow-other-keys)
2521 (substitute* "src/GUI/editor_pane.c"
2522 (("/usr/bin/unzip")
2523 (search-input-file inputs "bin/unzip")))
2524 (substitute* "src/GUI/MainMenu.cpp"
2525 (("/usr/bin/which")
2526 (search-input-file inputs "bin/which"))))))))
2527 (inputs
2528 (list alsa-lib
2529 gtk+-2
2530 jack-1
2531 libsndfile
2532 lv2
2533 ;; External commands invoked at run time.
2534 unzip
2535 which))
2536 (propagated-inputs
2537 ;; avoid runtime error:
2538 ;; GLib-GIO-ERROR **: 22:14:48.344: Settings schema
2539 ;; 'org.gnome.desktop.interface' is not installed
2540 (list gsettings-desktop-schemas))
2541 (native-inputs
2542 (append (list intltool
2543 pkg-config)
2544 ;; For generating the documentation.
2545 (if (supported-package? pandoc)
2546 (list pandoc)
2547 '())))
2548 (home-page "https://amsynth.github.io")
2549 (synopsis "Analog modeling synthesizer")
2550 (description
2551 "amsynth is an easy-to-use software synthesizer with a classic
2552subtractive synthesizer topology. Its features include: dual
2553oscillators (sine, saw, square, noise) with hard sync; 12 and 24 dB/oct
2554resonant filters (low-pass, high-pass, band-pass, notch); mono, poly, legato
2555keyboard modes; dual ADSR envelope generators for filter and amplitude; LFO
2556which can modulate the oscillators, filter, and amplitude; distortion and
2557reverb effects.")
2558 (license license:gpl2+)))
2559
2560(define-public paulxstretch
2561 (package
2562 (name "paulxstretch")
2563 (version "1.6.0")
2564 (source (origin
2565 (method git-fetch)
2566 (uri (git-reference
2567 (url "https://github.com/essej/paulxstretch")
2568 (commit (string-append "v" version))))
2569 (file-name (git-file-name name version))
2570 (sha256
2571 (base32
2572 "1pff51imfgmgqzc6mdgwd1v9fci0a8hj85fnkdsvkdzbnxdzvs9r"))))
2573 (build-system cmake-build-system)
2574 (arguments
2575 (list
2576 #:tests? #f ;no test suite
2577 #:phases
2578 #~(modify-phases %standard-phases
2579 (add-after 'unpack 'patch-paths
2580 (lambda* (#:key inputs #:allow-other-keys)
2581 (substitute* "deps/juce/extras/Projucer/Source/ProjectSaving/\
2582jucer_ProjectExport_CodeBlocks.h"
2583 (("/usr/include/freetype2")
2584 (search-input-directory inputs "/include/freetype2")))
2585 (substitute*
2586 "deps/juce/modules/juce_graphics/native/juce_linux_Fonts.cpp"
2587 (("/etc/fonts")
2588 (search-input-directory inputs "/etc/fonts")))
2589 (substitute*
2590 "deps/juce/modules/juce_gui_basics/native/x11/\
2591juce_linux_XWindowSystem.cpp"
2592 (("/usr/bin/dconf")
2593 (search-input-file inputs "/bin/dconf"))
2594 (("/usr/bin/gsettings")
2595 (search-input-file inputs "/bin/gsettings")))))
2596 (replace 'install
2597 (lambda _
2598 (let* ((lib (string-append #$output "/lib"))
2599 (share (string-append #$output "/share"))
2600 (clap (string-append lib "/clap"))
2601 (vst3 (string-append lib "/vst3")))
2602 (with-directory-excursion
2603 "PaulXStretch_artefacts/RelWithDebInfo"
2604 (install-file "Standalone/paulxstretch"
2605 (string-append #$output "/bin"))
2606 (install-file "CLAP/PaulXStretch.clap" clap)
2607 (mkdir-p vst3)
2608 (copy-recursively "VST3" vst3)
2609 (install-file (string-append
2610 #$source
2611 "/linux/paulxstretch.desktop")
2612 (string-append share "/applications"))
2613 (install-file (string-append
2614 #$source
2615 "/images/paulxstretch_icon_1024_rounded.png")
2616 (string-append share "/pixmaps")))))))))
2617 (home-page "https://sonosaurus.com/paulxstretch/")
2618 (native-inputs (list pkg-config))
2619 (inputs (list alsa-lib
2620 curl
2621 dconf
2622 fftwf
2623 fontconfig
2624 freetype
2625 `(,glib "bin")
2626 jack-1
2627 libx11
2628 libxcursor
2629 libxext
2630 libxinerama
2631 libxrandr))
2632 (supported-systems '("x86_64-linux")) ;pffft.c uses SIMD code
2633 (synopsis "Audio timestretching application and plugin")
2634 (description
2635 "PaulXStretch is an application/plugin is based on the PaulStretch
2636algorithm (Paul’s Extreme Time Stretch, originally developed by Nasca Octavian
2637Paul), and specifically the PaulXStretch version from Xenakios.")
2638 (license license:gpl3+)))
2639
2640(define-public setbfree
2641 (package
2642 (name "setbfree")
2643 (version "0.8.13")
2644 (source (origin
2645 (method git-fetch)
2646 (uri (git-reference
2647 (url "https://github.com/pantherb/setBfree")
2648 (commit (string-append "v" version))))
2649 (file-name (git-file-name name version))
2650 (sha256
2651 (base32
2652 "1w6p74168hbyrprk6lk18xrmli65kp9i87li6rmxhbvgk5ck3lv3"))))
2653 (build-system gnu-build-system)
2654 (arguments
2655 (list
2656 #:tests? #f ; no "check" target
2657 #:make-flags
2658 #~(cons* (string-append "PREFIX=" #$output)
2659 (string-append "FONTFILE="
2660 #$(this-package-input "font-bitstream-vera")
2661 "/share/fonts/truetype/VeraBd.ttf")
2662 ;; Disable unsupported optimization flags on non-x86
2663 (let ((system #$(or (%current-target-system)
2664 (%current-system))))
2665 (if (or (string-prefix? "x86_64" system)
2666 (string-prefix? "i686" system))
2667 '()
2668 '("OPTIMIZATIONS=-ffast-math -fomit-frame-pointer -O3"))))
2669 #:phases
2670 #~(modify-phases %standard-phases
2671 (add-before 'build 'set-CC-variable
2672 (lambda _ (setenv "CC" #$(cc-for-target))))
2673 (delete 'configure))))
2674 (inputs
2675 (list jack-1
2676 lv2
2677 zita-convolver
2678 glu
2679 ftgl
2680 font-bitstream-vera))
2681 (native-inputs
2682 (list help2man pkg-config))
2683 (home-page "https://setbfree.org")
2684 (synopsis "Tonewheel organ")
2685 (description
2686 "setBfree is a MIDI-controlled, software synthesizer designed to imitate
2687the sound and properties of the electromechanical organs and sound
2688modification devices that brought world-wide fame to the names and products of
2689Laurens Hammond and Don Leslie.")
2690 (license license:gpl2+)))
2691
2692(define-public bristol
2693 (package
2694 (name "bristol")
2695 (version "0.60.11")
2696 (source (origin
2697 (method url-fetch)
2698 (uri (string-append "mirror://sourceforge/bristol/bristol/"
2699 (version-major+minor version)
2700 "/bristol-" version ".tar.gz"))
2701 (sha256
2702 (base32
2703 "1fi2m4gmvxdi260821y09lxsimq82yv4k5bbgk3kyc3x1nyhn7vx"))
2704 (patches
2705 (search-patches "bristol-c99.patch"))))
2706 (build-system gnu-build-system)
2707 (arguments
2708 `(#:phases
2709 (modify-phases %standard-phases
2710 (add-after 'unpack 'remove-sse-flags
2711 (lambda* (#:key system #:allow-other-keys)
2712 (when (not (or (string-prefix? "x86_64" system)
2713 (string-prefix? "i686" system)))
2714 (substitute* "bristol/Makefile.in"
2715 (("-msse -mfpmath=sse") "")))))
2716 ;; This is needed to build brighton
2717 (add-after 'unpack 'add-fcommon
2718 (lambda _
2719 (setenv "CFLAGS" "-fcommon")))
2720 ;; alsa-lib 1.1.x no longer provides iatomic.h. That's okay because
2721 ;; bristol actually doesn't use it.
2722 (add-after 'unpack 'do-not-use-alsa-iatomic
2723 (lambda _
2724 (substitute* "libbristolaudio/audioEngineJack.c"
2725 (("#include <alsa/iatomic.h>") ""))))
2726 ;; We know that Bristol has been linked with JACK and we don't have
2727 ;; ldd, so we can just skip this check.
2728 (add-after 'unpack 'do-not-grep-for-jack
2729 (lambda _
2730 (substitute* "bin/startBristol.in"
2731 (("ldd `which bristol` | grep jack") "echo guix")))))))
2732 (inputs
2733 (list alsa-lib jack-2 liblo libx11))
2734 (native-inputs
2735 (list pkg-config))
2736 (home-page "https://bristol.sourceforge.net/")
2737 (synopsis "Synthesizer emulator")
2738 (description
2739 "Bristol is an emulation package for a number of different @code{classic}
2740synthesizers including additive and subtractive and a few organs. The
2741application consists of the engine, which is called bristol, and its own GUI
2742library called brighton that represents all the emulations. There are
2743currently more than twenty different emulations; each does sound different
2744although the author maintains that the quality and accuracy of each emulation
2745is subjective.")
2746 (license license:gpl3+)))
2747
2748(define-public tuner
2749 (package
2750 (name "tuner")
2751 (version "2.0.0")
2752 (source (origin
2753 (method git-fetch)
2754 (uri (git-reference
2755 (url "https://github.com/louis77/tuner")
2756 (commit (string-append "v" version))))
2757 (file-name (git-file-name name version))
2758 (sha256 (base32 "1fl82xsr13pjf57lbg2rsjisdjsixysnx1wnp54w2jr25hskk8lb"))))
2759 (build-system meson-build-system)
2760 (native-inputs
2761 (list desktop-file-utils ; update-desktop-database
2762 gettext-minimal
2763 `(,glib "bin") ; glib-compile-schemas
2764 ; for org.gnome.system.proxy schema
2765 gsettings-desktop-schemas
2766 `(,gtk "bin") ; gtk-update-icon-cache
2767 pkg-config
2768 vala))
2769 (inputs
2770 (list bash-minimal
2771 glib
2772 granite-6
2773 gtk+
2774 libgee
2775 gstreamer
2776 gst-plugins-base ; for gstreamer 'playbin'
2777 gst-plugins-good ; for gstreamer 'scaletempo'
2778 gst-plugins-bad
2779 libsoup
2780 json-glib-minimal))
2781 (arguments
2782 (list
2783 #:glib-or-gtk? #t
2784 #:phases
2785 #~(modify-phases %standard-phases
2786 (add-after 'install 'wrap-tuner
2787 (lambda* (#:key outputs #:allow-other-keys)
2788 (let ((out (assoc-ref outputs "out"))
2789 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
2790 (wrap-program (string-append out "/bin/com.github.louis77.tuner")
2791 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path)))))))))
2792 (home-page "https://github.com/louis77/tuner")
2793 (synopsis "Application to discover and play internet radio stations")
2794 (description "Tuner is a minimalist radio station player to discover and
2795listen to your favourite internet radio stations. The application consists of a radio
2796station catalogue sourced from radio-browser.info, and has presets of selections of
2797stations based on random, top, trending, genre.")
2798 (license license:gpl3+)))
2799
2800(define-public tuxguitar
2801 (package
2802 (name "tuxguitar")
2803 (version "1.5.5")
2804 (source (origin
2805 (method url-fetch)
2806 (uri (string-append
2807 "mirror://sourceforge/tuxguitar/TuxGuitar/TuxGuitar-"
2808 version "/tuxguitar-" version "-src.tar.gz"))
2809 (sha256
2810 (base32
2811 "1613aiq3x48l2nx1zxqh1cif6i5izkixfld8c9wri9nfv405b19f"))))
2812 (build-system ant-build-system)
2813 (arguments
2814 `(#:build-target "build"
2815 #:jdk ,icedtea-8
2816 #:tests? #f ; no tests
2817 #:phases
2818 (modify-phases %standard-phases
2819 (replace 'build
2820 (lambda* (#:key inputs outputs #:allow-other-keys)
2821 (let* ((initial-classpath (getenv "CLASSPATH"))
2822 (build-dir (lambda (dir)
2823 (setenv
2824 "CLASSPATH"
2825 (string-join (cons initial-classpath
2826 (find-files (getcwd) "\\.jar$"))
2827 ":"))
2828 (with-directory-excursion dir
2829 (if (file-exists? "build.xml")
2830 ((assoc-ref %standard-phases 'build)
2831 #:build-target "build")
2832 (begin
2833 ;; Generate default build.xml.
2834 ((@@ (guix build ant-build-system)
2835 default-build.xml)
2836 (string-append (string-downcase dir) ".jar")
2837 (string-append (assoc-ref outputs "out")
2838 "/share/java"))
2839 ((assoc-ref %standard-phases 'build))))))))
2840 (map build-dir '("TuxGuitar-lib"
2841 "TuxGuitar-editor-utils"
2842 "TuxGuitar-ui-toolkit"
2843 "TuxGuitar-ui-toolkit-swt"
2844 "TuxGuitar-viewer"
2845 "TuxGuitar"
2846 "TuxGuitar-gm-utils"
2847 "TuxGuitar-alsa"
2848 "TuxGuitar-midi"
2849 "TuxGuitar-midi-ui"
2850 "TuxGuitar-compat")))))
2851 (add-after 'build 'build-jni
2852 (lambda _
2853 (setenv "CC" "gcc")
2854 (setenv "CFLAGS" (string-append
2855 "-fpic -I"
2856 (getcwd)
2857 "/build-scripts/native-modules/common-include"))
2858 (invoke "make" "-C" "./TuxGuitar-alsa/jni" "-f" "GNUmakefile")))
2859 (replace 'install
2860 (lambda* (#:key inputs outputs #:allow-other-keys)
2861 (let* ((out (assoc-ref outputs "out"))
2862 (bin (string-append out "/bin"))
2863 (share (string-append out "/share"))
2864 (jni-lib (string-append out "/lib"))
2865 (lib (string-append share "/java"))
2866 (swt (assoc-ref inputs "java-swt"))
2867 (mime (string-append share "/mime/packages"))
2868 (app (string-append share "/applications"))
2869 (man (string-append share "/man/man1")))
2870
2871 (mkdir-p bin)
2872 ;; Install all jars.
2873 (for-each (lambda (file)
2874 (install-file file lib))
2875 (find-files "." "\\.jar$"))
2876
2877 ;; Install jni libraries
2878 (for-each (lambda (file)
2879 (install-file file jni-lib))
2880 (find-files "." "\\-jni.so$"))
2881
2882 ;; Install all resources.
2883 (copy-recursively "./TuxGuitar/share" share)
2884
2885 ;; Install desktop and mime files
2886 (install-file "./misc/tuxguitar.xml" mime)
2887 (install-file "./misc/tuxguitar.desktop" app)
2888
2889 ;; Install manaual
2890 (install-file "./misc/tuxguitar.1" man)
2891
2892 ;; Create wrapper.
2893 (call-with-output-file (string-append bin "/tuxguitar")
2894 (lambda (port)
2895 (let ((classpath (string-join (append (find-files lib "\\.jar$")
2896 (find-files swt "\\.jar$"))
2897 ":")))
2898 (format
2899 port
2900 (string-append "#!/bin/sh\n"
2901 (which "java")
2902 " -cp " classpath
2903 " -Dtuxguitar.home.path=" out
2904 " -Dtuxguitar.share.path=" out "/share"
2905 " -Dswt.library.path=" swt "/lib"
2906 " -Djava.library.path=" out "/lib"
2907 " org.herac.tuxguitar.app.TGMainSingleton"
2908 " \"$1\" \"$2\"")))))
2909 (chmod (string-append bin "/tuxguitar") #o555)))))))
2910 (inputs
2911 (list alsa-lib java-swt))
2912 (home-page "http://tuxguitar.com.ar/")
2913 (synopsis "Multitrack tablature editor and player")
2914 (description
2915 "TuxGuitar is a guitar tablature editor with player support through midi.
2916It can display scores and multitrack tabs. TuxGuitar provides various
2917additional features, including autoscrolling while playing, note duration
2918management, bend/slide/vibrato/hammer-on/pull-off effects, support for
2919tuplets, time signature management, tempo management, gp3/gp4/gp5 import and
2920export.")
2921 (license license:lgpl2.1+)))
2922
2923(define-public pd
2924 (package
2925 (name "pd")
2926 (version "0.56-5")
2927 (source (origin
2928 (method url-fetch)
2929 (uri
2930 (string-append "http://msp.ucsd.edu/Software/pd-"
2931 version ".src.tar.gz"))
2932 (sha256
2933 (base32
2934 "0h8z55hv4jyl4dzrsq1hqwm67j3qspxg26691y6vv7a4md7agv0q"))))
2935 (build-system gnu-build-system)
2936 (arguments
2937 (let ((wish (string-append "wish" (version-major+minor
2938 (package-version tk)))))
2939 (list
2940 #:tests? #f ; no "check" target
2941 #:configure-flags
2942 #~(list
2943 "--disable-oss"
2944 "--enable-jack"
2945 "--without-local-portaudio"
2946 (string-append "--with-wish="
2947 (search-input-file %build-inputs
2948 (string-append "/bin/" #$wish))))
2949 #:phases
2950 #~(modify-phases %standard-phases
2951 (add-before 'configure 'fix-wish-path
2952 (lambda _
2953 (substitute* "tcl/pd-gui.tcl"
2954 (("exec wish ")
2955 (string-append "exec " (which #$wish) " ")))))))))
2956 (native-inputs
2957 (list autoconf automake libtool gettext-minimal pkg-config))
2958 (inputs
2959 (list tk alsa-lib jack-1 portaudio))
2960 (home-page "https://puredata.info")
2961 (synopsis "Visual programming language for artistic performances")
2962 (description
2963 "Pure Data (aka Pd) is a visual programming language. Pd enables
2964musicians, visual artists, performers, researchers, and developers to create
2965software graphically, without writing lines of code. Pd is used to process
2966and generate sound, video, 2D/3D graphics, and interface sensors, input
2967devices, and MIDI. Pd can easily work over local and remote networks to
2968integrate wearable technology, motor systems, lighting rigs, and other
2969equipment. Pd is suitable for learning basic multimedia processing and visual
2970programming methods as well as for realizing complex systems for large-scale
2971projects.")
2972 (license license:bsd-3)))
2973
2974(define-public libpd
2975 (package
2976 (name "libpd")
2977 (version "0.15.0")
2978 (source (origin
2979 (method git-fetch)
2980 (uri (git-reference
2981 (url "https://github.com/libpd/libpd")
2982 (commit version)
2983 (recursive? #t))) ; for the 'pure-data' submodule
2984 (file-name (string-append name "-" version "-checkout"))
2985 (sha256
2986 (base32
2987 "0r7dic18csr9651lzrvmdvx4wvzhbzqc5x8six7v78cnla5pfnng"))))
2988 (build-system gnu-build-system)
2989 (arguments
2990 (list #:tests? #f ; no tests
2991 #:make-flags
2992 #~(list (string-append "CC=" #$(cc-for-target)))
2993 #:phases
2994 #~(modify-phases %standard-phases
2995 (delete 'configure) ; no configure script
2996 (replace 'install
2997 (lambda* (#:key outputs #:allow-other-keys)
2998 (let ((out (assoc-ref outputs "out")))
2999 (invoke "make" "install"
3000 (string-append "prefix=" out)
3001 ;; XXX: Fix the last 2 lines of 'install' target.
3002 "LIBPD_IMPLIB=NO"
3003 "LIBPD_DEF=NO")))))))
3004 (home-page "https://libpd.cc/")
3005 (synopsis "Pure Data as an embeddable audio synthesis library")
3006 (description
3007 "Libpd provides Pure Data as an embeddable audio synthesis library. Its
3008main purpose is to liberate raw audio rendering from audio and MIDI drivers.")
3009 (license license:bsd-3)))
3010
3011(define-public portmidi
3012 (package
3013 (name "portmidi")
3014 (version "217")
3015 (source (origin
3016 (method url-fetch)
3017 (uri (string-append "mirror://sourceforge/portmedia/portmidi/"
3018 version "/portmidi-src-" version ".zip"))
3019 (sha256
3020 (base32
3021 "03rfsk7z6rdahq2ihy5k13qjzgx757f75yqka88v3gc0pn9ais88"))
3022 (patches (list (search-patch "portmidi-modular-build.patch")))))
3023 (build-system cmake-build-system)
3024 (arguments
3025 `(#:tests? #f ; tests cannot be linked
3026 #:build-type "Release" ; needed to have PMALSA set
3027 #:configure-flags
3028 (list "-DCMAKE_C_FLAGS=-Wno-error=implicit-function-declaration"
3029 "-DPORTMIDI_ENABLE_JAVA=Off"
3030 "-DPORTMIDI_ENABLE_TEST=Off") ; tests fail linking
3031 #:phases
3032 (modify-phases %standard-phases
3033 ;; Some packages, e.g., MuseScore, expect "libporttime.so" instead of
3034 ;; "libportmidi.so". Distributions get away with it by creating an
3035 ;; appropriate symlink.
3036 (add-after 'install 'add-porttime
3037 (lambda* (#:key outputs #:allow-other-keys)
3038 (let* ((out (assoc-ref outputs "out"))
3039 (lib (string-append out "/lib")))
3040 (with-directory-excursion lib
3041 (symlink "libportmidi.so" "libporttime.so")))))
3042 (add-after 'install 'install-pkg-config
3043 (lambda* (#:key outputs #:allow-other-keys)
3044 (let* ((out (assoc-ref outputs "out"))
3045 (pkg-config-dir (string-append out "/lib/pkgconfig")))
3046 (mkdir-p pkg-config-dir)
3047 (with-output-to-file (string-append pkg-config-dir "/portmidi.pc")
3048 (lambda _
3049 (format #t
3050 "prefix=~@*~a~@
3051 libdir=${prefix}/lib~@
3052 includedir=${prefix}/include~@
3053
3054 Name: portmidi~@
3055 Description:~@
3056 Version: ~a~@
3057 Libs: -L${libdir} -lportmidi~@
3058 Cflags: -I${includedir}~%"
3059 out ,version)))))))))
3060 (inputs
3061 (list alsa-lib))
3062 (native-inputs
3063 (list unzip))
3064 (home-page "https://portmedia.sourceforge.net/portmidi/")
3065 (synopsis "Library for MIDI I/O")
3066 (description
3067 "PortMidi is a library supporting real-time input and output of MIDI data
3068using a system-independent interface.")
3069 (license license:expat)))
3070
3071(define-public portmidi-2
3072 (package
3073 (name "portmidi")
3074 (version "2.0.4")
3075 (source
3076 (origin
3077 (method git-fetch)
3078 (uri (git-reference
3079 (url "https://github.com/PortMidi/portmidi")
3080 (commit "b808babecdc5d05205467dab5c1006c5ac0fdfd4")))
3081 (sha256
3082 (base32 "05a3dfpgbpcg08p8a3acjrrd1qy5hvvray2kz2asygy1vf3mx85s"))
3083 (file-name (git-file-name name version))))
3084 (build-system cmake-build-system)
3085 (arguments
3086 `(#:tests? #f ;Tests are interactive and can be found in the
3087 #:configure-flags ;pm_tests/ directory of the build tree.
3088 (list "-DBUILD_PORTMIDI_TESTS=On")
3089 #:phases (modify-phases %standard-phases
3090 (add-after 'unpack 'fix-version
3091 (lambda _
3092 (substitute* "CMakeLists.txt"
3093 (("2.0.3")
3094 (version))))))))
3095 (inputs (list alsa-lib))
3096 (native-inputs (list unzip))
3097 (home-page "https://github.com/PortMidi/")
3098 (synopsis "Library for MIDI I/O")
3099 (description
3100 "PortMidi is a library supporting real-time input and output of MIDI data
3101using a system-independent interface.")
3102 (license license:expat)))
3103
3104(define-public python-abjad
3105 (package
3106 (name "python-abjad")
3107 (version "3.31")
3108 (source
3109 (origin
3110 (method git-fetch)
3111 (uri (git-reference
3112 (url "https://github.com/Abjad/abjad")
3113 (commit (string-append "v" version))))
3114 (file-name (git-file-name name version))
3115 (sha256
3116 (base32 "1vly4n0rvji372l4kskwx3xppzw22wb2q9jrpj3i3cjhsgy2mp6q"))))
3117 (build-system pyproject-build-system)
3118 (arguments
3119 (list
3120 ;; tests: 5382 passed
3121 #:phases
3122 #~(modify-phases %standard-phases
3123 (add-before 'check 'remove-local-source
3124 (lambda _
3125 (delete-file-recursively "source/abjad"))))))
3126 (inputs
3127 (list lilypond))
3128 (native-inputs
3129 (list python-pytest
3130 python-setuptools))
3131 (propagated-inputs
3132 (list python-quicktions
3133 python-ply
3134 python-roman
3135 python-uqbar))
3136 (home-page "https://abjad.github.io")
3137 (synopsis "Python API for building LilyPond files")
3138 (description
3139 "Abjad helps composers build up complex pieces of music notation in
3140iterative and incremental ways. Use Abjad to create a symbolic representation
3141of all the notes, rests, chords, tuplets, beams and slurs in any score.
3142Because Abjad extends the Python programming language, you can use Abjad to
3143make systematic changes to music as you work. Because Abjad wraps the
3144LilyPond music notation package, you can use Abjad to control the typographic
3145detail of symbols on the page.")
3146 (license license:expat)))
3147
3148(define-deprecated-package abjad python-abjad)
3149
3150(define-public python-abjad-ext-nauert
3151 (package
3152 (name "python-abjad-ext-nauert")
3153 (version "3.31")
3154 (source
3155 (origin
3156 (method git-fetch)
3157 (uri (git-reference
3158 (url "https://github.com/Abjad/abjad-ext-nauert")
3159 (commit (string-append "v" version))))
3160 (file-name (git-file-name name version))
3161 (sha256
3162 (base32 "03nav7f8wi5f5lyib6xp1fnd6mrk0j1l2mx0q01ixkkc1v2h77h2"))))
3163 (build-system pyproject-build-system)
3164 (arguments
3165 (list
3166 #:phases
3167 #~(modify-phases %standard-phases
3168 (add-before 'check 'remove-local-source
3169 (lambda _
3170 (delete-file-recursively "source"))))))
3171 (native-inputs
3172 (list lilypond
3173 python-pytest
3174 python-setuptools))
3175 (propagated-inputs
3176 (list python-abjad))
3177 (home-page "https://abjad.github.io")
3178 (synopsis "Abjad quantization extension, based on Paul Nauert's Q-Grids")
3179 (description
3180 "@code{abjad-ext-nauert} provides classes for dealing with composer and
3181music theorist Paul Nauert's quantization grids or Q-Grids, for short.")
3182 (license license:expat)))
3183
3184(define-deprecated-package abjad-ext-nauert python-abjad-ext-nauert)
3185
3186(define-public python-abjad-ext-rmakers
3187 (package
3188 (name "python-abjad-ext-rmakers")
3189 (version "3.19")
3190 (source
3191 (origin
3192 (method git-fetch)
3193 (uri (git-reference
3194 (url "https://github.com/Abjad/rmakers")
3195 (commit (string-append "v" version))))
3196 (file-name (git-file-name name version))
3197 (sha256
3198 (base32 "1y8s55b4mlsigm0xkk6qjpp08c75rv0swvjp0lj3cs6lgqdjxdjl"))))
3199 (build-system pyproject-build-system)
3200 (arguments
3201 ;; XXX: See: <https://github.com/Abjad/rmakers/issues/78>.
3202 (list #:tests? #f))
3203 (native-inputs
3204 (list lilypond
3205 python-setuptools))
3206 (propagated-inputs
3207 (list python-abjad))
3208 (home-page "https://abjad.github.io")
3209 (synopsis "Abjad rhythm-maker extension package")
3210 (description
3211 "@code{abjad-ext-rmakers} includes a collection of classes for creating and
3212and manipulating rhythms such as accelerandi, taleas, and more.")
3213 (license license:expat)))
3214
3215(define-deprecated-package abjad-ext-rmakers python-abjad-ext-rmakers)
3216
3217(define-public python-pysmf
3218 (let ((commit "8a98a557470301f5a471d07d37f334a5b8892602")
3219 (revision "1"))
3220 (package
3221 (name "python-pysmf")
3222 (version (git-version "0.1.1" revision commit))
3223 (source
3224 (origin
3225 (method git-fetch)
3226 (uri (git-reference
3227 (url "https://github.com/mididings/pysmf")
3228 (commit commit)))
3229 (file-name (git-file-name name version))
3230 (sha256
3231 (base32 "1ic24k8jr7iwcrj7xaw5b9i22al05rxfpjw39bbjsg7v09kvygcv"))))
3232 (build-system pyproject-build-system)
3233 (arguments
3234 (list
3235 ;; XXX: pytest failed to import 'py.test'.
3236 #:tests? #f
3237 #:phases
3238 '(modify-phases %standard-phases
3239 (add-after 'unpack 'fix-build-system
3240 (lambda _
3241 (substitute* "setup.py"
3242 (("from subprocess") "import sys; from subprocess")))))))
3243 (inputs (list libsmf glib))
3244 (native-inputs (list pkg-config python-cython python-pytest
3245 python-setuptools python-wheel))
3246 (home-page "https://github.com/mididings/pysmf")
3247 (synopsis "Read and write Standard MIDI files")
3248 (description
3249 "pysmf is a Python extension module for reading and writing Standard
3250MIDI files, based on libsmf.")
3251 (license license:bsd-2))))
3252
3253(define-public frescobaldi
3254 (package
3255 (name "frescobaldi")
3256 (version "4.0.5")
3257 (source
3258 (origin
3259 (method git-fetch)
3260 (uri (git-reference
3261 (url "https://github.com/frescobaldi/frescobaldi")
3262 (commit (string-append "v" version))))
3263 (file-name (git-file-name name version))
3264 (sha256
3265 (base32 "01pkj0drz2cmn907m15871f5rvgkp30ajy6cydxpisyklpq2qlm7"))))
3266 (build-system pyproject-build-system)
3267 (arguments
3268 (list
3269 #:tests? #f ;no tests included
3270 #:imported-modules (append %qt-build-system-modules
3271 %pyproject-build-system-modules)
3272 #:modules '((guix build pyproject-build-system)
3273 ((guix build qt-build-system) #:prefix qt:)
3274 (guix build utils))
3275 #:phases
3276 #~(modify-phases %standard-phases
3277 (add-after 'unpack 'patch-file-names
3278 (lambda* (#:key inputs #:allow-other-keys)
3279 (substitute* "frescobaldi/lilypondinfo.py"
3280 (("\"lilypond\"")
3281 (string-append
3282 "\"" (search-input-file inputs "bin/lilypond") "\"")))))
3283 (add-before 'build 'generate-xdg-files
3284 ;; Steps are taken from .github/workflows/release.yml.
3285 (lambda _
3286 (invoke "python" "i18n/mo-gen.py")
3287 (invoke "msgfmt" "--desktop"
3288 "-d" "i18n/frescobaldi"
3289 "--template" "linux/org.frescobaldi.Frescobaldi.desktop.in"
3290 "-o" "linux/org.frescobaldi.Frescobaldi.desktop")
3291 (invoke "msgfmt" "--xml"
3292 "-d" "i18n/frescobaldi"
3293 "--template" "linux/org.frescobaldi.Frescobaldi.metainfo.xml.in"
3294 "-o" "linux/org.frescobaldi.Frescobaldi.metainfo.xml")))
3295 (add-after 'wrap 'qt-wrap
3296 (lambda args
3297 (apply (assoc-ref qt:%standard-phases 'qt-wrap)
3298 `(,@args #:qtbase #$(this-package-input "qtbase"))))))))
3299 (native-inputs
3300 (list appstream ;for appstreamctl
3301 desktop-file-utils ;for desktop-file-validate
3302 gettext-minimal ;for msgfmt
3303 python-hatchling))
3304 (inputs
3305 (list bash-minimal
3306 lilypond
3307 poppler
3308 portmidi-2
3309 python-ly
3310 python-pyqt-6
3311 python-pyqt6-sip
3312 python-pyqtwebengine-6
3313 qpageview
3314 qtbase
3315 qtsvg
3316 qtwayland))
3317 (home-page "https://www.frescobaldi.org/")
3318 (synopsis "LilyPond sheet music text editor")
3319 (description
3320 "Frescobaldi is a LilyPond sheet music text editor with syntax
3321highlighting and automatic completion. Among other things, it can render
3322scores next to the source, can capture input from MIDI or read MusicXML and
3323ABC files, has a MIDI player for proof-listening, and includes a documentation
3324browser.")
3325 (license license:gpl2+)))
3326
3327(define-public drumstick
3328 (package
3329 (name "drumstick")
3330 (version "2.10.0")
3331 (source (origin
3332 (method url-fetch)
3333 (uri (string-append "mirror://sourceforge/drumstick/"
3334 version "/drumstick-" version ".tar.bz2"))
3335 (sha256
3336 (base32
3337 "1ggwf9qzaj8vh66g29cb4m0i2cxvkgzl944m5pvj87lpsvahfnmc"))))
3338 (build-system qt-build-system)
3339 (arguments
3340 (list #:qtbase qtbase
3341 #:tests? #f)) ;no test target
3342 (inputs
3343 (list alsa-lib
3344 fluidsynth
3345 pipewire
3346 pulseaudio
3347 qt5compat
3348 qtsvg
3349 qtwayland
3350 sonivox))
3351 (native-inputs
3352 (list pkg-config
3353 libxslt ; for xsltproc
3354 docbook-xsl
3355 doxygen
3356 graphviz ; for dot
3357 qttools))
3358 (home-page "https://drumstick.sourceforge.io/")
3359 (synopsis "C++ MIDI library")
3360 (description
3361 "Drumstick is a set of MIDI libraries using C++/Qt5 idioms and style. It
3362includes a C++ wrapper around the ALSA library sequencer interface. A
3363complementary library provides classes for processing SMF (Standard MIDI
3364files: .MID/.KAR), Cakewalk (.WRK), and Overture (.OVE) file formats. A
3365multiplatform realtime MIDI I/O library is also provided with various output
3366backends, including ALSA, OSS, Network and FluidSynth.")
3367 (license license:gpl2+)))
3368
3369(define-public vmpk
3370 (package
3371 (name "vmpk")
3372 (version "0.9.1")
3373 (source (origin
3374 (method url-fetch)
3375 (uri (string-append "mirror://sourceforge/vmpk/vmpk/"
3376 version "/vmpk-" version ".tar.bz2"))
3377 (sha256
3378 (base32
3379 "1p28dnxsyamzdm9zaxfhman6245js22r4h4yxhnprs5aan1qiyrv"))))
3380 (build-system qt-build-system)
3381 (arguments
3382 (list #:qtbase qtbase
3383 #:tests? #f ; no test target
3384 #:phases
3385 #~(modify-phases %standard-phases
3386 (add-after 'install 'wrap-drumstick
3387 (lambda* (#:key inputs #:allow-other-keys)
3388 (wrap-program (string-append #$output "/bin/vmpk")
3389 `("DRUMSTICKRT" =
3390 (,(search-input-directory inputs
3391 "/lib/drumstick2")))))))))
3392 (inputs
3393 (list drumstick qt5compat qtsvg qtwayland))
3394 (native-inputs
3395 (list libxslt ;for xsltproc
3396 docbook-xml-4.4 docbook-xsl qttools pkg-config))
3397 (home-page "https://vmpk.sourceforge.io/")
3398 (synopsis "Virtual MIDI piano keyboard")
3399 (description
3400 "Virtual MIDI Piano Keyboard is a MIDI events generator and receiver. It
3401doesn't produce any sound by itself, but can be used to drive a MIDI
3402synthesizer (either hardware or software, internal or external). You can use
3403the computer's keyboard to play MIDI notes, and also the mouse. You can use
3404the Virtual MIDI Piano Keyboard to display the played MIDI notes from another
3405instrument or MIDI file player.")
3406 (license license:gpl3+)))
3407
3408(define-public zynaddsubfx
3409 (package
3410 (name "zynaddsubfx")
3411 (version "3.0.6")
3412 (source (origin
3413 (method url-fetch)
3414 (uri (string-append
3415 "mirror://sourceforge/zynaddsubfx/zynaddsubfx/"
3416 version "/zynaddsubfx-" version ".tar.bz2"))
3417 (sha256
3418 (base32
3419 "1bkirvcg0lz1i7ypnz3dyh218yhrqpnijxs8n3wlgwbcixvn1lfb"))
3420 (patches
3421 (search-patches "zynaddsubfx-3.0.6-system-rtosc.patch"
3422 "zynaddsubfx-3.0.6-include-cstdint.patch"))))
3423 (build-system cmake-build-system)
3424 (arguments
3425 `(#:configure-flags
3426 `("-DGuiModule=zest"
3427 ,(string-append "-DZYN_DATADIR="
3428 (assoc-ref %outputs "out")
3429 "/share/zynaddsubfx")
3430 "-DZYN_SYSTEM_RTOSC=ON")
3431 #:phases
3432 (modify-phases %standard-phases
3433 ;; Move SSE compiler optimization flags from generic target to
3434 ;; athlon64 and core2 targets, because otherwise the build would fail
3435 ;; on non-Intel machines.
3436 (add-after 'unpack 'remove-sse-flags-from-generic-target
3437 (lambda _
3438 (substitute* "src/CMakeLists.txt"
3439 (("-msse -msse2 -mfpmath=sse") "")
3440 (("-march=(athlon64|core2)" flag)
3441 (string-append flag " -msse -msse2 -mfpmath=sse")))))
3442 (add-after 'unpack 'patch-paths
3443 (lambda* (#:key inputs #:allow-other-keys)
3444 (substitute* "src/main.cpp"
3445 (("\\./zyn-fusion")
3446 (search-input-file inputs "/bin/zyn-fusion")))
3447 (substitute* "src/Plugin/ZynAddSubFX/ZynAddSubFX-UI-Zest.cpp"
3448 (("\\./libzest\\.so")
3449 (search-input-file inputs "/lib/libzest.so"))))))))
3450 (inputs
3451 (list liblo
3452 mruby-zest
3453 rtosc
3454 mesa
3455 alsa-lib
3456 jack-1
3457 fftw
3458 fftwf
3459 minixml
3460 libxpm
3461 zlib))
3462 (native-inputs
3463 (list pkg-config
3464 ruby))
3465 (home-page "https://zynaddsubfx.sourceforge.io/")
3466 (synopsis "Software synthesizer")
3467 (description
3468 "ZynAddSubFX is a feature heavy realtime software synthesizer. It offers
3469three synthesizer engines, multitimbral and polyphonic synths, microtonal
3470capabilities, custom envelopes, effects, etc.")
3471 (license license:gpl2)))
3472
3473(define-public yoshimi
3474 (package
3475 (name "yoshimi")
3476 (version "2.3.0.2")
3477 (source
3478 (origin
3479 (method url-fetch)
3480 (uri (string-append "mirror://sourceforge/yoshimi/"
3481 (version-major+minor version)
3482 "/yoshimi-" version ".tar.bz2"))
3483 (sha256
3484 (base32 "1024ykyaq0s6zzyksrmgdz8ix0a4yranlsv5rbq72dbrkh3h8wqm"))))
3485 (build-system cmake-build-system)
3486 (arguments
3487 (list
3488 #:tests? #f ; there are no tests
3489 #:configure-flags
3490 #~(list (string-append "-DLV2_INSTALL_DIR="
3491 #$output "/lib/lv2")
3492 (string-append "-DCMAKE_INSTALL_DATAROOTDIR="
3493 #$output "/share"))
3494 #:phases
3495 #~(modify-phases %standard-phases
3496 (add-before 'configure 'enter-dir
3497 (lambda _ (chdir "src")))
3498 (add-after 'unpack 'fix-paths
3499 (lambda _
3500 (substitute* (list "src/Interface/InterChange.cpp"
3501 "src/Misc/Bank.cpp"
3502 "src/Misc/Config.cpp")
3503 (("/usr/share") (string-append #$output "/share")))))
3504 ;; Move SSE compiler optimization flags from generic target to
3505 ;; athlon64 and core2 targets, because otherwise the build would fail
3506 ;; on non-Intel machines.
3507 (add-after 'unpack 'remove-sse-flags-from-generic-target
3508 (lambda _
3509 (substitute* "src/CMakeLists.txt"
3510 (("-msse -msse2 -mfpmath=sse") "")
3511 (("-march=(athlon64|core2)" flag)
3512 (string-append flag " -msse -msse2 -mfpmath=sse"))))))))
3513 (inputs
3514 (list alsa-lib
3515 boost
3516 cairo
3517 fftwf
3518 fltk-1.3
3519 fontconfig
3520 jack-2
3521 lv2
3522 mesa
3523 minixml
3524 ncurses
3525 readline
3526 zlib))
3527 (native-inputs
3528 (list pkg-config))
3529 (home-page "https://yoshimi.sourceforge.net/")
3530 (synopsis "Multi-paradigm software synthesizer")
3531 (description
3532 "Yoshimi is a fork of ZynAddSubFX, a feature-heavy real-time software
3533synthesizer. It offers three synthesizer engines, multitimbral and polyphonic
3534synths, microtonal capabilities, custom envelopes, effects, etc. Yoshimi
3535improves on support for JACK features, such as JACK MIDI.")
3536 (license license:gpl2)))
3537
3538(define-public libgig
3539 (package
3540 (name "libgig")
3541 (version "4.5.1")
3542 (source (origin
3543 (method url-fetch)
3544 (uri (string-append "http://download.linuxsampler.org/packages/"
3545 "libgig-" version ".tar.bz2"))
3546 (sha256
3547 (base32
3548 "0qcgb2xs0hk541zyqcy8lfrbi38dwgwmk26s79xx1c4f6agk929l"))))
3549 (build-system gnu-build-system)
3550 (inputs
3551 (list `(,util-linux "lib") libsndfile))
3552 (native-inputs
3553 (list pkg-config))
3554 (home-page "https://linuxsampler.org/libgig/")
3555 (synopsis "C++ library for working with Gigasampler (.gig) files")
3556 (description
3557 "Libgig is a C++ library for loading, modifying existing and creating new
3558Gigasampler (.gig) files and DLS (Downloadable Sounds) Level 1/2 files, KORG
3559sample based instruments (.KSF and .KMP files), SoundFont v2 (.sf2) files and
3560AKAI sampler data. The package includes a couple of command line tools based
3561on the library.")
3562 ;; The library and tools are released under the GPL, except the AKAI
3563 ;; classes which are released under the LGPL.
3564 (license (list license:gpl2+ license:lgpl2.1+))))
3565
3566(define-public jack-keyboard
3567 (package
3568 (name "jack-keyboard")
3569 (version "2.7.2")
3570 (source
3571 (origin
3572 (method url-fetch)
3573 (uri (string-append "mirror://sourceforge/jack-keyboard/jack-keyboard/"
3574 version "/jack-keyboard-" version ".tar.gz"))
3575 (sha256
3576 (base32
3577 "1z34ga1z6ivgxbp0afsfghz7rn6s8vc9fxnb9ini8mx0dackr5ar"))))
3578 (build-system cmake-build-system)
3579 ;; Disable Lash support, as it is unmaintained and depends on Python 2.
3580 (arguments
3581 (list #:tests? #f ;no test suite
3582 #:configure-flags
3583 #~(list "-DLashEnable=OFF"
3584 ;; XXX: FindGTK2.cmake from CMake expects the
3585 ;; headers to be in FHS locations; give it some
3586 ;; clues.
3587 (string-append "-DGTK2_ADDITIONAL_SUFFIXES="
3588 "lib/glib-2.0;" ;for glibconfig.h
3589 "lib/gtk-2.0")))) ;for gdkconfig.h
3590 (inputs (list jack-2 gtk+-2))
3591 (home-page "https://jack-keyboard.sourceforge.net/")
3592 (synopsis "Virtual MIDI keyboard")
3593 (description "Jack-keyboard is a virtual MIDI keyboard, a program that
3594allows you to send JACK MIDI events (i.e. play) using your PC keyboard.")
3595 (license license:bsd-2)))
3596
3597(define-public jack-capture
3598 (let ((commit "a539d444d388c4cfed7279e385830e7767d59c41")
3599 (revision "0"))
3600 (package
3601 (name "jack-capture")
3602 (version (git-version "0.9.73" revision commit))
3603 (source
3604 (origin
3605 (method git-fetch)
3606 (uri (git-reference
3607 (url "https://github.com/kmatheussen/jack_capture")
3608 (commit commit)))
3609 (file-name (git-file-name name version))
3610 (sha256
3611 (base32 "0c0f8wgy4g4cfkmcarbqbx079yh9vzxqir3vddxmvc8y5rjsydnq"))))
3612 (build-system gnu-build-system)
3613 (arguments
3614 (list
3615 #:make-flags #~(list (string-append "PREFIX=" #$output))
3616 #:tests? #f ; there are none
3617 #:phases
3618 #~(modify-phases %standard-phases
3619 (delete 'configure))))
3620 (native-inputs
3621 (list pkg-config which))
3622 (inputs
3623 (list gtk+-2
3624 jack-2
3625 libogg
3626 liblo
3627 lame
3628 libsndfile))
3629 (home-page "https://github.com/kmatheussen/jack_capture")
3630 (synopsis "Program for recording sound files with JACK")
3631 (description "This is a program for recording sound files with JACK. It
3632can connect to any JACK port and record the output into a stereo WAV file.")
3633 (license license:gpl2+))))
3634
3635(define-public jack-select
3636 (package
3637 (name "jack-select")
3638 (version "1.5.2")
3639 (source (origin
3640 (method url-fetch)
3641 (uri (pypi-uri "jack-select" version))
3642 (sha256
3643 (base32
3644 "0jrdz44v4cj1qvlnqrijzxivzgxiyvbkbdhcz88cixd347i2ph2z"))))
3645 (build-system pyproject-build-system)
3646 (arguments
3647 (list
3648 #:tests? #f ; there are none
3649 #:phases
3650 #~(modify-phases %standard-phases
3651 (add-after 'unpack 'fix-libasound-path
3652 (lambda* (#:key inputs #:allow-other-keys)
3653 ;; Fix reference to dlopened libraries.
3654 (substitute* "jackselect/alsainfo.py"
3655 (("libasound.so.2")
3656 (search-input-file inputs "/lib/libasound.so.2")))))
3657 (add-after 'wrap 'wrap-typelib
3658 (lambda _
3659 (wrap-program (string-append #$output "/bin/jack-select")
3660 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))))
3661 (add-after 'wrap-typelib 'install-data
3662 (lambda _
3663 (let ((datadir (string-append #$output "/share")))
3664 (install-file "jack-select.png"
3665 (string-append datadir
3666 "/icons/hicolor/48x48/apps"))
3667 (install-file "jack-select.desktop"
3668 (string-append datadir "/applications"))
3669 (install-file "jack-select.1"
3670 (string-append datadir "/man/man1"))))))))
3671 (native-inputs
3672 (list gobject-introspection
3673 pkg-config
3674 python-setuptools))
3675 (inputs
3676 (list alsa-lib
3677 gtk+
3678 python-dbus
3679 python-pygobject
3680 python-pyudev
3681 python-pyxdg))
3682 (home-page "https://github.com/SpotlightKid/jack-select")
3683 (synopsis "Systray application to quickly change the JACK-DBus configuration")
3684 (description "This application displays an icon in the system tray (also
3685known as notification area) of your desktop, which shows the status of the
3686JACK audio server and when you click on it, a menu pops up, which lets you
3687quickly select from the JACK configuration presets you created with QjackCtl.
3688When you select a preset, its JACK engine and driver configuration settings
3689are loaded via DBus into JACK and then the server is restarted. This allows
3690you to switch between different audio setups with just two mouse clicks.")
3691 (license license:expat)))
3692
3693(define-public cursynth
3694 (package
3695 (name "cursynth")
3696 (version "1.5")
3697 (source
3698 (origin
3699 (method url-fetch)
3700 (uri (string-append "mirror://gnu/cursynth/cursynth-"
3701 version ".tar.gz"))
3702 (sha256
3703 (base32 "1dhphsya41rv8z6yqcv9l6fwbslsds4zh1y56zizi39nd996d40v"))
3704 (patches (search-patches "cursynth-wave-rand.patch"))))
3705 (build-system gnu-build-system)
3706 (native-inputs (list pkg-config))
3707 ;; TODO: See https://github.com/iyoko/cursynth/issues/4 which currently
3708 ;; prevents us from using pulseaudio
3709 (inputs (list ncurses alsa-lib))
3710 (home-page "https://www.gnu.org/software/cursynth/")
3711 (synopsis "Polyphonic and MIDI subtractive music synthesizer using curses")
3712 (description "GNU cursynth is a polyphonic synthesizer that runs
3713graphically in the terminal. It is built on a full-featured subtractive
3714synthesis engine. Notes and parameter changes may be entered via MIDI or the
3715computer's keyboard.")
3716 (license license:gpl3+)))
3717
3718(define-public aj-snapshot
3719 (package
3720 (name "aj-snapshot")
3721 (version "0.9.9")
3722 (source (origin
3723 (method url-fetch)
3724 (uri (string-append "mirror://sourceforge/aj-snapshot/"
3725 "aj-snapshot-" version ".tar.bz2"))
3726 (sha256
3727 (base32
3728 "0z8wd5yvxdmw1h1rj6km9h01xd4xmp4d86gczlix7hsc7zrf0wil"))))
3729 (build-system gnu-build-system)
3730 (inputs
3731 (list minixml jack-1 alsa-lib))
3732 (native-inputs
3733 (list pkg-config))
3734 (home-page "https://aj-snapshot.sourceforge.net/")
3735 (synopsis "Snapshot connections between ALSA and JACK clients")
3736 (description "Aj-snapshot is a small program that can be used to make
3737snapshots of the connections made between JACK and/or ALSA clients. Because
3738JACK can provide both audio and MIDI support to programs, aj-snapshot can
3739store both types of connections for JACK. ALSA, on the other hand, only
3740provides routing facilities for MIDI clients. Aj-snapshot is meant to be used
3741from the command line.")
3742 (license license:gpl3+)))
3743
3744(define-public qtractor
3745 (package
3746 (name "qtractor")
3747 (version "1.5.9")
3748 (source (origin
3749 (method url-fetch)
3750 (uri (string-append "mirror://sourceforge/qtractor/qtractor/"
3751 version "/qtractor-" version ".tar.gz"))
3752 (sha256
3753 (base32
3754 "03x9mjzwfxxfpr2drx0q4qf14vc5yxq3y9343d9bdbvjacpbyjvp"))))
3755 (build-system cmake-build-system)
3756 (arguments
3757 `(#:tests? #f)) ; no "check" target
3758 (inputs
3759 (list alsa-lib
3760 jack-1
3761 ladspa
3762 liblo
3763 libmad
3764 libsamplerate
3765 libsndfile
3766 libvorbis
3767 lilv
3768 lv2
3769 qtbase
3770 qtsvg
3771 rubberband
3772 suil
3773 zlib))
3774 (native-inputs
3775 (list pkg-config qttools))
3776 (native-search-paths
3777 (list (search-path-specification
3778 (variable "CLAP_PATH")
3779 (files '("lib/clap")))
3780 (search-path-specification
3781 (variable "LADSPA_PATH")
3782 (files '("lib/ladspa")))
3783 (search-path-specification
3784 (variable "LV2_PATH")
3785 (files '("lib/lv2")))
3786 (search-path-specification
3787 (variable "LXVST_PATH")
3788 (files '("lib/lxvst")))
3789 (search-path-specification
3790 (variable "VST2_PATH")
3791 (files '("lib/vst2")))))
3792 (home-page "https://qtractor.org/")
3793 (synopsis "Audio/MIDI multi-track sequencer")
3794 (description
3795 "Qtractor is an Audio/MIDI multi-track sequencer application. It uses
3796JACK for audio and ALSA sequencer for MIDI as multimedia infrastructures and
3797follows a traditional multi-track tape recorder control paradigm.")
3798 (license license:gpl2+)))
3799
3800(define-public ams-lv2
3801 (package
3802 (name "ams-lv2")
3803 (version "1.2.2")
3804 (source
3805 (origin
3806 (method git-fetch)
3807 (uri (git-reference
3808 (url "https://github.com/blablack/ams-lv2")
3809 (commit (string-append "v" version))))
3810 (file-name (git-file-name name version))
3811 (sha256
3812 (base32 "1lz2mvk4gqsyf92yxd3aaldx0d0qi28h4rnnvsaz4ls0ccqm80nk"))))
3813 (build-system waf-build-system)
3814 (arguments
3815 (list
3816 #:phases
3817 '(modify-phases %standard-phases
3818 (add-after 'unpack 'python3.12-compatibility
3819 (lambda _
3820 (substitute* '("waflib/Context.py"
3821 "waflib/ConfigSet.py")
3822 (("'rU'") "'r'"))
3823 (substitute* "waflib/Context.py"
3824 (("imp.new_module") "types.ModuleType")
3825 (("import os, re, imp, sys")
3826 "import os, re, types, sys"))))
3827 (add-after 'unpack 'remove-sse-flags
3828 (lambda* (#:key system #:allow-other-keys)
3829 (unless (or (string-prefix? "x86_64" system)
3830 (string-prefix? "i686" system))
3831 (substitute* "wscript"
3832 (("'-msse', '-mfpmath=sse', ") ""))))))
3833 #:tests? #f)) ;no tests
3834 (inputs
3835 (list cairo
3836 fftw
3837 gtk+-2
3838 gtkmm-2
3839 lv2
3840 lvtk))
3841 (native-inputs
3842 (list pkg-config))
3843 (home-page "https://github.com/blablack/ams-lv2")
3844 (synopsis "Port of Alsa Modular Synth internal modules into LV2")
3845 (description "This set of LV2 plugins is a port of the internal modules
3846found in Alsa Modular Synth. These plugins are used to create modular
3847synthesizers and contain: VCO, VCF, VCA, LFO, slew limiter, envelopes, sample
3848and hold, etc.")
3849 (license license:gpl2)))
3850
3851(define-public gxtuner
3852 (package
3853 (name "gxtuner")
3854 (version "3.0")
3855 (source (origin
3856 (method git-fetch)
3857 (uri (git-reference
3858 (url "https://github.com/brummer10/gxtuner")
3859 (commit (string-append "v" version))))
3860 (file-name (git-file-name name version))
3861 (sha256
3862 (base32
3863 "09hh1y7ng7w42ijzk4v8ln7d48mdp5cs0vnfv96adbxv75k3g8if"))))
3864 (build-system gnu-build-system)
3865 (arguments
3866 `(#:make-flags
3867 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
3868 (string-append "INCLUDE_L_DIR="
3869 (assoc-ref %build-inputs "zita-resampler")
3870 "/include/"))
3871 #:phases
3872 (modify-phases %standard-phases
3873 (delete 'configure)
3874 (add-before 'build 'target-specific-glib-API-version
3875 (lambda _
3876 ;; See https://github.com/brummer10/gxtuner/pull/21
3877 (setenv "CFLAGS"
3878 "-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_54\
3879 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_54"))))))
3880 (inputs
3881 (list gtk+ jack-1 fftwf cairo zita-resampler))
3882 (native-inputs
3883 (list pkg-config))
3884 (home-page "https://github.com/brummer10/gxtuner")
3885 (synopsis "Guitar tuner")
3886 (description "GXtuner is a simple guitar tuner for JACK with an
3887analogue-like user interface.")
3888 (license license:gpl2+)))
3889
3890(define-public mod-host
3891 ;; The last release was in 2014 but since then hundreds of commits have
3892 ;; been made.
3893 (let ((commit "bd00c4d7ae604d75bf8dc89cea4b8e4b485ce930")
3894 (revision "5"))
3895 (package
3896 (name "mod-host")
3897 (version (git-version "0.10.6" revision commit))
3898 (source (origin
3899 (method git-fetch)
3900 (uri (git-reference
3901 (url "https://github.com/mod-audio/mod-host")
3902 (commit commit)))
3903 (sha256
3904 (base32
3905 "0rsl38lsinhdv4pwhs4xfhwsf32a19klr9iiiiwqsiq2x4mwbc9z"))
3906 (file-name (git-file-name name version))))
3907 (build-system gnu-build-system)
3908 (arguments
3909 (list
3910 #:tests? #f ; no tests included
3911 #:make-flags
3912 #~(list (string-append "PREFIX=" #$output)
3913 (string-append "CC=" #$(cc-for-target)))
3914 #:phases
3915 #~(modify-phases %standard-phases
3916 (delete 'configure)
3917 (add-after 'unpack 'fix-jack-installation-directory
3918 (lambda _
3919 ;; Do not attempt to install files to output of "jack" package.
3920 (substitute* "Makefile"
3921 (("\\$\\(shell pkg-config --variable=libdir jack\\)")
3922 "lib")))))))
3923 (inputs
3924 (list lilv
3925 fftw
3926 fftwf
3927 lv2
3928 jack-2
3929 readline))
3930 (native-inputs
3931 (list pkg-config
3932 python-wrapper))
3933 (native-search-paths
3934 (list (search-path-specification
3935 (variable "LV2_PATH")
3936 (files '("lib/lv2")))))
3937 (home-page "https://github.com/mod-audio/mod-host")
3938 (synopsis "LV2 host for Jack controllable via socket or command line")
3939 (description "mod-host is an LV2 plugin host for JACK, controllable via
3940socket or command line.")
3941 (license license:gpl3+))))
3942
3943(define-public synthpod
3944 (package
3945 (name "synthpod")
3946 (version "0.1.6715")
3947 (source (origin
3948 (method git-fetch)
3949 (uri (git-reference
3950 (url "https://git.open-music-kontrollers.ch/~hp/synthpod")
3951 ;; Version is not tagged but mentioned in VERSION file.
3952 (commit "54c285cfe0fbd80dc574101a8a2952cf3374fc38")))
3953 (file-name (git-file-name name version))
3954 (sha256
3955 (base32
3956 "1axb7f6rd2x9kd4hzk9895zvqj0lwlmc3zj23yx17yypd0w7yg0c"))))
3957 (build-system meson-build-system)
3958 (arguments
3959 (list
3960 #:phases
3961 #~(modify-phases %standard-phases
3962 (add-after 'unpack 'patch-references
3963 (lambda* (#:key inputs #:allow-other-keys)
3964 (substitute* '("bin/synthpod_ui"
3965 "bin/synthpod_d2tk")
3966 (("lv2info") (search-input-file inputs "/bin/lv2info"))
3967 ((" synthpod_sandbox_x11")
3968 (string-append " " #$output "/bin/synthpod_sandbox_x11")))
3969 (substitute* "bin/synthpod_bin.c"
3970 (("%s/.lv2") (string-append #$output "/lib/lv2"))
3971 ((", home_dir") ""))))
3972 (add-before 'check 'set-home-directory
3973 (lambda _
3974 ;; Tests fail with: Fontconfig error: No writable cache
3975 ;; directories
3976 (setenv "HOME" "/tmp"))))))
3977 (inputs
3978 (list alsa-lib
3979 cairo
3980 eudev
3981 freetype
3982 font-fira-code
3983 font-fira-sans
3984 fontconfig
3985 glew
3986 glu
3987 jack-2
3988 libvterm
3989 libevdev
3990 libinput
3991 libvterm
3992 lilv ;for lv2info
3993 lv2
3994 pixman
3995 sratom
3996 xcb-util
3997 xcb-util-wm
3998 xcb-util-xrm
3999 zita-alsa-pcmi))
4000 (native-inputs (list pkg-config))
4001 (home-page "https://open-music-kontrollers.ch/lv2/synthpod/")
4002 (synopsis "Nonlinear LV2 plugin container")
4003 (description
4004 "Synthpod is an LV2 host. It can be run as a standalone app and be used
4005as a tool for live performances or general audio and event filtering.")
4006 (license (list license:artistic2.0 license:gpl3+))))
4007
4008(define-public pianobar
4009 (package
4010 (name "pianobar")
4011 (version "2024.12.21")
4012 (source (origin
4013 (method git-fetch)
4014 (uri (git-reference
4015 (url "https://github.com/PromyLOPh/pianobar")
4016 (commit version)))
4017 (file-name (git-file-name name version))
4018 (sha256
4019 (base32
4020 "1v17hfdk45pqdgnjvjr1l7galmn2m3cxpp1c772gisfrgrrv7ybr"))))
4021 (build-system gnu-build-system)
4022 (arguments
4023 `(#:tests? #f ; no tests
4024 #:make-flags (list "CC=gcc" (string-append "PREFIX=" %output))
4025 #:phases (modify-phases %standard-phases
4026 (delete 'configure))))
4027 (inputs
4028 (list ao curl libgcrypt json-c ffmpeg))
4029 (native-inputs
4030 (list pkg-config))
4031 (home-page "https://6xq.net/pianobar/")
4032 (synopsis "Console-based pandora.com player")
4033 (description "pianobar is a console-based music player for the
4034personalized online radio pandora.com. It has configurable keys for playing
4035and managing stations, can be controlled remotely via fifo, and can run
4036event-based scripts for scrobbling, notifications, etc.")
4037 (license license:expat)))
4038
4039(define-public pianobooster
4040 (let ((commit "6dafdcbdfc5d35d12cecb051c30632d0f5be5806")
4041 (revision "1"))
4042 (package
4043 (name "pianobooster")
4044 (version (git-version "1.0.0" revision commit))
4045 (source
4046 (origin
4047 (method git-fetch)
4048 (uri (git-reference
4049 (url "https://github.com/pianobooster/PianoBooster")
4050 (commit commit)))
4051 (file-name (git-file-name name version))
4052 (sha256
4053 (base32 "1v86nrcn700lyyplvmhq633zkwx0w3cg07ysgg3j6nj2vn017s34"))
4054 (modules '((guix build utils)))
4055 (snippet '(delete-file-recursively "src/3rdparty/"))))
4056 (build-system qt-build-system)
4057 (arguments
4058 (list
4059 #:qtbase qtbase
4060 #:tests? #f ;no tests
4061 #:configure-flags
4062 #~(list "-DQT_PACKAGE_NAME=Qt6"
4063 "-DWITH_INTERNAL_FLUIDSYNTH=OFF")
4064 #:phases
4065 #~(modify-phases %standard-phases
4066 (add-after 'unpack 'locate-sound-fonts
4067 (lambda _
4068 (substitute* (list "src/Settings.cpp"
4069 "src/GuiMidiSetupDialog.cpp")
4070 (("/usr") #$(this-package-input "fluid-3"))
4071 (("FluidR3_GM.sf2") "FluidR3Mono_GM.sf3")))))))
4072 (native-inputs
4073 (list pkg-config qttools))
4074 (inputs
4075 (list alsa-lib
4076 fluid-3
4077 fluidsynth
4078 ftgl
4079 glu
4080 qt5compat
4081 rtmidi))
4082 (home-page "https://www.pianobooster.org/")
4083 (synopsis "MIDI player for learning to sight read on a piano")
4084 (description
4085 "PianoBooster is a MIDI file player that displays the musical notes and
4086teaches you how to play the piano. The difference between playing along to
4087a CD or a standard MIDI file is that Piano Booster listens and reacts to what
4088you are playing on a MIDI piano keyboard. You can play along to any track in
4089the MIDI file and Piano Booster will follow your playing.")
4090 ;; Software is released under GPL3+ terms whereas CC-BY applies to
4091 ;; courses and provided MIDI files.
4092 (license (list license:gpl3+ license:cc-by4.0)))))
4093
4094(define-public picard
4095 (package
4096 (name "picard")
4097 (version "2.13.3")
4098 (source (origin
4099 (method url-fetch)
4100 (uri (string-append
4101 "https://data.musicbrainz.org/pub/musicbrainz/"
4102 "picard/picard-" version ".tar.gz"))
4103 (sha256
4104 (base32
4105 "1k0zwbi9i6b60l69ccmrapls19i21h1q6h547b3l3az7napb7zb3"))))
4106 (build-system pyproject-build-system)
4107 (arguments
4108 (list
4109 #:configure-flags
4110 #~'(("--root" . "/")
4111 ;; Don't phone home or show ‘Check for Update…’ in the Help menu.
4112 ("--disable-autoupdate" . ""))
4113 #:phases
4114 #~(modify-phases %standard-phases
4115 (add-after 'unpack 'patch-source
4116 (lambda* (#:key inputs #:allow-other-keys)
4117 (substitute* "picard/const/__init__.py"
4118 (("pyfpcalc")
4119 (string-append
4120 "pyfpcalc', '" (search-input-file inputs "/bin/fpcalc"))))))
4121 ;; pipe tests require writable $HOME.
4122 (add-before 'check 'set-HOME
4123 (lambda _
4124 (setenv "HOME" "/tmp"))))))
4125 (native-inputs
4126 (list gettext-minimal python-dateutil python-setuptools))
4127 (inputs
4128 (list chromaprint
4129 python-charset-normalizer
4130 python-discid
4131 python-pyqt
4132 python-mutagen
4133 python-fasteners
4134 python-pyyaml
4135 python-markdown
4136 python-pyjwt))
4137 (home-page "https://picard.musicbrainz.org/")
4138 (synopsis "Graphical music tagging application")
4139 (description
4140 "MusicBrainz Picard is a music tagging application, supporting multiple
4141formats, looking up tracks through metadata and audio fingerprints.")
4142 (license license:gpl2+)))
4143
4144(define-public python-mutagen
4145 (package
4146 (name "python-mutagen")
4147 (version "1.47.0")
4148 (source (origin
4149 (method url-fetch)
4150 (uri (pypi-uri "mutagen" version))
4151 (sha256
4152 (base32
4153 "16gwy04xxc8p4650f8r0nd46k2y5ndhn559wrys3334p1bpsv7vi"))))
4154 (build-system pyproject-build-system)
4155 (arguments
4156 (list
4157 #:test-flags '(list "--ignore=tests/quality/test_flake8.py")
4158 #:phases
4159 #~(modify-phases %standard-phases
4160 (add-before 'check 'remove-hypothesis-deadlines
4161 ;; These tests can timeout on slower architectures.
4162 (lambda _
4163 (substitute* "tests/test___init__.py"
4164 (("import given") "import given, settings")
4165 (("( +)@given" all spaces)
4166 (string-append spaces "@settings(deadline=None)\n" all))))))))
4167 (native-inputs
4168 (list python-hypothesis
4169 python-pytest
4170 python-setuptools
4171 python-wheel))
4172 (home-page "https://mutagen.readthedocs.io/")
4173 (synopsis "Read and write audio tags")
4174 (description "Mutagen is a Python module to handle audio metadata. It
4175supports ASF, FLAC, M4A, Monkey’s Audio, MP3, Musepack, Ogg FLAC, Ogg Speex, Ogg
4176Theora, Ogg Vorbis, True Audio, WavPack and OptimFROG audio files. All versions
4177of ID3v2 are supported, and all standard ID3v2.4 frames are parsed. It can read
4178Xing headers to accurately calculate the bitrate and length of MP3s. ID3 and
4179APEv2 tags can be edited regardless of audio format. It can also manipulate Ogg
4180streams on an individual packet/page level.")
4181 (license license:gpl2))) ; "later version" never mentioned
4182
4183(define-public python-mediafile
4184 (package
4185 (name "python-mediafile")
4186 (version "0.13.0")
4187 (source
4188 (origin
4189 (method url-fetch)
4190 (uri (pypi-uri "mediafile" version))
4191 (sha256
4192 (base32
4193 "0vcsf9607jxh3bw2fn0hc3krr2mcgpm2dmfadhyp7sgz3cz0cwfy"))))
4194 (build-system pyproject-build-system)
4195 (arguments
4196 (list
4197 ;; One test fails with: AssertionError: 88200 != 705600.
4198 #:test-flags
4199 #~(list "--deselect=test/test_mediafile.py::WAVETest::test_read_audio_properties")))
4200 (native-inputs
4201 (list python-flit-core
4202 python-pytest))
4203 (propagated-inputs
4204 (list python-mutagen
4205 python-filetype))
4206 (home-page "https://github.com/beetbox/mediafile")
4207 (synopsis "Read and write audio file tags")
4208 (description
4209 "MediaFile is a simple interface to the metadata tags for many audio file
4210formats. It wraps Mutagen, a high-quality library for low-level tag
4211manipulation, with a high-level, format-independent interface for a common set
4212of tags.")
4213 (license license:expat)))
4214
4215(define-public python-musicbrainzngs
4216 (package
4217 (name "python-musicbrainzngs")
4218 (version "0.7.1")
4219 (source
4220 (origin
4221 (method git-fetch)
4222 (uri (git-reference
4223 (url "https://github.com/alastair/python-musicbrainzngs")
4224 (commit (string-append "v" version))))
4225 (file-name (git-file-name name version))
4226 (sha256
4227 (base32 "05rv5wmasamwxkbs8v9lbp2js6y5hhqz6c58c2afz2b202yp932m"))))
4228 (build-system pyproject-build-system)
4229 (native-inputs (list python-pytest python-setuptools))
4230 (home-page "https://python-musicbrainzngs.readthedocs.org/")
4231 (synopsis "Python bindings for MusicBrainz NGS webservice")
4232 (description
4233 "Musicbrainzngs implements Python bindings of the MusicBrainz web
4234service. This library can be used to retrieve music metadata from the
4235MusicBrainz database.")
4236 ;; 'musicbrainzngs/compat.py' is ISC licensed.
4237 (license (list license:bsd-2 license:isc))))
4238
4239(define-public isrcsubmit
4240 (package
4241 (name "isrcsubmit")
4242 (version "2.0.1")
4243 (source
4244 (origin
4245 (method url-fetch)
4246 (uri (pypi-uri "isrcsubmit" version))
4247 (sha256
4248 (base32
4249 "0jh4cni8qhri6dh83cmp0i0m0384vv0vznlygv49wj9xzh1d99qv"))))
4250 (build-system pyproject-build-system)
4251 ;; tests: 6 passed
4252 (native-inputs
4253 (list python-setuptools))
4254 (propagated-inputs
4255 (list python-discid
4256 python-musicbrainzngs))
4257 (home-page "https://github.com/JonnyJD/musicbrainz-isrcsubmit")
4258 (synopsis "Submit ISRCs from CDs to MusicBrainz")
4259 (description "@code{isrcsubmit} is a tool to extract @dfn{International
4260Standard Recording Code} (ISRCs) from audio CDs and submit them to
4261@url{https://musicbrainz.org/, MusicBrainz}.")
4262 (license license:gpl3+)))
4263
4264 ;; May be removed after 2026-01-31
4265(define-deprecated-package python-isrcsubmit isrcsubmit)
4266
4267(define-public python-pylast
4268 (package
4269 (name "python-pylast")
4270 (version "4.2.1")
4271 (source
4272 (origin
4273 (method git-fetch)
4274 (uri (git-reference
4275 (url "https://github.com/pylast/pylast")
4276 (commit version)))
4277 (file-name (git-file-name name version))
4278 (sha256
4279 (base32 "1i3mgxhrr3nbfrg3ppv6qvf3py0p46wa2h36nnfjw2m5bhjd6rhx"))))
4280 (build-system pyproject-build-system)
4281 (native-inputs
4282 (list python-pytest
4283 python-flaky
4284 python-pyyaml
4285 python-setuptools-scm
4286 python-setuptools))
4287 (home-page "https://github.com/pylast/pylast")
4288 (synopsis "Python interface to Last.fm and Libre.fm")
4289 (description "A Python interface to Last.fm and other API-compatible
4290websites such as Libre.fm.")
4291 (license license:asl2.0)))
4292
4293(define-public instantmusic
4294 (let ((commit "0477dd310e0aeb11d4d113bb96baa40d824cc330")
4295 (revision "2"))
4296 (package
4297 (name "instantmusic")
4298 (version (git-version "1.0" revision commit))
4299 (source (origin
4300 (method git-fetch)
4301 (uri (git-reference
4302 (url "https://github.com/yask123/Instant-Music-Downloader")
4303 (commit commit)))
4304 (file-name (git-file-name name version))
4305 (sha256
4306 (base32
4307 "0pxp1h0q4j7bidgdh4wgrvnm4ckdr4bvgk1wccr02mynfsjq8x5c"))))
4308 (build-system pyproject-build-system)
4309 (arguments
4310 (list
4311 #:tests? #f ;no tests
4312 #:phases
4313 #~(modify-phases %standard-phases
4314 (add-before 'build 'change-directory
4315 (lambda _
4316 (chdir "instantmusic-0.1")))
4317 (add-before 'build 'patch-yt-dlp
4318 (lambda* (#:key inputs #:allow-other-keys)
4319 (substitute* "bin/instantmusic"
4320 (("youtube-dl")
4321 (search-input-file inputs "bin/yt-dlp")))
4322 (substitute* "setup.py"
4323 (("youtube-dl")
4324 "yt-dlp"))))
4325 (add-before 'install 'fix-file-permissions
4326 (lambda _
4327 ;; Fix some read-only files that would cause a build failure
4328 (for-each (lambda (file)
4329 (chmod file #o644))
4330 (find-files "instantmusic.egg-info"
4331 "PKG-INFO|.*\\.txt")))))))
4332 (native-inputs (list python-setuptools))
4333 (inputs (list yt-dlp))
4334 (propagated-inputs (list python-requests eyed3 python-beautifulsoup4))
4335 (home-page "https://github.com/yask123/Instant-Music-Downloader")
4336 (synopsis "Command-line program to download a song from YouTube")
4337 (description "InstantMusic downloads a song from YouTube in MP3 format.
4338 Songs can be searched by artist, name or even by a part of the song text.")
4339 (license license:expat))))
4340
4341(define-public beets
4342 (package
4343 (name "beets")
4344 (version "2.5.1")
4345 (source
4346 (origin
4347 (method url-fetch)
4348 (uri (pypi-uri "beets" version))
4349 (sha256
4350 (base32
4351 "18p93p4sy6zxaa957v10irzagiilmhmlg7q82rjz5g2gh1qgvvkz"))))
4352 (build-system pyproject-build-system)
4353 (arguments
4354 (list
4355 ;; tests: 1083 passed, 99 skipped, 1 deselected, 1828 warnings
4356 #:test-flags
4357 ;; Network access is required.
4358 #~(list "-k" "not test_merge_duplicate_album")
4359 #:phases
4360 #~(modify-phases %standard-phases
4361 (add-after 'unpack 'set-HOME
4362 (lambda _
4363 (setenv "HOME" (string-append (getcwd) "/tmp"))))
4364 ;; Wrap the executable, so it can find python-gi (aka
4365 ;; pygobject) and gstreamer plugins.
4366 (add-after 'wrap 'wrap-typelib
4367 (lambda _
4368 (wrap-program (string-append #$output "/bin/beet")
4369 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix
4370 (,(getenv "GST_PLUGIN_SYSTEM_PATH")))
4371 `("GI_TYPELIB_PATH" ":" prefix
4372 (,(getenv "GI_TYPELIB_PATH"))))))
4373 (add-after 'wrap 'install-completion
4374 (lambda _
4375 (let ((completion-path
4376 (string-append
4377 #$output "/share/bash-completion/completions/beet")))
4378 (mkdir-p (dirname completion-path))
4379 (with-output-to-file completion-path
4380 (lambda _ (invoke (string-append #$output "/bin/beet")
4381 "completion")))))))))
4382 (native-inputs
4383 (list gobject-introspection
4384 python-flask
4385 python-mock
4386 python-poetry-core
4387 python-py7zr
4388 python-pytest
4389 python-pytest-flask
4390 python-setuptools
4391 python-responses))
4392 (inputs
4393 (list bash-minimal
4394 gst-plugins-base
4395 gst-plugins-good
4396 gstreamer
4397 python-confuse
4398 python-jellyfish
4399 python-lap
4400 python-mediafile
4401 python-munkres
4402 python-musicbrainzngs
4403 python-platformdirs
4404 python-pyyaml
4405 python-typing-extensions
4406 python-unidecode
4407 ;; Optional dependencies for plugins. Some of these are also required by tests.
4408 python-beautifulsoup4 ; For lyrics.
4409 python-discogs-client ; For discogs.
4410 python-mpd2 ; For mpdstats.
4411 python-mutagen ; For scrub.
4412 python-langdetect ; For lyrics.
4413 python-pillow ; For fetchart, embedart, thumbnails.
4414 python-pyacoustid ; For chroma.
4415 python-pygobject ; For bpd, replaygain.
4416 python-pylast ; For lastgenre, lastimport.
4417 python-pyxdg ; For thumbnails.
4418 python-rarfile ; For import.
4419 python-reflink ; For reflink.
4420 python-requests
4421 python-requests-oauthlib)) ; For beatport.
4422 (home-page "https://beets.io")
4423 (synopsis "Music organizer")
4424 (description "The purpose of beets is to get your music collection
4425right once and for all. It catalogs your collection, automatically
4426improving its metadata as it goes using the MusicBrainz database.
4427Then it provides a variety of tools for manipulating and accessing
4428your music.")
4429 (license license:expat)))
4430
4431(define-public beets-beetcamp
4432 (package
4433 (name "beets-beetcamp")
4434 (version "0.24.3")
4435 (source
4436 (origin
4437 (method url-fetch)
4438 (uri (pypi-uri "beetcamp" version))
4439 (sha256
4440 (base32 "00kbjvbqspmcx51cxgi67nw6a0cscbj4dz2ap9szyihdza5q1icj"))))
4441 (build-system pyproject-build-system)
4442 (propagated-inputs (list beets
4443 python-httpx
4444 python-packaging
4445 python-pycountry))
4446 (native-inputs (list python-poetry-core python-pytest))
4447 ;; Tests are weird and can't be run properly.
4448 (arguments (list #:tests? #f))
4449 (home-page "https://github.com/snejus/beetcamp")
4450 (synopsis "Bandcamp plugin for beets")
4451 (description
4452 "This plugin for beets automatically obtains tag data from @uref{Bandcamp,
4453https://bandcamp.com/}. It's also capable of getting song lyrics and album art
4454using the beets FetchArt plugin.")
4455 (license license:gpl2)))
4456
4457(define-public milkytracker
4458 (package
4459 (name "milkytracker")
4460 (version "1.05.01")
4461 (source (origin
4462 (method git-fetch)
4463 (uri (git-reference
4464 (url "https://github.com/milkytracker/MilkyTracker")
4465 (commit (string-append "v" version))))
4466 (file-name (git-file-name name version))
4467 (sha256
4468 (base32
4469 "138mgvxly769jfk5l7yjydfqa6lwsn87p2gmyqcxr3yhfvvp4lnz"))
4470 (modules '((guix build utils)))
4471 ;; Remove non-FSDG compliant sample songs.
4472 (snippet
4473 '(begin
4474 (delete-file-recursively "resources/music")
4475 (substitute* "CMakeLists.txt"
4476 (("add_subdirectory\\(resources/music\\)") ""))))))
4477 (build-system cmake-build-system)
4478 (arguments
4479 '(#:tests? #f ; no check target
4480 ;; This flag ensures that MilkyTracker links with the JACK library.
4481 #:configure-flags '("-DCMAKE_CXX_FLAGS=-ljack")))
4482 (inputs
4483 (list alsa-lib
4484 lhasa
4485 jack-2
4486 rtmidi-4.0
4487 sdl2
4488 zlib
4489 zziplib))
4490 (native-inputs
4491 (list pkg-config))
4492 (synopsis "Music tracker for working with .MOD/.XM module files")
4493 (description "MilkyTracker is a music application for creating .MOD and
4494.XM module files. It attempts to recreate the module replay and user
4495experience of the popular DOS program Fasttracker II, with special playback
4496modes available for improved Amiga ProTracker 2/3 compatibility.")
4497 (home-page "https://milkytracker.titandemo.org/")
4498 ;; 'src/milkyplay' is under Modified BSD, the rest is under GPL3 or later.
4499 (license (list license:bsd-3 license:gpl3+))))
4500
4501(define-public schismtracker
4502 (package
4503 (name "schismtracker")
4504 (version "20221201")
4505 (source (origin
4506 (method git-fetch)
4507 (uri (git-reference
4508 (url "https://github.com/schismtracker/schismtracker")
4509 (commit version)))
4510 (file-name (git-file-name name version))
4511 (sha256
4512 (base32
4513 "11yy5zrdfvnwzwdwmc3s3lx1ymwiyp1si5mmv4h9qxipd9j96ijp"))
4514 (modules '((guix build utils)))
4515 (snippet
4516 ;; Remove use of __DATE__ and __TIME__ for reproducibility.
4517 #~(substitute* "schism/version.c"
4518 (("Schism Tracker built %s %s.*$")
4519 (string-append
4520 "Schism Tracker version " #$version "\") ;"))))))
4521 (build-system gnu-build-system)
4522 (arguments
4523 (list #:configure-flags #~(list "--with-flac=yes" "--with-x11=no")
4524 #:phases #~(modify-phases %standard-phases
4525 (add-before 'configure 'link-libm
4526 (lambda _
4527 (setenv "LIBS" "-lm"))))))
4528 (native-inputs
4529 (list autoconf automake python))
4530 (inputs
4531 (list alsa-lib ; for asound dependency
4532 flac
4533 sdl2))
4534 (home-page "https://schismtracker.org")
4535 (synopsis "Oldschool sample-based music composition tool")
4536 (description
4537 "Schism Tracker is a reimplementation of Impulse Tracker, a program used to
4538create high quality music without the requirements of specialized, expensive
4539equipment, and with a unique \"finger feel\" that is difficult to replicate in
4540part. The player is based on a highly modified version of the ModPlug engine,
4541with a number of bugfixes and changes to improve IT playback.")
4542 (license license:gpl2+)))
4543
4544(define-public sooperlooper
4545 (package
4546 (name "sooperlooper")
4547 (version "1.7.8")
4548 (source
4549 (origin
4550 (method url-fetch)
4551 (uri (string-append "https://sonosaurus.com/sooperlooper"
4552 "/sooperlooper-" version ".tar.gz"))
4553 (sha256
4554 (base32 "0dd2kryizwrzndbwafpbddf9w2ghw9gfmb8nyss5hll70b1dx59f"))))
4555 (build-system gnu-build-system)
4556 (arguments
4557 (list
4558 #:phases
4559 #~(modify-phases %standard-phases
4560 (add-after 'unpack 'add-sigc++-includes
4561 (lambda* (#:key inputs #:allow-other-keys)
4562 (let ((sig (search-input-directory inputs "include/sigc++-2.0"))
4563 (xml (search-input-directory inputs "include/libxml2"))
4564 (cwd (getcwd)))
4565 (setenv "CPATH"
4566 (string-append sig ":"
4567 sig "../../lib/sigc++-2.0/include:"
4568 xml ":"
4569 cwd "/libs/pbd:"
4570 cwd "/libs/midi++:"
4571 (or (getenv "CPATH") ""))))
4572 (substitute* '("src/control_osc.hpp"
4573 "src/gui/app_frame.hpp"
4574 "src/gui/config_panel.hpp"
4575 "src/gui/keys_panel.hpp"
4576 "src/gui/latency_panel.hpp"
4577 "src/gui/main_panel.hpp"
4578 "src/gui/midi_bind_panel.hpp"
4579 "src/gui/prefs_dialog.hpp")
4580 (("sigc\\+\\+/object.h")
4581 "sigc++/sigc++.h"))
4582 (substitute* '("src/engine.cpp"
4583 "src/gui/latency_panel.cpp"
4584 "src/gui/looper_panel.cpp"
4585 "src/gui/main_panel.cpp")
4586 (("(\\(| )bind " _ pre)
4587 (string-append pre "sigc::bind ")))))
4588 (add-after 'unpack 'fix-xpm-warnings
4589 (lambda _
4590 (substitute* (find-files "." "\\.xpm$")
4591 (("static char") "static const char"))))
4592 (add-after 'unpack 'fix-deprecated-functions
4593 (lambda _
4594 (substitute* (find-files "src/gui" "\\.cpp$")
4595 (("^.*SetVirtualSizeHints.*$" ) "")))))))
4596 (inputs
4597 (list jack-1
4598 alsa-lib
4599 wxwidgets
4600 libsndfile
4601 libsamplerate
4602 liblo
4603 rubberband
4604 libxml2
4605 libsigc++-2
4606 ncurses))
4607 (native-inputs
4608 (list pkg-config))
4609 (home-page "https://sonosaurus.com/sooperlooper/")
4610 (synopsis "Live looping sampler")
4611 (description
4612 "SooperLooper is a live looping sampler capable of immediate loop
4613recording, overdubbing, multiplying, reversing and more. It allows for
4614multiple simultaneous multi-channel loops limited only by your computer's
4615available memory.")
4616 (license license:gpl2+)))
4617
4618(define-public midicsv
4619 (package
4620 (name "midicsv")
4621 (version "1.1")
4622 (source (origin
4623 (method url-fetch)
4624 (uri (string-append "https://www.fourmilab.ch/webtools/midicsv/"
4625 name "-" version ".tar.gz"))
4626 (sha256
4627 (base32
4628 "1vvhk2nf9ilfw0wchmxy8l13hbw9cnpz079nsx5srsy4nnd78nkw"))))
4629 (build-system gnu-build-system)
4630 (arguments
4631 `(#:phases (modify-phases %standard-phases (delete 'configure))
4632 #:make-flags (list "CC=gcc" (string-append "INSTALL_DEST=" %output))))
4633 (synopsis "Convert MIDI files to and from CSV")
4634 (description
4635 "Midicsv reads a standard MIDI file and decodes it into a comma-separated
4636value file (CSV), which preserves all the information in the MIDI file. The
4637ASCII CSV file may be loaded into a spreadsheet or database application, or
4638processed by a program to transform the MIDI data (for example, to key
4639transpose a composition or extract a track from a multi-track sequence). A
4640CSV file in the format created by midicsv may be converted back into a
4641standard MIDI file with the csvmidi program.")
4642 (home-page "https://www.fourmilab.ch/webtools/midicsv/")
4643 (license license:public-domain)))
4644
4645(define-public mididings
4646 (package
4647 (name "mididings")
4648 (version "20250818")
4649 (source (origin
4650 (method git-fetch)
4651 (uri (git-reference
4652 (url "https://github.com/mididings/mididings")
4653 (commit version)))
4654 (file-name (git-file-name name version))
4655 (sha256
4656 (base32
4657 "1ardf61zkgh0ikyfjwvhaznlgsdkhh4vzcqvcpvmh0h5mk0b40rg"))))
4658 (build-system meson-build-system)
4659 (arguments
4660 (list
4661 #:phases
4662 #~(modify-phases %standard-phases
4663 (add-after 'unpack 'build-manpages
4664 (lambda _
4665 (with-directory-excursion "doc/man"
4666 (for-each (lambda (doc)
4667 (system (format #false
4668 "scdoc < ~a.scd > ~a.1" doc doc)))
4669 '(livedings mididings send_midi)))))
4670 (add-after 'install 'wrap-executables
4671 (lambda _
4672 (for-each (lambda (file)
4673 (wrap-program file
4674 `("GUIX_PYTHONPATH" ":" prefix
4675 (,(string-append #$output "/lib/python"
4676 #$(version-major+minor
4677 (package-version python))
4678 "/site-packages")
4679 ,(getenv "GUIX_PYTHONPATH")))))
4680 (find-files (string-append #$output "/bin"))))))))
4681 (inputs
4682 (list alsa-lib
4683 boost
4684 jack-2
4685 python
4686 `(,python "tk")
4687 python-dbus-1.2
4688 python-decorator
4689 python-pyinotify
4690 python-pyliblo3
4691 python-pysmf))
4692 (native-inputs
4693 (list python-pytest
4694 python-setuptools
4695 python-wheel
4696 pkg-config
4697 scdoc))
4698 (home-page "https://github.com/mididings/mididings")
4699 (synopsis "MIDI router and processor")
4700 (description
4701 "mididings is a MIDI router/processor based on Python, supporting ALSA and
4702JACK MIDI. Features include:
4703
4704@itemize
4705@item MIDI routing and filtering; filter events depending on their event type,
4706 channel, note number, velocity, etc., and freely route them between an
4707 arbitrary number of input and output ports.
4708@item Modifying and converting MIDI events; transpose notes, apply velocity
4709 curves, change controller values and ranges, or convert events to any other
4710 MIDI event type. mididings also includes more complex functions like a
4711 diatonic harmonizer, floating split points, latched notes, and more.
4712@item Seamless switching between patches; set up different \"scenes\", each
4713 with its own MIDI routing and processing, and switch between them at any time,
4714 even while playing. Switching scenes does not affect notes already held, and
4715 does not result in dropouts or stuck notes!
4716@item MIDI event monitoring, running external commands; print MIDI event data
4717 to the console to help debugging your patches and configuring your MIDI
4718 controllers. In addition to its MIDI output, mididings can also execute shell
4719 commands and send OSC or DBUS messages.
4720@end itemize")
4721 (license license:gpl2+)))
4722
4723(define-public gx-guvnor-lv2
4724 (package
4725 (name "gx-guvnor-lv2")
4726 (version "0.1")
4727 (source (origin
4728 (method git-fetch)
4729 (uri (git-reference
4730 (url "https://github.com/brummer10/GxGuvnor.lv2")
4731 (commit (string-append "v" version))))
4732 (file-name (string-append name "-" version "-checkout"))
4733 (sha256
4734 (base32
4735 "1wa5070j40p7f0b3kr259pzm99xb6cf2badr2capayjvgayd6gnm"))))
4736 (build-system gnu-build-system)
4737 (arguments
4738 `(;; The check target is used only to output a warning.
4739 #:tests? #f
4740 #:make-flags
4741 (list (string-append "DESTDIR=" (assoc-ref %outputs "out")))
4742 #:phases
4743 (modify-phases %standard-phases
4744 (replace 'configure
4745 (lambda _
4746 (substitute* "Makefile"
4747 (("INSTALL_DIR = .*") "INSTALL_DIR=/lib/lv2\n")
4748 (("install : all") "install :"))
4749 #t)))))
4750 (inputs
4751 (list lv2))
4752 (home-page "https://github.com/brummer10/GxGuvnor.lv2")
4753 (synopsis "Overdrive/distortion pedal simulation")
4754 (description "This package provides the LV2 plugin \"GxGuvnor\", a
4755simulation of an overdrive or distortion pedal for guitars.")
4756 ;; The LICENSE file says GPLv3 but the license headers in the files say
4757 ;; GPLv2 or later. The whole project is released under GPLv3 or later
4758 ;; according to https://github.com/brummer10/GxGuvnor.lv2/issues/1
4759 (license license:gpl3+)))
4760
4761(define-public gx-vbass-preamp-lv2
4762 (let ((commit "f6a01c22fea71b155a797853c23653137ac89c1c")
4763 (revision "3"))
4764 (package (inherit gx-guvnor-lv2)
4765 (name "gx-vbass-preamp-lv2")
4766 (version (git-version "0" revision commit))
4767 (source (origin
4768 (method git-fetch)
4769 (uri (git-reference
4770 (url "https://github.com/brummer10/GxVBassPreAmp.lv2")
4771 (commit commit)))
4772 (sha256
4773 (base32
4774 "1ssa2xkppn7cn8lfvglb6brm5qsd7kysmabfj34qrqbywf5hdisw"))
4775 (file-name (git-file-name name version))))
4776 (arguments
4777 (list
4778 ;; The check target is used only to output a warning.
4779 #:tests? #false
4780 #:make-flags
4781 #~(list (string-append "DESTDIR=" #$output)
4782 (string-append "CC=" #$(cc-for-target)))
4783 #:phases
4784 '(modify-phases %standard-phases
4785 (replace 'configure
4786 (lambda _
4787 (substitute* "Makefile"
4788 (("INSTALL_DIR = .*") "INSTALL_DIR=/lib/lv2\n")
4789 (("install : all") "install :")))))))
4790 (inputs
4791 (list lv2 gtk+))
4792 (native-inputs
4793 (list pkg-config))
4794 (home-page "https://github.com/brummer10/GxVBassPreAmp.lv2")
4795 (synopsis "Simulation of the Vox Venue Bass 100 Pre Amp Section")
4796 (description "This package provides the LV2 plugin \"GxVBassPreAmp\", a
4797pre-amplifier simulation modelled after the 1984 Vox Venue Bass 100 Pre Amp
4798Section."))))
4799
4800(define-public gx-overdriver-lv2
4801 (let ((commit "ed71801987449414bf3adaa0dbfac68e8775f1ce")
4802 (revision "1"))
4803 (package (inherit gx-guvnor-lv2)
4804 (name "gx-overdriver-lv2")
4805 (version (string-append "0-" revision "." (string-take commit 9)))
4806 (source (origin
4807 (method git-fetch)
4808 (uri (git-reference
4809 (url "https://github.com/brummer10/GxOverDriver.lv2")
4810 (commit commit)))
4811 (sha256
4812 (base32
4813 "13j614jh525fbkby79nnzwj0z1ac0c9wclyn5pfqvkmx6a7j24r8"))
4814 (file-name (string-append name "-" version "-checkout"))))
4815 (home-page "https://github.com/brummer10/GxOverDriver.lv2")
4816 (synopsis "Overdrive effect with level and tone control")
4817 (description "This package provides the LV2 plugin \"GxOverDriver\", an
4818overdrive effect."))))
4819
4820(define-public gx-tone-mender-lv2
4821 (let ((commit "b6780b4a3e4782b3ed0e5882d6788f178aed138f")
4822 (revision "1"))
4823 (package (inherit gx-guvnor-lv2)
4824 (name "gx-tone-mender-lv2")
4825 (version (string-append "0-" revision "." (string-take commit 9)))
4826 (source (origin
4827 (method git-fetch)
4828 (uri (git-reference
4829 (url "https://github.com/brummer10/GxToneMender.lv2")
4830 (commit commit)))
4831 (sha256
4832 (base32
4833 "07qdcfsvv2vdnfnjh91pfgvjdcs5y91nvwfm8c0z8fp6b4bk7a9q"))
4834 (file-name (string-append name "-" version "-checkout"))))
4835 (home-page "https://github.com/brummer10/GxToneMender.lv2")
4836 (synopsis "Clean boost with a 3-knob tonestack")
4837 (description "This package provides the LV2 plugin \"GxToneMender\", a
4838clean boost effect with a 3-knob tonestack."))))
4839
4840(define-public gx-push-pull-lv2
4841 (let ((commit "7f76ae2068498643ac8671ee0930b13ee3fd8eb5")
4842 (revision "1"))
4843 (package (inherit gx-guvnor-lv2)
4844 (name "gx-push-pull-lv2")
4845 (version (string-append "0-" revision "." (string-take commit 9)))
4846 (source (origin
4847 (method git-fetch)
4848 (uri (git-reference
4849 (url "https://github.com/brummer10/GxPushPull.lv2")
4850 (commit commit)))
4851 (sha256
4852 (base32
4853 "12f5hwck2irph0gjbj8xy8jqcqdwb8l1hlwf29k0clz52h1jhb5q"))
4854 (file-name (string-append name "-" version "-checkout"))))
4855 (home-page "https://github.com/brummer10/GxPushPull.lv2")
4856 (synopsis "Octave up push pull transistor fuzz simulation")
4857 (description "This package provides the LV2 plugin \"GxPushPull\", a
4858simulation of a push pull transistor fuzz effect with added high octave."))))
4859
4860(define-public gx-suppa-tone-bender-lv2
4861 (package (inherit gx-guvnor-lv2)
4862 (name "gx-suppa-tone-bender-lv2")
4863 (version "0.1")
4864 (source (origin
4865 (method git-fetch)
4866 (uri (git-reference
4867 (url "https://github.com/brummer10/GxSuppaToneBender.lv2")
4868 (commit (string-append "v" version))))
4869 (file-name (string-append name "-" version "-checkout"))
4870 (sha256
4871 (base32
4872 "01x6bjmllkmvxfzc5xwdix7w021j26js71awv728cxsmkxgqw0zy"))))
4873 (home-page "https://github.com/brummer10/GxSuppaToneBender.lv2")
4874 (synopsis "Simulation of the Vox Suppa Tone Bender pedal")
4875 (description "This package provides the LV2 plugin
4876\"GxSuppaToneBender\", a simulation modelled after the Vox Suppa Tone Bender
4877pedal.")))
4878
4879(define-public gx-saturator-lv2
4880 (let ((commit "2142b14a86a4e6f2ab69446160d90f23b1ed3939")
4881 (revision "4"))
4882 (package (inherit gx-vbass-preamp-lv2)
4883 (name "gx-saturator-lv2")
4884 (version (git-version "0" revision commit))
4885 (source (origin
4886 (method git-fetch)
4887 (uri (git-reference
4888 (url "https://github.com/brummer10/GxSaturator.lv2")
4889 (commit commit)))
4890 (sha256
4891 (base32
4892 "16mq0k50pachg61vw88hjmyla5zwy0drfhi4d3f9hviivcfigg03"))
4893 (file-name (git-file-name name version))))
4894 (home-page "https://github.com/brummer10/GxSaturator.lv2")
4895 (synopsis "Saturation effect")
4896 (description "This package provides the LV2 plugin \"GxSaturator\", a
4897saturation effect."))))
4898
4899(define-public gx-hyperion-lv2
4900 (package (inherit gx-guvnor-lv2)
4901 (name "gx-hyperion-lv2")
4902 (version "0.1")
4903 (source (origin
4904 (method git-fetch)
4905 (uri (git-reference
4906 (url "https://github.com/brummer10/GxHyperion.lv2")
4907 (commit (string-append "v" version))))
4908 (file-name (string-append name "-" version "-checkout"))
4909 (sha256
4910 (base32
4911 "1vx79s6s9if117y2g0ppdja2sv2wcny6xcfl3j1z4cipahnildxf"))))
4912 (home-page "https://github.com/brummer10/GxHyperion.lv2")
4913 (synopsis "Simulation of the Hyperion Fuzz pedal")
4914 (description "This package provides the LV2 plugin \"GxHyperion\", a
4915simulation of the Hyperion Fuzz pedal.")))
4916
4917(define-public gx-voodoo-fuzz-lv2
4918 (package (inherit gx-guvnor-lv2)
4919 (name "gx-voodoo-fuzz-lv2")
4920 (version "0.1")
4921 (source (origin
4922 (method git-fetch)
4923 (uri (git-reference
4924 (url "https://github.com/brummer10/GxVoodoFuzz.lv2")
4925 (commit (string-append "v" version))))
4926 (file-name (string-append name "-" version "-checkout"))
4927 (sha256
4928 (base32
4929 "1v0scphivri1fk4hl20j13f92i48mnx1zsil4hgnadsmm4nsfw43"))))
4930 (home-page "https://github.com/brummer10/GxVoodoFuzz.lv2")
4931 (synopsis "Fuzz effect modelled after the Voodoo Lab SuperFuzz")
4932 (description "This package provides the LV2 plugin \"GxVoodooFuzz\", a
4933simulation modelled after the Voodoo Lab SuperFuzz pedal. It's basically a
4934Bosstone circuit, followed by the tone control of the FoxToneMachine in
4935parallel with a DarkBooster, followed by a volume control.")))
4936
4937(define-public gx-super-fuzz-lv2
4938 (package (inherit gx-guvnor-lv2)
4939 (name "gx-super-fuzz-lv2")
4940 (version "0.1")
4941 (source (origin
4942 (method git-fetch)
4943 (uri (git-reference
4944 (url "https://github.com/brummer10/GxSuperFuzz.lv2")
4945 (commit (string-append "v" version))))
4946 (file-name (string-append name "-" version "-checkout"))
4947 (sha256
4948 (base32
4949 "1jlljd9hlgfflbiizq47lv1xbbgjyx3v835mf24zmh1q5zsw4np4"))))
4950 (home-page "https://github.com/brummer10/GxSuperFuzz.lv2")
4951 (synopsis "Fuzz effect modelled after the UniVox SuperFuzz")
4952 (description "This package provides the LV2 plugin \"GxSuperFuzz\", an
4953analog simulation of the UniVox SuperFuzz pedal. In this simulation the trim
4954pot, which is usually in the housing, is exposed as a control parameter. It
4955adjusts the amount of harmonics.")))
4956
4957(define-public gx-vintage-fuzz-master-lv2
4958 (package (inherit gx-guvnor-lv2)
4959 (name "gx-vintage-fuzz-master-lv2")
4960 (version "0.1")
4961 (source (origin
4962 (method git-fetch)
4963 (uri (git-reference
4964 (url "https://github.com/brummer10/GxVintageFuzzMaster.lv2")
4965 (commit (string-append "v" version))))
4966 (file-name (string-append name "-" version "-checkout"))
4967 (sha256
4968 (base32
4969 "02jb211z8rw2qr5r1z5mdxlqgiw6cbc319xpqplvn6k21c59mskv"))))
4970 (home-page "https://github.com/brummer10/GxVintageFuzzMaster.lv2")
4971 (synopsis "Fuzz effect simulation of the vintage Fuzz Master")
4972 (description "This package provides the LV2 plugin
4973\"GxVintageFuzzMaster\", a simulation of the vintage Fuzz Master pedal.")))
4974
4975(define-public gx-slow-gear-lv2
4976 (let ((commit "5d37e775b0feef1d82feee94e2a7a2d7e57efe2d")
4977 (revision "3"))
4978 (package (inherit gx-vbass-preamp-lv2)
4979 (name "gx-slow-gear-lv2")
4980 (version (string-append "0-" revision "." (string-take commit 9)))
4981 (source (origin
4982 (method git-fetch)
4983 (uri (git-reference
4984 (url "https://github.com/brummer10/GxSlowGear.lv2")
4985 (commit commit)))
4986 (sha256
4987 (base32
4988 "141mz69zkhk3lm54bb6wgpnghb92zm1ig7fv07240cmhydqji1q1"))
4989 (file-name (string-append name "-" version "-checkout"))))
4990 (home-page "https://github.com/brummer10/GxSlowGear.lv2")
4991 (synopsis "Slow gear audio effect")
4992 (description "This package provides the LV2 plugin \"GxSlowGear\", a
4993slow gear audio effect to produce volume swells."))))
4994
4995(define-public gx-switchless-wah-lv2
4996 (let ((commit "7b08691203314612999f0ce2328cdc1161cd6665")
4997 (revision "2"))
4998 (package (inherit gx-guvnor-lv2)
4999 (name "gx-switchless-wah-lv2")
5000 (version (string-append "0-" revision "." (string-take commit 9)))
5001 (source (origin
5002 (method git-fetch)
5003 (uri (git-reference
5004 (url "https://github.com/brummer10/GxSwitchlessWah.lv2")
5005 (commit commit)))
5006 (sha256
5007 (base32
5008 "04jqfpncmrrqn34p21w4v9m2x5a5wsqwbm4f3byxvq4vcibwxzk2"))
5009 (file-name (string-append name "-" version "-checkout"))))
5010 (home-page "https://github.com/brummer10/GxSwitchlessWah.lv2")
5011 (synopsis "Wah emulation with switchless activation")
5012 (description "This package provides the LV2 plugin \"GxSwitchlessWah\",
5013a simulation of an analog Wah pedal with switchless activation."))))
5014
5015(define-public rkrlv2
5016 ;; This commit corresponds to the beta_3 tag
5017 (let ((commit "7edcb4e29a358623bfd57fa2c27e5da60adfcec3")
5018 (revision "2"))
5019 (package
5020 (name "rkrlv2")
5021 (version (git-version "0" revision commit))
5022 (source (origin
5023 (method git-fetch)
5024 (uri (git-reference
5025 (url "https://github.com/ssj71/rkrlv2")
5026 (commit commit)))
5027 (sha256
5028 (base32
5029 "16i4ajrib7kb0abdcn4901g8a4lkwkp2fyqyms38dhqq84slyfjs"))
5030 (file-name (git-file-name name version))))
5031 (build-system cmake-build-system)
5032 (arguments '(#:tests? #f)) ; there are no tests
5033 (inputs
5034 (list fftw libsamplerate lv2))
5035 (native-inputs
5036 (list pkg-config))
5037 (home-page "https://github.com/ssj71/rkrlv2")
5038 (synopsis "Rakarrack effects ported to LV2 plugins")
5039 (description "This package provides the Rakarrack effects as LV2
5040plugins. The ports are done such that hopefully when Rakarrack gets an active
5041maintainer these will get merged into the original project.")
5042 (license license:gpl2))))
5043
5044(define-public mod-utilities
5045 (let ((commit "80ea3ea9f52fab7f191671f4810bf90fc955a046")
5046 (revision "2"))
5047 (package
5048 (name "mod-utilities")
5049 (version (string-append "0-" revision "." (string-take commit 9)))
5050 (source (origin
5051 (method git-fetch)
5052 (uri (git-reference
5053 (url "https://github.com/moddevices/mod-utilities")
5054 (commit commit)))
5055 (file-name (string-append name "-" version "-checkout"))
5056 (sha256
5057 (base32
5058 "1v55zmzmlg0ka7341x5lsvb44amy17vk27s669ps1basd1bk5s5v"))))
5059 (build-system gnu-build-system)
5060 (arguments
5061 `(#:tests? #f ; there are no tests
5062 #:make-flags
5063 (list (string-append "INSTALL_PATH="
5064 (assoc-ref %outputs "out")
5065 "/lib/lv2")
5066 (string-append "PREFIX=" (assoc-ref %outputs "out"))
5067 "CC=gcc")
5068 #:phases
5069 (modify-phases %standard-phases
5070 (delete 'configure))))
5071 (inputs
5072 (list lv2))
5073 (home-page "https://github.com/moddevices/mod-utilities")
5074 (synopsis "LV2 utility plugins")
5075 (description "This package provides LV2 audio utility plugins, such as
5076filters, crossovers, simple gain plugins without zipper noise, switch box
5077plugins, a switch trigger, a toggle switch, and a peakmeter.")
5078 (license license:gpl2+))))
5079
5080(define-public qmidiarp
5081 (package
5082 (name "qmidiarp")
5083 (version "0.7.1")
5084 (source (origin
5085 (method url-fetch)
5086 (uri (string-append "mirror://sourceforge/qmidiarp/qmidiarp/"
5087 version "/qmidiarp-" version ".tar.bz2"))
5088 (sha256
5089 (base32
5090 "0571y3b49dwcgxif0h4q5mlracm3wi338yawy0whmpdnpfzbvls0"))))
5091 (build-system gnu-build-system)
5092 (inputs
5093 (list alsa-lib cairo glu jack-2 liblo lv2 pango qtbase-5))
5094 (native-inputs
5095 (list pkg-config qttools-5))
5096 (home-page "https://qmidiarp.sourceforge.net/")
5097 (synopsis "MIDI arpeggiator")
5098 (description "QMidiArp is an advanced MIDI arpeggiator, programmable step
5099sequencer and LFO. It can hold any number of arpeggiator, sequencer, or LFO
5100modules running in parallel.")
5101 (license license:gpl2+)))
5102
5103(define-public qmidiroute
5104 (package
5105 (name "qmidiroute")
5106 (version "0.4.0")
5107 (source (origin
5108 (method url-fetch)
5109 (uri (string-append "mirror://sourceforge/alsamodular/QMidiRoute/"
5110 version "/qmidiroute-" version ".tar.bz2"))
5111 (sha256
5112 (base32
5113 "19v1ppbglgl3z9v7xdqc0k33w71cqq8a7d6ihvfs7iz77dygrih9"))))
5114 (build-system gnu-build-system)
5115 (arguments
5116 `(#:configure-flags
5117 (list "--enable-qt5")))
5118 (inputs
5119 (list qtbase-5 alsa-lib))
5120 (native-inputs
5121 (list pkg-config qttools-5))
5122 (home-page "https://alsamodular.sourceforge.net/")
5123 (synopsis "MIDI event router and filter")
5124 (description "QMidiRoute is a MIDI event router and filter. MIDI note,
5125control change, program change and pitch bend events are logged, and can be
5126filtered, redirected and transformed into other events according to MIDI maps
5127defined as tabs in the main control surface.")
5128 (license license:gpl2+)))
5129
5130(define-public seq24
5131 (package
5132 (name "seq24")
5133 (version "0.9.3")
5134 (source (origin
5135 (method url-fetch)
5136 (uri (string-append "https://launchpad.net/seq24/trunk/"
5137 version "/+download/seq24-"
5138 version ".tar.bz2"))
5139 (sha256
5140 (base32
5141 "12dphdhnvfk1k0vmagi1v2lhyxjyj1j3cz6ksjw0ydcvid1x8ap2"))
5142 (patches (search-patches "seq24-rename-mutex.patch"))))
5143 (build-system gnu-build-system)
5144 (inputs (list alsa-lib gtkmm-2 jack-2))
5145 (native-inputs (list pkg-config))
5146 (home-page "https://launchpad.net/seq24/")
5147 (synopsis "Real-time MIDI sequencer")
5148 (description "Seq24 is a real-time MIDI sequencer. It was created to
5149provide a very simple interface for editing and playing MIDI loops.")
5150 (license license:gpl2+)))
5151
5152(define-public python-discogs-client
5153 (package
5154 (name "python-discogs-client")
5155 (version "2.8")
5156 (source
5157 (origin
5158 (method git-fetch)
5159 (uri (git-reference
5160 (url "https://github.com/joalla/discogs_client")
5161 (commit (string-append "v" version))))
5162 (file-name (git-file-name name version))
5163 (sha256
5164 (base32 "1ga48ds2q4as8srmvhq3ri1w7p7pmrr4yswcp9nf5c1rwdy02qys"))))
5165 (build-system pyproject-build-system)
5166 (arguments (list #:test-backend #~'unittest))
5167 (native-inputs (list python-setuptools))
5168 (propagated-inputs (list python-dateutil python-oauthlib python-requests))
5169 (home-page "https://github.com/joalla/discogs_client")
5170 (synopsis "Python client for the Discogs API")
5171 (description
5172 "This is the continuation of the official Discogs API client for Python.
5173It enables you to query the Discogs database for information on artists,
5174releases, labels, users, Marketplace listings,and more. It also supports
5175OAuth 1.0a authorization, which allows you to change user data such as profile
5176information, collections and wantlists,inventory, and orders.")
5177 (license license:bsd-2)))
5178
5179(define-public libsmf
5180 (package
5181 (name "libsmf")
5182 (version "1.3")
5183 (source
5184 (origin
5185 (method url-fetch)
5186 ;; SF download page says development moved, but the link it points to
5187 ;; is gone (https://github.com/nilsgey/libsmf). Someone else adopted
5188 ;; it but made no release so far (https://github.com/stump/libsmf).
5189 (uri (string-append "mirror://sourceforge/libsmf/libsmf/"
5190 version "/libsmf-" version ".tar.gz"))
5191 (sha256
5192 (base32
5193 "16c0n40h0r56gzbh5ypxa4dwp296dan3jminml2qkb4lvqarym6k"))))
5194 (build-system gnu-build-system)
5195 (outputs '("out"
5196 "static")) ; 88KiB of .a files
5197 (arguments
5198 (list
5199 #:phases
5200 #~(modify-phases %standard-phases
5201 (add-after 'install 'move-static-libraries
5202 (lambda _
5203 ;; Move static libraries to the "static" output.
5204 (let ((lib (string-append #$output "/lib"))
5205 (slib (string-append #$output:static "/lib")))
5206 (mkdir-p slib)
5207 (for-each (lambda (file)
5208 (install-file file slib)
5209 (delete-file file))
5210 (find-files lib "\\.a$"))))))))
5211 (inputs
5212 (list readline glib))
5213 (native-inputs
5214 (list doxygen pkg-config))
5215 (home-page "http://libsmf.sourceforge.net/")
5216 (synopsis "Standard MIDI File format library")
5217 (description
5218 "LibSMF is a C library for handling SMF (\"*.mid\") files. It
5219transparently handles conversions between time and pulses, tempo map handling
5220and more. Full API documentation and examples are included.")
5221 (license license:bsd-2)))
5222
5223(define-public lmms
5224 (package
5225 (name "lmms")
5226 (version "1.2.2")
5227 (source
5228 (origin
5229 (method git-fetch)
5230 (uri (git-reference
5231 (url "https://github.com/LMMS/lmms")
5232 (commit (string-append "v" version))))
5233 (file-name (git-file-name name version))
5234 (sha256
5235 (base32
5236 "11xgf461cnmq0jkgdgx5bddi87ammpik4whg1m4fcvd3i0d5i601"))
5237 (modules '((guix build utils)))
5238 ;; Include carla headers from the system.
5239 (snippet
5240 '(substitute* "plugins/carlabase/carla.h"
5241 (("\"CarlaNativePlugin\\.h\"")
5242 "<carla/includes/CarlaNativePlugin.h>")
5243 (("\"CarlaBackend\\.h\"") "<carla/CarlaBackend.h>")
5244 (("\"CarlaNative\\.h\"") "<carla/includes/CarlaNative.h>")
5245 (("\"CarlaUtils\\.h\"") "<carla/CarlaUtils.h>")))))
5246 (build-system qt-build-system)
5247 (arguments
5248 (list
5249 #:tests? #f ; no tests
5250 ;; Qt 5 support must be explicitly enabled in the 1.2 stable versions of
5251 ;; LMMS, so try removing "-DWANT_QT5=ON" in later versions.
5252 ;; Also, explicitly disabling VST support gets rid of the in-tree
5253 ;; dependency on qt5-x11embed.
5254 #:configure-flags '(list "-DWANT_QT5=ON" "-DWANT_VST=OFF")
5255 #:phases
5256 #~(modify-phases %standard-phases
5257 (add-after 'unpack 'fix-carla-export
5258 ;; Taken from NixOS package definition.
5259 (lambda _
5260 (substitute* "plugins/carlabase/carla.h"
5261 (("CARLA_EXPORT")
5262 "CARLA_API_EXPORT"))))
5263 (add-after 'unpack 'unpack-rpmalloc
5264 (lambda* (#:key inputs #:allow-other-keys)
5265 (copy-recursively (assoc-ref inputs "rpmalloc")
5266 "src/3rdparty/rpmalloc/rpmalloc")))
5267 (add-after 'unpack 'patch-stk-path
5268 (lambda* (#:key inputs #:allow-other-keys)
5269 (substitute* "cmake/modules/FindSTK.cmake"
5270 (("/usr") (assoc-ref inputs "stk")))
5271 (substitute* "src/core/ConfigManager.cpp"
5272 (("/usr") (assoc-ref inputs "stk")))))
5273 (add-before 'configure 'set-ldflags
5274 (lambda _
5275 (setenv "LDFLAGS"
5276 (string-append
5277 "-Wl,-rpath=\"" #$output "/lib/lmms"
5278 ":" #$output "/lib/lmms/ladspa" "\"")))))))
5279 (native-inputs
5280 `(("pkg-config" ,pkg-config)
5281 ("qttools-5" ,qttools-5)
5282 ;; rpmalloc is a public domain memory allocator. This version specified
5283 ;; below is the version required by LMMS.
5284 ;; To get the new commit of rpmalloc to use here, run
5285 ;; `git submodule--helper list | grep rpmalloc | cut -f2 -d' '`
5286 ;; in the cloned LMMS repository.
5287 ("rpmalloc"
5288 ,(origin
5289 (method git-fetch)
5290 (uri (git-reference
5291 (url "https://github.com/mjansson/rpmalloc")
5292 (commit "b5bdc18051bb74a22f0bde4bcc90b01cf590b496")))
5293 (sha256
5294 (base32
5295 "0g9pls46iggg7rdm65vzfj8nyr3v2n5xkp54c4qbh9hhalpsw4ay"))))))
5296 (inputs
5297 (list alsa-lib
5298 carla
5299 fftwf
5300 fltk
5301 fluidsynth
5302 freetype
5303 jack-2
5304 ladspa
5305 lame
5306 libgig
5307 libogg
5308 libsamplerate
5309 libsndfile
5310 libsoundio
5311 libvorbis
5312 libxft
5313 portaudio
5314 pulseaudio
5315 qtwayland-5
5316 qtx11extras
5317 sdl
5318 stk))
5319 (home-page "https://lmms.io/")
5320 (synopsis "Music composition tool")
5321 (description "LMMS is a digital audio workstation. It includes tools for
5322sequencing melodies and beats and for mixing and arranging songs. LMMS
5323includes instruments based on audio samples and various soft sythesizers. It
5324can receive input from a MIDI keyboard.")
5325 (license license:gpl2+)))
5326
5327;; This version tracks the latest commit from master branch.
5328(define-public lmms-next
5329 (let ((commit "83313e737d3137f7939f3daa9063a94a1ac01f7c")
5330 (revision "0"))
5331 (package/inherit lmms
5332 (name "lmms-next")
5333 (version (git-version "1.3.0-alpha.1" revision commit))
5334 (source
5335 (origin
5336 (inherit (package-source lmms))
5337 (uri (git-reference
5338 (url "https://github.com/LMMS/lmms")
5339 (commit commit)
5340 ;; Clone recursively only for the optional plugins. The 3rd
5341 ;; party libraries will be deleted by the snippet.
5342 (recursive? #t)))
5343 (file-name (git-file-name name version))
5344 (sha256
5345 (base32 "1mpp449rvn9f10bcxhpmxfinvj3jdv4s6qjhlp0sj9l783pv3h69"))
5346 (modules '((guix build utils)))
5347 (snippet
5348 '(begin
5349 ;; Delete the bundled 3rd party libraries.
5350 (for-each delete-file-recursively
5351 (list "plugins/CarlaBase/carla"
5352 "plugins/OpulenZ/adplug"
5353 "plugins/Xpressive/exprtk"
5354 "src/3rdparty"))
5355 ;; Do not check submodules.
5356 (substitute* "CMakeLists.txt"
5357 ((".*CheckSubmodules.*") "")
5358 ;; Do not use the bundled weakjack.
5359 (("JACK libraries\" ON") "JACK libraries\" OFF"))
5360 (substitute* "src/CMakeLists.txt"
5361 ;; Do not add 3rd party libraries.
5362 ((".*3rdparty.*") "")
5363 ;; Use adplug and ringbuffer from the system.
5364 (("\\$\\{EXTRA_LIBRARIES\\}" all)
5365 (string-append all
5366 "\n\tadplug"
5367 "\n\tringbuffer")))
5368 (with-directory-excursion "plugins"
5369 ;; Use carla from the system.
5370 (substitute* "CarlaBase/Carla.h"
5371 (("#include <CarlaDefines")
5372 "#include <carla/includes/CarlaDefines")
5373 (("#include <CarlaNative")
5374 "#include <carla/includes/CarlaNative")
5375 (("#include <CarlaBackend") "#include <carla/CarlaBackend")
5376 (("#include <CarlaUtils") "#include <carla/CarlaUtils"))
5377 (with-directory-excursion "OpulenZ"
5378 ;; Do not use the bundled adplug.
5379 (substitute* "CMakeLists.txt"
5380 ((".*adplug .*") "")
5381 ((".*adplug/.*") "")
5382 (("^\\)") "")
5383 (("\\.png\"") ".png\"\n)"))
5384 ;; Use adplug from the system.
5385 (substitute* "OpulenZ.cpp"
5386 (("<opl\\.h>") "<adplug/opl.h>")
5387 (("<temuopl\\.h>") "<adplug/temuopl.h>")
5388 (("<mididata\\.h>") "<adplug/mididata.h>")))
5389 ;; Do not use the bundled hiir.
5390 (substitute* "SlewDistortion/CMakeLists.txt"
5391 (("TARGET_LINK_LIBRARIES\\(slewdistortion hiir\\)") ""))
5392 ;; Do not use the bundled exprtk.
5393 (substitute* "Xpressive/CMakeLists.txt"
5394 ((".*\\(exprtk .*") "")
5395 ((".*xpressive exprtk.*") "")))
5396 ;; Avoid "invalid conversion from 'const unsigned char*' to
5397 ;; 'unsigned char*'" error.
5398 (substitute* "plugins/OpulenZ/OpulenZ.cpp"
5399 (("unsigned char \\*inst") "const unsigned char *inst"))))))
5400 (arguments
5401 (substitute-keyword-arguments arguments
5402 ((#:qtbase _ #f) qtbase)
5403 ((#:configure-flags flags)
5404 #~(cons* "-DWANT_QT6=ON" (delete "-DWANT_QT5=ON" #$flags)))
5405 ((#:phases phases)
5406 #~(modify-phases #$phases
5407 (delete 'unpack-rpmalloc)
5408 (replace 'fix-carla-export
5409 ;; Taken from NixOS package definition.
5410 (lambda _
5411 (substitute* "plugins/CarlaBase/Carla.h"
5412 (("CARLA_EXPORT")
5413 "CARLA_API_EXPORT"))))))))
5414 (native-inputs
5415 (modify-inputs native-inputs
5416 (delete "rpmalloc")
5417 (replace "qttools" qttools)))
5418 (inputs
5419 (modify-inputs inputs
5420 (delete "qtx11extras")
5421 (replace "carla" carla-2.6)
5422 (replace "qtwayland" qtwayland)
5423 (replace "sdl12-compat" sdl2)
5424 (append adplug
5425 exprtk
5426 hiir
5427 libxml2
5428 lilv
5429 lv2
5430 perl
5431 perl-list-moreutils
5432 perl-xml-parser
5433 qtsvg
5434 ringbuffer
5435 suil)))
5436 (native-search-paths
5437 (list (search-path-specification
5438 (variable "LV2_PATH")
5439 (files '("lib/lv2"))))))))
5440
5441(define-public lmms-next-with-vst
5442 (package/inherit lmms-next
5443 (name "lmms-next-with-vst")
5444 (arguments
5445 (substitute-keyword-arguments arguments
5446 ((#:configure-flags flags)
5447 #~(cons* (string-append "-DWINE_LOCATIONS=" #$(wine-for-system))
5448 (delete "-DWANT_VST=OFF" #$flags)))))
5449 (inputs
5450 (modify-inputs inputs
5451 (append (wine-for-system))))))
5452
5453(define-public liquidsfz
5454 (package
5455 (name "liquidsfz")
5456 (version "0.3.1")
5457 (source (origin
5458 (method git-fetch)
5459 (uri (git-reference
5460 (url "https://github.com/swesterfeld/liquidsfz")
5461 (commit version)))
5462 (file-name (git-file-name name version))
5463 (sha256
5464 (base32
5465 "0kijisxv8f8ihv8rk5cg1cmdh29zkr7i2ghds6wz0iq9mdkga12s"))))
5466 (build-system gnu-build-system)
5467 (arguments
5468 (list
5469 #:configure-flags '(list "--enable-shared")
5470 #:phases
5471 '(modify-phases %standard-phases
5472 (replace 'bootstrap
5473 (lambda _
5474 ;; The default 'bootstrap' phase would run 'autogen.sh', which
5475 ;; would try to run ./configure and fail due to unpatched
5476 ;; shebangs.
5477 (invoke "autoreconf" "-v" "--install"))))))
5478 (native-inputs
5479 (list autoconf automake libtool pkg-config))
5480 (inputs
5481 (list jack-2 libsndfile lv2 readline))
5482 (home-page "https://github.com/swesterfeld/liquidsfz")
5483 (synopsis "Sampler library")
5484 (description "The main goal of liquidsfz is to provide an SFZ sampler
5485implementation library that is easy to integrate into other projects. A
5486standalone JACK client and an LV2 plugin is also available.")
5487 (license license:lgpl2.1+)))
5488
5489(define-public musescore
5490 (package
5491 (name "musescore")
5492 (version "4.6.5")
5493 (source
5494 (origin
5495 (method git-fetch)
5496 (uri (git-reference
5497 (url "https://github.com/musescore/MuseScore")
5498 (commit (string-append "v" version))))
5499 (file-name (git-file-name name version))
5500 (sha256
5501 (base32 "18ylvgc4izfgi9fn2bxz7i98jx02rbxjcv2cffbqhyhbv39izy4m"))))
5502 (build-system qt-build-system)
5503 (arguments
5504 (list
5505 #:qtbase qtbase ;for qt 6
5506 #:configure-flags
5507 #~(list
5508 "-DMUSE_APP_BUILD_MODE=release"
5509 ;; Disable the build and usage of the `/bin/crashpad_handler` utility -
5510 ;; it does automatic crash reporting and is distributed as a
5511 ;; pre-compiled binary in the source-tree of MuseScore:
5512 ;; https://github.com/musescore/MuseScore/issues/15571
5513 ;; Renamed from MUE_BUILD_CRASHPAD_CLIENT, MUE_BUILD_DIAGNOSTICS_MODULE
5514 ;; https://github.com/musescore/MuseScore/commit/6f269e8b072cca36cb76eb016cb60c1c1c2b9906
5515 "-DMUSE_MODULE_DIAGNOSTICS_CRASHPAD_CLIENT=OFF"
5516;;; These five lines asks that Guix' versions of system libraries are used.
5517 "-DMUE_COMPILE_USE_SYSTEM_FREETYPE=ON"
5518 "-DMUE_COMPILE_USE_SYSTEM_HARFBUZZ=ON"
5519 "-DMUE_COMPILE_USE_SYSTEM_TINYXML=ON"
5520 "-DMUE_COMPILE_USE_SYSTEM_OPUSENC=ON" ; Implies -DMUE_COMPILE_USE_SYSTEM_OPUS=ON
5521 "-DMUE_COMPILE_USE_SYSTEM_FLAC=ON"
5522 ;; Disable download of soundfont during build.
5523 "-DDOWNLOAD_SOUNDFONT=OFF"
5524 ;; Don't bundle Qt QML files, relevant really only for Darwin.
5525 "-DMUE_COMPILE_INSTALL_QTQML_FILES=OFF")
5526 ;; There are tests, but no simple target to run. The command used to
5527 ;; run them is:
5528 ;;
5529 ;; make debug && sudo make installdebug && cd \
5530 ;; build.debug/mtest && make && ctest
5531 ;;
5532 ;; Basically, it requires to start a whole new build process.
5533 ;; So we simply skip them.
5534 #:tests? #f))
5535 (native-inputs
5536 (list git-minimal/pinned
5537 `(,gtk+ "bin") ;for gtk-update-icon-cache
5538 pkg-config
5539 qttools))
5540 (inputs
5541 (list alsa-lib
5542 flac
5543 freetype
5544 harfbuzz
5545 jack-1
5546 lame
5547 libogg
5548 libopusenc
5549 libsndfile
5550 libvorbis
5551 portaudio
5552 portmidi
5553 pulseaudio
5554 python
5555 qt5compat
5556 qtbase
5557 qtdeclarative
5558 qtnetworkauth
5559 qtscxml
5560 qtshadertools
5561 qtsvg
5562 qtwayland
5563 tinyxml2))
5564 (propagated-inputs
5565 (list `(,alsa-plugins "pulseaudio"))) ;for libasound_module_conf_pulse.so
5566 (synopsis "Music composition and notation software")
5567 (description
5568 "MuseScore is a music score typesetter. Its main purpose is the creation
5569of high-quality engraved musical scores in a WYSIWYG environment.
5570
5571It supports unlimited staves, linked parts and part extraction, tablature,
5572MIDI input, percussion notation, cross-staff beaming, automatic transposition,
5573lyrics (multiple verses), fretboard diagrams, and in general everything
5574commonly used in sheet music. Style options and style sheets to change the
5575appearance and layout are provided.
5576
5577MuseScore can also play back scores through the built-in sequencer and SoundFont
5578sample library.")
5579 (home-page "https://musescore.org")
5580 (license license:gpl3)))
5581
5582(define-public muse-sequencer
5583 (package
5584 (name "muse-sequencer")
5585 (version "4.2.1")
5586 (source (origin
5587 (method git-fetch)
5588 (uri (git-reference
5589 (url "https://github.com/muse-sequencer/muse")
5590 (commit version)))
5591 (file-name (git-file-name name version))
5592 (sha256
5593 (base32
5594 "13b9xx8x8yr58r8765xn770kfn3k2whmvmpl2657nc19max9n61g"))))
5595 (build-system qt-build-system)
5596 (arguments
5597 (list
5598 #:tests? #f ; there is no test target
5599 #:configure-flags
5600 #~(list "-DENABLE_VST_NATIVE=OFF"
5601 (string-append "-DCMAKE_EXE_LINKER_FLAGS="
5602 "-Wl,-rpath=" #$output "/lib/muse-"
5603 #$(version-major+minor version) "/modules")
5604 (string-append "-DCMAKE_SHARED_LINKER_FLAGS="
5605 "-Wl,-rpath=" #$output "/lib/muse-"
5606 #$(version-major+minor version) "/modules"))
5607 #:phases
5608 #~(modify-phases %standard-phases
5609 (add-after 'unpack 'chdir
5610 (lambda _ (chdir "src"))))))
5611 (inputs
5612 (list alsa-lib
5613 dssi
5614 fluidsynth
5615 glib
5616 jack-1
5617 ladspa
5618 libinstpatch
5619 liblo
5620 libsamplerate
5621 libsndfile
5622 lilv
5623 lrdf
5624 lv2
5625 pcre
5626 pulseaudio ; required by rtaudio
5627 qtbase-5
5628 qtsvg-5
5629 qtwayland-5
5630 rtaudio
5631 rubberband
5632 sord))
5633 (native-inputs
5634 (list extra-cmake-modules
5635 perl
5636 pkg-config
5637 python-wrapper
5638 qttools-5))
5639 (home-page "https://muse-sequencer.github.io/")
5640 (synopsis "MIDI/Audio sequencer")
5641 (description "MusE is a MIDI/Audio sequencer with recording and editing
5642capabilities. Its audio sequencer supports the LADSPA, DSSI, and LV2 audio
5643plugin formats; the MIDI sequencer provides a piano roll, a drum editor, a
5644list view, and a score editor. MusE aims to be a complete multitrack virtual
5645studio.")
5646 (license license:gpl2+)))
5647
5648(define-public gsequencer
5649 (package
5650 (name "gsequencer")
5651 (version "8.1.24")
5652 (source
5653 (origin
5654 (method git-fetch)
5655 (uri (git-reference
5656 (url "https://git.savannah.gnu.org/git/gsequencer")
5657 (commit version)))
5658 (file-name (git-file-name name version))
5659 (sha256
5660 (base32 "0rpidmawdrnaqrddy5vlfpybkgdfcg0ybfl9pcdqrd03yc1hhalp"))))
5661 (build-system glib-or-gtk-build-system)
5662 (arguments
5663 `(#:phases
5664 (modify-phases %standard-phases
5665 (add-before 'build 'prepare-x-for-test
5666 (lambda _
5667 (system "Xvfb &")
5668 (setenv "DISPLAY" ":0"))))))
5669 (native-inputs
5670 (list autoconf
5671 automake
5672 cunit
5673 gettext-minimal
5674 gobject-introspection
5675 gtk-doc/stable
5676 libtool
5677 libxslt
5678 pkg-config
5679 xorg-server-for-tests))
5680 (inputs
5681 (list alsa-lib
5682 dssi
5683 fftw
5684 gst-plugins-base
5685 gstreamer
5686 gtk
5687 jack-1
5688 json-glib
5689 ladspa
5690 libinstpatch
5691 libsamplerate
5692 libsndfile
5693 libsoup
5694 libxcrypt
5695 libxml2
5696 lv2
5697 pulseaudio
5698 `(,util-linux "lib")
5699 webkitgtk))
5700 (home-page "https://www.nongnu.org/gsequencer/")
5701 (synopsis "Advanced Gtk+ Sequencer")
5702 (description
5703 "GSequencer allows you to play, capture and create music. There is a piano
5704roll, automation and wave form editor. It has machines for playing drum samples,
5705Soundfont2 sound containers and synthesizers. They usually can be connected to a
5706MIDI input source (instrument). It has support for various audio backends like
5707ALSA, Pulseaudio, JACK, OSSv4 and CoreAudio.")
5708 (license license:gpl3+)))
5709
5710(define-public dssi
5711 (package
5712 (name "dssi")
5713 (version "1.1.1")
5714 (source (origin
5715 (method url-fetch)
5716 (uri (string-append
5717 "mirror://sourceforge/dssi/dssi/" version
5718 "/dssi-" version ".tar.gz"))
5719 (sha256
5720 (base32
5721 "0kl1hzhb7cykzkrqcqgq1dk4xcgrcxv0jja251aq4z4l783jpj7j"))))
5722 (build-system gnu-build-system)
5723 (arguments
5724 (list
5725 #:phases
5726 '(modify-phases %standard-phases
5727 (add-after 'unpack 'compatibility
5728 (lambda _
5729 ;; seq_event.h should not be used directly.
5730 (substitute* "dssi/dssi.h"
5731 (("alsa/seq_event.h")
5732 "alsa/asoundlib.h")))))))
5733 (inputs
5734 (list alsa-lib
5735 jack-2
5736 ladspa
5737 libsamplerate
5738 libsndfile
5739 liblo))
5740 (native-inputs
5741 (list pkg-config))
5742 (synopsis "Audio plugin API for soft synths and effects")
5743 (description "DSSI is a plugin API for software instruments with user
5744interfaces, permitting them to be hosted in-process by audio applications.
5745It is intended to be simple, GUI-toolkit-agnostic, and slightly biased
5746towards familiarity with MIDI. The DSSI distribution package contains
5747a JACK/ALSA-sequencer reference host and some plugins as well as the
5748specification and header.")
5749 (home-page "https://dssi.sourceforge.net/")
5750 ;; The DSSI interface is LGPL2.1+, some tests and examples are GPL2+.
5751 ;; The vast majority of examples are in the public domain.
5752 (license (list license:lgpl2.1+ license:gpl2+))))
5753
5754(define-public rosegarden
5755 (package
5756 (name "rosegarden")
5757 (version "25.06")
5758 (source
5759 (origin
5760 (method url-fetch)
5761 (uri (string-append "mirror://sourceforge/rosegarden/rosegarden/"
5762 (version-major+minor version) "/"
5763 "rosegarden-" version ".tar.xz"))
5764 (sha256
5765 (base32 "0vf3ln51f9layj7ann8nykl1rvimbnz58j8f9g6735490nq55zkm"))))
5766 (build-system qt-build-system)
5767 (arguments
5768 (list
5769 #:qtbase qtbase
5770 #:configure-flags #~(list "-DUSE_QT6=ON")
5771 #:test-exclude "test_notationview_selection"
5772 #:phases
5773 #~(modify-phases %standard-phases
5774 (add-after 'unpack 'fix-references
5775 (lambda* (#:key inputs #:allow-other-keys)
5776 (substitute* "src/gui/general/ProjectPackager.cpp"
5777 (("\"flac\\>")
5778 (string-append "\"" (search-input-file inputs "/bin/flac")))
5779 (("\"wavpack\\>")
5780 (string-append "\"" (search-input-file inputs "/bin/wavpack")))
5781 (("\"wvunpack\\>")
5782 (string-append "\"" (search-input-file inputs "/bin/wvunpack")))
5783 (("\"bash\\>")
5784 (string-append "\"" (search-input-file inputs "/bin/bash")))
5785 (("\"tar\\>")
5786 (string-append "\"" (search-input-file inputs "/bin/tar"))))
5787 (substitute* "src/gui/general/LilyPondProcessor.cpp"
5788 (("\"convert-ly\\>")
5789 (string-append "\"" (search-input-file inputs "/bin/convert-ly")))
5790 (("\"lilypond\\>")
5791 (string-append "\"" (search-input-file inputs "/bin/lilypond"))))))
5792 (add-after 'unpack 'make-reproducible
5793 (lambda _
5794 ;; Prevent Last-Modified from being written.
5795 ;; The "*.qm" files that are used in locale.qrc would have a new
5796 ;; mtime otherwise that is written into qrc_locale.cpp in the
5797 ;; end - except when we disable it.
5798 (substitute* "src/CMakeLists.txt"
5799 (("COMMAND [$][{]QT_RCC_EXECUTABLE[}]")
5800 "COMMAND ${QT_RCC_EXECUTABLE} --format-version 1")
5801 )
5802 ;; Make hashtable traversal order predicable.
5803 (setenv "QT_RCC_TEST" "1"))) ; important
5804 (add-before 'check 'prepare-check
5805 (lambda _
5806 ;; Tests create files in $HOME/.local/share/rosegarden and
5807 ;; expect permissions set to 0700.
5808 (mkdir-p "/tmp/foo")
5809 (chmod "/tmp/foo" #o700)
5810 (setenv "HOME" "/tmp/foo")
5811 (setenv "XDG_RUNTIME_DIR" "/tmp/foo")))
5812 (replace 'check
5813 (lambda* (#:key tests? (test-exclude "") #:allow-other-keys)
5814 (when tests?
5815 ;; Skip a failing test.
5816 (invoke "ctest" "-E" test-exclude)))))))
5817 (inputs
5818 (list alsa-lib
5819 bash-minimal
5820 dssi
5821 flac
5822 fftwf
5823 jack-1
5824 ladspa
5825 liblo
5826 libsamplerate
5827 lilv
5828 lilypond
5829 lrdf
5830 lv2
5831 qt5compat
5832 qtwayland
5833 shared-mime-info
5834 tar
5835 lirc
5836 wavpack
5837 zlib))
5838 (native-inputs
5839 (list pkg-config qttools)) ;for qtlinguist
5840 (synopsis "Music composition and editing environment based around a MIDI
5841sequencer")
5842 (description "Rosegarden is a music composition and editing environment
5843based around a MIDI sequencer that features a rich understanding of music
5844notation and includes basic support for digital audio.")
5845 (home-page "https://www.rosegardenmusic.com/")
5846 (license license:gpl2)))
5847
5848(define-public patchmatrix
5849 (package
5850 (name "patchmatrix")
5851 (version "0.16.0")
5852 (source (origin
5853 (method git-fetch)
5854 (uri (git-reference
5855 (url "https://github.com/OpenMusicKontrollers/patchmatrix")
5856 (commit version)))
5857 (file-name (git-file-name "patchmatrix" version))
5858 (sha256
5859 (base32
5860 "020vp7zzxxzzjfic57vkpg68dm8hi98ilr1bj88xjsv6i47xmjbn"))))
5861 (build-system meson-build-system)
5862 (arguments '(#:tests? #f)) ; no test target
5863 (inputs
5864 (list jack-1 lv2 mesa))
5865 (native-inputs
5866 (list pkg-config))
5867 (home-page "https://github.com/OpenMusicKontrollers/patchmatrix")
5868 (synopsis "Simple JACK patch bay")
5869 (description "PatchMatrix is a patch bay for the JACK audio connection
5870kit. It provides a patch bay in flow matrix style for audio, MIDI, CV, and
5871OSC connections.")
5872 (license license:artistic2.0)))
5873
5874(define-public luppp
5875 (let ((revision "2")
5876 ;; The last release was in 2019. Since then some build fixes have
5877 ;; been added.
5878 (commit "78fb003df542e752d43f8ea3e734a83de4e4f8a1"))
5879 (package
5880 (name "luppp")
5881 (version (git-version "1.2.1" revision commit))
5882 (source (origin
5883 (method git-fetch)
5884 (uri (git-reference
5885 (url "https://github.com/openAVproductions/openAV-Luppp")
5886 (commit commit)))
5887 (file-name (git-file-name name version))
5888 (sha256
5889 (base32
5890 "1nc4xjm74assjzjghkbh25ahlkiiy7pkfaj72zagzfa9p64s6xdl"))))
5891 (build-system meson-build-system)
5892 (inputs
5893 (list cairo
5894 ntk
5895 liblo
5896 jack-2
5897 libsndfile
5898 libsamplerate))
5899 (native-inputs (list pkg-config cmake-minimal))
5900 (home-page "http://openavproductions.com/luppp/")
5901 (synopsis "Live performance tool")
5902 (description
5903 "Luppp is a music creation tool, intended for live use. The focus is on real
5904time processing and a fast and intuitive workflow. With extensive MIDI
5905mapping support, you can get looping just how you like!")
5906 (license license:gpl3+))))
5907
5908(define-public fabla
5909 (package
5910 (name "fabla")
5911 (version "1.4")
5912 (source (origin
5913 (method git-fetch)
5914 (uri (git-reference
5915 (url "https://github.com/openAVproductions/openAV-Fabla")
5916 (commit (string-append "release-" version))))
5917 (file-name (git-file-name name version))
5918 (sha256
5919 (base32
5920 "13675ljfcbmxw9jdjrpn9wpvl69qxxc1hg2y9sfjkf4khajpapg9"))))
5921 (build-system cmake-build-system)
5922 (arguments '(#:tests? #f)) ;there are none
5923 (inputs (list ntk cairomm libsndfile))
5924 (native-inputs (list pkg-config lv2 mesa))
5925 (home-page "http://openavproductions.com/fabla/")
5926 (synopsis "Sampler LV2 plugin")
5927 (description
5928 "Fabla is an LV2 drum sampler plugin instrument. It is ideal for loading up
5929your favorite sampled sounds and bashing away on a MIDI controller.")
5930 (license license:gpl2+)))
5931
5932(define-public sorcer
5933 (let ((revision "2")
5934 ;; The last release was in 2016. Since then a couple of commits have
5935 ;; been added to fix build problems, so we take this arbitrary recent
5936 ;; commit.
5937 (commit "94107b26e3e00e32504c8fb3fbf7572514d3b6bc"))
5938 (package
5939 (name "sorcer")
5940 (version (git-version "1.1.3" revision commit))
5941 (source (origin
5942 (method git-fetch)
5943 (uri (git-reference
5944 (url "https://github.com/openAVproductions/openAV-Sorcer")
5945 (commit commit)))
5946 (file-name (git-file-name name version))
5947 (sha256
5948 (base32
5949 "0md3d9h63ngrlh53mj1fmwhmnlxr7bqzpfb3wk9427v5n0y6yn48"))
5950 (snippet
5951 '(delete-file "faust/main.cpp"))))
5952 (build-system cmake-build-system)
5953 (arguments
5954 `(#:tests? #f ;no tests included
5955 #:phases
5956 (modify-phases %standard-phases
5957 (add-after 'unpack 'build-faust-sources
5958 (lambda* (#:key inputs #:allow-other-keys)
5959 (with-directory-excursion "faust"
5960 (invoke "faust" "-i"
5961 "-a" "lv2.cpp"
5962 "-o" "main.cpp" "main.dsp")))))))
5963 (inputs (list boost lv2 ntk))
5964 (native-inputs (list faust-2 pkg-config which))
5965 (home-page "http://openavproductions.com/sorcer/")
5966 (synopsis "Wavetable LV2 plugin synth")
5967 (description "Sorcer is a wavetable LV2 plugin synthesizer, targeted at
5968the electronic or dubstep genre.")
5969 (license license:gpl3+))))
5970
5971(define soundfont-airfont-340
5972 (origin
5973 (method url-fetch)
5974 (uri "http://www.ronimusic.com/sf2/Airfont_340.dls")
5975 (sha256
5976 (base32 "011vg0y6s3zribkkwk143nlp251nn26xsvzkvzs1xicz7jgf7cxy"))))
5977
5978(define-public sonivox
5979 (package
5980 (name "sonivox")
5981 (version "3.6.16")
5982 (source (origin
5983 (method git-fetch)
5984 (uri (git-reference
5985 (url "https://github.com/pedrolcl/sonivox")
5986 (commit (string-append "v" version))))
5987 (file-name (git-file-name name version))
5988 (sha256
5989 (base32
5990 "0yxgyzx5144f5rfqsqhlsfzjxy6a27605dr1g874y8wra6dsbrfq"))))
5991 (build-system cmake-build-system)
5992 (arguments
5993 (list #:tests? (not (%current-target-system)) ; run unless cross-compiling
5994 #:phases
5995 #~(modify-phases %standard-phases
5996 (add-after 'unpack 'symlink-soundfont
5997 (lambda _
5998 (setenv "TEMP" (getcwd))
5999 (symlink #$soundfont-airfont-340
6000 (string-append (getenv "TEMP")
6001 "/soundfont.dls")))))))
6002 (native-inputs
6003 (list googletest))
6004 (home-page "https://github.com/pedrolcl/sonivox")
6005 (synopsis "Fork of the AOSP platform_external_sonivox")
6006 (description "This project is a fork of the Android Open Source Project
6007@code{platform_external_sonivox}. It is a Wave Table synthesizer, using
6008embedded samples. It also supports external DLS soundfont files. It is also a
6009real time GM synthesizer.")
6010 (license license:asl2.0)))
6011
6012(define-public sonivox-eas
6013 (package
6014 (name "sonivox-eas")
6015 (version "1.6.0")
6016 (source (origin
6017 (method git-fetch)
6018 (uri (git-reference
6019 (url "https://github.com/pedrolcl/Linux-SonivoxEas")
6020 (commit (string-append "v" version))))
6021 (file-name (string-append name "-" version "-checkout"))
6022 (sha256
6023 (base32
6024 "1dzknbc9b4cbf1smql3b7g9smg45z1z8qrq0y6m4659k0jc3svs4"))))
6025 (build-system qt-build-system)
6026 (arguments
6027 (list #:qtbase qtbase
6028 #:tests? #f)) ; there are no tests
6029 (inputs
6030 (list alsa-lib drumstick pulseaudio qtwayland sonivox))
6031 (native-inputs
6032 (list pkg-config))
6033 (home-page "https://github.com/pedrolcl/Linux-SonivoxEas")
6034 (synopsis "MIDI synthesizer library")
6035 (description "This project is a real time General MIDI synthesizer based
6036on the Sonivox EAS Synthesizer by Google. It does not need external
6037soundfonts, using embedded samples instead.")
6038 (license license:gpl2+)))
6039
6040(define-public whysynth
6041 (package
6042 (name "whysynth")
6043 (version "20170701")
6044 (source (origin
6045 (method url-fetch)
6046 (uri (string-append "http://smbolton.com/whysynth/whysynth-"
6047 version ".tar.bz2"))
6048 (sha256
6049 (base32
6050 "02qbn0hbvn1iym4zxv35b201blg31yjpgh71h8db0j5zls2xc0m6"))))
6051 (build-system gnu-build-system)
6052 (inputs
6053 (list dssi
6054 liblo
6055 fftwf
6056 gtk+-2
6057 ladspa
6058 alsa-lib))
6059 (native-inputs
6060 (list pkg-config))
6061 (home-page "http://smbolton.com/whysynth.html")
6062 (synopsis "DSSI software synthesizer")
6063 (description "WhySynth is a versatile softsynth which operates as a plugin
6064for the DSSI Soft Synth Interface. A brief list of features:
6065
6066@enumerate
6067@item 4 oscillators, 2 filters, 3 LFOs, and 5 envelope generators per voice.
6068@item 11 oscillator modes: minBLEP, wavecycle, chorused wavecycle,
6069 asynchronous granular, three FM modes, waveshaper, noise, PADsynth, and phase
6070 distortion.
6071@item 10 filter modes.
6072@item flexible modulation and mixdown options, plus effects.
6073@end enumerate
6074")
6075 (license license:gpl2+)))
6076
6077(define-public libdiscid
6078 (package
6079 (name "libdiscid")
6080 (version "0.6.5")
6081 (source
6082 (origin
6083 (method url-fetch)
6084 (uri (string-append
6085 "http://ftp.musicbrainz.org/pub/musicbrainz/libdiscid/libdiscid-"
6086 version ".tar.gz"))
6087 (sha256
6088 (base32 "0c6mq9wd0jy03k69df0ba3dywi75gjy0wvq5wa7l2dkkw29v9nvj"))))
6089 (arguments
6090 (list
6091 #:modules '((guix build cmake-build-system)
6092 ((guix build gnu-build-system) #:prefix gnu:)
6093 (guix build utils))
6094 #:phases
6095 #~(modify-phases %standard-phases
6096 (replace 'check (assoc-ref gnu:%standard-phases 'check)))))
6097 (build-system cmake-build-system)
6098 (home-page "https://musicbrainz.org/doc/libdiscid")
6099 (synopsis "Disc id reader library")
6100 (description "libdiscid is a C library for creating MusicBrainz and freedb
6101disc IDs from audio CDs. It reads a CD's table of contents (TOC) and generates
6102an identifier which can be used to lookup the CD at MusicBrainz. Additionally,
6103it provides a submission URL for adding the disc ID to the database and gathers
6104ISRCs and the MCN (=UPC/EAN) from disc.")
6105 (license license:lgpl2.1+)))
6106
6107(define-public python-discid
6108 (package
6109 (name "python-discid")
6110 (version "1.1.1")
6111 (source
6112 (origin
6113 (method url-fetch)
6114 (uri (pypi-uri "discid" version))
6115 (sha256
6116 (base32 "1fgp67nhqlbvhhwrcxq5avil7alpzw4s4579hlyvxzbphdnbz8vq"))))
6117 (build-system pyproject-build-system)
6118 (arguments
6119 (list
6120 #:test-flags
6121 #~(list "-k" (string-join
6122 (list "not test_read_features"
6123 "test_read_put"
6124 "test_read_simple")
6125 " and not "))
6126 #:phases
6127 #~(modify-phases %standard-phases
6128 (add-before 'build 'set-libdiscid
6129 (lambda* (#:key inputs #:allow-other-keys)
6130 (let ((discid (search-input-file inputs "/lib/libdiscid.so.0")))
6131 (substitute* "discid/libdiscid.py"
6132 (("lib_name = (.*)$" all name)
6133 (string-append "lib_name = \"" discid "\"\n")))))))))
6134 (native-inputs (list python-pytest python-setuptools))
6135 (inputs (list libdiscid))
6136 (home-page "https://python-discid.readthedocs.io/")
6137 (synopsis "Python bindings for Libdiscid")
6138 (description
6139 "This package provides Python bindings for the Libdiscid library. The
6140main purpose is the calculation of @url{https://musicbrainz.org/doc/Disc%20ID,
6141Disc IDs} for use with the MusicBrainz database. Additionally the disc
6142@dfn{Media Catalog Number} (MCN) and track @dfn{International Standard
6143Recording Code} (ISRC) can be extracted.}")
6144 (license license:lgpl3+)))
6145
6146(define-public libmusicbrainz
6147 ;; The latest release is more than a decade old, doesn't build with the
6148 ;; latest libxml2 release.
6149 (let ((commit "4efbed3afae11ef68281816088d7cf3d0f704dfe")
6150 (revision "0"))
6151 (package
6152 (name "libmusicbrainz")
6153 (version (git-version "5.1.0" revision commit))
6154 (source
6155 (origin
6156 (method git-fetch)
6157 (uri (git-reference
6158 (url "https://github.com/metabrainz/libmusicbrainz")
6159 (commit commit)))
6160 (file-name (git-file-name name version))
6161 (sha256
6162 (base32
6163 "1h1q0gg3xzhw115ifr5ja9gbd2k6ggkpm2f4sdqp313wp3lj86g9"))))
6164 (build-system cmake-build-system)
6165 (arguments
6166 `(#:phases
6167 (modify-phases %standard-phases
6168 (add-after 'unpack 'fix-build
6169 (lambda _
6170 (substitute* "src/CMakeLists.txt"
6171 (("\\*.inc") ""))))
6172 (replace 'check
6173 (lambda _
6174 ;; requires network connections
6175 ;; (invoke "tests/mbtest")
6176 (invoke "tests/ctest"))))))
6177 (inputs (list neon libxml2))
6178 (native-inputs (list pkg-config))
6179 (home-page "https://musicbrainz.org/doc/libmusicbrainz")
6180 (synopsis "MusicBrainz client library")
6181 (description "The MusicBrainz Client Library (libmusicbrainz), also known as
6182mb_client, is a development library geared towards developers who wish to add
6183MusicBrainz lookup capabilities to their applications.")
6184 (license license:lgpl2.1+))))
6185
6186(define-public perl-musicbrainz-discid
6187 (package
6188 (name "perl-musicbrainz-discid")
6189 (version "0.06")
6190 (source (origin
6191 (method url-fetch)
6192 (uri (string-append
6193 "mirror://cpan/authors/id/N/NJ/NJH/MusicBrainz-DiscID-"
6194 version ".tar.gz"))
6195 (sha256
6196 (base32
6197 "1azc91jnwa3gdmy9pc8mflakgvsvf69ywwlqllxmdzwpk386w2xs"))))
6198 (build-system perl-build-system)
6199 (native-inputs (list pkg-config which))
6200 (inputs (list libdiscid))
6201 (home-page "https://metacpan.org/release/MusicBrainz-DiscID")
6202 (synopsis "Perl interface to the MusicBrainz libdiscid library")
6203 (description
6204 "The @code{MusicBrainz::DiscID} module is a Perl interface to the
6205MusicBrainz libdiscid library, allowing you to manipulate digital audio
6206compact disc (CDDA) identifiers.")
6207 (license license:gpl2)))
6208
6209(define-public perl-webservice-musicbrainz
6210 (package
6211 (name "perl-webservice-musicbrainz")
6212 (version "1.0.7")
6213 (source (origin
6214 (method url-fetch)
6215 (uri (string-append
6216 "mirror://cpan/authors/id/B/BF/BFAIST/WebService-MusicBrainz-"
6217 version ".tar.gz"))
6218 (sha256
6219 (base32
6220 "08aahiyk2gr7r3lfn5gpamhziy448g9139j7lfjsjhbm67q5an3d"))))
6221 (build-system perl-build-system)
6222 (arguments
6223 ;; Tests try to connect to http://musicbrainz.org.
6224 '(#:tests? #f))
6225 (native-inputs
6226 (list perl-module-build))
6227 (propagated-inputs
6228 (list perl-mojolicious))
6229 (home-page "https://metacpan.org/release/WebService-MusicBrainz")
6230 (synopsis "Web service API to the MusicBrainz database")
6231 (description
6232 "This module searches the MusicBrainz database through their web service
6233at @code{musicbrainz.org}.")
6234 (license license:perl-license)))
6235
6236(define-public clyrics
6237 (package
6238 (name "clyrics")
6239 (version "0.17")
6240 (source
6241 (origin
6242 (method git-fetch)
6243 (uri (git-reference
6244 (url "https://github.com/trizen/clyrics")
6245 (commit version)))
6246 (file-name (git-file-name name version))
6247 (sha256
6248 (base32 "1np1rs6wl592smzy6b04adc38wa2b00fsy973dpv5bai64slrq43"))))
6249 (build-system trivial-build-system)
6250 (inputs
6251 (list bash ; for the wrapped program
6252 perl
6253 perl-www-mechanize
6254 perl-lwp-protocol-https
6255 ;; Required or else LWP will fail with "GET https://www.google.com/ ==>
6256 ;; 500 Can't verify SSL peers without knowing which Certificate
6257 ;; Authorities to trust".
6258 perl-mozilla-ca))
6259 (arguments
6260 `(#:modules ((guix build utils))
6261 #:builder (begin
6262 (use-modules (guix build utils)
6263 (ice-9 match)
6264 (srfi srfi-26))
6265 (let* ((source (assoc-ref %build-inputs "source"))
6266 (output (assoc-ref %outputs "out")))
6267 (setenv "PATH"
6268 (string-append
6269 (assoc-ref %build-inputs "bash") "/bin" ":"
6270 (assoc-ref %build-inputs "perl") "/bin" ":"))
6271 (copy-recursively source (getcwd))
6272 (patch-shebang "clyrics")
6273 (substitute* "clyrics"
6274 (("/usr/share") output))
6275 (install-file "clyrics" (string-append output "/bin"))
6276 (wrap-program (string-append output "/bin/clyrics")
6277 `("PERL5LIB" ":" =
6278 ,(delete
6279 ""
6280 (map (match-lambda
6281 (((? (cut string-prefix? "perl-" <>) name) . dir)
6282 (string-append dir "/lib/perl5/site_perl"))
6283 (_ ""))
6284 %build-inputs))))
6285 (copy-recursively "plugins" (string-append output "/clyrics"))
6286 #t))))
6287 (home-page "https://github.com/trizen/clyrics")
6288 (synopsis "Extensible lyrics fetcher")
6289 (description
6290 "Clyrics is an extensible command-line tool to fetch the lyrics of songs.
6291It can be used in daemon mode along with the Music-on-Console (MOC) and cmus
6292console music players.")
6293 (license license:gpl3+)))
6294
6295(define-public fmit
6296 (package
6297 (name "fmit")
6298 (version "1.2.14")
6299 (source (origin
6300 (method git-fetch)
6301 (uri (git-reference
6302 (url "https://github.com/gillesdegottex/fmit/")
6303 (commit (string-append "v" version))))
6304 (file-name (git-file-name name version))
6305 (sha256
6306 (base32
6307 "1q062pfwz2vr9hbfn29fv54ip3jqfd9r99nhpr8w7mn1csy38azx"))))
6308 (build-system gnu-build-system)
6309 (arguments
6310 '(#:phases
6311 (modify-phases %standard-phases
6312 (delete 'configure)
6313 (add-before 'build 'qmake
6314 (lambda _
6315 (let ((out (assoc-ref %outputs "out")))
6316 (invoke "qmake"
6317 "fmit.pro"
6318 (string-append "PREFIX=" out)
6319 (string-append "PREFIXSHORTCUT=" out)
6320 "CONFIG+=acs_qt acs_alsa acs_jack acs_portaudio"))))
6321 (add-after 'install 'wrap-executable
6322 (lambda* (#:key inputs outputs #:allow-other-keys)
6323 (let ((out (assoc-ref outputs "out")))
6324 (wrap-program (string-append out "/bin/fmit")
6325 `("QT_PLUGIN_PATH" ":" prefix
6326 ,(map (lambda (label)
6327 (string-append (assoc-ref inputs label)
6328 "/lib/qt5/plugins"))
6329 '("qtbase" "qtmultimedia" "qtsvg")))
6330 `("QML2_IMPORT_PATH" ":" prefix
6331 ,(map (lambda (label)
6332 (string-append (assoc-ref inputs label)
6333 "/lib/qt5/qml"))
6334 '("qtmultimedia"))))))))))
6335 (inputs
6336 (list alsa-lib
6337 bash-minimal
6338 fftw
6339 jack-1
6340 portaudio
6341 qtbase-5
6342 qtmultimedia-5
6343 qtsvg-5))
6344 (native-inputs
6345 (list gettext-minimal hicolor-icon-theme itstool qttools-5))
6346 (synopsis "Musical instrument tuner")
6347 (description "FMIT is a graphical utility for tuning musical instruments,
6348with error and volume history, and advanced features.")
6349 (home-page "https://gillesdegottex.github.io/fmit/")
6350 ;; Most of the code is under GPL2+, but some abstract or helper classes
6351 ;; are under LGPL2.1.
6352 (license (list license:gpl2+ license:lgpl2.1))))
6353
6354(define-public pragha
6355 (package
6356 (name "pragha")
6357 (version "1.3.4")
6358 (source (origin
6359 (method url-fetch)
6360 (uri (string-append "https://github.com/pragha-music-player/pragha/"
6361 "releases/download/v" version "/pragha-" version
6362 ".tar.bz2"))
6363 (sha256
6364 (base32
6365 "19kbhq99bkimx3aqrdzln0vlr4slkpx6kq66j731jvqyq76nlkp5"))))
6366 (build-system glib-or-gtk-build-system)
6367 (native-inputs
6368 (list intltool pkg-config))
6369 (inputs
6370 (list bash-minimal
6371 glib
6372 grilo
6373 gstreamer
6374 gst-plugins-base
6375 gst-plugins-good
6376 gtk+
6377 libcddb
6378 libcdio
6379 libcdio-paranoia
6380 libgudev
6381 libnotify
6382 libpeas
6383 libsoup
6384 sqlite
6385 taglib))
6386 (arguments
6387 `(#:phases
6388 (modify-phases %standard-phases
6389 (add-after 'install 'wrap-program
6390 (lambda* (#:key inputs outputs #:allow-other-keys)
6391 (let ((out (assoc-ref outputs "out"))
6392 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
6393 (wrap-program (string-append out "/bin/pragha")
6394 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix
6395 (,gst-plugin-path)))))))))
6396 (home-page "https://pragha-music-player.github.io")
6397 (synopsis "Music player")
6398 (description "Pragha is a lightweight music player based on Gtk and
6399sqlite. It is constructed to be fast, light, and simultaneously tries to be
6400complete without obstructing your daily work.")
6401 (license license:gpl3+)))
6402
6403(define-public playerctl
6404 (package
6405 (name "playerctl")
6406 (version "2.4.1")
6407 (source (origin
6408 (method git-fetch)
6409 (uri (git-reference
6410 (url "https://github.com/altdesktop/playerctl")
6411 (commit (string-append "v" version))))
6412 (file-name (git-file-name name version))
6413 (sha256
6414 (base32
6415 "0ij065blj3h5v6iivvpmgh1095vicj1nc7hp1nhlhpqagd98l89s"))))
6416 (build-system meson-build-system)
6417 (arguments
6418 `(#:configure-flags '("-Dgtk-doc=false")))
6419 (native-inputs
6420 `(("glib:bin" ,glib "bin")
6421 ("pkg-config" ,pkg-config)
6422 ("gobject-introspection" ,gobject-introspection)))
6423 (synopsis "Control MPRIS-supporting media player applications")
6424 (description
6425 "Playerctl is a command-line utility and library for controlling media
6426players that implement the MPRIS D-Bus Interface Specification. Playerctl
6427makes it easy to bind player actions, such as play and pause, to media keys.
6428You can also get metadata about the playing track such as the artist and title
6429for integration into status line generators or other command-line tools.")
6430 (home-page "https://github.com/altdesktop/playerctl")
6431 (license license:lgpl3+)))
6432
6433(define-public artyfx
6434 (package
6435 (name "artyfx")
6436 (version "1.3.1")
6437 (source (origin
6438 (method git-fetch)
6439 (uri (git-reference
6440 (url
6441 "https://github.com/openAVproductions/openAV-ArtyFX")
6442 (commit (string-append "release-" version))))
6443 (file-name (git-file-name name version))
6444 (sha256
6445 (base32
6446 "0cxikdnxgjk5gp6kmml4dx2jy2cy4x0c837h7bwraj2pfz0nfgqq"))))
6447 (build-system cmake-build-system)
6448 (arguments
6449 `(#:tests? #f ; no tests included
6450 #:phases
6451 (modify-phases %standard-phases
6452 (add-after 'unpack 'remove-architecture-specific-flags
6453 (lambda _
6454 (substitute* "CMakeLists.txt"
6455 (("-msse2 -mfpmath=sse") ""))
6456 #t)))))
6457 (inputs
6458 (list cairo libsndfile))
6459 (native-inputs
6460 (list pkg-config lv2))
6461 (home-page "http://openavproductions.com/artyfx/")
6462 (synopsis "Audio effect LV2 plugin bundle")
6463 (description "ArtyFX is an LV2 plugin bundle of artistic real-time audio
6464effects. It contains a bitcrusher, delay, distortion, equalizer, compressor,
6465and reverb.")
6466 (license license:gpl2+)))
6467
6468(define-public lsp-plugins
6469 (package
6470 (name "lsp-plugins")
6471 (version "1.2.25")
6472 (source
6473 (origin
6474 (method url-fetch)
6475 (uri (string-append "https://github.com/lsp-plugins/lsp-plugins"
6476 "/releases/download/" version
6477 "/lsp-plugins-src-" version ".tar.gz"))
6478 (sha256
6479 (base32 "0wr6wfq8qix39kcvlqivjbch0qnlxcpv8lsfq9xb9v25yh6vfad8"))))
6480 (build-system gnu-build-system)
6481 (arguments
6482 (list
6483 #:make-flags
6484 #~(list (string-append "CC=" #$(cc-for-target)))
6485 #:phases
6486 #~(modify-phases %standard-phases
6487 (replace 'configure
6488 (lambda _
6489 (invoke "make" "config"
6490 "STRICT=1"
6491 "TEST=1"
6492 "FEATURES=clap doc jack ladspa lv2 ui vst2 xdg"
6493 (string-append "PREFIX=" #$output)
6494 (string-append "ETCDIR=" #$output "/etc"))))
6495 (replace 'check
6496 (lambda* (#:key tests? #:allow-other-keys)
6497 (when tests?
6498 (invoke ".build/target/lsp-plugin-fw/lsp-plugins-test" "utest"))))
6499 (add-after 'install 'move-large-subdirs
6500 (lambda _
6501 (define (move-to-output output path)
6502 (let ((source (string-append #$output path))
6503 (target (string-append output path)))
6504 (mkdir-p (dirname target))
6505 (rename-file source target)))
6506 (move-to-output #$output:doc "/share/doc") ; 29MB
6507 (move-to-output #$output:lv2 "/lib/lv2") ; 32MB
6508 (move-to-output #$output:bin "/bin") ; Avoid cluttering xdg menu
6509 (move-to-output #$output:bin "/share")
6510 (move-to-output #$output:bin "/etc"))))))
6511 (inputs
6512 (list cairo
6513 freetype
6514 jack-2
6515 libsndfile
6516 libx11
6517 libxrandr
6518 mesa))
6519 (native-inputs (list pkg-config php))
6520 (outputs '("out" "doc" "lv2" "debug"))
6521 (synopsis "Audio plugin collection")
6522 (description "LSP (Linux Studio Plugins) is a collection of audio
6523plugins available as LADSPA/LV2 plugins and as standalone JACK
6524applications.")
6525 (home-page "https://lsp-plug.in/")
6526 (license license:lgpl3)))
6527
6528(define-public sherlock-lv2
6529 (package
6530 (name "sherlock-lv2")
6531 (version "0.24.0")
6532 (source
6533 (origin
6534 (method url-fetch)
6535 (uri (string-append
6536 "https://git.open-music-kontrollers.ch/lv2/"
6537 "sherlock.lv2/snapshot/sherlock.lv2-"
6538 version ".tar.xz"))
6539 (sha256
6540 (base32
6541 "08gjfx7vrsx9zvj04j8cr3vscxmq6jr2hbdi6dfgp1l1dnnpxsgq"))))
6542 (build-system meson-build-system)
6543 (inputs
6544 (list glu libx11 mesa sratom))
6545 (native-inputs
6546 (list flex pkg-config))
6547 (synopsis "Investigative LV2 plugin bundle")
6548 (description "The Sherlock plugin bundle contains LV2 plugins for
6549visualizing LV2 atom, MIDI and OSC events. They can be used for monitoring
6550and debugging of event signal flows inside plugin graphs.")
6551 (home-page "https://open-music-kontrollers.ch/lv2/sherlock/")
6552 (license license:artistic2.0)))
6553
6554(define-public foo-yc20
6555 (package
6556 (name "foo-yc20")
6557 (version "1.3.0")
6558 (source
6559 (origin
6560 (method url-fetch)
6561 (uri (string-append "https://github.com/sampov2/foo-yc20/releases/download/"
6562 version "/foo-yc20-" version ".tar.bz2"))
6563 (sha256
6564 (base32
6565 "1drzfyr7mzb58pdv0gsqkg6ds6kbgp6g25rrv1yya1611cljgvjh"))))
6566 (build-system gnu-build-system)
6567 (arguments
6568 (list
6569 #:make-flags
6570 #~(list (string-append "PREFIX=" #$output))
6571 #:tests? #f ; no automated test
6572 #:phases
6573 '(modify-phases %standard-phases
6574 (replace 'configure
6575 (lambda _
6576 (substitute* "Makefile"
6577 (("-mtune=native") "")
6578 (("-march=native") "")))))))
6579 (inputs
6580 (list cairo
6581 gtk+-2
6582 jack-1
6583 lv2))
6584 (native-inputs
6585 (list faust pkg-config))
6586 (home-page "https://foo-yc20.codeforcode.com/")
6587 (synopsis "Implementation of Yamaha YC-20 combo organ from 1969")
6588 (description "This is a Faust implementation of a 1969 designed Yamaha
6589combo organ, the YC-20. This package provides an LV2 plugin and a standalone
6590version. Processing for the organ is based on original schematics and
6591measurements from a working specimen. This instrument simulates the circutry
6592as a whole to realisticly reproduce the features and flaws of the real deal.")
6593 ;; Note that after 1.3.0 the license was changed.
6594 (license license:gpl3+)))
6595
6596(define-public fooyin
6597 (package
6598 (name "fooyin")
6599 (version "0.12.4")
6600 (source
6601 (origin
6602 (method git-fetch)
6603 (uri (git-reference
6604 (url "https://github.com/fooyin/fooyin")
6605 (commit (string-append "v" version))))
6606 (file-name (git-file-name name version))
6607 (sha256
6608 (base32 "0cikdp97dq969g63103p30r24apd2fql66imxpapf3c8rv5qy8pc"))))
6609 (build-system qt-build-system)
6610 (arguments
6611 (list
6612 #:configure-flags #~(list "-DBUILD_TESTING=ON")
6613 #:qtbase qtbase
6614 #:phases
6615 #~(modify-phases %standard-phases
6616 (replace 'check
6617 (lambda* (#:key parallel-tests? tests? #:allow-other-keys)
6618 (when tests?
6619 (invoke "ctest" "-j" (if parallel-tests?
6620 (number->string (parallel-job-count))
6621 "1")
6622 "--test-dir" "tests/")))))))
6623 (native-inputs (list googletest pkg-config qttools))
6624 (inputs (list alsa-lib
6625 ffmpeg
6626 icu4c
6627 kdsingleapplication
6628 pipewire
6629 qcoro-qt6
6630 qtsvg
6631 sdl2
6632 taglib
6633 zlib))
6634 (home-page "https://fooyin.org/")
6635 (synopsis "Customisable music player")
6636 (description "Fooyin is a customisable desktop music player. It combines
6637flexible playback, library management, playlists, and scripting tools in an
6638interface that can be rearranged from a blank canvas or adapted from preset
6639layouts. It's built around extensibility and supports plugins for widgets,
6640decoders, tag readers, DSPs, and integrations, and includes FooScript for
6641advanced display formatting, queries, autoplaylists, and widget behaviour.")
6642 (license license:gpl3+)))
6643
6644(define-public spectacle-analyzer
6645 (package
6646 (name "spectacle-analyzer")
6647 (version "2.0")
6648 (source
6649 (origin
6650 (method git-fetch)
6651 (uri (git-reference
6652 (url "https://github.com/jpcima/spectacle")
6653 (commit (string-append "v" version))
6654 ;; Bundles a specific commit of the DISTRHO plugin framework.
6655 (recursive? #t)))
6656 (file-name (git-file-name name version))
6657 (sha256
6658 (base32
6659 "0146mvq1amdmz0cgfm1zr8416cvl8cm5z6s426lhsy00ahw0knrc"))))
6660 (build-system gnu-build-system)
6661 (arguments
6662 `(#:tests? #f ; no check target
6663 #:make-flags
6664 (list "CC=gcc"
6665 (string-append "PREFIX=" (assoc-ref %outputs "out")))
6666 #:phases
6667 (modify-phases %standard-phases
6668 (delete 'configure))))
6669 (native-inputs
6670 (list pkg-config xxd))
6671 (inputs
6672 (list cairo
6673 fftw
6674 fftwf
6675 jack-1
6676 lv2
6677 mesa))
6678 (synopsis "Realtime graphical spectrum analyzer")
6679 (description "Spectacle is a real-time spectral analyzer using the
6680short-time Fourier transform, available as LV2 audio plugin and JACK client.")
6681 (home-page "https://github.com/jpcima/spectacle")
6682 ;; The project is licensed under the ISC license, and files in
6683 ;; sources/plugin carry the Expat license.
6684 (license (list license:isc license:expat))))
6685
6686(define-public x42-plugins
6687 (package
6688 (name "x42-plugins")
6689 (version "20230701")
6690 (source
6691 (origin
6692 (method url-fetch)
6693 (uri
6694 (string-append "https://gareus.org/misc/x42-plugins/x42-plugins-"
6695 version ".tar.xz"))
6696 (sha256
6697 (base32 "1why4mkaxbd0p7qr4jrx3d903wnw2l8gya8v3y32z2vjz31w7jqn"))))
6698 (build-system gnu-build-system)
6699 (arguments
6700 (list
6701 #:tests? #f ; no "check" target
6702 #:make-flags
6703 #~(list (string-append "PREFIX=" #$output)
6704 "LIBZITACONVOLVER=-lzita-convolver"
6705 (string-append "FONTFILE="
6706 #$(this-package-native-input "font-dejavu")
6707 "/share/fonts/truetype/DejaVuSans-Bold.ttf")
6708 (string-append "CC=" #$(cc-for-target)))
6709 #:phases
6710 #~(modify-phases %standard-phases
6711 (delete 'configure))))
6712 (inputs
6713 (list cairo
6714 fftwf
6715 ftgl
6716 glib
6717 glu
6718 hicolor-icon-theme
6719 jack-1
6720 libltc
6721 libsamplerate
6722 libx11
6723 pango
6724 zita-convolver))
6725 (native-inputs
6726 (list help2man liblo lv2 font-dejavu pkg-config))
6727 (synopsis "Collection of LV2/JACK audio/MIDI processing plugins")
6728 (description "x42-plugins is a collection of over 80 cross-platform LV2
6729audio and MIDI plugins that can also run as standalone JACK applications.")
6730 (home-page "https://x42-plugins.com/x42/")
6731 (license license:gpl2+)))
6732
6733(define-public xuidesigner
6734 (package
6735 (name "xuidesigner")
6736 (version "0.9")
6737 (source (origin
6738 (method git-fetch)
6739 (uri (git-reference
6740 (url "https://github.com/brummer10/XUiDesigner")
6741 (commit (string-append "v" version))
6742 ;; For libxputty
6743 (recursive? #true)))
6744 (file-name (git-file-name name version))
6745 (sha256
6746 (base32 "1ap6g2j9lr4x9gpnavdhs4qa3z4dw100xgknpi6ysj0rmzc220mi"))))
6747 (build-system gnu-build-system)
6748 (arguments
6749 (list
6750 #:tests? #f ;no "check" target
6751 #:make-flags
6752 #~(list (string-append "PREFIX=" #$output)
6753 (string-append "CC=" #$(cc-for-target)))
6754 #:phases
6755 #~(modify-phases %standard-phases
6756 (delete 'configure))))
6757 (inputs
6758 (list cairo libx11 lilv))
6759 (native-inputs
6760 (list pkg-config which xxd))
6761 (home-page "https://github.com/brummer10/XUiDesigner")
6762 (synopsis "GUI generator tool to create X11 UIs for LV2 plugins")
6763 (description "XUiDesigner parses an LV2 plugin's ttl file and generates
6764the needed controller widgets. The created GUI can be saved as UI-Bundle,
6765which then could be built and installed. For later editing of the UI, a JSON
6766file is added, which you could load per drag 'n drop into XUiDesigner.")
6767 (license license:bsd-0)))
6768
6769(define-public zam-plugins
6770 (package
6771 (name "zam-plugins")
6772 (version "4.5")
6773 (source
6774 (origin
6775 (method git-fetch)
6776 (uri
6777 (git-reference
6778 (url "https://github.com/zamaudio/zam-plugins")
6779 (commit version)
6780 ;; Recursive to fetch the DISTRHO plugin framework. This
6781 ;; framework is intended to be included in the sources
6782 ;; and not to be used as a library.
6783 (recursive? #t)))
6784 (file-name (git-file-name name version))
6785 (sha256
6786 (base32 "1a5i31rg1rd8phvgj2f6wv1jkagc5cynj2plzq7rm818hkykdf52"))))
6787 (build-system gnu-build-system)
6788 (arguments
6789 (list
6790 #:tests? #f ;no "check" target
6791 #:make-flags
6792 #~(list (string-append "CC=" #$(cc-for-target))
6793 (string-append "PREFIX=" #$output)
6794 "HAVE_ZITA_CONVOLVER=true")
6795 #:phases
6796 #~(modify-phases %standard-phases
6797 (delete 'configure))))
6798 (inputs
6799 (list fftwf
6800 jack-1 ;for the standalone JACK application
6801 liblo
6802 libsamplerate
6803 mesa
6804 zita-convolver))
6805 (native-inputs
6806 (list ladspa lv2 pkg-config))
6807 (synopsis "Collection of audio processing plugins")
6808 (description
6809 "Zam plugins is a collection of audio processing plugins in the LADSPA,
6810LV2 and VST2 formats, as well as standalone JACK versions. The collection
6811includes ZaMaximX2, ZamAutoSat, ZamComp, ZamCompX2, ZamEQ2, ZamGEQ31,
6812ZamHeadX2, ZamPhono, ZamGate, ZamGateX2, ZamTube, ZamDelay, ZamDynamicEQ,
6813ZaMultiComp, ZaMultiCompX2 and ZamSynth.")
6814 (home-page "https://www.zamaudio.com/?p=976")
6815 (license license:gpl2+)))
6816
6817(define-public geonkick
6818 (package
6819 (name "geonkick")
6820 (version "3.6.2")
6821 (source
6822 (origin
6823 (method git-fetch)
6824 (uri (git-reference
6825 (url "https://codeberg.org/Geonkick-Synthesizer/geonkick")
6826 (commit (string-append "v" version))))
6827 (file-name (git-file-name name version))
6828 (sha256
6829 (base32 "0817hsfvgri315aw0y06rzjcw96lhgxjc37rbxqagk3ciw0naj6n"))))
6830 (build-system cmake-build-system)
6831 (arguments
6832 `(#:tests? #f ;no tests included
6833 #:configure-flags
6834 (list (string-append "-DGKICK_REDKITE_SDK_PATH="
6835 (assoc-ref %build-inputs "redkite"))
6836 (string-append "-DCMAKE_INSTALL_PREFIX="
6837 (assoc-ref %outputs "out")))))
6838 (inputs
6839 (list hicolor-icon-theme
6840 jack-1 ;for the standalone JACK application
6841 libsndfile
6842 libx11
6843 redkite
6844 rapidjson))
6845 (native-inputs
6846 (list lv2 pkg-config sord))
6847 (synopsis "Percussion synthesizer")
6848 (description "Geonkick is a synthesizer that can synthesize elements
6849of percussion such as kicks, snares, hit-hats, shakers, claps and sticks.
6850It can also play and mix samples.")
6851 (home-page "https://geonkick.org")
6852 (license license:gpl3+)))
6853
6854(define-public mamba
6855 (package
6856 (name "mamba")
6857 (version "2.6")
6858 (source
6859 (origin
6860 (method git-fetch)
6861 (uri
6862 (git-reference
6863 (url "https://github.com/brummer10/Mamba")
6864 (commit (string-append "v" version))
6865 (recursive? #t))) ; references specific commit of libxputty
6866 (file-name (git-file-name name version))
6867 (sha256
6868 (base32
6869 "1dndyz3dza4k1a4abd53h9fr07ssmm5b7plbh4a74b3mf0dafpsb"))))
6870 (build-system gnu-build-system)
6871 (arguments
6872 (list #:tests? #f ; no "check" target
6873 #:make-flags
6874 #~(list (string-append "PREFIX=" #$output)
6875 (string-append "CC=" #$(cc-for-target)))
6876 #:phases
6877 #~(modify-phases %standard-phases
6878 (delete 'configure))))
6879 (inputs
6880 (list alsa-lib
6881 cairo
6882 fluidsynth
6883 jack-2
6884 liblo
6885 libsigc++-2
6886 libsmf
6887 libx11))
6888 (native-inputs
6889 (list pkg-config xxd))
6890 (home-page "https://github.com/brummer10/Mamba")
6891 (synopsis "Virtual MIDI keyboard and MIDI file player/recorder for JACK")
6892 (description "Mamba is a virtual MIDI keyboard and MIDI file
6893player/recorder for the JACK Audio Connection Kit. It comes with predefined
6894keymaps for QWERTZ, QWERTY and AZERTY keyboards and also allows custom
6895ones.")
6896 (license license:bsd-0)))
6897
6898(define-public distrho-ports
6899 ;; From 2021-03-15 to this commit various important changes are made
6900 ;; including improved directory structure and updated JUCE versions.
6901 (let ((commit "f2dbaded0a05732e3499fa374a586e5b32370da5")
6902 (revision "0"))
6903 (package
6904 (name "distrho-ports")
6905 (version (git-version "2021-03-15" revision commit))
6906 (source (origin
6907 (method git-fetch)
6908 (uri (git-reference
6909 (url "https://github.com/DISTRHO/DISTRHO-Ports")
6910 (commit commit)))
6911 (file-name (git-file-name name version))
6912 (sha256
6913 (base32
6914 "1rrnqwask2qg05ynisk6bpj118cl7c3w53rqrfg5x3sx847rjjgc"))
6915 (modules '((guix build utils)))
6916 (snippet
6917 '(begin
6918 ;; Delete third party libraries, libraries without
6919 ;; licenses, and unneeded libraries.
6920 (for-each
6921 delete-file-recursively
6922 (list "ports-juce5/arctican-function" ;no license
6923 "ports-juce5/arctican-pilgrim" ;no license
6924 "ports-juce5/drowaudio-tremolo" ;no license
6925 "ports-juce5/juce-demo-host" ;not used
6926 "ports-juce5/juce-demo-plugin" ;not used
6927 "ports-juce5/temper/source/faust" ;bundled
6928 "ports-juce6/chow" ;not used
6929 "ports-juce6/swankyamp/thirdparty" ;bundled
6930 "ports-juce6/vitalium/third_party")) ;bundled
6931 ;; Exclude them from building.
6932 (substitute* (find-files "." "meson.build$")
6933 (("'arctican") "#'arctican")
6934 (("'drowaudio-tremolo") "#'drowaudio-tremolo")
6935 (("'third") "#'third"))
6936 ;; Use system provided "nlohmann/json.hpp".
6937 (with-directory-excursion "ports-juce6/vitalium/source"
6938 (substitute*
6939 (list "common/line_generator.h"
6940 "common/load_save.h"
6941 "common/tuning.h"
6942 "common/wavetable/wavetable_component.h"
6943 "common/wavetable/wavetable_creator.h"
6944 "common/wavetable/wavetable_keyframe.h"
6945 "interface/editor_sections/save_section.h"
6946 "interface/look_and_feel/skin.h"
6947 "synthesis/producers/sample_source.h")
6948 (("json/json\\.h") "nlohmann/json.hpp")))))))
6949 (build-system meson-build-system)
6950 (arguments
6951 (list
6952 #:tests? #f ;no test target
6953 #:configure-flags
6954 #~'("-Dcpp_args=-fpermissive") ;from `unsigned char*' to `char*'
6955 #:phases
6956 #~(modify-phases %standard-phases
6957 (add-after 'unpack 'patch-juce-fonts
6958 (lambda* (#:key inputs #:allow-other-keys)
6959 (let ((fonts (search-input-directory inputs "/etc/fonts")))
6960 (with-directory-excursion "libs"
6961 (substitute* (find-files "." "juce_linux_Fonts.cpp$")
6962 (("/usr/share/fonts") fonts)))))))))
6963 (native-inputs
6964 (list cmake-minimal
6965 concurrentqueue
6966 faust
6967 nlohmann-json
6968 optional-lite
6969 pkg-config))
6970 (inputs
6971 (list alsa-lib
6972 fontconfig
6973 freetype
6974 fftwf
6975 libx11
6976 libxcursor
6977 libxext
6978 libxrender
6979 mesa))
6980 (home-page "https://github.com/DISTRHO/DISTRHO-Ports")
6981 (synopsis "Audio plugins and LV2 ports")
6982 (description
6983 "This package contains LV2 ports of the following audio plugins:
6984@itemize
6985@item Dexed,
6986@item dRowAudio plugins (Distortion, Distortion Shaper, Flanger, Reverb,
6987 Tremolo),
6988@item DrumSynth,
6989@item EasySSP,
6990@item EQinox,
6991@item HiReSam,
6992@item JuceOPL,
6993@item KlangFalter,
6994@item LUFS Meter,
6995@item Luftikus,
6996@item Obxd,
6997@item PitchedDelay,
6998@item ReFine,
6999@item StereoSourceSeperation,
7000@item Swanky Amp,
7001@item TAL plugins (Dub-3, Filter, Filter-2, Noize Mak3r, Reverb, Reverb-II,
7002 Reverb-III, Vocoder-II),
7003@item Temper,
7004@item Vex,
7005@item Vitalium, and
7006@item Wolpertinger.
7007@end itemize")
7008 (license
7009 (list license:asl2.0 ;used by Dexed
7010 ;; mingw-std-threads and EasySSP (for dsp-utility) use FreeBSD.
7011 license:bsd-2
7012 ;; Licenses for dRowAudio is not found in this repository, but
7013 ;; the upstream project is licensed under MIT:
7014 ;; https://github.com/drowaudio/drowaudio.
7015 ;; Luftikus, PitchedDelay and ReFine are ported from lkjb plugins
7016 ;; which is licensed under MIT:
7017 ;; https://github.com/lkjbdsp/lkjb-plugins.
7018 license:expat
7019 (license:fsf-free ;used by Temper
7020 "file:///ports-juce5/temper/source/TemperDsp.hpp")
7021 ;; juce-plugin, LUFS Meter, Obxd and TAL plugins use GPLv2.
7022 license:gpl2
7023 ;; License for Wolpertinger is not found in this repository, but
7024 ;; the upstream project is licensed under GPLv2+:
7025 ;; https://github.com/jkroll20/wolpertinger.
7026 ;; dRowAudio plugins, juced, HiReSam and Vex use this license.
7027 ;; Packages using files from JUCETICE project use this license.
7028 license:gpl2+
7029 ;; License for EasySSP is not found in this repository, but the
7030 ;; upstream project is licensed under GPLv3:
7031 ;; https://github.com/automatl/audio-dsp-multi-visualize.
7032 license:gpl3 ;used by JUCE
7033 ;; Dexed, Swanky Amp, Vitalium and KlangFalter use GPLv3+.
7034 license:gpl3+
7035 ;; License for lv2-ttl-generator is not found in this repository,
7036 ;; but is a part of DPF-Plugins and is licensed under ISC:
7037 ;; https://github.com/DISTRHO/DPF.
7038 ;; JUCE uses this license for juce_audio_basics,
7039 ;; juce_audio_devices, juce_blocks_basics, juce_core and
7040 ;; juce_events.
7041 license:isc
7042 license:lgpl2.0+ ;used by DrumSynth and EQinox
7043 license:lgpl2.1+ ;used by SoundTouch and juce-opl
7044 ;; StereoSourceSeperation uses a non-copyleft license.
7045 (license:non-copyleft
7046 "file:///ports-juce5/stereosourceseparation/\
7047source/kiss_fft/kiss_fft.c")
7048 ;; dRowAudio uses a non-copyleft license for curl.
7049 (license:non-copyleft
7050 "file:///libs/drowaudio/source/dRowAudio/network/\
7051curl/include/curl/curl.h")
7052 license:wtfpl2))))) ;used by dRowAudio for FFTReal
7053
7054(define-public dpf-plugins
7055 (package
7056 (name "dpf-plugins")
7057 (version "1.7")
7058 (source
7059 (origin
7060 (method git-fetch)
7061 (uri
7062 (git-reference
7063 (url "https://github.com/DISTRHO/DPF-Plugins")
7064 (commit (string-append "v" version))))
7065 (file-name (git-file-name name version))
7066 (sha256
7067 (base32 "082f3f78x6k58j78mqr57qhw40f5s8fmcbkhl36nn3vbcsa07bzg"))))
7068 (build-system gnu-build-system)
7069 (arguments
7070 `(#:tests? #f ; no "check" target
7071 #:make-flags
7072 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
7073 (string-append "CC=" ,(cc-for-target)))
7074 #:phases
7075 (modify-phases %standard-phases
7076 (delete 'configure))))
7077 (inputs
7078 (list cairo
7079 liblo ; for dssi plugins
7080 jack-1 ; for standalone applications
7081 mesa))
7082 (native-inputs
7083 (list pkg-config dssi lv2))
7084 (home-page "https://github.com/DISTRHO/DPF-Plugins")
7085 (synopsis "Audio plugin collection")
7086 (description "Collection of audio plugins built with the DISTRHO Plugin
7087Framework (DPF) available in LADSPA, DSSI, LV2 and VST2 formats. This
7088package includes the following plugins: glBars, Kars, Max-Gen examples
7089(MaBitcrush, MaFreeverb, MaGigaverb, MaPitchshift), Mini-Series (3BandEQ,
70903BandSplitter, PingPongPan), ndc-Plugs (Amplitude Imposer, Cycle Shifter,
7091Soul Force), MVerb, Nekobi, and ProM.")
7092 ;; This package consists of several plugins refactored to use the
7093 ;; DISTHRO Plugin Framework (DPF). Different copyrights and licenses
7094 ;; apply to different plugins. The root LICENSE file has a table with
7095 ;; license information for each plugin and paths to each license
7096 (license (list license:isc license:gpl3 license:lgpl3 license:expat license:gpl2))))
7097
7098(define-public avldrums-lv2
7099 (package
7100 (name "avldrums-lv2")
7101 (version "0.7.3")
7102 (source
7103 (origin
7104 (method git-fetch)
7105 (uri (git-reference
7106 (url "https://github.com/x42/avldrums.lv2")
7107 (commit (string-append "v" version))
7108 ;; This plugin expects the robtk submodule's source files to be
7109 ;; there in order to build.
7110 (recursive? #t)))
7111 (file-name (git-file-name name version))
7112 (sha256
7113 (base32 "0bjg2wlnd04mlk123hsmacdbw9jiivn1f4qy3r5kpl9h727qg4h1"))))
7114 (build-system gnu-build-system)
7115 (arguments
7116 (list #:tests? #f ; no "check" target
7117 #:make-flags
7118 #~(list (string-append "PREFIX=" #$output)
7119 (string-append "CC=" #$(cc-for-target)))
7120 #:phases
7121 #~(modify-phases %standard-phases
7122 (delete 'configure)))) ; no configure script
7123 (inputs
7124 (list cairo dssi glu mesa pango))
7125 (native-inputs
7126 (list pkg-config lv2))
7127 (home-page "https://x42-plugins.com/x42/x42-avldrums")
7128 (synopsis "Drum sample player LV2 plugin dedicated to the AVLinux Drumkits")
7129 (description "AVLdrums is a drum sample player LV2 plugin dedicated to Glen
7130MacArthur's AVLdrums. This plugin provides a convenient way to sequence and mix
7131MIDI drums and comes as two separate drumkits: Black Pearl and Red Zeppelin.")
7132 (license license:gpl2+)))
7133
7134(define-public helm
7135 (package
7136 (name "helm")
7137 (version "0.9.0")
7138 (source
7139 (origin
7140 (method git-fetch)
7141 (uri
7142 (git-reference
7143 (url "https://github.com/mtytel/helm")
7144 (commit (string-append "v" version))))
7145 (file-name (git-file-name name version))
7146 (sha256
7147 (base32
7148 "17ys2vvhncx9i3ydg3xwgz1d3gqv4yr5mqi7vr0i0ca6nad6x3d4"))
7149 ;; Apply GCC 9 fixes from https://github.com/mtytel/helm/pull/233
7150 (patches (search-patches "helm-fix-gcc-9-build.patch"))))
7151 (build-system gnu-build-system)
7152 (arguments
7153 (list
7154 #:tests? #f ; no "check" target
7155 #:make-flags
7156 #~(list (string-append "DESTDIR=" #$output)
7157 "CXXFLAGS=-fpermissive" ; from ‘unsigned char*’ to ‘char*’
7158 "lv2" "standalone")
7159 #:phases
7160 #~(modify-phases %standard-phases
7161 (add-after 'unpack 'include-pnglib-code-and-remove-usr-from-paths
7162 (lambda _
7163 (substitute* (list "standalone/builds/linux/Makefile"
7164 "builds/linux/LV2/Makefile")
7165 (("JUCE_INCLUDE_PNGLIB_CODE=0") "JUCE_INCLUDE_PNGLIB_CODE=1"))
7166 (substitute* "Makefile"
7167 (("/usr") ""))))
7168 (add-after 'unpack 'fix-hardcoded-paths
7169 (lambda _
7170 (substitute* (list "src/common/load_save.cpp"
7171 "src/editor_sections/patch_browser.cpp")
7172 (("/usr") #$output))))
7173 (delete 'configure))))
7174 (inputs
7175 (list alsa-lib
7176 curl
7177 freetype
7178 hicolor-icon-theme
7179 jack-1
7180 libxcursor
7181 libxinerama
7182 mesa))
7183 (native-inputs
7184 (list lv2 pkg-config))
7185 (home-page "https://tytel.org/helm/")
7186 (synopsis "Polyphonic synth with lots of modulation")
7187 (description "Helm is a cross-platform polyphonic synthesizer available standalone
7188and as an LV2 plugin.")
7189 (license license:gpl3+)
7190 (properties '((lint-hidden-cpe-vendors . ("helm"))))))
7191
7192(define-public zrythm
7193 (package
7194 ;; Zrythm contains trademarks and comes with a trademark policy found in
7195 ;; TRADMARKS.md inside the release distribution. The trademark policy
7196 ;; allows verbatim re-distribution, and it also allows FSF-approved
7197 ;; distros to make necessary changes to integrate the software into the
7198 ;; distribution.
7199 (name "zrythm")
7200 (version "1.0.0-beta.4.12.5")
7201 (source
7202 (origin
7203 (method url-fetch)
7204 (uri (string-append "https://www.zrythm.org/releases/zrythm-"
7205 version ".tar.xz"))
7206 (sha256
7207 (base32
7208 "1kixf8rlim5qvkhcm65rf35mxkxv3hij039jc9rvh710vl2xxm0g"))))
7209 (build-system meson-build-system)
7210 (arguments
7211 (list
7212 #:glib-or-gtk? #t
7213 #:configure-flags
7214 '(list "-Dtests=true"
7215 "-Dmanpage=false" ;fish-completions breaks this
7216 "-Ddseg_font=false"
7217 "-Dextra_optimizations=false" ;machine-specific
7218 "-Dgraphviz=enabled" ;for exporting routing graphs
7219 "-Dguile=enabled" ;for Guile scripting
7220 "-Djack=enabled" ;for JACK audio/MIDI backend
7221 "-Drtaudio=enabled" ;for RtAudio backend (ALSA)
7222 "-Drtmidi=enabled" ;for RtMidi backend (ALSA sequencer)
7223 "-Dsdl=enabled") ;for SDL audio backend (which uses ALSA)
7224 #:phases
7225 #~(modify-phases %standard-phases
7226 (add-after 'unpack 'patch-tests
7227 (lambda _
7228 ;; zrythm: fails because curl wants to access the internet.
7229 ;; project: unknown failure XXX
7230 ;; The other tests fail with this error:
7231 ;; error: attempt to map invalid URI `'
7232 ;; This means that lilv is given an empty LV2 plugin URI.
7233 ;; This is probably because we don't provide all LV2
7234 ;; plugins that are needed for running the tests.
7235 (substitute* "tests/meson.build"
7236 (("foreach name, info : tests")
7237 "\
7238 disabled_tests = {
7239 'actions/mixer_selections_action': 0,
7240 'actions/tracklist_selections': 0,
7241 'dsp/audio_region': 0,
7242 'dsp/audio_track': 0,
7243 'dsp/midi_track': 0,
7244 'dsp/pool': 0,
7245 'integration/recording': 0,
7246 'project': 0,
7247 'zrythm': 0
7248 }
7249 enabled_tests = {}
7250 foreach name, info : tests
7251 if name not in disabled_tests
7252 enabled_tests += {name: info}
7253 endif
7254 endforeach
7255 foreach name, info : enabled_tests"))
7256 ;; Requires internet access
7257 (substitute* "data/meson.build"
7258 (("if appstream.*\\(\\)")
7259 "if false"))))
7260 (add-before 'build 'disable-guile-auto-compilation
7261 (lambda _
7262 (setenv "GUILE_AUTO_COMPILE" "0")))
7263 (add-after 'install 'wrap-program
7264 (lambda _
7265 (wrap-program (string-append #$output "/bin/zrythm")
7266 ;; Wrapping GDK_PIXBUF_MODULE_FILE allows Zrythm to load
7267 ;; its own SVG icons in pure environments.
7268 `("GDK_PIXBUF_MODULE_FILE" =
7269 (,(getenv "GDK_PIXBUF_MODULE_FILE")))))))))
7270 (inputs
7271 (list alsa-lib
7272 boost
7273 carla-2.6
7274 curl
7275 fftw
7276 fftwf
7277 flex
7278 font-dseg
7279 gettext-minimal
7280 glib
7281 graphviz
7282 gtk
7283 gtksourceview
7284 guile-3.0
7285 jack-2
7286 json-glib
7287 libadwaita
7288 (module-ref
7289 (resolve-interface '(gnu packages debug)) 'libbacktrace)
7290 libcyaml
7291 libpanel
7292 (librsvg-for-system)
7293 libsamplerate
7294 libsndfile
7295 libyaml
7296 lilv
7297 lsp-dsp-lib
7298 lv2
7299 pango
7300 pcre
7301 pipewire
7302 pulseaudio
7303 reproc
7304 rtaudio
7305 rtmidi
7306 rubberband
7307 sdl2
7308 soxr
7309 vamp
7310 xdg-utils
7311 xxhash
7312 zix
7313 `(,zstd "lib")))
7314 (native-inputs
7315 ;; Zrythm require breeze-icons to be installed. Having them listed in
7316 ;; the native inputs cause them to be wrapped and made available via
7317 ;; XDG_DATA_DIRS.
7318 (list breeze-icons ;native because not executable
7319 help2man
7320 `(,glib "bin") ;for 'glib-compile-resources'
7321 pkg-config
7322 python-sphinx
7323 python-sphinx-intl
7324 sassc))
7325 (synopsis "Digital audio workstation focusing on usability")
7326 (description "Zrythm is a digital audio workstation designed to be
7327featureful and easy to use. It offers unlimited automation options, LV2
7328plugin support, JACK support and chord assistance.")
7329 (home-page "https://www.zrythm.org/en/index.html")
7330 (license license:agpl3+)))
7331
7332(define-public dragonfly-reverb
7333 (package
7334 (name "dragonfly-reverb")
7335 (version "3.2.10")
7336 (source
7337 (origin
7338 (method git-fetch)
7339 (uri
7340 (git-reference
7341 (url "https://github.com/michaelwillis/dragonfly-reverb")
7342 (commit version)
7343 ;; Bundles a specific commit of the DISTRHO plugin framework.
7344 (recursive? #t)))
7345 (file-name (git-file-name name version))
7346 (sha256
7347 (base32 "11i2k888m3zj4gz9si4y5mach8dwdq3yksbvjn1syrbwj99phwk1"))))
7348 (build-system gnu-build-system)
7349 (arguments
7350 `(#:tests? #f ; no check target
7351 #:make-flags
7352 (list (string-append "CC=" ,(cc-for-target)))
7353 #:phases
7354 (modify-phases %standard-phases
7355 (delete 'configure) ;no configure target
7356 (replace 'install ;no install target
7357 (lambda* (#:key outputs #:allow-other-keys)
7358 (let* ((out (assoc-ref outputs "out"))
7359 (bin (string-append out "/bin"))
7360 (lv2 (string-append out "/lib/lv2")))
7361 ;; Install LV2.
7362 (for-each
7363 (lambda (file)
7364 (copy-recursively file
7365 (string-append lv2 "/" (basename file))))
7366 (find-files "bin" "\\.lv2$" #:directories? #t))
7367 ;; Install executables.
7368 (for-each
7369 (lambda (file)
7370 (install-file file bin))
7371 (find-files "bin"
7372 (lambda (name stat)
7373 (and
7374 (equal? (dirname name) "bin")
7375 (not (string-suffix? ".so" name))
7376 (not (string-suffix? ".lv2" name))))))))))))
7377 (native-inputs
7378 (list pkg-config))
7379 (inputs
7380 (list jack-1 libx11 mesa))
7381 (home-page "https://michaelwillis.github.io/dragonfly-reverb/")
7382 (synopsis "Concert hall reverb and room reverb effects")
7383 (description
7384 "Dragonfly Reverb is a bundle of two free audio effects: a concert
7385hall reverb and a room reverb. Both are available as LV2 plugins as well
7386as JACK standalone applications.")
7387 (license license:gpl3+)))
7388
7389(define-public zplugins
7390 (package
7391 (name "zplugins")
7392 (version "0.2.5")
7393 (source
7394 (origin
7395 (method git-fetch)
7396 (uri
7397 (git-reference
7398 (url "https://git.zrythm.org/zrythm/zplugins")
7399 (commit (string-append "v" version))))
7400 (file-name (git-file-name name version))
7401 (sha256
7402 (base32
7403 "0xsnq8kg57pdswqi9yy5nrpjbfgmym2m1qi3cj3hki33kwzx2nn1"))))
7404 (build-system meson-build-system)
7405 (inputs
7406 (list guile-3.0 libsndfile lv2 ztoolkit-rsvg))
7407 (native-inputs
7408 (list pkg-config))
7409 (synopsis "Audio plugin collection")
7410 (description "ZPlugins is a collection of audio DSP plugins intended
7411to be bundled with the Zrythm @dfn{digital audio workstation} (DAW).")
7412 (home-page "https://www.zrythm.org/en/plugins.html")
7413 (license license:agpl3+)))
7414
7415(define-public remid-lv2
7416 (package
7417 (name "remid-lv2")
7418 (version "0.3")
7419 (source
7420 (origin
7421 (method git-fetch)
7422 (uri (git-reference
7423 (url "https://github.com/ssj71/reMID.lv2")
7424 (commit (string-append "v" version))))
7425 (file-name (git-file-name name version))
7426 (sha256
7427 (base32
7428 "062kriniidsrhzwrf89kfxm9wb0cmgrl07asnlmgil8vcl7gl9y5"))))
7429 (build-system cmake-build-system)
7430 (arguments
7431 (list #:tests? #f ; no tests included
7432 #:configure-flags
7433 #~(list "-DCMAKE_C_FLAGS=-Wno-implicit-function-declaration")))
7434 (inputs
7435 (list alsa-lib glib jack-1 lv2))
7436 (native-inputs
7437 (list pkg-config))
7438 (home-page "https://github.com/ssj71/reMID.lv2")
7439 (synopsis
7440 "MIDI-controlled implementation of the SID 6581 chip used in the
7441Commodore 64")
7442 (description
7443 "The 6581 SID chip is the sound chip used in the Commodore 64 computer.
7444reMID is a MIDI implementation of the 6581 SID chip using the reSID library
7445to provide a virtual SID-based synthesizer, controllable in real-time via
7446MIDI. It includes support for scripted instruments that allow complex sonic
7447control of the chip.")
7448 (license license:gpl2+)))
7449
7450(define-public vl1-emulator
7451 (package
7452 (name "vl1-emulator")
7453 (version "1.1.0.0")
7454 (source
7455 (origin
7456 (method git-fetch)
7457 (uri (git-reference
7458 (url "https://github.com/linuxmao-org/VL1-emulator")
7459 (commit (string-append "v" version))
7460 ;; bundles a specific commit of the DISTRHO plugin framework
7461 (recursive? #t)))
7462 (file-name (git-file-name name version))
7463 (sha256
7464 (base32
7465 "1npc86vqma8gk1hawa0lii0r2xmnv846plyl1ci3bdswyrdk5chm"))))
7466 (build-system gnu-build-system)
7467 (arguments
7468 `(#:tests? #f ;no check target
7469 #:make-flags
7470 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
7471 "CC=gcc")
7472 #:phases
7473 (modify-phases %standard-phases
7474 (delete 'configure)))) ;no configure target
7475 (inputs
7476 (list cairo jack-1 mesa))
7477 (native-inputs
7478 (list pkg-config))
7479 (home-page "https://github.com/linuxmao-org/VL1-emulator")
7480 (synopsis "Emulator of Casio VL-Tone VL1")
7481 (description "The VL1-Emulator is an emulator of Casio VL-Tone VL1,
7482based on source code by PolyValens, offered as an LV2 plugin and a
7483standalone JACK application.")
7484 ;; Expat or CC0
7485 (license (list license:expat license:cc0))))
7486
7487(define-public tap-lv2
7488 (let ((commit "cab6e0dfb2ce20e4ad34b067d1281ec0b193598a")
7489 (revision "1"))
7490 (package
7491 (name "tap-lv2")
7492 (version (git-version "0.0" revision commit))
7493 (source
7494 (origin
7495 (method git-fetch)
7496 (uri (git-reference
7497 (url "https://github.com/moddevices/tap-lv2")
7498 (commit commit)))
7499 (file-name (git-file-name name version))
7500 (sha256
7501 (base32
7502 "0q480djfqd9g8mzrggc4vl7yclrhdjqx563ghs8mvi2qq8liycw3"))))
7503 (build-system gnu-build-system)
7504 (arguments
7505 `(#:tests? #f ; no check target
7506 #:make-flags
7507 (list "CC=gcc")
7508 #:phases
7509 (modify-phases %standard-phases
7510 (delete 'configure) ; no configure
7511 (replace 'install
7512 (lambda _
7513 (invoke "make"
7514 (string-append "INSTALL_PATH="
7515 (assoc-ref %outputs "out")
7516 "/lib/lv2")
7517 "install"))))))
7518 (inputs
7519 (list lv2))
7520 (native-inputs
7521 (list pkg-config))
7522 (synopsis "Audio plugin collection")
7523 (description "TAP (Tom's Audio Processing) plugins is a collection of
7524 audio effect plugins originally released as LADSPA plugins. This package
7525 offers an LV2 version ported by moddevices.")
7526 (home-page "https://tap-plugins.sourceforge.net/")
7527 (license license:gpl2))))
7528
7529(define-public wolf-shaper
7530 (package
7531 (name "wolf-shaper")
7532 (version "1.0.2")
7533 (source
7534 (origin
7535 (method git-fetch)
7536 (uri (git-reference
7537 (url "https://github.com/wolf-plugins/wolf-shaper")
7538 (commit (string-append "v" version))
7539 ;; Bundles a specific commit of the DISTRHO plugin framework.
7540 (recursive? #t)))
7541 (file-name (git-file-name name version))
7542 (sha256
7543 (base32
7544 "03m6vq83lbj61xmg5f45yziajsmfxxwn95s53m8y7sdifz1bb272"))))
7545 (build-system gnu-build-system)
7546 (arguments
7547 (list #:tests? #f ; no check target
7548 #:make-flags
7549 #~(list (string-append "CC=" #$(cc-for-target))
7550 "NOOPT=true")
7551 #:phases
7552 #~(modify-phases %standard-phases
7553 (delete 'configure) ;no configure target
7554 (replace 'install ;no install target
7555 (lambda* (#:key outputs #:allow-other-keys)
7556 (let* ((out (assoc-ref outputs "out"))
7557 (bin (string-append out "/bin"))
7558 (lv2 (string-append out "/lib/lv2")))
7559 ;; Install LV2.
7560 (for-each
7561 (lambda (file)
7562 (copy-recursively file
7563 (string-append lv2 "/"
7564 (basename file))))
7565 (find-files "bin" "\\.lv2$" #:directories? #t))
7566 ;; Install executables.
7567 (for-each
7568 (lambda (file)
7569 (install-file file bin))
7570 (find-files "bin"
7571 (lambda (name stat)
7572 (and
7573 (equal? (dirname name) "bin")
7574 (not (string-suffix? ".so" name))
7575 (not
7576 (string-suffix? ".lv2" name))))))))))))
7577 (native-inputs
7578 (list pkg-config))
7579 (inputs
7580 (list jack-1 lv2 mesa))
7581 (synopsis "Waveshaper plugin")
7582 (description "Wolf Shaper is a waveshaper plugin with a graph editor.
7583It is provided as an LV2 plugin and as a standalone Jack application.")
7584 (home-page "https://wolf-plugins.github.io/wolf-shaper/")
7585 (properties `((tunable? . #t)))
7586 (license license:gpl3)))
7587
7588(define-public wolf-spectrum
7589 (package
7590 (inherit wolf-shaper)
7591 (name "wolf-spectrum")
7592 (version "1.0.0")
7593 (source
7594 (origin
7595 (method git-fetch)
7596 (uri (git-reference
7597 (url "https://github.com/pdesaulniers/wolf-spectrum")
7598 (commit (string-append "v" version))
7599 ;; Bundles a specific commit of the DISTRHO plugin framework.
7600 (recursive? #t)))
7601 (file-name (git-file-name name version))
7602 (sha256
7603 (base32
7604 "17db1jlj7vb1xyvkdhhrsvdbwb7jqw6i4168cdvlj3yvn2ra8gpm"))))
7605 (synopsis "2D spectrogram plugin")
7606 (description "Wolf Spectrum is a real-time 2D spectrogram plugin.
7607It is provided as an LV2 plugin and as a standalone Jack application.")
7608 (home-page "https://github.com/pdesaulniers/wolf-spectrum")
7609 (license license:gpl3)))
7610
7611(define-public shiru-lv2
7612 (let ((commit "08853f99140012234649e67e5647906fda74f6cc")
7613 (revision "1"))
7614 (package
7615 (name "shiru-lv2")
7616 (version (git-version "0.0" revision commit))
7617 (source
7618 (origin
7619 (method git-fetch)
7620 (uri (git-reference
7621 (url "https://github.com/linuxmao-org/shiru-plugins")
7622 (commit commit)
7623 ;; Bundles a specific commit of the DISTRHO plugin framework.
7624 (recursive? #t)))
7625 (file-name (git-file-name name version))
7626 (sha256
7627 (base32
7628 "00rf6im3rhg98h60sgl1r2s37za5vr5h14pybwi07h8zbc8mi6fm"))))
7629 (build-system gnu-build-system)
7630 (arguments
7631 `(#:tests? #f ; no check target
7632 #:make-flags (list "CC=gcc")
7633 #:phases
7634 (modify-phases %standard-phases
7635 (delete 'configure) ;no configure target
7636 (replace 'install ;no install target
7637 (lambda* (#:key outputs #:allow-other-keys)
7638 (let* ((out (assoc-ref outputs "out"))
7639 (bin (string-append out "/bin"))
7640 (lv2 (string-append out "/lib/lv2")))
7641 ;; Install LV2.
7642 (for-each
7643 (lambda (file)
7644 (copy-recursively file
7645 (string-append lv2 "/" (basename file))))
7646 (find-files "bin" "\\.lv2$" #:directories? #t))
7647 ;; Install executables.
7648 (for-each
7649 (lambda (file)
7650 (install-file file bin))
7651 (find-files "bin"
7652 (lambda (name stat)
7653 (and
7654 (equal? (dirname name) "bin")
7655 (not (string-suffix? ".so" name))
7656 (not (string-suffix? ".lv2" name))))))
7657 #t))))))
7658 (native-inputs
7659 (list pkg-config))
7660 (inputs
7661 (list cairo
7662 glu
7663 jack-1
7664 lv2
7665 mesa
7666 pango))
7667 (synopsis "Audio plugin collection")
7668 (description "Shiru plugins is a collection of audio plugins created
7669 by Shiru, ported to LV2 by the Linux MAO project using the DISTRHO plugin
7670 framework.")
7671 (home-page "https://shiru.untergrund.net/software.shtml")
7672 (license license:wtfpl2))))
7673
7674(define-public a2jmidid
7675 (package
7676 (name "a2jmidid")
7677 (version "12")
7678 (source (origin
7679 (method url-fetch)
7680 (uri (string-append "https://dl.ladish.org/a2jmidid/a2jmidid-"
7681 version ".tar.bz2"))
7682 (sha256
7683 (base32 "1m05kbxkfw992pl23vfbg4s4rlhailkh04fa7bjdhr39j32q4qjk"))))
7684 (arguments
7685 (list #:tests? #f ; No tests.
7686 #:phases
7687 #~(modify-phases %standard-phases
7688 (add-after 'install 'wrap-programs
7689 (lambda* (#:key inputs outputs #:allow-other-keys)
7690 (let ((bin (string-append #$output "/bin/")))
7691 (substitute* (string-append bin "a2j")
7692 (("a2j_control") (string-append bin "a2j_control")))
7693 (wrap-program (string-append bin "a2j_control")
7694 `("PYTHONPATH" prefix (,(getenv "GUIX_PYTHONPATH"))))))))))
7695 (build-system meson-build-system)
7696 (inputs
7697 (list alsa-lib
7698 bash-minimal ; for wrap-program
7699 dbus
7700 jack-1
7701 python
7702 python-dbus-1.2))
7703 (native-inputs
7704 (list pkg-config))
7705 (synopsis "ALSA sequencer to JACK MIDI bridging")
7706 (description
7707 "@code{a2jmidid} is a daemon that implements automatic bridging of ALSA
7708midi devices to JACK midi devices.")
7709 (home-page "https://a2jmidid.ladish.org/")
7710 (license license:gpl2)))
7711
7712(define-public opustags
7713 (package
7714 (name "opustags")
7715 (version "1.10.1")
7716 (source (origin
7717 (method git-fetch)
7718 (uri (git-reference
7719 (url "https://github.com/fmang/opustags")
7720 (commit version)))
7721 (sha256
7722 (base32 "13ibqmp37hvm1k17zqi81r8ya727b5f56wg4a8bnqp0qaghkwnnj"))
7723 (file-name (git-file-name name version))))
7724 (arguments
7725 (list
7726 #:modules '((guix build cmake-build-system)
7727 ((guix build gnu-build-system) #:prefix gnu:)
7728 (guix build utils))
7729 #:phases
7730 #~(modify-phases %standard-phases
7731 ;; This package does not use the perl-build-system, so we have to
7732 ;; manually set up the Perl environment used by the test suite.
7733 (add-before 'check 'setup-perl-environment
7734 (lambda* (#:key inputs #:allow-other-keys)
7735 (let* ((perl-list-moreutils-lib
7736 (string-append #$(this-package-native-input "perl-list-moreutils")
7737 "/lib/perl5/site_perl/"
7738 #$(package-version perl)))
7739 (perl-exporter-tiny-lib
7740 (string-append #$(this-package-native-input "perl-exporter-tiny")
7741 "/lib/perl5/site_perl/"
7742 #$(package-version perl)))
7743 (perl-test-deep-lib
7744 (string-append #$(this-package-native-input "perl-test-deep")
7745 "/lib/perl5/site_perl/"
7746 #$(package-version perl))))
7747 (setenv "PERL5LIB" (string-append perl-list-moreutils-lib ":"
7748 perl-exporter-tiny-lib ":"
7749 perl-test-deep-lib)))))
7750 (replace 'check (assoc-ref gnu:%standard-phases 'check)))))
7751 (build-system cmake-build-system)
7752 (inputs
7753 (list libogg))
7754 (native-inputs
7755 (list pkg-config
7756 ffmpeg
7757 perl-exporter-tiny
7758 perl-list-moreutils
7759 perl-test-deep
7760 perl-test-harness))
7761 (synopsis "Ogg Opus tags editor")
7762 (description "@code{opustags} is an Ogg Opus tag editor. It reads and edits
7763the comment header of an Ogg Opus audio file, offering both read-only and
7764editing modes. Tags can be edited interactively with an editor of your
7765choice.")
7766 (home-page "https://github.com/fmang/opustags")
7767 (license license:bsd-3)))
7768
7769(define-public musikcube
7770 (package
7771 (name "musikcube")
7772 (version "3.0.5")
7773 (source (origin
7774 (method git-fetch)
7775 (uri (git-reference
7776 (url "https://github.com/clangen/musikcube/")
7777 (commit version)))
7778 (file-name (git-file-name name version))
7779 (sha256
7780 (base32
7781 "0kfdfai2w4qh31kypl94yknir9f41y1wh93k38cpj04w3chdzdx2"))))
7782 (build-system cmake-build-system)
7783 (arguments
7784 '(#:tests? #f ; No test suite
7785 #:configure-flags
7786 '("-DCMAKE_BUILD_TYPE=Release"
7787 ;; Use the "wide" ncurses headers but don't look for them in an
7788 ;; ncursesw directory. For more info:
7789 ;; https://github.com/clangen/musikcube/wiki/building#compiler-cannot-find-ncurseswcursesh
7790 "-DNO_NCURSESW=true"
7791 ;; We will strip the binaries ourselves in the 'strip' phase.
7792 "-DDISABLE_STRIP=true")))
7793 (native-inputs
7794 (list asio pkg-config))
7795 (inputs
7796 (list alsa-lib
7797 boost
7798 curl
7799 ffmpeg
7800 lame
7801 libev
7802 libgme
7803 libmicrohttpd
7804 libogg
7805 libopenmpt
7806 libvorbis
7807 ncurses/tinfo
7808 openssl
7809 pipewire
7810 pulseaudio
7811 taglib
7812 zlib))
7813 (synopsis "Terminal-based music player, library, and streaming audio server")
7814 (description "Musikcube is a terminal-based music player, library, and
7815streaming audio server.")
7816 (home-page "https://musikcube.com/")
7817 (license license:bsd-3)))
7818
7819(define-public quodlibet
7820 (package
7821 (name "quodlibet")
7822 (version "4.7.1")
7823 (source
7824 (origin
7825 (method git-fetch)
7826 (uri (git-reference
7827 (url "https://github.com/quodlibet/quodlibet")
7828 (commit (string-append "release-" version))))
7829 (file-name (git-file-name name version))
7830 (sha256
7831 (base32 "0nk2n4j0vm9ibrm3p9qwf5s0a4iwjkbvr6z23sc0v3rdxvaxrgf6"))
7832
7833 ;; Disable and remove bundled packages.
7834 (patches (search-patches "quodlibet-disable-bundled-packages.patch"))
7835 (modules '((guix build utils)))
7836 (snippet '(delete-file-recursively "quodlibet/packages"))))
7837 (build-system pyproject-build-system)
7838 (arguments
7839 (list
7840 #:imported-modules `(,@%pyproject-build-system-modules
7841 ,@%glib-or-gtk-build-system-modules)
7842 #:modules '((guix build pyproject-build-system)
7843 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
7844 (guix build utils))
7845 ;; tests: 4020 passed, 57 skipped, 3 deselected, 106 warnings
7846 #:test-flags
7847 ;; The majority of ignored tests require access to plugin or running
7848 ;; DBus.
7849 ;;
7850 ;; XXX: ValueError: Cannot set parent property without first setting it
7851 ;; to 'None'.
7852 #~(list "--ignore=tests/plugin/test_mediaserver.py"
7853 "--ignore=tests/plugin/test_mpdserver.py"
7854 "--ignore=tests/plugin/test_mpris.py"
7855 "--ignore=tests/plugin/test_prefs.py"
7856 "--ignore=tests/plugin/test_randomalbum.py"
7857 "--ignore=tests/plugin/test_trayicon.py"
7858 "--ignore=tests/plugin/test_viewlyrics.py"
7859 "--ignore=tests/test_browsers__base.py"
7860 "--ignore=tests/test_browsers_playlists.py"
7861 "--ignore=tests/test_browsers_soundcloud.py"
7862 "--ignore=tests/test_commands.py"
7863 "--ignore=tests/test_formats__audio.py"
7864 "--ignore=tests/test_library_file.py"
7865 "--ignore=tests/test_mmkeys.py"
7866 "--ignore=tests/test_qltk_about.py"
7867 "--ignore=tests/test_qltk_browser.py"
7868 "--ignore=tests/test_qltk_cover.py"
7869 "--ignore=tests/test_qltk_edittags.py"
7870 "--ignore=tests/test_qltk_exfalso.py"
7871 "--ignore=tests/test_qltk_info.py"
7872 "--ignore=tests/test_qltk_information.py"
7873 "--ignore=tests/test_qltk_lyrics.py"
7874 "--ignore=tests/test_qltk_prefs.py"
7875 "--ignore=tests/test_qltk_quodlibetwindow.py"
7876 "--ignore=tests/test_session.py"
7877 ;; AssertionError: not expecting a librarian - leaky test?
7878 "--ignore=tests/test_qltk_songlist.py"
7879 ;; Assertion is not equal in tests:
7880 (string-append "--deselect=tests/plugin/test_covers.py"
7881 "::test_live_cover_download[lastfm-cover]")
7882 (string-append "--deselect=tests/plugin/test_covers.py"
7883 "::test_live_cover_download[discogs-cover]")
7884 (string-append "--deselect=tests/test_browsers_iradio.py"
7885 "::TInternetRadio::test_click_add_station"))
7886 #:phases
7887 #~(modify-phases %standard-phases
7888 (add-before 'sanity-check 'pre-check
7889 (lambda _
7890 (setenv "HOME" (getcwd))))
7891 (add-after 'wrap 'glib-or-gtk-wrap ; ensure icons loaded
7892 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
7893 (add-after 'glib-or-gtk-wrap 'wrap-extra-paths
7894 (lambda _
7895 (let ((gi-typelib-path (getenv "GI_TYPELIB_PATH"))
7896 (gst-plugins-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
7897 (for-each
7898 (lambda (prog)
7899 (wrap-program (string-append #$output "/bin/" prog)
7900 `("GI_TYPELIB_PATH" ":" = (,gi-typelib-path))
7901 `("GST_PLUGIN_SYSTEM_PATH" ":" suffix
7902 (,gst-plugins-path))))
7903 '("exfalso" "operon" "quodlibet")))))
7904 (add-before 'check 'prepare-x
7905 (lambda _
7906 (system "Xvfb &")
7907 (setenv "DISPLAY" ":0"))))))
7908 (native-inputs
7909 (list xorg-server-for-tests
7910 gettext-minimal
7911 gobject-introspection
7912 python-pytest
7913 python-setuptools))
7914 (inputs
7915 (list adwaita-icon-theme
7916 bash-minimal
7917 glib
7918 gsettings-desktop-schemas
7919 gst-plugins-bad
7920 gst-plugins-base
7921 gst-plugins-good
7922 gst-plugins-ugly
7923 gstreamer
7924 gtk+
7925 gtksourceview-4 ; undo, redo, multiline text fields
7926 keybinder ; keybindings outside of GNOME
7927 (librsvg-for-system)
7928 libsoup-minimal
7929 python
7930 python-cheetah
7931 python-dbus-1.2
7932 python-feedparser
7933 python-gst
7934 python-iniconfig
7935 python-musicbrainzngs
7936 python-mutagen
7937 python-pycairo
7938 python-pygobject
7939 python-pyinotify
7940 python-senf
7941 python-sgmllib3k
7942 python-toml))
7943 (home-page "https://github.com/quodlibet/quodlibet")
7944 (synopsis "Music manager and player")
7945 (description "Quod Libet provides several ways to browse and view your
7946local music library, along with flexible search capabilities. It includes
7947a tag editor, which can also be invoked as a standalone program, and further
7948supports streaming audio and feeds (such as podcasts).")
7949 (license license:gpl2+)))
7950
7951(define-public exaile
7952 (package
7953 (name "exaile")
7954 (version "4.2.1")
7955 (source
7956 (origin
7957 (method git-fetch)
7958 (uri (git-reference
7959 (url "https://github.com/exaile/exaile")
7960 (commit version)))
7961 (file-name (git-file-name name version))
7962 (sha256
7963 (base32 "12vcddsvx81yvz1xs4b9qig09n7a6wgjy6ggr6d3irlxh63cjzkq"))
7964 (patches (search-patches "exaile-gstreamer-1.28.patch"))))
7965 (build-system glib-or-gtk-build-system)
7966 (arguments
7967 (list
7968 #:make-flags
7969 #~(list (string-append "PREFIX="
7970 #$output))
7971 #:phases
7972 #~(modify-phases %standard-phases
7973 (delete 'configure)
7974 (add-before 'check 'set-environment-variables
7975 (lambda _
7976 (setenv "PYTEST" "pytest")
7977 (setenv "XDG_CACHE_HOME" "/tmp/.cache")))
7978 (replace 'check
7979 (lambda* (#:key tests? #:allow-other-keys)
7980 (when tests?
7981 (invoke "make" "test"))))
7982 (add-after 'install 'wrap-environment-variables
7983 (lambda _
7984 (wrap-program (string-append #$output "/bin/exaile")
7985 `("PATH" ":" prefix
7986 (,(string-append #$(this-package-input "python") "/bin")))
7987 `("GDK_PIXBUF_MODULE_FILE" =
7988 (,(getenv "GDK_PIXBUF_MODULE_FILE")))
7989 `("GI_TYPELIB_PATH" ":" =
7990 (,(getenv "GI_TYPELIB_PATH")))
7991 `("GST_PLUGIN_SYSTEM_PATH" ":" suffix
7992 (,(getenv "GST_PLUGIN_SYSTEM_PATH")))
7993 `("GUIX_PYTHONPATH" ":" prefix
7994 (,(getenv "GUIX_PYTHONPATH")))))))))
7995 (inputs (list adwaita-icon-theme
7996 bash-minimal
7997 gstreamer
7998 gst-plugins-base
7999 gst-plugins-good
8000 gtk+
8001 python
8002 python-dbus
8003 python-gst
8004 python-mutagen
8005 python-pycairo
8006 python-pygobject
8007 ;; Optional dependencies
8008 libnotify ;native notifications
8009 librsvg ;scalable icons
8010 udisks)) ;device detection
8011 (native-inputs (list gettext-minimal
8012 gobject-introspection
8013 python-berkeleydb
8014 python-pytest
8015 ;; Optional documentation support
8016 help2man
8017 python-sphinx
8018 python-sphinx-rtd-theme))
8019 (native-search-paths
8020 (list (search-path-specification
8021 (variable "GST_PLUGIN_SYSTEM_PATH")
8022 (files '("lib/gstreamer-1.0")))))
8023 (synopsis "Cross-platform music player")
8024 (description
8025 "Exaile is a music player with a simple interface and powerful music
8026management capabilities. Features include automatic fetching of album art,
8027lyrics fetching, streaming internet radio, tabbed playlists, smart playlists
8028with extensive filtering/search capabilities, and much more.")
8029 (home-page "https://exaile.org/")
8030 (license license:gpl2)))
8031
8032(define-public orca-music
8033 (let ((commit "e55b8fdc3606341345938d5b24b2d9d9326afdb5") (revision "1"))
8034 (package
8035 (name "orca-music")
8036 ;; No upstream version numbers; Using commit instead.
8037 (version (git-version "0" revision commit))
8038 (source (origin
8039 (method git-fetch)
8040 (uri (git-reference
8041 (url "https://git.sr.ht/~rabbits/orca")
8042 (commit commit)))
8043 (file-name (git-file-name name version))
8044 (sha256
8045 (base32
8046 "0xf5i9vd2wyrhvfp68j5gvd40iqm9rf6g1p74jan7d875g6kpppq"))))
8047 (build-system gnu-build-system)
8048 (arguments
8049 `(#:tests? #f
8050 #:phases
8051 (modify-phases %standard-phases
8052 (delete 'configure) ;No autoconf
8053 (replace 'build
8054 (lambda* (#:key inputs outputs #:allow-other-keys)
8055 (setenv "CC"
8056 ,(cc-for-target))
8057 (invoke "make" "release")))
8058 (add-after 'build 'rename-orca
8059 (lambda* _
8060 (invoke "mv" "-v" "./build/orca" "./build/orca-music")))
8061 (replace 'install
8062 (lambda* (#:key outputs #:allow-other-keys)
8063 (let* ((out (assoc-ref outputs "out")) (dest-bin (string-append
8064 out "/bin"))
8065 (share (string-append out "/share"))
8066 (dest-examples (string-append share "/examples"))
8067 (dest-doc (string-append share "/doc")))
8068 (install-file "./build/orca-music" dest-bin)
8069 (copy-recursively "./examples" dest-examples)
8070 (install-file "./README.md" dest-doc)))))))
8071 (inputs (list ncurses portmidi alsa-plugins
8072 `(,alsa-plugins "pulseaudio")))
8073 (native-inputs (list pkg-config))
8074 (native-search-paths
8075 (list (search-path-specification
8076 (variable "TERMINFO_DIRS")
8077 (files '("share/terminfo")))))
8078 (synopsis "Musical live-coding environment")
8079 (description
8080 "This is the C implementation of the ORCΛ language and terminal
8081livecoding environment. It's designed to be power efficient. It can handle
8082large files, even if your terminal is small.
8083
8084Orca is not a synthesizer, but a flexible livecoding environment capable of
8085sending MIDI, OSC, and UDP to your audio/visual interfaces like Ableton,
8086Renoise, VCV Rack, or SuperCollider.")
8087 (home-page "https://100r.co/site/orca.html")
8088 (license license:expat))))
8089
8090(define-public samplebrain
8091 (package
8092 (name "samplebrain")
8093 (version "0.18.5")
8094 (source (origin
8095 (method git-fetch)
8096 (uri (git-reference
8097 (url "https://gitlab.com/then-try-this/samplebrain")
8098 (commit (string-append "v" version "_release"))))
8099 (file-name (git-file-name name version))
8100 (sha256
8101 (base32
8102 "17p6n16x89bbzlpn9r7w1lgr1ifxs45npn8gxymkdr3j16dhg4zy"))))
8103 (build-system qt-build-system)
8104 (arguments
8105 (list #:tests? #f ;no tests
8106 #:modules '((guix build qt-build-system)
8107 ((guix build gnu-build-system) #:prefix gnu:)
8108 (guix build utils))
8109 #:phases #~(modify-phases %standard-phases
8110 (replace 'configure
8111 (lambda _
8112 (substitute* "samplebrain.pro"
8113 (("\\/usr")
8114 #$output))
8115 (invoke "qmake")))
8116 (replace 'build (assoc-ref gnu:%standard-phases 'build))
8117 (replace 'check (assoc-ref gnu:%standard-phases 'check))
8118 (replace 'install (assoc-ref gnu:%standard-phases 'install)))))
8119 (inputs (list fftw liblo libsndfile portaudio))
8120 (home-page "https://thentrythis.org/projects/samplebrain/")
8121 (synopsis "Sample mashing synthesizer designed by Aphex Twin")
8122 (description
8123 "Samplebrain chops samples up into a 'brain' of interconnected small
8124sections called blocks which are connected into a network by similarity. It
8125processes a target sample, chopping it up into blocks in the same way, and
8126tries to match each block with one in its brain to play in realtime.")
8127 (license license:gpl2+)))
8128
8129(define-public le-biniou-data
8130 (package
8131 (name "le-biniou-data")
8132 (version "3.67.0")
8133 (source (origin
8134 (method git-fetch)
8135 (uri (git-reference
8136 (url "https://gitlab.com/lebiniou/lebiniou-data")
8137 (commit (string-append "version-" version))))
8138 (file-name (git-file-name name version))
8139 (sha256
8140 (base32
8141 "1kgwxy2kcjv4x32smp5108cn5qvlixjcxi23hqd3g6diws3s45v5"))))
8142 (build-system gnu-build-system)
8143 (native-inputs (list autoconf automake libtool))
8144 (home-page "https://biniou.net/")
8145 (synopsis "Data files for use with Le Biniou")
8146 (description
8147 "This package contains data files for use with Le Biniou.")
8148 (license license:gpl2+)))
8149
8150(define-public le-biniou
8151 (package
8152 (name "le-biniou")
8153 (version "3.67.0")
8154 (source (origin
8155 (method git-fetch)
8156 (uri (git-reference
8157 (url "https://gitlab.com/lebiniou/lebiniou")
8158 (commit (string-append "version-" version))))
8159 (file-name (git-file-name name version))
8160 (sha256
8161 (base32
8162 "1p3g2m16fr52xi4rwkpm7j278yaml9443szji4s5l3f78m9aiwcm"))))
8163 (build-system gnu-build-system)
8164 (arguments
8165 (list #:configure-flags #~(list (string-append "LDFLAGS=-Wl,-rpath="
8166 #$output "/lib")
8167 (string-append
8168 "LEBINIOU_DATADIR="
8169 #$(this-package-input "le-biniou-data")))
8170 #:phases #~(modify-phases %standard-phases
8171 (add-after 'unpack 'patch
8172 (lambda _
8173 (substitute* "src/bulfius_vui.c"
8174 (("xdg-open")
8175 (string-append
8176 #$(this-package-input "xdg-utils")
8177 "/bin/xdg-open"))))))))
8178 (native-inputs (list autoconf
8179 automake
8180 libtool
8181 perl ;for pod2man
8182 pkg-config))
8183 (inputs (list alsa-lib
8184 curl
8185 ffmpeg
8186 fftw
8187 glib
8188 imagemagick
8189 jack-1
8190 jansson
8191 le-biniou-data
8192 libcaca
8193 libsndfile
8194 pulseaudio
8195 sdl2
8196 ulfius
8197 xdg-utils))
8198 (home-page "https://biniou.net/")
8199 (synopsis "Audio visualization and VJing tool")
8200 (description
8201 "Le Biniou is a music visualization & VJing tool. It creates live
8202visuals based on audio performances or existing tracks.")
8203 (license license:gpl2+)))
8204
8205(define-public firefly-synth
8206 (package
8207 (name "firefly-synth")
8208 (version "1.9.9")
8209 (source
8210 (origin
8211 (method git-fetch)
8212 ;; TODO: unbundle Submodule 'lib/JUCE' (https://github.com/sjoerdvankreel/JUCE.git) registered for path 'lib/JUCE'
8213 ;; TODO: unbundle Submodule 'lib/MTS-ESP' (https://github.com/sjoerdvankreel/MTS-ESP.git) registered for path 'lib/MTS-ESP'
8214 ;; TODO: unbundle Submodule 'lib/clap' (https://github.com/sjoerdvankreel/clap.git) registered for path 'lib/clap'
8215 ;; TODO: unbundle Submodule 'lib/clap-helpers' (https://github.com/sjoerdvankreel/clap-helpers.git) registered for path 'lib/clap-helpers'
8216 ;; TODO: unbundle Submodule 'lib/readerwriterqueue' (https://github.com/sjoerdvankreel/readerwriterqueue.git) registered for path 'lib/readerwriterqueue'
8217 ;; TODO: unbundle Submodule 'lib/sse2neon' (https://github.com/sjoerdvankreel/sse2neon) registered for path 'lib/sse2neon'
8218 ;; TODO: unbundle Submodule 'lib/vst3/base' (https://github.com/sjoerdvankreel/vst3_base.git) registered for path 'lib/vst3/base'
8219 ;; TODO: unbundle Submodule 'lib/vst3/cmake' (https://github.com/sjoerdvankreel/vst3_cmake.git) registered for path 'lib/vst3/cmake'
8220 ;; TODO: unbundle Submodule 'lib/vst3/pluginterfaces' (https://github.com/sjoerdvankreel/vst3_pluginterfaces.git) registered for path 'lib/vst3/pluginterfaces'
8221 ;; TODO: unbundle Submodule 'lib/vst3/public.sdk' (https://github.com/sjoerdvankreel/vst3_public_sdk.git) registered for path 'lib/vst3/public.sdk'
8222 (uri (git-reference
8223 (url "https://github.com/sjoerdvankreel/firefly-synth")
8224 (recursive? #t)
8225 (commit (string-append "v" version))))
8226 (sha256
8227 (base32 "1gkrmq942i3gsd7r3ilnz2rs3xxb4sv5kq36f9gdasrxxz65wyg8"))
8228 (file-name (git-file-name name version))))
8229 (build-system cmake-build-system)
8230 (arguments
8231 (list
8232 #:tests? #f ;; No test target
8233 #:build-type "Release"
8234 #:phases
8235 #~(modify-phases %standard-phases
8236 (add-after 'install 'plugin-base-ref-gen
8237 (lambda* (#:key outputs #:allow-other-keys)
8238 (let* ((out (assoc-ref outputs "out")))
8239 (with-directory-excursion
8240 "../source/dist/Release/linux"
8241 (system*
8242 "./plugin_base.ref_gen"
8243 "firefly_synth_1.vst3/Contents/x86_64-linux/firefly_synth_1.so"
8244 "../../../param_reference.html")))))
8245 (add-after 'plugin-base-ref-gen 'copy-plugin-artefacts
8246 (lambda* (#:key inputs outputs #:allow-other-keys)
8247 (let* ((out (assoc-ref outputs "out"))
8248 (src (assoc-ref inputs "source"))
8249 (clap (string-append out "/lib/clap"))
8250 (vst3 (string-append out "/lib/vst3")))
8251 ;; Make clap and vst3 directories
8252 (mkdir-p clap)
8253 (mkdir-p vst3)
8254 (with-directory-excursion
8255 "../source/dist/Release/linux"
8256 ;; Install clap.
8257 (copy-recursively
8258 "firefly_synth_1.clap"
8259 (string-append clap "/firefly_synth_1.clap"))
8260 (copy-recursively
8261 "firefly_synth_fx_1.clap"
8262 (string-append clap "/firefly_synth_fx_1.clap"))
8263 ;; Install vst3.
8264 (copy-recursively
8265 "firefly_synth_1.vst3"
8266 (string-append vst3 "/firefly_synth_1.vst3"))
8267 (copy-recursively
8268 "firefly_synth_fx_1.vst3"
8269 (string-append vst3 "/firefly_synth_fx_1.vst3")))))))))
8270 (inputs (list libxrandr
8271 libxinerama
8272 libxcursor
8273 freetype
8274 fontconfig
8275 mesa
8276 alsa-lib))
8277 (native-inputs (list pkg-config))
8278 (home-page "https://github.com/sjoerdvankreel/firefly-synth")
8279 (synopsis "Semi-modular synthesizer and FX plugin, VST3 and CLAP")
8280 (description "A semi-modular software synthesizer and fx plugin")
8281 (license license:gpl3)))
8282
8283;;;
8284;;; Avoid adding new packages to the end of this file. To reduce the chances
8285;;; of a merge conflict, place them above by existing packages with similar
8286;;; functionality or similar names.
8287;;;