projects/guix·blob python-team · refs

8307 lines · 317.6 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 toolkits)
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.17.0")
4187 (source
4188 (origin
4189 (method git-fetch)
4190 (uri (git-reference
4191 (url "https://github.com/beetbox/mediafile")
4192 (commit (string-append "v" version))))
4193 (file-name (git-file-name name version))
4194 (sha256
4195 (base32 "0hj66q8cnh7wnlwyr6dzzl9yyq7jf2925w6xf7chils78qbfxs0n"))))
4196 (build-system pyproject-build-system)
4197 (arguments
4198 (list #:test-flags
4199 #~(list
4200 ;; See: <https://github.com/beetbox/mediafile/issues/109>
4201 (string-append "--deselect=test/test_mediafile.py::OpusTest::"
4202 "test_read_audio_properties"))))
4203 (native-inputs
4204 (list python-poetry-core
4205 python-pytest))
4206 (propagated-inputs
4207 (list python-mutagen
4208 python-filetype))
4209 (home-page "https://github.com/beetbox/mediafile")
4210 (synopsis "Read and write audio file tags")
4211 (description
4212 "MediaFile is a simple interface to the metadata tags for many audio file
4213formats. It wraps Mutagen, a high-quality library for low-level tag
4214manipulation, with a high-level, format-independent interface for a common set
4215of tags.")
4216 (license license:expat)))
4217
4218(define-public python-musicbrainzngs
4219 (package
4220 (name "python-musicbrainzngs")
4221 (version "0.7.1")
4222 (source
4223 (origin
4224 (method git-fetch)
4225 (uri (git-reference
4226 (url "https://github.com/alastair/python-musicbrainzngs")
4227 (commit (string-append "v" version))))
4228 (file-name (git-file-name name version))
4229 (sha256
4230 (base32 "05rv5wmasamwxkbs8v9lbp2js6y5hhqz6c58c2afz2b202yp932m"))))
4231 (build-system pyproject-build-system)
4232 (native-inputs (list python-pytest python-setuptools))
4233 (home-page "https://python-musicbrainzngs.readthedocs.org/")
4234 (synopsis "Python bindings for MusicBrainz NGS webservice")
4235 (description
4236 "Musicbrainzngs implements Python bindings of the MusicBrainz web
4237service. This library can be used to retrieve music metadata from the
4238MusicBrainz database.")
4239 ;; 'musicbrainzngs/compat.py' is ISC licensed.
4240 (license (list license:bsd-2 license:isc))))
4241
4242(define-public isrcsubmit
4243 (package
4244 (name "isrcsubmit")
4245 (version "2.0.1")
4246 (source
4247 (origin
4248 (method url-fetch)
4249 (uri (pypi-uri "isrcsubmit" version))
4250 (sha256
4251 (base32
4252 "0jh4cni8qhri6dh83cmp0i0m0384vv0vznlygv49wj9xzh1d99qv"))))
4253 (build-system pyproject-build-system)
4254 ;; tests: 6 passed
4255 (native-inputs
4256 (list python-setuptools))
4257 (propagated-inputs
4258 (list python-discid
4259 python-musicbrainzngs))
4260 (home-page "https://github.com/JonnyJD/musicbrainz-isrcsubmit")
4261 (synopsis "Submit ISRCs from CDs to MusicBrainz")
4262 (description "@code{isrcsubmit} is a tool to extract @dfn{International
4263Standard Recording Code} (ISRCs) from audio CDs and submit them to
4264@url{https://musicbrainz.org/, MusicBrainz}.")
4265 (license license:gpl3+)))
4266
4267 ;; May be removed after 2026-01-31
4268(define-deprecated-package python-isrcsubmit isrcsubmit)
4269
4270(define-public python-pylast
4271 (package
4272 (name "python-pylast")
4273 (version "4.2.1")
4274 (source
4275 (origin
4276 (method git-fetch)
4277 (uri (git-reference
4278 (url "https://github.com/pylast/pylast")
4279 (commit version)))
4280 (file-name (git-file-name name version))
4281 (sha256
4282 (base32 "1i3mgxhrr3nbfrg3ppv6qvf3py0p46wa2h36nnfjw2m5bhjd6rhx"))))
4283 (build-system pyproject-build-system)
4284 (native-inputs
4285 (list python-pytest
4286 python-flaky
4287 python-pyyaml
4288 python-setuptools-scm
4289 python-setuptools))
4290 (home-page "https://github.com/pylast/pylast")
4291 (synopsis "Python interface to Last.fm and Libre.fm")
4292 (description "A Python interface to Last.fm and other API-compatible
4293websites such as Libre.fm.")
4294 (license license:asl2.0)))
4295
4296(define-public instantmusic
4297 (let ((commit "0477dd310e0aeb11d4d113bb96baa40d824cc330")
4298 (revision "2"))
4299 (package
4300 (name "instantmusic")
4301 (version (git-version "1.0" revision commit))
4302 (source (origin
4303 (method git-fetch)
4304 (uri (git-reference
4305 (url "https://github.com/yask123/Instant-Music-Downloader")
4306 (commit commit)))
4307 (file-name (git-file-name name version))
4308 (sha256
4309 (base32
4310 "0pxp1h0q4j7bidgdh4wgrvnm4ckdr4bvgk1wccr02mynfsjq8x5c"))))
4311 (build-system pyproject-build-system)
4312 (arguments
4313 (list
4314 #:tests? #f ;no tests
4315 #:phases
4316 #~(modify-phases %standard-phases
4317 (add-before 'build 'change-directory
4318 (lambda _
4319 (chdir "instantmusic-0.1")))
4320 (add-before 'build 'patch-yt-dlp
4321 (lambda* (#:key inputs #:allow-other-keys)
4322 (substitute* "bin/instantmusic"
4323 (("youtube-dl")
4324 (search-input-file inputs "bin/yt-dlp")))
4325 (substitute* "setup.py"
4326 (("youtube-dl")
4327 "yt-dlp"))))
4328 (add-before 'install 'fix-file-permissions
4329 (lambda _
4330 ;; Fix some read-only files that would cause a build failure
4331 (for-each (lambda (file)
4332 (chmod file #o644))
4333 (find-files "instantmusic.egg-info"
4334 "PKG-INFO|.*\\.txt")))))))
4335 (native-inputs (list python-setuptools))
4336 (inputs (list yt-dlp))
4337 (propagated-inputs (list python-requests eyed3 python-beautifulsoup4))
4338 (home-page "https://github.com/yask123/Instant-Music-Downloader")
4339 (synopsis "Command-line program to download a song from YouTube")
4340 (description "InstantMusic downloads a song from YouTube in MP3 format.
4341 Songs can be searched by artist, name or even by a part of the song text.")
4342 (license license:expat))))
4343
4344(define-public beets
4345 (package
4346 (name "beets")
4347 (version "2.14.1")
4348 (source
4349 (origin
4350 (method url-fetch)
4351 (uri (pypi-uri "beets" version))
4352 (sha256
4353 (base32
4354 "199ralkvapdgk2jq32wm5h4c20k9fc9q1s23w2vdi4yhiszwfpdj"))))
4355 (build-system pyproject-build-system)
4356 (arguments
4357 (list
4358 ;; tests: 2780 passed, 138 skipped, 2 deselected, 11 xfailed, 93
4359 ;; warnings, 8 subtests
4360 #:test-flags
4361 ;; Network access is required.
4362 #~(list "-k" "not test_merge_duplicate_album")
4363 #:phases
4364 #~(modify-phases %standard-phases
4365 (add-after 'unpack 'set-HOME
4366 (lambda _
4367 (setenv "HOME" (string-append (getcwd) "/tmp"))))
4368 ;; Wrap the executable, so it can find python-gi (aka
4369 ;; pygobject) and gstreamer plugins.
4370 (add-after 'wrap 'wrap-typelib
4371 (lambda _
4372 (wrap-program (string-append #$output "/bin/beet")
4373 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix
4374 (,(getenv "GST_PLUGIN_SYSTEM_PATH")))
4375 `("GI_TYPELIB_PATH" ":" prefix
4376 (,(getenv "GI_TYPELIB_PATH"))))))
4377 (add-after 'wrap 'install-completion
4378 (lambda _
4379 (let ((completion-path
4380 (string-append
4381 #$output "/share/bash-completion/completions/beet")))
4382 (mkdir-p (dirname completion-path))
4383 (with-output-to-file completion-path
4384 (lambda _ (invoke (string-append #$output "/bin/beet")
4385 "completion")))))))))
4386 (native-inputs
4387 (list gobject-introspection
4388 python-factory-boy
4389 python-flask
4390 python-hatchling
4391 python-mock
4392 python-py7zr
4393 python-pytest
4394 python-pytest-flask
4395 python-requests-mock
4396 python-responses
4397 python-setuptools))
4398 (inputs
4399 (list bash-minimal
4400 gst-plugins-base
4401 gst-plugins-good
4402 gstreamer))
4403 (propagated-inputs
4404 (list python-confuse
4405 python-jellyfish
4406 python-lap
4407 python-mediafile
4408 python-musicbrainzngs
4409 python-numpy
4410 python-packaging
4411 python-platformdirs
4412 python-pyyaml
4413 python-typing-extensions
4414 python-unidecode
4415 ;; [optional]
4416 python-beautifulsoup4 ; For lyrics.
4417 python-discogs-client ; For discogs.
4418 python-mpd2 ; For mpdstats.
4419 python-mutagen ; For scrub.
4420 python-langdetect ; For lyrics.
4421 python-pillow ; For fetchart, embedart, thumbnails.
4422 python-pyacoustid ; For chroma.
4423 python-pygobject ; For bpd, replaygain.
4424 python-pylast ; For lastgenre, lastimport.
4425 python-pyxdg ; For thumbnails.
4426 python-rarfile ; For import.
4427 python-reflink ; For reflink.
4428 python-requests
4429 python-requests-oauthlib ; For beatport.
4430 python-requests-ratelimiter
4431 python-titlecase)) ; For titlecase.
4432 (home-page "https://beets.io")
4433 (synopsis "Music organizer")
4434 (description "The purpose of beets is to get your music collection
4435right once and for all. It catalogs your collection, automatically
4436improving its metadata as it goes using the MusicBrainz database.
4437Then it provides a variety of tools for manipulating and accessing
4438your music.")
4439 (license license:expat)))
4440
4441(define-public beets-beetcamp
4442 (package
4443 (name "beets-beetcamp")
4444 (version "0.25.0")
4445 (source
4446 (origin
4447 (method git-fetch)
4448 (uri (git-reference
4449 (url "https://github.com/snejus/beetcamp")
4450 (commit version)))
4451 (file-name (git-file-name name version))
4452 (sha256
4453 (base32 "1nqnacj2q3kvzb1gl4qsmw2a1a34m2y7cia4c11bxb9x9mrpmnxq"))))
4454 (build-system pyproject-build-system)
4455 ;; Tests need access to https://bandcamp.com/album/hello.
4456 (arguments (list #:tests? #f))
4457 (propagated-inputs (list beets
4458 python-httpx
4459 python-packaging
4460 python-pycountry))
4461 (native-inputs (list python-poetry-core))
4462 (home-page "https://github.com/snejus/beetcamp")
4463 (synopsis "Bandcamp plugin for beets")
4464 (description
4465 "This plugin for beets automatically obtains tag data from @uref{Bandcamp,
4466https://bandcamp.com/}. It's also capable of getting song lyrics and album art
4467using the beets FetchArt plugin.")
4468 (license license:gpl2)))
4469
4470(define-public milkytracker
4471 (package
4472 (name "milkytracker")
4473 (version "1.05.01")
4474 (source (origin
4475 (method git-fetch)
4476 (uri (git-reference
4477 (url "https://github.com/milkytracker/MilkyTracker")
4478 (commit (string-append "v" version))))
4479 (file-name (git-file-name name version))
4480 (sha256
4481 (base32
4482 "138mgvxly769jfk5l7yjydfqa6lwsn87p2gmyqcxr3yhfvvp4lnz"))
4483 (modules '((guix build utils)))
4484 ;; Remove non-FSDG compliant sample songs.
4485 (snippet
4486 '(begin
4487 (delete-file-recursively "resources/music")
4488 (substitute* "CMakeLists.txt"
4489 (("add_subdirectory\\(resources/music\\)") ""))))))
4490 (build-system cmake-build-system)
4491 (arguments
4492 '(#:tests? #f ; no check target
4493 ;; This flag ensures that MilkyTracker links with the JACK library.
4494 #:configure-flags '("-DCMAKE_CXX_FLAGS=-ljack")))
4495 (inputs
4496 (list alsa-lib
4497 lhasa
4498 jack-2
4499 rtmidi-4.0
4500 sdl2
4501 zlib
4502 zziplib))
4503 (native-inputs
4504 (list pkg-config))
4505 (synopsis "Music tracker for working with .MOD/.XM module files")
4506 (description "MilkyTracker is a music application for creating .MOD and
4507.XM module files. It attempts to recreate the module replay and user
4508experience of the popular DOS program Fasttracker II, with special playback
4509modes available for improved Amiga ProTracker 2/3 compatibility.")
4510 (home-page "https://milkytracker.titandemo.org/")
4511 ;; 'src/milkyplay' is under Modified BSD, the rest is under GPL3 or later.
4512 (license (list license:bsd-3 license:gpl3+))))
4513
4514(define-public schismtracker
4515 (package
4516 (name "schismtracker")
4517 (version "20221201")
4518 (source (origin
4519 (method git-fetch)
4520 (uri (git-reference
4521 (url "https://github.com/schismtracker/schismtracker")
4522 (commit version)))
4523 (file-name (git-file-name name version))
4524 (sha256
4525 (base32
4526 "11yy5zrdfvnwzwdwmc3s3lx1ymwiyp1si5mmv4h9qxipd9j96ijp"))
4527 (modules '((guix build utils)))
4528 (snippet
4529 ;; Remove use of __DATE__ and __TIME__ for reproducibility.
4530 #~(substitute* "schism/version.c"
4531 (("Schism Tracker built %s %s.*$")
4532 (string-append
4533 "Schism Tracker version " #$version "\") ;"))))))
4534 (build-system gnu-build-system)
4535 (arguments
4536 (list #:configure-flags #~(list "--with-flac=yes" "--with-x11=no")
4537 #:phases #~(modify-phases %standard-phases
4538 (add-before 'configure 'link-libm
4539 (lambda _
4540 (setenv "LIBS" "-lm"))))))
4541 (native-inputs
4542 (list autoconf automake python))
4543 (inputs
4544 (list alsa-lib ; for asound dependency
4545 flac
4546 sdl2))
4547 (home-page "https://schismtracker.org")
4548 (synopsis "Oldschool sample-based music composition tool")
4549 (description
4550 "Schism Tracker is a reimplementation of Impulse Tracker, a program used to
4551create high quality music without the requirements of specialized, expensive
4552equipment, and with a unique \"finger feel\" that is difficult to replicate in
4553part. The player is based on a highly modified version of the ModPlug engine,
4554with a number of bugfixes and changes to improve IT playback.")
4555 (license license:gpl2+)))
4556
4557(define-public sooperlooper
4558 (package
4559 (name "sooperlooper")
4560 (version "1.7.8")
4561 (source
4562 (origin
4563 (method url-fetch)
4564 (uri (string-append "https://sonosaurus.com/sooperlooper"
4565 "/sooperlooper-" version ".tar.gz"))
4566 (sha256
4567 (base32 "0dd2kryizwrzndbwafpbddf9w2ghw9gfmb8nyss5hll70b1dx59f"))))
4568 (build-system gnu-build-system)
4569 (arguments
4570 (list
4571 #:phases
4572 #~(modify-phases %standard-phases
4573 (add-after 'unpack 'add-sigc++-includes
4574 (lambda* (#:key inputs #:allow-other-keys)
4575 (let ((sig (search-input-directory inputs "include/sigc++-2.0"))
4576 (xml (search-input-directory inputs "include/libxml2"))
4577 (cwd (getcwd)))
4578 (setenv "CPATH"
4579 (string-append sig ":"
4580 sig "../../lib/sigc++-2.0/include:"
4581 xml ":"
4582 cwd "/libs/pbd:"
4583 cwd "/libs/midi++:"
4584 (or (getenv "CPATH") ""))))
4585 (substitute* '("src/control_osc.hpp"
4586 "src/gui/app_frame.hpp"
4587 "src/gui/config_panel.hpp"
4588 "src/gui/keys_panel.hpp"
4589 "src/gui/latency_panel.hpp"
4590 "src/gui/main_panel.hpp"
4591 "src/gui/midi_bind_panel.hpp"
4592 "src/gui/prefs_dialog.hpp")
4593 (("sigc\\+\\+/object.h")
4594 "sigc++/sigc++.h"))
4595 (substitute* '("src/engine.cpp"
4596 "src/gui/latency_panel.cpp"
4597 "src/gui/looper_panel.cpp"
4598 "src/gui/main_panel.cpp")
4599 (("(\\(| )bind " _ pre)
4600 (string-append pre "sigc::bind ")))))
4601 (add-after 'unpack 'fix-xpm-warnings
4602 (lambda _
4603 (substitute* (find-files "." "\\.xpm$")
4604 (("static char") "static const char"))))
4605 (add-after 'unpack 'fix-deprecated-functions
4606 (lambda _
4607 (substitute* (find-files "src/gui" "\\.cpp$")
4608 (("^.*SetVirtualSizeHints.*$" ) "")))))))
4609 (inputs
4610 (list jack-1
4611 alsa-lib
4612 wxwidgets
4613 libsndfile
4614 libsamplerate
4615 liblo
4616 rubberband
4617 libxml2
4618 libsigc++-2
4619 ncurses))
4620 (native-inputs
4621 (list pkg-config))
4622 (home-page "https://sonosaurus.com/sooperlooper/")
4623 (synopsis "Live looping sampler")
4624 (description
4625 "SooperLooper is a live looping sampler capable of immediate loop
4626recording, overdubbing, multiplying, reversing and more. It allows for
4627multiple simultaneous multi-channel loops limited only by your computer's
4628available memory.")
4629 (license license:gpl2+)))
4630
4631(define-public midicsv
4632 (package
4633 (name "midicsv")
4634 (version "1.1")
4635 (source (origin
4636 (method url-fetch)
4637 (uri (string-append "https://www.fourmilab.ch/webtools/midicsv/"
4638 name "-" version ".tar.gz"))
4639 (sha256
4640 (base32
4641 "1vvhk2nf9ilfw0wchmxy8l13hbw9cnpz079nsx5srsy4nnd78nkw"))))
4642 (build-system gnu-build-system)
4643 (arguments
4644 `(#:phases (modify-phases %standard-phases (delete 'configure))
4645 #:make-flags (list "CC=gcc" (string-append "INSTALL_DEST=" %output))))
4646 (synopsis "Convert MIDI files to and from CSV")
4647 (description
4648 "Midicsv reads a standard MIDI file and decodes it into a comma-separated
4649value file (CSV), which preserves all the information in the MIDI file. The
4650ASCII CSV file may be loaded into a spreadsheet or database application, or
4651processed by a program to transform the MIDI data (for example, to key
4652transpose a composition or extract a track from a multi-track sequence). A
4653CSV file in the format created by midicsv may be converted back into a
4654standard MIDI file with the csvmidi program.")
4655 (home-page "https://www.fourmilab.ch/webtools/midicsv/")
4656 (license license:public-domain)))
4657
4658(define-public mididings
4659 (package
4660 (name "mididings")
4661 (version "20250818")
4662 (source (origin
4663 (method git-fetch)
4664 (uri (git-reference
4665 (url "https://github.com/mididings/mididings")
4666 (commit version)))
4667 (file-name (git-file-name name version))
4668 (sha256
4669 (base32
4670 "1ardf61zkgh0ikyfjwvhaznlgsdkhh4vzcqvcpvmh0h5mk0b40rg"))))
4671 (build-system meson-build-system)
4672 (arguments
4673 (list
4674 #:phases
4675 #~(modify-phases %standard-phases
4676 (add-after 'unpack 'build-manpages
4677 (lambda _
4678 (with-directory-excursion "doc/man"
4679 (for-each (lambda (doc)
4680 (system (format #false
4681 "scdoc < ~a.scd > ~a.1" doc doc)))
4682 '(livedings mididings send_midi)))))
4683 (add-after 'install 'wrap-executables
4684 (lambda _
4685 (for-each (lambda (file)
4686 (wrap-program file
4687 `("GUIX_PYTHONPATH" ":" prefix
4688 (,(string-append #$output "/lib/python"
4689 #$(version-major+minor
4690 (package-version python))
4691 "/site-packages")
4692 ,(getenv "GUIX_PYTHONPATH")))))
4693 (find-files (string-append #$output "/bin"))))))))
4694 (inputs
4695 (list alsa-lib
4696 boost
4697 jack-2
4698 python
4699 `(,python "tk")
4700 python-dbus-1.2
4701 python-decorator
4702 python-pyinotify
4703 python-pyliblo3
4704 python-pysmf))
4705 (native-inputs
4706 (list python-pytest
4707 python-setuptools
4708 python-wheel
4709 pkg-config
4710 scdoc))
4711 (home-page "https://github.com/mididings/mididings")
4712 (synopsis "MIDI router and processor")
4713 (description
4714 "mididings is a MIDI router/processor based on Python, supporting ALSA and
4715JACK MIDI. Features include:
4716
4717@itemize
4718@item MIDI routing and filtering; filter events depending on their event type,
4719 channel, note number, velocity, etc., and freely route them between an
4720 arbitrary number of input and output ports.
4721@item Modifying and converting MIDI events; transpose notes, apply velocity
4722 curves, change controller values and ranges, or convert events to any other
4723 MIDI event type. mididings also includes more complex functions like a
4724 diatonic harmonizer, floating split points, latched notes, and more.
4725@item Seamless switching between patches; set up different \"scenes\", each
4726 with its own MIDI routing and processing, and switch between them at any time,
4727 even while playing. Switching scenes does not affect notes already held, and
4728 does not result in dropouts or stuck notes!
4729@item MIDI event monitoring, running external commands; print MIDI event data
4730 to the console to help debugging your patches and configuring your MIDI
4731 controllers. In addition to its MIDI output, mididings can also execute shell
4732 commands and send OSC or DBUS messages.
4733@end itemize")
4734 (license license:gpl2+)))
4735
4736(define-public gx-guvnor-lv2
4737 (package
4738 (name "gx-guvnor-lv2")
4739 (version "0.1")
4740 (source (origin
4741 (method git-fetch)
4742 (uri (git-reference
4743 (url "https://github.com/brummer10/GxGuvnor.lv2")
4744 (commit (string-append "v" version))))
4745 (file-name (string-append name "-" version "-checkout"))
4746 (sha256
4747 (base32
4748 "1wa5070j40p7f0b3kr259pzm99xb6cf2badr2capayjvgayd6gnm"))))
4749 (build-system gnu-build-system)
4750 (arguments
4751 `(;; The check target is used only to output a warning.
4752 #:tests? #f
4753 #:make-flags
4754 (list (string-append "DESTDIR=" (assoc-ref %outputs "out")))
4755 #:phases
4756 (modify-phases %standard-phases
4757 (replace 'configure
4758 (lambda _
4759 (substitute* "Makefile"
4760 (("INSTALL_DIR = .*") "INSTALL_DIR=/lib/lv2\n")
4761 (("install : all") "install :"))
4762 #t)))))
4763 (inputs
4764 (list lv2))
4765 (home-page "https://github.com/brummer10/GxGuvnor.lv2")
4766 (synopsis "Overdrive/distortion pedal simulation")
4767 (description "This package provides the LV2 plugin \"GxGuvnor\", a
4768simulation of an overdrive or distortion pedal for guitars.")
4769 ;; The LICENSE file says GPLv3 but the license headers in the files say
4770 ;; GPLv2 or later. The whole project is released under GPLv3 or later
4771 ;; according to https://github.com/brummer10/GxGuvnor.lv2/issues/1
4772 (license license:gpl3+)))
4773
4774(define-public gx-vbass-preamp-lv2
4775 (let ((commit "f6a01c22fea71b155a797853c23653137ac89c1c")
4776 (revision "3"))
4777 (package (inherit gx-guvnor-lv2)
4778 (name "gx-vbass-preamp-lv2")
4779 (version (git-version "0" revision commit))
4780 (source (origin
4781 (method git-fetch)
4782 (uri (git-reference
4783 (url "https://github.com/brummer10/GxVBassPreAmp.lv2")
4784 (commit commit)))
4785 (sha256
4786 (base32
4787 "1ssa2xkppn7cn8lfvglb6brm5qsd7kysmabfj34qrqbywf5hdisw"))
4788 (file-name (git-file-name name version))))
4789 (arguments
4790 (list
4791 ;; The check target is used only to output a warning.
4792 #:tests? #false
4793 #:make-flags
4794 #~(list (string-append "DESTDIR=" #$output)
4795 (string-append "CC=" #$(cc-for-target)))
4796 #:phases
4797 '(modify-phases %standard-phases
4798 (replace 'configure
4799 (lambda _
4800 (substitute* "Makefile"
4801 (("INSTALL_DIR = .*") "INSTALL_DIR=/lib/lv2\n")
4802 (("install : all") "install :")))))))
4803 (inputs
4804 (list lv2 gtk+))
4805 (native-inputs
4806 (list pkg-config))
4807 (home-page "https://github.com/brummer10/GxVBassPreAmp.lv2")
4808 (synopsis "Simulation of the Vox Venue Bass 100 Pre Amp Section")
4809 (description "This package provides the LV2 plugin \"GxVBassPreAmp\", a
4810pre-amplifier simulation modelled after the 1984 Vox Venue Bass 100 Pre Amp
4811Section."))))
4812
4813(define-public gx-overdriver-lv2
4814 (let ((commit "ed71801987449414bf3adaa0dbfac68e8775f1ce")
4815 (revision "1"))
4816 (package (inherit gx-guvnor-lv2)
4817 (name "gx-overdriver-lv2")
4818 (version (string-append "0-" revision "." (string-take commit 9)))
4819 (source (origin
4820 (method git-fetch)
4821 (uri (git-reference
4822 (url "https://github.com/brummer10/GxOverDriver.lv2")
4823 (commit commit)))
4824 (sha256
4825 (base32
4826 "13j614jh525fbkby79nnzwj0z1ac0c9wclyn5pfqvkmx6a7j24r8"))
4827 (file-name (string-append name "-" version "-checkout"))))
4828 (home-page "https://github.com/brummer10/GxOverDriver.lv2")
4829 (synopsis "Overdrive effect with level and tone control")
4830 (description "This package provides the LV2 plugin \"GxOverDriver\", an
4831overdrive effect."))))
4832
4833(define-public gx-tone-mender-lv2
4834 (let ((commit "b6780b4a3e4782b3ed0e5882d6788f178aed138f")
4835 (revision "1"))
4836 (package (inherit gx-guvnor-lv2)
4837 (name "gx-tone-mender-lv2")
4838 (version (string-append "0-" revision "." (string-take commit 9)))
4839 (source (origin
4840 (method git-fetch)
4841 (uri (git-reference
4842 (url "https://github.com/brummer10/GxToneMender.lv2")
4843 (commit commit)))
4844 (sha256
4845 (base32
4846 "07qdcfsvv2vdnfnjh91pfgvjdcs5y91nvwfm8c0z8fp6b4bk7a9q"))
4847 (file-name (string-append name "-" version "-checkout"))))
4848 (home-page "https://github.com/brummer10/GxToneMender.lv2")
4849 (synopsis "Clean boost with a 3-knob tonestack")
4850 (description "This package provides the LV2 plugin \"GxToneMender\", a
4851clean boost effect with a 3-knob tonestack."))))
4852
4853(define-public gx-push-pull-lv2
4854 (let ((commit "7f76ae2068498643ac8671ee0930b13ee3fd8eb5")
4855 (revision "1"))
4856 (package (inherit gx-guvnor-lv2)
4857 (name "gx-push-pull-lv2")
4858 (version (string-append "0-" revision "." (string-take commit 9)))
4859 (source (origin
4860 (method git-fetch)
4861 (uri (git-reference
4862 (url "https://github.com/brummer10/GxPushPull.lv2")
4863 (commit commit)))
4864 (sha256
4865 (base32
4866 "12f5hwck2irph0gjbj8xy8jqcqdwb8l1hlwf29k0clz52h1jhb5q"))
4867 (file-name (string-append name "-" version "-checkout"))))
4868 (home-page "https://github.com/brummer10/GxPushPull.lv2")
4869 (synopsis "Octave up push pull transistor fuzz simulation")
4870 (description "This package provides the LV2 plugin \"GxPushPull\", a
4871simulation of a push pull transistor fuzz effect with added high octave."))))
4872
4873(define-public gx-suppa-tone-bender-lv2
4874 (package (inherit gx-guvnor-lv2)
4875 (name "gx-suppa-tone-bender-lv2")
4876 (version "0.1")
4877 (source (origin
4878 (method git-fetch)
4879 (uri (git-reference
4880 (url "https://github.com/brummer10/GxSuppaToneBender.lv2")
4881 (commit (string-append "v" version))))
4882 (file-name (string-append name "-" version "-checkout"))
4883 (sha256
4884 (base32
4885 "01x6bjmllkmvxfzc5xwdix7w021j26js71awv728cxsmkxgqw0zy"))))
4886 (home-page "https://github.com/brummer10/GxSuppaToneBender.lv2")
4887 (synopsis "Simulation of the Vox Suppa Tone Bender pedal")
4888 (description "This package provides the LV2 plugin
4889\"GxSuppaToneBender\", a simulation modelled after the Vox Suppa Tone Bender
4890pedal.")))
4891
4892(define-public gx-saturator-lv2
4893 (let ((commit "2142b14a86a4e6f2ab69446160d90f23b1ed3939")
4894 (revision "4"))
4895 (package (inherit gx-vbass-preamp-lv2)
4896 (name "gx-saturator-lv2")
4897 (version (git-version "0" revision commit))
4898 (source (origin
4899 (method git-fetch)
4900 (uri (git-reference
4901 (url "https://github.com/brummer10/GxSaturator.lv2")
4902 (commit commit)))
4903 (sha256
4904 (base32
4905 "16mq0k50pachg61vw88hjmyla5zwy0drfhi4d3f9hviivcfigg03"))
4906 (file-name (git-file-name name version))))
4907 (home-page "https://github.com/brummer10/GxSaturator.lv2")
4908 (synopsis "Saturation effect")
4909 (description "This package provides the LV2 plugin \"GxSaturator\", a
4910saturation effect."))))
4911
4912(define-public gx-hyperion-lv2
4913 (package (inherit gx-guvnor-lv2)
4914 (name "gx-hyperion-lv2")
4915 (version "0.1")
4916 (source (origin
4917 (method git-fetch)
4918 (uri (git-reference
4919 (url "https://github.com/brummer10/GxHyperion.lv2")
4920 (commit (string-append "v" version))))
4921 (file-name (string-append name "-" version "-checkout"))
4922 (sha256
4923 (base32
4924 "1vx79s6s9if117y2g0ppdja2sv2wcny6xcfl3j1z4cipahnildxf"))))
4925 (home-page "https://github.com/brummer10/GxHyperion.lv2")
4926 (synopsis "Simulation of the Hyperion Fuzz pedal")
4927 (description "This package provides the LV2 plugin \"GxHyperion\", a
4928simulation of the Hyperion Fuzz pedal.")))
4929
4930(define-public gx-voodoo-fuzz-lv2
4931 (package (inherit gx-guvnor-lv2)
4932 (name "gx-voodoo-fuzz-lv2")
4933 (version "0.1")
4934 (source (origin
4935 (method git-fetch)
4936 (uri (git-reference
4937 (url "https://github.com/brummer10/GxVoodoFuzz.lv2")
4938 (commit (string-append "v" version))))
4939 (file-name (string-append name "-" version "-checkout"))
4940 (sha256
4941 (base32
4942 "1v0scphivri1fk4hl20j13f92i48mnx1zsil4hgnadsmm4nsfw43"))))
4943 (home-page "https://github.com/brummer10/GxVoodoFuzz.lv2")
4944 (synopsis "Fuzz effect modelled after the Voodoo Lab SuperFuzz")
4945 (description "This package provides the LV2 plugin \"GxVoodooFuzz\", a
4946simulation modelled after the Voodoo Lab SuperFuzz pedal. It's basically a
4947Bosstone circuit, followed by the tone control of the FoxToneMachine in
4948parallel with a DarkBooster, followed by a volume control.")))
4949
4950(define-public gx-super-fuzz-lv2
4951 (package (inherit gx-guvnor-lv2)
4952 (name "gx-super-fuzz-lv2")
4953 (version "0.1")
4954 (source (origin
4955 (method git-fetch)
4956 (uri (git-reference
4957 (url "https://github.com/brummer10/GxSuperFuzz.lv2")
4958 (commit (string-append "v" version))))
4959 (file-name (string-append name "-" version "-checkout"))
4960 (sha256
4961 (base32
4962 "1jlljd9hlgfflbiizq47lv1xbbgjyx3v835mf24zmh1q5zsw4np4"))))
4963 (home-page "https://github.com/brummer10/GxSuperFuzz.lv2")
4964 (synopsis "Fuzz effect modelled after the UniVox SuperFuzz")
4965 (description "This package provides the LV2 plugin \"GxSuperFuzz\", an
4966analog simulation of the UniVox SuperFuzz pedal. In this simulation the trim
4967pot, which is usually in the housing, is exposed as a control parameter. It
4968adjusts the amount of harmonics.")))
4969
4970(define-public gx-vintage-fuzz-master-lv2
4971 (package (inherit gx-guvnor-lv2)
4972 (name "gx-vintage-fuzz-master-lv2")
4973 (version "0.1")
4974 (source (origin
4975 (method git-fetch)
4976 (uri (git-reference
4977 (url "https://github.com/brummer10/GxVintageFuzzMaster.lv2")
4978 (commit (string-append "v" version))))
4979 (file-name (string-append name "-" version "-checkout"))
4980 (sha256
4981 (base32
4982 "02jb211z8rw2qr5r1z5mdxlqgiw6cbc319xpqplvn6k21c59mskv"))))
4983 (home-page "https://github.com/brummer10/GxVintageFuzzMaster.lv2")
4984 (synopsis "Fuzz effect simulation of the vintage Fuzz Master")
4985 (description "This package provides the LV2 plugin
4986\"GxVintageFuzzMaster\", a simulation of the vintage Fuzz Master pedal.")))
4987
4988(define-public gx-slow-gear-lv2
4989 (let ((commit "5d37e775b0feef1d82feee94e2a7a2d7e57efe2d")
4990 (revision "3"))
4991 (package (inherit gx-vbass-preamp-lv2)
4992 (name "gx-slow-gear-lv2")
4993 (version (string-append "0-" revision "." (string-take commit 9)))
4994 (source (origin
4995 (method git-fetch)
4996 (uri (git-reference
4997 (url "https://github.com/brummer10/GxSlowGear.lv2")
4998 (commit commit)))
4999 (sha256
5000 (base32
5001 "141mz69zkhk3lm54bb6wgpnghb92zm1ig7fv07240cmhydqji1q1"))
5002 (file-name (string-append name "-" version "-checkout"))))
5003 (home-page "https://github.com/brummer10/GxSlowGear.lv2")
5004 (synopsis "Slow gear audio effect")
5005 (description "This package provides the LV2 plugin \"GxSlowGear\", a
5006slow gear audio effect to produce volume swells."))))
5007
5008(define-public gx-switchless-wah-lv2
5009 (let ((commit "7b08691203314612999f0ce2328cdc1161cd6665")
5010 (revision "2"))
5011 (package (inherit gx-guvnor-lv2)
5012 (name "gx-switchless-wah-lv2")
5013 (version (string-append "0-" revision "." (string-take commit 9)))
5014 (source (origin
5015 (method git-fetch)
5016 (uri (git-reference
5017 (url "https://github.com/brummer10/GxSwitchlessWah.lv2")
5018 (commit commit)))
5019 (sha256
5020 (base32
5021 "04jqfpncmrrqn34p21w4v9m2x5a5wsqwbm4f3byxvq4vcibwxzk2"))
5022 (file-name (string-append name "-" version "-checkout"))))
5023 (home-page "https://github.com/brummer10/GxSwitchlessWah.lv2")
5024 (synopsis "Wah emulation with switchless activation")
5025 (description "This package provides the LV2 plugin \"GxSwitchlessWah\",
5026a simulation of an analog Wah pedal with switchless activation."))))
5027
5028(define-public rkrlv2
5029 ;; This commit corresponds to the beta_3 tag
5030 (let ((commit "7edcb4e29a358623bfd57fa2c27e5da60adfcec3")
5031 (revision "2"))
5032 (package
5033 (name "rkrlv2")
5034 (version (git-version "0" revision commit))
5035 (source (origin
5036 (method git-fetch)
5037 (uri (git-reference
5038 (url "https://github.com/ssj71/rkrlv2")
5039 (commit commit)))
5040 (sha256
5041 (base32
5042 "16i4ajrib7kb0abdcn4901g8a4lkwkp2fyqyms38dhqq84slyfjs"))
5043 (file-name (git-file-name name version))))
5044 (build-system cmake-build-system)
5045 (arguments '(#:tests? #f)) ; there are no tests
5046 (inputs
5047 (list fftw libsamplerate lv2))
5048 (native-inputs
5049 (list pkg-config))
5050 (home-page "https://github.com/ssj71/rkrlv2")
5051 (synopsis "Rakarrack effects ported to LV2 plugins")
5052 (description "This package provides the Rakarrack effects as LV2
5053plugins. The ports are done such that hopefully when Rakarrack gets an active
5054maintainer these will get merged into the original project.")
5055 (license license:gpl2))))
5056
5057(define-public mod-utilities
5058 (let ((commit "80ea3ea9f52fab7f191671f4810bf90fc955a046")
5059 (revision "2"))
5060 (package
5061 (name "mod-utilities")
5062 (version (string-append "0-" revision "." (string-take commit 9)))
5063 (source (origin
5064 (method git-fetch)
5065 (uri (git-reference
5066 (url "https://github.com/moddevices/mod-utilities")
5067 (commit commit)))
5068 (file-name (string-append name "-" version "-checkout"))
5069 (sha256
5070 (base32
5071 "1v55zmzmlg0ka7341x5lsvb44amy17vk27s669ps1basd1bk5s5v"))))
5072 (build-system gnu-build-system)
5073 (arguments
5074 `(#:tests? #f ; there are no tests
5075 #:make-flags
5076 (list (string-append "INSTALL_PATH="
5077 (assoc-ref %outputs "out")
5078 "/lib/lv2")
5079 (string-append "PREFIX=" (assoc-ref %outputs "out"))
5080 "CC=gcc")
5081 #:phases
5082 (modify-phases %standard-phases
5083 (delete 'configure))))
5084 (inputs
5085 (list lv2))
5086 (home-page "https://github.com/moddevices/mod-utilities")
5087 (synopsis "LV2 utility plugins")
5088 (description "This package provides LV2 audio utility plugins, such as
5089filters, crossovers, simple gain plugins without zipper noise, switch box
5090plugins, a switch trigger, a toggle switch, and a peakmeter.")
5091 (license license:gpl2+))))
5092
5093(define-public qmidiarp
5094 (package
5095 (name "qmidiarp")
5096 (version "0.7.1")
5097 (source (origin
5098 (method url-fetch)
5099 (uri (string-append "mirror://sourceforge/qmidiarp/qmidiarp/"
5100 version "/qmidiarp-" version ".tar.bz2"))
5101 (sha256
5102 (base32
5103 "0571y3b49dwcgxif0h4q5mlracm3wi338yawy0whmpdnpfzbvls0"))))
5104 (build-system gnu-build-system)
5105 (inputs
5106 (list alsa-lib cairo glu jack-2 liblo lv2 pango qtbase-5))
5107 (native-inputs
5108 (list pkg-config qttools-5))
5109 (home-page "https://qmidiarp.sourceforge.net/")
5110 (synopsis "MIDI arpeggiator")
5111 (description "QMidiArp is an advanced MIDI arpeggiator, programmable step
5112sequencer and LFO. It can hold any number of arpeggiator, sequencer, or LFO
5113modules running in parallel.")
5114 (license license:gpl2+)))
5115
5116(define-public qmidiroute
5117 (package
5118 (name "qmidiroute")
5119 (version "0.4.0")
5120 (source (origin
5121 (method url-fetch)
5122 (uri (string-append "mirror://sourceforge/alsamodular/QMidiRoute/"
5123 version "/qmidiroute-" version ".tar.bz2"))
5124 (sha256
5125 (base32
5126 "19v1ppbglgl3z9v7xdqc0k33w71cqq8a7d6ihvfs7iz77dygrih9"))))
5127 (build-system gnu-build-system)
5128 (arguments
5129 `(#:configure-flags
5130 (list "--enable-qt5")))
5131 (inputs
5132 (list qtbase-5 alsa-lib))
5133 (native-inputs
5134 (list pkg-config qttools-5))
5135 (home-page "https://alsamodular.sourceforge.net/")
5136 (synopsis "MIDI event router and filter")
5137 (description "QMidiRoute is a MIDI event router and filter. MIDI note,
5138control change, program change and pitch bend events are logged, and can be
5139filtered, redirected and transformed into other events according to MIDI maps
5140defined as tabs in the main control surface.")
5141 (license license:gpl2+)))
5142
5143(define-public seq24
5144 (package
5145 (name "seq24")
5146 (version "0.9.3")
5147 (source (origin
5148 (method url-fetch)
5149 (uri (string-append "https://launchpad.net/seq24/trunk/"
5150 version "/+download/seq24-"
5151 version ".tar.bz2"))
5152 (sha256
5153 (base32
5154 "12dphdhnvfk1k0vmagi1v2lhyxjyj1j3cz6ksjw0ydcvid1x8ap2"))
5155 (patches (search-patches "seq24-rename-mutex.patch"))))
5156 (build-system gnu-build-system)
5157 (inputs (list alsa-lib gtkmm-2 jack-2))
5158 (native-inputs (list pkg-config))
5159 (home-page "https://launchpad.net/seq24/")
5160 (synopsis "Real-time MIDI sequencer")
5161 (description "Seq24 is a real-time MIDI sequencer. It was created to
5162provide a very simple interface for editing and playing MIDI loops.")
5163 (license license:gpl2+)))
5164
5165(define-public python-discogs-client
5166 (package
5167 (name "python-discogs-client")
5168 (version "2.8")
5169 (source
5170 (origin
5171 (method git-fetch)
5172 (uri (git-reference
5173 (url "https://github.com/joalla/discogs_client")
5174 (commit (string-append "v" version))))
5175 (file-name (git-file-name name version))
5176 (sha256
5177 (base32 "1ga48ds2q4as8srmvhq3ri1w7p7pmrr4yswcp9nf5c1rwdy02qys"))))
5178 (build-system pyproject-build-system)
5179 (arguments (list #:test-backend #~'unittest))
5180 (native-inputs (list python-setuptools))
5181 (propagated-inputs (list python-dateutil python-oauthlib python-requests))
5182 (home-page "https://github.com/joalla/discogs_client")
5183 (synopsis "Python client for the Discogs API")
5184 (description
5185 "This is the continuation of the official Discogs API client for Python.
5186It enables you to query the Discogs database for information on artists,
5187releases, labels, users, Marketplace listings,and more. It also supports
5188OAuth 1.0a authorization, which allows you to change user data such as profile
5189information, collections and wantlists,inventory, and orders.")
5190 (license license:bsd-2)))
5191
5192(define-public libsmf
5193 (package
5194 (name "libsmf")
5195 (version "1.3")
5196 (source
5197 (origin
5198 (method url-fetch)
5199 ;; SF download page says development moved, but the link it points to
5200 ;; is gone (https://github.com/nilsgey/libsmf). Someone else adopted
5201 ;; it but made no release so far (https://github.com/stump/libsmf).
5202 (uri (string-append "mirror://sourceforge/libsmf/libsmf/"
5203 version "/libsmf-" version ".tar.gz"))
5204 (sha256
5205 (base32
5206 "16c0n40h0r56gzbh5ypxa4dwp296dan3jminml2qkb4lvqarym6k"))))
5207 (build-system gnu-build-system)
5208 (outputs '("out"
5209 "static")) ; 88KiB of .a files
5210 (arguments
5211 (list
5212 #:phases
5213 #~(modify-phases %standard-phases
5214 (add-after 'install 'move-static-libraries
5215 (lambda _
5216 ;; Move static libraries to the "static" output.
5217 (let ((lib (string-append #$output "/lib"))
5218 (slib (string-append #$output:static "/lib")))
5219 (mkdir-p slib)
5220 (for-each (lambda (file)
5221 (install-file file slib)
5222 (delete-file file))
5223 (find-files lib "\\.a$"))))))))
5224 (inputs
5225 (list readline glib))
5226 (native-inputs
5227 (list doxygen pkg-config))
5228 (home-page "http://libsmf.sourceforge.net/")
5229 (synopsis "Standard MIDI File format library")
5230 (description
5231 "LibSMF is a C library for handling SMF (\"*.mid\") files. It
5232transparently handles conversions between time and pulses, tempo map handling
5233and more. Full API documentation and examples are included.")
5234 (license license:bsd-2)))
5235
5236(define-public lmms
5237 (package
5238 (name "lmms")
5239 (version "1.2.2")
5240 (source
5241 (origin
5242 (method git-fetch)
5243 (uri (git-reference
5244 (url "https://github.com/LMMS/lmms")
5245 (commit (string-append "v" version))))
5246 (file-name (git-file-name name version))
5247 (sha256
5248 (base32
5249 "11xgf461cnmq0jkgdgx5bddi87ammpik4whg1m4fcvd3i0d5i601"))
5250 (modules '((guix build utils)))
5251 ;; Include carla headers from the system.
5252 (snippet
5253 '(substitute* "plugins/carlabase/carla.h"
5254 (("\"CarlaNativePlugin\\.h\"")
5255 "<carla/includes/CarlaNativePlugin.h>")
5256 (("\"CarlaBackend\\.h\"") "<carla/CarlaBackend.h>")
5257 (("\"CarlaNative\\.h\"") "<carla/includes/CarlaNative.h>")
5258 (("\"CarlaUtils\\.h\"") "<carla/CarlaUtils.h>")))))
5259 (build-system qt-build-system)
5260 (arguments
5261 (list
5262 #:tests? #f ; no tests
5263 ;; Qt 5 support must be explicitly enabled in the 1.2 stable versions of
5264 ;; LMMS, so try removing "-DWANT_QT5=ON" in later versions.
5265 ;; Also, explicitly disabling VST support gets rid of the in-tree
5266 ;; dependency on qt5-x11embed.
5267 #:configure-flags '(list "-DWANT_QT5=ON" "-DWANT_VST=OFF")
5268 #:phases
5269 #~(modify-phases %standard-phases
5270 (add-after 'unpack 'fix-carla-export
5271 ;; Taken from NixOS package definition.
5272 (lambda _
5273 (substitute* "plugins/carlabase/carla.h"
5274 (("CARLA_EXPORT")
5275 "CARLA_API_EXPORT"))))
5276 (add-after 'unpack 'unpack-rpmalloc
5277 (lambda* (#:key inputs #:allow-other-keys)
5278 (copy-recursively (assoc-ref inputs "rpmalloc")
5279 "src/3rdparty/rpmalloc/rpmalloc")))
5280 (add-after 'unpack 'patch-stk-path
5281 (lambda* (#:key inputs #:allow-other-keys)
5282 (substitute* "cmake/modules/FindSTK.cmake"
5283 (("/usr") (assoc-ref inputs "stk")))
5284 (substitute* "src/core/ConfigManager.cpp"
5285 (("/usr") (assoc-ref inputs "stk")))))
5286 (add-before 'configure 'set-ldflags
5287 (lambda _
5288 (setenv "LDFLAGS"
5289 (string-append
5290 "-Wl,-rpath=\"" #$output "/lib/lmms"
5291 ":" #$output "/lib/lmms/ladspa" "\"")))))))
5292 (native-inputs
5293 `(("pkg-config" ,pkg-config)
5294 ("qttools-5" ,qttools-5)
5295 ;; rpmalloc is a public domain memory allocator. This version specified
5296 ;; below is the version required by LMMS.
5297 ;; To get the new commit of rpmalloc to use here, run
5298 ;; `git submodule--helper list | grep rpmalloc | cut -f2 -d' '`
5299 ;; in the cloned LMMS repository.
5300 ("rpmalloc"
5301 ,(origin
5302 (method git-fetch)
5303 (uri (git-reference
5304 (url "https://github.com/mjansson/rpmalloc")
5305 (commit "b5bdc18051bb74a22f0bde4bcc90b01cf590b496")))
5306 (sha256
5307 (base32
5308 "0g9pls46iggg7rdm65vzfj8nyr3v2n5xkp54c4qbh9hhalpsw4ay"))))))
5309 (inputs
5310 (list alsa-lib
5311 carla
5312 fftwf
5313 fltk
5314 fluidsynth
5315 freetype
5316 jack-2
5317 ladspa
5318 lame
5319 libgig
5320 libogg
5321 libsamplerate
5322 libsndfile
5323 libsoundio
5324 libvorbis
5325 libxft
5326 portaudio
5327 pulseaudio
5328 qtwayland-5
5329 qtx11extras
5330 sdl
5331 stk))
5332 (home-page "https://lmms.io/")
5333 (synopsis "Music composition tool")
5334 (description "LMMS is a digital audio workstation. It includes tools for
5335sequencing melodies and beats and for mixing and arranging songs. LMMS
5336includes instruments based on audio samples and various soft sythesizers. It
5337can receive input from a MIDI keyboard.")
5338 (license license:gpl2+)))
5339
5340;; This version tracks the latest commit from master branch.
5341(define-public lmms-next
5342 (let ((commit "83313e737d3137f7939f3daa9063a94a1ac01f7c")
5343 (revision "0"))
5344 (package/inherit lmms
5345 (name "lmms-next")
5346 (version (git-version "1.3.0-alpha.1" revision commit))
5347 (source
5348 (origin
5349 (inherit (package-source lmms))
5350 (uri (git-reference
5351 (url "https://github.com/LMMS/lmms")
5352 (commit commit)
5353 ;; Clone recursively only for the optional plugins. The 3rd
5354 ;; party libraries will be deleted by the snippet.
5355 (recursive? #t)))
5356 (file-name (git-file-name name version))
5357 (sha256
5358 (base32 "1mpp449rvn9f10bcxhpmxfinvj3jdv4s6qjhlp0sj9l783pv3h69"))
5359 (modules '((guix build utils)))
5360 (snippet
5361 '(begin
5362 ;; Delete the bundled 3rd party libraries.
5363 (for-each delete-file-recursively
5364 (list "plugins/CarlaBase/carla"
5365 "plugins/OpulenZ/adplug"
5366 "plugins/Xpressive/exprtk"
5367 "src/3rdparty"))
5368 ;; Do not check submodules.
5369 (substitute* "CMakeLists.txt"
5370 ((".*CheckSubmodules.*") "")
5371 ;; Do not use the bundled weakjack.
5372 (("JACK libraries\" ON") "JACK libraries\" OFF"))
5373 (substitute* "src/CMakeLists.txt"
5374 ;; Do not add 3rd party libraries.
5375 ((".*3rdparty.*") "")
5376 ;; Use adplug and ringbuffer from the system.
5377 (("\\$\\{EXTRA_LIBRARIES\\}" all)
5378 (string-append all
5379 "\n\tadplug"
5380 "\n\tringbuffer")))
5381 (with-directory-excursion "plugins"
5382 ;; Use carla from the system.
5383 (substitute* "CarlaBase/Carla.h"
5384 (("#include <CarlaDefines")
5385 "#include <carla/includes/CarlaDefines")
5386 (("#include <CarlaNative")
5387 "#include <carla/includes/CarlaNative")
5388 (("#include <CarlaBackend") "#include <carla/CarlaBackend")
5389 (("#include <CarlaUtils") "#include <carla/CarlaUtils"))
5390 (with-directory-excursion "OpulenZ"
5391 ;; Do not use the bundled adplug.
5392 (substitute* "CMakeLists.txt"
5393 ((".*adplug .*") "")
5394 ((".*adplug/.*") "")
5395 (("^\\)") "")
5396 (("\\.png\"") ".png\"\n)"))
5397 ;; Use adplug from the system.
5398 (substitute* "OpulenZ.cpp"
5399 (("<opl\\.h>") "<adplug/opl.h>")
5400 (("<temuopl\\.h>") "<adplug/temuopl.h>")
5401 (("<mididata\\.h>") "<adplug/mididata.h>")))
5402 ;; Do not use the bundled hiir.
5403 (substitute* "SlewDistortion/CMakeLists.txt"
5404 (("TARGET_LINK_LIBRARIES\\(slewdistortion hiir\\)") ""))
5405 ;; Do not use the bundled exprtk.
5406 (substitute* "Xpressive/CMakeLists.txt"
5407 ((".*\\(exprtk .*") "")
5408 ((".*xpressive exprtk.*") "")))
5409 ;; Avoid "invalid conversion from 'const unsigned char*' to
5410 ;; 'unsigned char*'" error.
5411 (substitute* "plugins/OpulenZ/OpulenZ.cpp"
5412 (("unsigned char \\*inst") "const unsigned char *inst"))))))
5413 (arguments
5414 (substitute-keyword-arguments arguments
5415 ((#:qtbase _ #f) qtbase)
5416 ((#:configure-flags flags)
5417 #~(cons* "-DWANT_QT6=ON" (delete "-DWANT_QT5=ON" #$flags)))
5418 ((#:phases phases)
5419 #~(modify-phases #$phases
5420 (delete 'unpack-rpmalloc)
5421 (replace 'fix-carla-export
5422 ;; Taken from NixOS package definition.
5423 (lambda _
5424 (substitute* "plugins/CarlaBase/Carla.h"
5425 (("CARLA_EXPORT")
5426 "CARLA_API_EXPORT"))))))))
5427 (native-inputs
5428 (modify-inputs native-inputs
5429 (delete "rpmalloc")
5430 (replace "qttools" qttools)))
5431 (inputs
5432 (modify-inputs inputs
5433 (delete "qtx11extras")
5434 (replace "carla" carla-2.6)
5435 (replace "qtwayland" qtwayland)
5436 (replace "sdl12-compat" sdl2)
5437 (append adplug
5438 exprtk
5439 hiir
5440 libxml2
5441 lilv
5442 lv2
5443 perl
5444 perl-list-moreutils
5445 perl-xml-parser
5446 qtsvg
5447 ringbuffer
5448 suil)))
5449 (native-search-paths
5450 (list (search-path-specification
5451 (variable "LV2_PATH")
5452 (files '("lib/lv2"))))))))
5453
5454(define-public lmms-next-with-vst
5455 (package/inherit lmms-next
5456 (name "lmms-next-with-vst")
5457 (arguments
5458 (substitute-keyword-arguments arguments
5459 ((#:configure-flags flags)
5460 #~(cons* (string-append "-DWINE_LOCATIONS=" #$(wine-for-system))
5461 (delete "-DWANT_VST=OFF" #$flags)))))
5462 (inputs
5463 (modify-inputs inputs
5464 (append (wine-for-system))))))
5465
5466(define-public liquidsfz
5467 (package
5468 (name "liquidsfz")
5469 (version "0.3.1")
5470 (source (origin
5471 (method git-fetch)
5472 (uri (git-reference
5473 (url "https://github.com/swesterfeld/liquidsfz")
5474 (commit version)))
5475 (file-name (git-file-name name version))
5476 (sha256
5477 (base32
5478 "0kijisxv8f8ihv8rk5cg1cmdh29zkr7i2ghds6wz0iq9mdkga12s"))))
5479 (build-system gnu-build-system)
5480 (arguments
5481 (list
5482 #:configure-flags '(list "--enable-shared")
5483 #:phases
5484 '(modify-phases %standard-phases
5485 (replace 'bootstrap
5486 (lambda _
5487 ;; The default 'bootstrap' phase would run 'autogen.sh', which
5488 ;; would try to run ./configure and fail due to unpatched
5489 ;; shebangs.
5490 (invoke "autoreconf" "-v" "--install"))))))
5491 (native-inputs
5492 (list autoconf automake libtool pkg-config))
5493 (inputs
5494 (list jack-2 libsndfile lv2 readline))
5495 (home-page "https://github.com/swesterfeld/liquidsfz")
5496 (synopsis "Sampler library")
5497 (description "The main goal of liquidsfz is to provide an SFZ sampler
5498implementation library that is easy to integrate into other projects. A
5499standalone JACK client and an LV2 plugin is also available.")
5500 (license license:lgpl2.1+)))
5501
5502(define-public musescore
5503 (package
5504 (name "musescore")
5505 (version "4.6.5")
5506 (source
5507 (origin
5508 (method git-fetch)
5509 (uri (git-reference
5510 (url "https://github.com/musescore/MuseScore")
5511 (commit (string-append "v" version))))
5512 (file-name (git-file-name name version))
5513 (sha256
5514 (base32 "18ylvgc4izfgi9fn2bxz7i98jx02rbxjcv2cffbqhyhbv39izy4m"))))
5515 (build-system qt-build-system)
5516 (arguments
5517 (list
5518 #:qtbase qtbase ;for qt 6
5519 #:configure-flags
5520 #~(list
5521 "-DMUSE_APP_BUILD_MODE=release"
5522 ;; Disable the build and usage of the `/bin/crashpad_handler` utility -
5523 ;; it does automatic crash reporting and is distributed as a
5524 ;; pre-compiled binary in the source-tree of MuseScore:
5525 ;; https://github.com/musescore/MuseScore/issues/15571
5526 ;; Renamed from MUE_BUILD_CRASHPAD_CLIENT, MUE_BUILD_DIAGNOSTICS_MODULE
5527 ;; https://github.com/musescore/MuseScore/commit/6f269e8b072cca36cb76eb016cb60c1c1c2b9906
5528 "-DMUSE_MODULE_DIAGNOSTICS_CRASHPAD_CLIENT=OFF"
5529;;; These five lines asks that Guix' versions of system libraries are used.
5530 "-DMUE_COMPILE_USE_SYSTEM_FREETYPE=ON"
5531 "-DMUE_COMPILE_USE_SYSTEM_HARFBUZZ=ON"
5532 "-DMUE_COMPILE_USE_SYSTEM_TINYXML=ON"
5533 "-DMUE_COMPILE_USE_SYSTEM_OPUSENC=ON" ; Implies -DMUE_COMPILE_USE_SYSTEM_OPUS=ON
5534 "-DMUE_COMPILE_USE_SYSTEM_FLAC=ON"
5535 ;; Disable download of soundfont during build.
5536 "-DDOWNLOAD_SOUNDFONT=OFF"
5537 ;; Don't bundle Qt QML files, relevant really only for Darwin.
5538 "-DMUE_COMPILE_INSTALL_QTQML_FILES=OFF")
5539 ;; There are tests, but no simple target to run. The command used to
5540 ;; run them is:
5541 ;;
5542 ;; make debug && sudo make installdebug && cd \
5543 ;; build.debug/mtest && make && ctest
5544 ;;
5545 ;; Basically, it requires to start a whole new build process.
5546 ;; So we simply skip them.
5547 #:tests? #f))
5548 (native-inputs
5549 (list git-minimal/pinned
5550 `(,gtk+ "bin") ;for gtk-update-icon-cache
5551 pkg-config
5552 qttools))
5553 (inputs
5554 (list alsa-lib
5555 flac
5556 freetype
5557 harfbuzz
5558 jack-1
5559 lame
5560 libogg
5561 libopusenc
5562 libsndfile
5563 libvorbis
5564 portaudio
5565 portmidi
5566 pulseaudio
5567 python
5568 qt5compat
5569 qtbase
5570 qtdeclarative
5571 qtnetworkauth
5572 qtscxml
5573 qtshadertools
5574 qtsvg
5575 qtwayland
5576 tinyxml2))
5577 (propagated-inputs
5578 (list `(,alsa-plugins "pulseaudio"))) ;for libasound_module_conf_pulse.so
5579 (synopsis "Music composition and notation software")
5580 (description
5581 "MuseScore is a music score typesetter. Its main purpose is the creation
5582of high-quality engraved musical scores in a WYSIWYG environment.
5583
5584It supports unlimited staves, linked parts and part extraction, tablature,
5585MIDI input, percussion notation, cross-staff beaming, automatic transposition,
5586lyrics (multiple verses), fretboard diagrams, and in general everything
5587commonly used in sheet music. Style options and style sheets to change the
5588appearance and layout are provided.
5589
5590MuseScore can also play back scores through the built-in sequencer and SoundFont
5591sample library.")
5592 (home-page "https://musescore.org")
5593 (license license:gpl3)))
5594
5595(define-public muse-sequencer
5596 (package
5597 (name "muse-sequencer")
5598 (version "4.2.1")
5599 (source (origin
5600 (method git-fetch)
5601 (uri (git-reference
5602 (url "https://github.com/muse-sequencer/muse")
5603 (commit version)))
5604 (file-name (git-file-name name version))
5605 (sha256
5606 (base32
5607 "13b9xx8x8yr58r8765xn770kfn3k2whmvmpl2657nc19max9n61g"))))
5608 (build-system qt-build-system)
5609 (arguments
5610 (list
5611 #:tests? #f ; there is no test target
5612 #:configure-flags
5613 #~(list "-DENABLE_VST_NATIVE=OFF"
5614 (string-append "-DCMAKE_EXE_LINKER_FLAGS="
5615 "-Wl,-rpath=" #$output "/lib/muse-"
5616 #$(version-major+minor version) "/modules")
5617 (string-append "-DCMAKE_SHARED_LINKER_FLAGS="
5618 "-Wl,-rpath=" #$output "/lib/muse-"
5619 #$(version-major+minor version) "/modules"))
5620 #:phases
5621 #~(modify-phases %standard-phases
5622 (add-after 'unpack 'chdir
5623 (lambda _ (chdir "src"))))))
5624 (inputs
5625 (list alsa-lib
5626 dssi
5627 fluidsynth
5628 glib
5629 jack-1
5630 ladspa
5631 libinstpatch
5632 liblo
5633 libsamplerate
5634 libsndfile
5635 lilv
5636 lrdf
5637 lv2
5638 pcre
5639 pulseaudio ; required by rtaudio
5640 qtbase-5
5641 qtsvg-5
5642 qtwayland-5
5643 rtaudio
5644 rubberband
5645 sord))
5646 (native-inputs
5647 (list extra-cmake-modules
5648 perl
5649 pkg-config
5650 python-wrapper
5651 qttools-5))
5652 (home-page "https://muse-sequencer.github.io/")
5653 (synopsis "MIDI/Audio sequencer")
5654 (description "MusE is a MIDI/Audio sequencer with recording and editing
5655capabilities. Its audio sequencer supports the LADSPA, DSSI, and LV2 audio
5656plugin formats; the MIDI sequencer provides a piano roll, a drum editor, a
5657list view, and a score editor. MusE aims to be a complete multitrack virtual
5658studio.")
5659 (license license:gpl2+)))
5660
5661(define-public gsequencer
5662 (package
5663 (name "gsequencer")
5664 (version "8.1.24")
5665 (source
5666 (origin
5667 (method git-fetch)
5668 (uri (git-reference
5669 (url "https://git.savannah.gnu.org/git/gsequencer")
5670 (commit version)))
5671 (file-name (git-file-name name version))
5672 (sha256
5673 (base32 "0rpidmawdrnaqrddy5vlfpybkgdfcg0ybfl9pcdqrd03yc1hhalp"))))
5674 (build-system glib-or-gtk-build-system)
5675 (arguments
5676 `(#:phases
5677 (modify-phases %standard-phases
5678 (add-before 'build 'prepare-x-for-test
5679 (lambda _
5680 (system "Xvfb &")
5681 (setenv "DISPLAY" ":0"))))))
5682 (native-inputs
5683 (list autoconf
5684 automake
5685 cunit
5686 gettext-minimal
5687 gobject-introspection
5688 gtk-doc/stable
5689 libtool
5690 libxslt
5691 pkg-config
5692 xorg-server-for-tests))
5693 (inputs
5694 (list alsa-lib
5695 dssi
5696 fftw
5697 gst-plugins-base
5698 gstreamer
5699 gtk
5700 jack-1
5701 json-glib
5702 ladspa
5703 libinstpatch
5704 libsamplerate
5705 libsndfile
5706 libsoup
5707 libxcrypt
5708 libxml2
5709 lv2
5710 pulseaudio
5711 `(,util-linux "lib")
5712 webkitgtk))
5713 (home-page "https://www.nongnu.org/gsequencer/")
5714 (synopsis "Advanced Gtk+ Sequencer")
5715 (description
5716 "GSequencer allows you to play, capture and create music. There is a piano
5717roll, automation and wave form editor. It has machines for playing drum samples,
5718Soundfont2 sound containers and synthesizers. They usually can be connected to a
5719MIDI input source (instrument). It has support for various audio backends like
5720ALSA, Pulseaudio, JACK, OSSv4 and CoreAudio.")
5721 (license license:gpl3+)))
5722
5723(define-public dssi
5724 (package
5725 (name "dssi")
5726 (version "1.1.1")
5727 (source (origin
5728 (method url-fetch)
5729 (uri (string-append
5730 "mirror://sourceforge/dssi/dssi/" version
5731 "/dssi-" version ".tar.gz"))
5732 (sha256
5733 (base32
5734 "0kl1hzhb7cykzkrqcqgq1dk4xcgrcxv0jja251aq4z4l783jpj7j"))))
5735 (build-system gnu-build-system)
5736 (arguments
5737 (list
5738 #:phases
5739 '(modify-phases %standard-phases
5740 (add-after 'unpack 'compatibility
5741 (lambda _
5742 ;; seq_event.h should not be used directly.
5743 (substitute* "dssi/dssi.h"
5744 (("alsa/seq_event.h")
5745 "alsa/asoundlib.h")))))))
5746 (inputs
5747 (list alsa-lib
5748 jack-2
5749 ladspa
5750 libsamplerate
5751 libsndfile
5752 liblo))
5753 (native-inputs
5754 (list pkg-config))
5755 (synopsis "Audio plugin API for soft synths and effects")
5756 (description "DSSI is a plugin API for software instruments with user
5757interfaces, permitting them to be hosted in-process by audio applications.
5758It is intended to be simple, GUI-toolkit-agnostic, and slightly biased
5759towards familiarity with MIDI. The DSSI distribution package contains
5760a JACK/ALSA-sequencer reference host and some plugins as well as the
5761specification and header.")
5762 (home-page "https://dssi.sourceforge.net/")
5763 ;; The DSSI interface is LGPL2.1+, some tests and examples are GPL2+.
5764 ;; The vast majority of examples are in the public domain.
5765 (license (list license:lgpl2.1+ license:gpl2+))))
5766
5767(define-public rosegarden
5768 (package
5769 (name "rosegarden")
5770 (version "25.06")
5771 (source
5772 (origin
5773 (method url-fetch)
5774 (uri (string-append "mirror://sourceforge/rosegarden/rosegarden/"
5775 (version-major+minor version) "/"
5776 "rosegarden-" version ".tar.xz"))
5777 (sha256
5778 (base32 "0vf3ln51f9layj7ann8nykl1rvimbnz58j8f9g6735490nq55zkm"))))
5779 (build-system qt-build-system)
5780 (arguments
5781 (list
5782 #:qtbase qtbase
5783 #:configure-flags #~(list "-DUSE_QT6=ON")
5784 #:test-exclude "test_notationview_selection"
5785 #:phases
5786 #~(modify-phases %standard-phases
5787 (add-after 'unpack 'fix-references
5788 (lambda* (#:key inputs #:allow-other-keys)
5789 (substitute* "src/gui/general/ProjectPackager.cpp"
5790 (("\"flac\\>")
5791 (string-append "\"" (search-input-file inputs "/bin/flac")))
5792 (("\"wavpack\\>")
5793 (string-append "\"" (search-input-file inputs "/bin/wavpack")))
5794 (("\"wvunpack\\>")
5795 (string-append "\"" (search-input-file inputs "/bin/wvunpack")))
5796 (("\"bash\\>")
5797 (string-append "\"" (search-input-file inputs "/bin/bash")))
5798 (("\"tar\\>")
5799 (string-append "\"" (search-input-file inputs "/bin/tar"))))
5800 (substitute* "src/gui/general/LilyPondProcessor.cpp"
5801 (("\"convert-ly\\>")
5802 (string-append "\"" (search-input-file inputs "/bin/convert-ly")))
5803 (("\"lilypond\\>")
5804 (string-append "\"" (search-input-file inputs "/bin/lilypond"))))))
5805 (add-after 'unpack 'make-reproducible
5806 (lambda _
5807 ;; Prevent Last-Modified from being written.
5808 ;; The "*.qm" files that are used in locale.qrc would have a new
5809 ;; mtime otherwise that is written into qrc_locale.cpp in the
5810 ;; end - except when we disable it.
5811 (substitute* "src/CMakeLists.txt"
5812 (("COMMAND [$][{]QT_RCC_EXECUTABLE[}]")
5813 "COMMAND ${QT_RCC_EXECUTABLE} --format-version 1")
5814 )
5815 ;; Make hashtable traversal order predicable.
5816 (setenv "QT_RCC_TEST" "1"))) ; important
5817 (add-before 'check 'prepare-check
5818 (lambda _
5819 ;; Tests create files in $HOME/.local/share/rosegarden and
5820 ;; expect permissions set to 0700.
5821 (mkdir-p "/tmp/foo")
5822 (chmod "/tmp/foo" #o700)
5823 (setenv "HOME" "/tmp/foo")
5824 (setenv "XDG_RUNTIME_DIR" "/tmp/foo")))
5825 (replace 'check
5826 (lambda* (#:key tests? (test-exclude "") #:allow-other-keys)
5827 (when tests?
5828 ;; Skip a failing test.
5829 (invoke "ctest" "-E" test-exclude)))))))
5830 (inputs
5831 (list alsa-lib
5832 bash-minimal
5833 dssi
5834 flac
5835 fftwf
5836 jack-1
5837 ladspa
5838 liblo
5839 libsamplerate
5840 lilv
5841 lilypond
5842 lrdf
5843 lv2
5844 qt5compat
5845 qtwayland
5846 shared-mime-info
5847 tar
5848 lirc
5849 wavpack
5850 zlib))
5851 (native-inputs
5852 (list pkg-config qttools)) ;for qtlinguist
5853 (synopsis "Music composition and editing environment based around a MIDI
5854sequencer")
5855 (description "Rosegarden is a music composition and editing environment
5856based around a MIDI sequencer that features a rich understanding of music
5857notation and includes basic support for digital audio.")
5858 (home-page "https://www.rosegardenmusic.com/")
5859 (license license:gpl2)))
5860
5861(define-public patchmatrix
5862 (package
5863 (name "patchmatrix")
5864 (version "0.16.0")
5865 (source (origin
5866 (method git-fetch)
5867 (uri (git-reference
5868 (url "https://github.com/OpenMusicKontrollers/patchmatrix")
5869 (commit version)))
5870 (file-name (git-file-name "patchmatrix" version))
5871 (sha256
5872 (base32
5873 "020vp7zzxxzzjfic57vkpg68dm8hi98ilr1bj88xjsv6i47xmjbn"))))
5874 (build-system meson-build-system)
5875 (arguments '(#:tests? #f)) ; no test target
5876 (inputs
5877 (list jack-1 lv2 mesa))
5878 (native-inputs
5879 (list pkg-config))
5880 (home-page "https://github.com/OpenMusicKontrollers/patchmatrix")
5881 (synopsis "Simple JACK patch bay")
5882 (description "PatchMatrix is a patch bay for the JACK audio connection
5883kit. It provides a patch bay in flow matrix style for audio, MIDI, CV, and
5884OSC connections.")
5885 (license license:artistic2.0)))
5886
5887(define-public luppp
5888 (let ((revision "2")
5889 ;; The last release was in 2019. Since then some build fixes have
5890 ;; been added.
5891 (commit "78fb003df542e752d43f8ea3e734a83de4e4f8a1"))
5892 (package
5893 (name "luppp")
5894 (version (git-version "1.2.1" revision commit))
5895 (source (origin
5896 (method git-fetch)
5897 (uri (git-reference
5898 (url "https://github.com/openAVproductions/openAV-Luppp")
5899 (commit commit)))
5900 (file-name (git-file-name name version))
5901 (sha256
5902 (base32
5903 "1nc4xjm74assjzjghkbh25ahlkiiy7pkfaj72zagzfa9p64s6xdl"))))
5904 (build-system meson-build-system)
5905 (inputs
5906 (list cairo
5907 ntk
5908 liblo
5909 jack-2
5910 libsndfile
5911 libsamplerate))
5912 (native-inputs (list pkg-config cmake-minimal))
5913 (home-page "http://openavproductions.com/luppp/")
5914 (synopsis "Live performance tool")
5915 (description
5916 "Luppp is a music creation tool, intended for live use. The focus is on real
5917time processing and a fast and intuitive workflow. With extensive MIDI
5918mapping support, you can get looping just how you like!")
5919 (license license:gpl3+))))
5920
5921(define-public fabla
5922 (package
5923 (name "fabla")
5924 (version "1.4")
5925 (source (origin
5926 (method git-fetch)
5927 (uri (git-reference
5928 (url "https://github.com/openAVproductions/openAV-Fabla")
5929 (commit (string-append "release-" version))))
5930 (file-name (git-file-name name version))
5931 (sha256
5932 (base32
5933 "13675ljfcbmxw9jdjrpn9wpvl69qxxc1hg2y9sfjkf4khajpapg9"))))
5934 (build-system cmake-build-system)
5935 (arguments '(#:tests? #f)) ;there are none
5936 (inputs (list ntk cairomm libsndfile))
5937 (native-inputs (list pkg-config lv2 mesa))
5938 (home-page "http://openavproductions.com/fabla/")
5939 (synopsis "Sampler LV2 plugin")
5940 (description
5941 "Fabla is an LV2 drum sampler plugin instrument. It is ideal for loading up
5942your favorite sampled sounds and bashing away on a MIDI controller.")
5943 (license license:gpl2+)))
5944
5945(define-public sorcer
5946 (let ((revision "2")
5947 ;; The last release was in 2016. Since then a couple of commits have
5948 ;; been added to fix build problems, so we take this arbitrary recent
5949 ;; commit.
5950 (commit "94107b26e3e00e32504c8fb3fbf7572514d3b6bc"))
5951 (package
5952 (name "sorcer")
5953 (version (git-version "1.1.3" revision commit))
5954 (source (origin
5955 (method git-fetch)
5956 (uri (git-reference
5957 (url "https://github.com/openAVproductions/openAV-Sorcer")
5958 (commit commit)))
5959 (file-name (git-file-name name version))
5960 (sha256
5961 (base32
5962 "0md3d9h63ngrlh53mj1fmwhmnlxr7bqzpfb3wk9427v5n0y6yn48"))
5963 (snippet
5964 '(delete-file "faust/main.cpp"))))
5965 (build-system cmake-build-system)
5966 (arguments
5967 `(#:tests? #f ;no tests included
5968 #:phases
5969 (modify-phases %standard-phases
5970 (add-after 'unpack 'build-faust-sources
5971 (lambda* (#:key inputs #:allow-other-keys)
5972 (with-directory-excursion "faust"
5973 (invoke "faust" "-i"
5974 "-a" "lv2.cpp"
5975 "-o" "main.cpp" "main.dsp")))))))
5976 (inputs (list boost lv2 ntk))
5977 (native-inputs (list faust-2 pkg-config which))
5978 (home-page "http://openavproductions.com/sorcer/")
5979 (synopsis "Wavetable LV2 plugin synth")
5980 (description "Sorcer is a wavetable LV2 plugin synthesizer, targeted at
5981the electronic or dubstep genre.")
5982 (license license:gpl3+))))
5983
5984(define soundfont-airfont-340
5985 (origin
5986 (method url-fetch)
5987 (uri "http://www.ronimusic.com/sf2/Airfont_340.dls")
5988 (sha256
5989 (base32 "011vg0y6s3zribkkwk143nlp251nn26xsvzkvzs1xicz7jgf7cxy"))))
5990
5991(define-public sonivox
5992 (package
5993 (name "sonivox")
5994 (version "3.6.16")
5995 (source (origin
5996 (method git-fetch)
5997 (uri (git-reference
5998 (url "https://github.com/pedrolcl/sonivox")
5999 (commit (string-append "v" version))))
6000 (file-name (git-file-name name version))
6001 (sha256
6002 (base32
6003 "0yxgyzx5144f5rfqsqhlsfzjxy6a27605dr1g874y8wra6dsbrfq"))))
6004 (build-system cmake-build-system)
6005 (arguments
6006 (list #:tests? (not (%current-target-system)) ; run unless cross-compiling
6007 #:phases
6008 #~(modify-phases %standard-phases
6009 (add-after 'unpack 'symlink-soundfont
6010 (lambda _
6011 (setenv "TEMP" (getcwd))
6012 (symlink #$soundfont-airfont-340
6013 (string-append (getenv "TEMP")
6014 "/soundfont.dls")))))))
6015 (native-inputs
6016 (list googletest))
6017 (home-page "https://github.com/pedrolcl/sonivox")
6018 (synopsis "Fork of the AOSP platform_external_sonivox")
6019 (description "This project is a fork of the Android Open Source Project
6020@code{platform_external_sonivox}. It is a Wave Table synthesizer, using
6021embedded samples. It also supports external DLS soundfont files. It is also a
6022real time GM synthesizer.")
6023 (license license:asl2.0)))
6024
6025(define-public sonivox-eas
6026 (package
6027 (name "sonivox-eas")
6028 (version "1.6.0")
6029 (source (origin
6030 (method git-fetch)
6031 (uri (git-reference
6032 (url "https://github.com/pedrolcl/Linux-SonivoxEas")
6033 (commit (string-append "v" version))))
6034 (file-name (string-append name "-" version "-checkout"))
6035 (sha256
6036 (base32
6037 "1dzknbc9b4cbf1smql3b7g9smg45z1z8qrq0y6m4659k0jc3svs4"))))
6038 (build-system qt-build-system)
6039 (arguments
6040 (list #:qtbase qtbase
6041 #:tests? #f)) ; there are no tests
6042 (inputs
6043 (list alsa-lib drumstick pulseaudio qtwayland sonivox))
6044 (native-inputs
6045 (list pkg-config))
6046 (home-page "https://github.com/pedrolcl/Linux-SonivoxEas")
6047 (synopsis "MIDI synthesizer library")
6048 (description "This project is a real time General MIDI synthesizer based
6049on the Sonivox EAS Synthesizer by Google. It does not need external
6050soundfonts, using embedded samples instead.")
6051 (license license:gpl2+)))
6052
6053(define-public whysynth
6054 (package
6055 (name "whysynth")
6056 (version "20170701")
6057 (source (origin
6058 (method url-fetch)
6059 (uri (string-append "http://smbolton.com/whysynth/whysynth-"
6060 version ".tar.bz2"))
6061 (sha256
6062 (base32
6063 "02qbn0hbvn1iym4zxv35b201blg31yjpgh71h8db0j5zls2xc0m6"))))
6064 (build-system gnu-build-system)
6065 (inputs
6066 (list dssi
6067 liblo
6068 fftwf
6069 gtk+-2
6070 ladspa
6071 alsa-lib))
6072 (native-inputs
6073 (list pkg-config))
6074 (home-page "http://smbolton.com/whysynth.html")
6075 (synopsis "DSSI software synthesizer")
6076 (description "WhySynth is a versatile softsynth which operates as a plugin
6077for the DSSI Soft Synth Interface. A brief list of features:
6078
6079@enumerate
6080@item 4 oscillators, 2 filters, 3 LFOs, and 5 envelope generators per voice.
6081@item 11 oscillator modes: minBLEP, wavecycle, chorused wavecycle,
6082 asynchronous granular, three FM modes, waveshaper, noise, PADsynth, and phase
6083 distortion.
6084@item 10 filter modes.
6085@item flexible modulation and mixdown options, plus effects.
6086@end enumerate
6087")
6088 (license license:gpl2+)))
6089
6090(define-public libdiscid
6091 (package
6092 (name "libdiscid")
6093 (version "0.6.5")
6094 (source
6095 (origin
6096 (method url-fetch)
6097 (uri (string-append
6098 "http://ftp.musicbrainz.org/pub/musicbrainz/libdiscid/libdiscid-"
6099 version ".tar.gz"))
6100 (sha256
6101 (base32 "0c6mq9wd0jy03k69df0ba3dywi75gjy0wvq5wa7l2dkkw29v9nvj"))))
6102 (arguments
6103 (list
6104 #:modules '((guix build cmake-build-system)
6105 ((guix build gnu-build-system) #:prefix gnu:)
6106 (guix build utils))
6107 #:phases
6108 #~(modify-phases %standard-phases
6109 (replace 'check (assoc-ref gnu:%standard-phases 'check)))))
6110 (build-system cmake-build-system)
6111 (home-page "https://musicbrainz.org/doc/libdiscid")
6112 (synopsis "Disc id reader library")
6113 (description "libdiscid is a C library for creating MusicBrainz and freedb
6114disc IDs from audio CDs. It reads a CD's table of contents (TOC) and generates
6115an identifier which can be used to lookup the CD at MusicBrainz. Additionally,
6116it provides a submission URL for adding the disc ID to the database and gathers
6117ISRCs and the MCN (=UPC/EAN) from disc.")
6118 (license license:lgpl2.1+)))
6119
6120(define-public python-discid
6121 (package
6122 (name "python-discid")
6123 (version "1.1.1")
6124 (source
6125 (origin
6126 (method url-fetch)
6127 (uri (pypi-uri "discid" version))
6128 (sha256
6129 (base32 "1fgp67nhqlbvhhwrcxq5avil7alpzw4s4579hlyvxzbphdnbz8vq"))))
6130 (build-system pyproject-build-system)
6131 (arguments
6132 (list
6133 #:test-flags
6134 #~(list "-k" (string-join
6135 (list "not test_read_features"
6136 "test_read_put"
6137 "test_read_simple")
6138 " and not "))
6139 #:phases
6140 #~(modify-phases %standard-phases
6141 (add-before 'build 'set-libdiscid
6142 (lambda* (#:key inputs #:allow-other-keys)
6143 (let ((discid (search-input-file inputs "/lib/libdiscid.so.0")))
6144 (substitute* "discid/libdiscid.py"
6145 (("lib_name = (.*)$" all name)
6146 (string-append "lib_name = \"" discid "\"\n")))))))))
6147 (native-inputs (list python-pytest python-setuptools))
6148 (inputs (list libdiscid))
6149 (home-page "https://python-discid.readthedocs.io/")
6150 (synopsis "Python bindings for Libdiscid")
6151 (description
6152 "This package provides Python bindings for the Libdiscid library. The
6153main purpose is the calculation of @url{https://musicbrainz.org/doc/Disc%20ID,
6154Disc IDs} for use with the MusicBrainz database. Additionally the disc
6155@dfn{Media Catalog Number} (MCN) and track @dfn{International Standard
6156Recording Code} (ISRC) can be extracted.}")
6157 (license license:lgpl3+)))
6158
6159(define-public libmusicbrainz
6160 ;; The latest release is more than a decade old, doesn't build with the
6161 ;; latest libxml2 release.
6162 (let ((commit "4efbed3afae11ef68281816088d7cf3d0f704dfe")
6163 (revision "0"))
6164 (package
6165 (name "libmusicbrainz")
6166 (version (git-version "5.1.0" revision commit))
6167 (source
6168 (origin
6169 (method git-fetch)
6170 (uri (git-reference
6171 (url "https://github.com/metabrainz/libmusicbrainz")
6172 (commit commit)))
6173 (file-name (git-file-name name version))
6174 (sha256
6175 (base32
6176 "1h1q0gg3xzhw115ifr5ja9gbd2k6ggkpm2f4sdqp313wp3lj86g9"))))
6177 (build-system cmake-build-system)
6178 (arguments
6179 `(#:phases
6180 (modify-phases %standard-phases
6181 (add-after 'unpack 'fix-build
6182 (lambda _
6183 (substitute* "src/CMakeLists.txt"
6184 (("\\*.inc") ""))))
6185 (replace 'check
6186 (lambda _
6187 ;; requires network connections
6188 ;; (invoke "tests/mbtest")
6189 (invoke "tests/ctest"))))))
6190 (inputs (list neon libxml2))
6191 (native-inputs (list pkg-config))
6192 (home-page "https://musicbrainz.org/doc/libmusicbrainz")
6193 (synopsis "MusicBrainz client library")
6194 (description "The MusicBrainz Client Library (libmusicbrainz), also known as
6195mb_client, is a development library geared towards developers who wish to add
6196MusicBrainz lookup capabilities to their applications.")
6197 (license license:lgpl2.1+))))
6198
6199(define-public perl-musicbrainz-discid
6200 (package
6201 (name "perl-musicbrainz-discid")
6202 (version "0.06")
6203 (source (origin
6204 (method url-fetch)
6205 (uri (string-append
6206 "mirror://cpan/authors/id/N/NJ/NJH/MusicBrainz-DiscID-"
6207 version ".tar.gz"))
6208 (sha256
6209 (base32
6210 "1azc91jnwa3gdmy9pc8mflakgvsvf69ywwlqllxmdzwpk386w2xs"))))
6211 (build-system perl-build-system)
6212 (native-inputs (list pkg-config which))
6213 (inputs (list libdiscid))
6214 (home-page "https://metacpan.org/release/MusicBrainz-DiscID")
6215 (synopsis "Perl interface to the MusicBrainz libdiscid library")
6216 (description
6217 "The @code{MusicBrainz::DiscID} module is a Perl interface to the
6218MusicBrainz libdiscid library, allowing you to manipulate digital audio
6219compact disc (CDDA) identifiers.")
6220 (license license:gpl2)))
6221
6222(define-public perl-webservice-musicbrainz
6223 (package
6224 (name "perl-webservice-musicbrainz")
6225 (version "1.0.10")
6226 (source (origin
6227 (method url-fetch)
6228 (uri (string-append
6229 "mirror://cpan/authors/id/B/BF/BFAIST/WebService-MusicBrainz-"
6230 version ".tar.gz"))
6231 (sha256
6232 (base32
6233 "1gxxmsi5ax6rarcs0wkxz3xsfm0mrh7mpbgmlcnkw2rzzkq5gz7a"))))
6234 (build-system perl-build-system)
6235 (arguments
6236 ;; Tests try to connect to http://musicbrainz.org.
6237 '(#:tests? #f))
6238 (native-inputs
6239 (list perl-module-build))
6240 (propagated-inputs
6241 (list perl-mojolicious perl-io-socket-ssl))
6242 (home-page "https://metacpan.org/release/WebService-MusicBrainz")
6243 (synopsis "Web service API to the MusicBrainz database")
6244 (description
6245 "This module searches the MusicBrainz database through their web service
6246at @code{musicbrainz.org}.")
6247 (license license:perl-license)))
6248
6249(define-public clyrics
6250 (package
6251 (name "clyrics")
6252 (version "0.17")
6253 (source
6254 (origin
6255 (method git-fetch)
6256 (uri (git-reference
6257 (url "https://github.com/trizen/clyrics")
6258 (commit version)))
6259 (file-name (git-file-name name version))
6260 (sha256
6261 (base32 "1np1rs6wl592smzy6b04adc38wa2b00fsy973dpv5bai64slrq43"))))
6262 (build-system trivial-build-system)
6263 (inputs
6264 (list bash ; for the wrapped program
6265 perl
6266 perl-www-mechanize
6267 perl-lwp-protocol-https
6268 ;; Required or else LWP will fail with "GET https://www.google.com/ ==>
6269 ;; 500 Can't verify SSL peers without knowing which Certificate
6270 ;; Authorities to trust".
6271 perl-mozilla-ca))
6272 (arguments
6273 `(#:modules ((guix build utils))
6274 #:builder (begin
6275 (use-modules (guix build utils)
6276 (ice-9 match)
6277 (srfi srfi-26))
6278 (let* ((source (assoc-ref %build-inputs "source"))
6279 (output (assoc-ref %outputs "out")))
6280 (setenv "PATH"
6281 (string-append
6282 (assoc-ref %build-inputs "bash") "/bin" ":"
6283 (assoc-ref %build-inputs "perl") "/bin" ":"))
6284 (copy-recursively source (getcwd))
6285 (patch-shebang "clyrics")
6286 (substitute* "clyrics"
6287 (("/usr/share") output))
6288 (install-file "clyrics" (string-append output "/bin"))
6289 (wrap-program (string-append output "/bin/clyrics")
6290 `("PERL5LIB" ":" =
6291 ,(delete
6292 ""
6293 (map (match-lambda
6294 (((? (cut string-prefix? "perl-" <>) name) . dir)
6295 (string-append dir "/lib/perl5/site_perl"))
6296 (_ ""))
6297 %build-inputs))))
6298 (copy-recursively "plugins" (string-append output "/clyrics"))
6299 #t))))
6300 (home-page "https://github.com/trizen/clyrics")
6301 (synopsis "Extensible lyrics fetcher")
6302 (description
6303 "Clyrics is an extensible command-line tool to fetch the lyrics of songs.
6304It can be used in daemon mode along with the Music-on-Console (MOC) and cmus
6305console music players.")
6306 (license license:gpl3+)))
6307
6308(define-public fmit
6309 (package
6310 (name "fmit")
6311 (version "1.2.14")
6312 (source (origin
6313 (method git-fetch)
6314 (uri (git-reference
6315 (url "https://github.com/gillesdegottex/fmit/")
6316 (commit (string-append "v" version))))
6317 (file-name (git-file-name name version))
6318 (sha256
6319 (base32
6320 "1q062pfwz2vr9hbfn29fv54ip3jqfd9r99nhpr8w7mn1csy38azx"))))
6321 (build-system gnu-build-system)
6322 (arguments
6323 '(#:phases
6324 (modify-phases %standard-phases
6325 (delete 'configure)
6326 (add-before 'build 'qmake
6327 (lambda _
6328 (let ((out (assoc-ref %outputs "out")))
6329 (invoke "qmake"
6330 "fmit.pro"
6331 (string-append "PREFIX=" out)
6332 (string-append "PREFIXSHORTCUT=" out)
6333 "CONFIG+=acs_qt acs_alsa acs_jack acs_portaudio"))))
6334 (add-after 'install 'wrap-executable
6335 (lambda* (#:key inputs outputs #:allow-other-keys)
6336 (let ((out (assoc-ref outputs "out")))
6337 (wrap-program (string-append out "/bin/fmit")
6338 `("QT_PLUGIN_PATH" ":" prefix
6339 ,(map (lambda (label)
6340 (string-append (assoc-ref inputs label)
6341 "/lib/qt5/plugins"))
6342 '("qtbase" "qtmultimedia" "qtsvg")))
6343 `("QML2_IMPORT_PATH" ":" prefix
6344 ,(map (lambda (label)
6345 (string-append (assoc-ref inputs label)
6346 "/lib/qt5/qml"))
6347 '("qtmultimedia"))))))))))
6348 (inputs
6349 (list alsa-lib
6350 bash-minimal
6351 fftw
6352 jack-1
6353 portaudio
6354 qtbase-5
6355 qtmultimedia-5
6356 qtsvg-5))
6357 (native-inputs
6358 (list gettext-minimal hicolor-icon-theme itstool qttools-5))
6359 (synopsis "Musical instrument tuner")
6360 (description "FMIT is a graphical utility for tuning musical instruments,
6361with error and volume history, and advanced features.")
6362 (home-page "https://gillesdegottex.github.io/fmit/")
6363 ;; Most of the code is under GPL2+, but some abstract or helper classes
6364 ;; are under LGPL2.1.
6365 (license (list license:gpl2+ license:lgpl2.1))))
6366
6367(define-public pragha
6368 (package
6369 (name "pragha")
6370 (version "1.3.4")
6371 (source (origin
6372 (method url-fetch)
6373 (uri (string-append "https://github.com/pragha-music-player/pragha/"
6374 "releases/download/v" version "/pragha-" version
6375 ".tar.bz2"))
6376 (sha256
6377 (base32
6378 "19kbhq99bkimx3aqrdzln0vlr4slkpx6kq66j731jvqyq76nlkp5"))))
6379 (build-system glib-or-gtk-build-system)
6380 (native-inputs
6381 (list intltool pkg-config))
6382 (inputs
6383 (list bash-minimal
6384 glib
6385 grilo
6386 gstreamer
6387 gst-plugins-base
6388 gst-plugins-good
6389 gtk+
6390 libcddb
6391 libcdio
6392 libcdio-paranoia
6393 libgudev
6394 libnotify
6395 libpeas
6396 libsoup
6397 sqlite
6398 taglib))
6399 (arguments
6400 `(#:phases
6401 (modify-phases %standard-phases
6402 (add-after 'install 'wrap-program
6403 (lambda* (#:key inputs outputs #:allow-other-keys)
6404 (let ((out (assoc-ref outputs "out"))
6405 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
6406 (wrap-program (string-append out "/bin/pragha")
6407 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix
6408 (,gst-plugin-path)))))))))
6409 (home-page "https://pragha-music-player.github.io")
6410 (synopsis "Music player")
6411 (description "Pragha is a lightweight music player based on Gtk and
6412sqlite. It is constructed to be fast, light, and simultaneously tries to be
6413complete without obstructing your daily work.")
6414 (license license:gpl3+)))
6415
6416(define-public playerctl
6417 (package
6418 (name "playerctl")
6419 (version "2.4.1")
6420 (source (origin
6421 (method git-fetch)
6422 (uri (git-reference
6423 (url "https://github.com/altdesktop/playerctl")
6424 (commit (string-append "v" version))))
6425 (file-name (git-file-name name version))
6426 (sha256
6427 (base32
6428 "0ij065blj3h5v6iivvpmgh1095vicj1nc7hp1nhlhpqagd98l89s"))))
6429 (build-system meson-build-system)
6430 (arguments
6431 `(#:configure-flags '("-Dgtk-doc=false")))
6432 (native-inputs
6433 `(("glib:bin" ,glib "bin")
6434 ("pkg-config" ,pkg-config)
6435 ("gobject-introspection" ,gobject-introspection)))
6436 (synopsis "Control MPRIS-supporting media player applications")
6437 (description
6438 "Playerctl is a command-line utility and library for controlling media
6439players that implement the MPRIS D-Bus Interface Specification. Playerctl
6440makes it easy to bind player actions, such as play and pause, to media keys.
6441You can also get metadata about the playing track such as the artist and title
6442for integration into status line generators or other command-line tools.")
6443 (home-page "https://github.com/altdesktop/playerctl")
6444 (license license:lgpl3+)))
6445
6446(define-public artyfx
6447 (package
6448 (name "artyfx")
6449 (version "1.3.1")
6450 (source (origin
6451 (method git-fetch)
6452 (uri (git-reference
6453 (url
6454 "https://github.com/openAVproductions/openAV-ArtyFX")
6455 (commit (string-append "release-" version))))
6456 (file-name (git-file-name name version))
6457 (sha256
6458 (base32
6459 "0cxikdnxgjk5gp6kmml4dx2jy2cy4x0c837h7bwraj2pfz0nfgqq"))))
6460 (build-system cmake-build-system)
6461 (arguments
6462 `(#:tests? #f ; no tests included
6463 #:phases
6464 (modify-phases %standard-phases
6465 (add-after 'unpack 'remove-architecture-specific-flags
6466 (lambda _
6467 (substitute* "CMakeLists.txt"
6468 (("-msse2 -mfpmath=sse") ""))
6469 #t)))))
6470 (inputs
6471 (list cairo libsndfile))
6472 (native-inputs
6473 (list pkg-config lv2))
6474 (home-page "http://openavproductions.com/artyfx/")
6475 (synopsis "Audio effect LV2 plugin bundle")
6476 (description "ArtyFX is an LV2 plugin bundle of artistic real-time audio
6477effects. It contains a bitcrusher, delay, distortion, equalizer, compressor,
6478and reverb.")
6479 (license license:gpl2+)))
6480
6481(define-public lsp-plugins
6482 (package
6483 (name "lsp-plugins")
6484 (version "1.2.25")
6485 (source
6486 (origin
6487 (method url-fetch)
6488 (uri (string-append "https://github.com/lsp-plugins/lsp-plugins"
6489 "/releases/download/" version
6490 "/lsp-plugins-src-" version ".tar.gz"))
6491 (sha256
6492 (base32 "0wr6wfq8qix39kcvlqivjbch0qnlxcpv8lsfq9xb9v25yh6vfad8"))))
6493 (build-system gnu-build-system)
6494 (arguments
6495 (list
6496 #:make-flags
6497 #~(list (string-append "CC=" #$(cc-for-target)))
6498 #:phases
6499 #~(modify-phases %standard-phases
6500 (replace 'configure
6501 (lambda _
6502 (invoke "make" "config"
6503 "STRICT=1"
6504 "TEST=1"
6505 "FEATURES=clap doc jack ladspa lv2 ui vst2 xdg"
6506 (string-append "PREFIX=" #$output)
6507 (string-append "ETCDIR=" #$output "/etc"))))
6508 (replace 'check
6509 (lambda* (#:key tests? #:allow-other-keys)
6510 (when tests?
6511 (invoke ".build/target/lsp-plugin-fw/lsp-plugins-test" "utest"))))
6512 (add-after 'install 'move-large-subdirs
6513 (lambda _
6514 (define (move-to-output output path)
6515 (let ((source (string-append #$output path))
6516 (target (string-append output path)))
6517 (mkdir-p (dirname target))
6518 (rename-file source target)))
6519 (move-to-output #$output:doc "/share/doc") ; 29MB
6520 (move-to-output #$output:lv2 "/lib/lv2") ; 32MB
6521 (move-to-output #$output:bin "/bin") ; Avoid cluttering xdg menu
6522 (move-to-output #$output:bin "/share")
6523 (move-to-output #$output:bin "/etc"))))))
6524 (inputs
6525 (list cairo
6526 freetype
6527 jack-2
6528 libsndfile
6529 libx11
6530 libxrandr
6531 mesa))
6532 (native-inputs (list pkg-config php))
6533 (outputs '("out" "doc" "lv2" "debug"))
6534 (synopsis "Audio plugin collection")
6535 (description "LSP (Linux Studio Plugins) is a collection of audio
6536plugins available as LADSPA/LV2 plugins and as standalone JACK
6537applications.")
6538 (home-page "https://lsp-plug.in/")
6539 (license license:lgpl3)))
6540
6541(define-public sherlock-lv2
6542 (package
6543 (name "sherlock-lv2")
6544 (version "0.24.0")
6545 (source
6546 (origin
6547 (method url-fetch)
6548 (uri (string-append
6549 "https://git.open-music-kontrollers.ch/lv2/"
6550 "sherlock.lv2/snapshot/sherlock.lv2-"
6551 version ".tar.xz"))
6552 (sha256
6553 (base32
6554 "08gjfx7vrsx9zvj04j8cr3vscxmq6jr2hbdi6dfgp1l1dnnpxsgq"))))
6555 (build-system meson-build-system)
6556 (inputs
6557 (list glu libx11 mesa sratom))
6558 (native-inputs
6559 (list flex pkg-config))
6560 (synopsis "Investigative LV2 plugin bundle")
6561 (description "The Sherlock plugin bundle contains LV2 plugins for
6562visualizing LV2 atom, MIDI and OSC events. They can be used for monitoring
6563and debugging of event signal flows inside plugin graphs.")
6564 (home-page "https://open-music-kontrollers.ch/lv2/sherlock/")
6565 (license license:artistic2.0)))
6566
6567(define-public foo-yc20
6568 (package
6569 (name "foo-yc20")
6570 (version "1.3.0")
6571 (source
6572 (origin
6573 (method url-fetch)
6574 (uri (string-append "https://github.com/sampov2/foo-yc20/releases/download/"
6575 version "/foo-yc20-" version ".tar.bz2"))
6576 (sha256
6577 (base32
6578 "1drzfyr7mzb58pdv0gsqkg6ds6kbgp6g25rrv1yya1611cljgvjh"))))
6579 (build-system gnu-build-system)
6580 (arguments
6581 (list
6582 #:make-flags
6583 #~(list (string-append "PREFIX=" #$output))
6584 #:tests? #f ; no automated test
6585 #:phases
6586 '(modify-phases %standard-phases
6587 (replace 'configure
6588 (lambda _
6589 (substitute* "Makefile"
6590 (("-mtune=native") "")
6591 (("-march=native") "")))))))
6592 (inputs
6593 (list cairo
6594 gtk+-2
6595 jack-1
6596 lv2))
6597 (native-inputs
6598 (list faust pkg-config))
6599 (home-page "https://foo-yc20.codeforcode.com/")
6600 (synopsis "Implementation of Yamaha YC-20 combo organ from 1969")
6601 (description "This is a Faust implementation of a 1969 designed Yamaha
6602combo organ, the YC-20. This package provides an LV2 plugin and a standalone
6603version. Processing for the organ is based on original schematics and
6604measurements from a working specimen. This instrument simulates the circutry
6605as a whole to realisticly reproduce the features and flaws of the real deal.")
6606 ;; Note that after 1.3.0 the license was changed.
6607 (license license:gpl3+)))
6608
6609(define-public fooyin
6610 (package
6611 (name "fooyin")
6612 (version "0.12.4")
6613 (source
6614 (origin
6615 (method git-fetch)
6616 (uri (git-reference
6617 (url "https://github.com/fooyin/fooyin")
6618 (commit (string-append "v" version))))
6619 (file-name (git-file-name name version))
6620 (sha256
6621 (base32 "0cikdp97dq969g63103p30r24apd2fql66imxpapf3c8rv5qy8pc"))))
6622 (build-system qt-build-system)
6623 (arguments
6624 (list
6625 #:configure-flags #~(list "-DBUILD_TESTING=ON")
6626 #:qtbase qtbase
6627 #:phases
6628 #~(modify-phases %standard-phases
6629 (replace 'check
6630 (lambda* (#:key parallel-tests? tests? #:allow-other-keys)
6631 (when tests?
6632 (invoke "ctest" "-j" (if parallel-tests?
6633 (number->string (parallel-job-count))
6634 "1")
6635 "--test-dir" "tests/")))))))
6636 (native-inputs (list googletest pkg-config qttools))
6637 (inputs (list alsa-lib
6638 ffmpeg
6639 icu4c
6640 kdsingleapplication
6641 pipewire
6642 qcoro-qt6
6643 qtsvg
6644 sdl2
6645 taglib
6646 zlib))
6647 (home-page "https://fooyin.org/")
6648 (synopsis "Customisable music player")
6649 (description "Fooyin is a customisable desktop music player. It combines
6650flexible playback, library management, playlists, and scripting tools in an
6651interface that can be rearranged from a blank canvas or adapted from preset
6652layouts. It's built around extensibility and supports plugins for widgets,
6653decoders, tag readers, DSPs, and integrations, and includes FooScript for
6654advanced display formatting, queries, autoplaylists, and widget behaviour.")
6655 (license license:gpl3+)))
6656
6657(define-public spectacle-analyzer
6658 (package
6659 (name "spectacle-analyzer")
6660 (version "2.0")
6661 (source
6662 (origin
6663 (method git-fetch)
6664 (uri (git-reference
6665 (url "https://github.com/jpcima/spectacle")
6666 (commit (string-append "v" version))
6667 ;; Bundles a specific commit of the DISTRHO plugin framework.
6668 (recursive? #t)))
6669 (file-name (git-file-name name version))
6670 (sha256
6671 (base32
6672 "0146mvq1amdmz0cgfm1zr8416cvl8cm5z6s426lhsy00ahw0knrc"))))
6673 (build-system gnu-build-system)
6674 (arguments
6675 `(#:tests? #f ; no check target
6676 #:make-flags
6677 (list "CC=gcc"
6678 (string-append "PREFIX=" (assoc-ref %outputs "out")))
6679 #:phases
6680 (modify-phases %standard-phases
6681 (delete 'configure))))
6682 (native-inputs
6683 (list pkg-config xxd))
6684 (inputs
6685 (list cairo
6686 fftw
6687 fftwf
6688 jack-1
6689 lv2
6690 mesa))
6691 (synopsis "Realtime graphical spectrum analyzer")
6692 (description "Spectacle is a real-time spectral analyzer using the
6693short-time Fourier transform, available as LV2 audio plugin and JACK client.")
6694 (home-page "https://github.com/jpcima/spectacle")
6695 ;; The project is licensed under the ISC license, and files in
6696 ;; sources/plugin carry the Expat license.
6697 (license (list license:isc license:expat))))
6698
6699(define-public x42-plugins
6700 (package
6701 (name "x42-plugins")
6702 (version "20230701")
6703 (source
6704 (origin
6705 (method url-fetch)
6706 (uri
6707 (string-append "https://gareus.org/misc/x42-plugins/x42-plugins-"
6708 version ".tar.xz"))
6709 (sha256
6710 (base32 "1why4mkaxbd0p7qr4jrx3d903wnw2l8gya8v3y32z2vjz31w7jqn"))))
6711 (build-system gnu-build-system)
6712 (arguments
6713 (list
6714 #:tests? #f ; no "check" target
6715 #:make-flags
6716 #~(list (string-append "PREFIX=" #$output)
6717 "LIBZITACONVOLVER=-lzita-convolver"
6718 (string-append "FONTFILE="
6719 #$(this-package-native-input "font-dejavu")
6720 "/share/fonts/truetype/DejaVuSans-Bold.ttf")
6721 (string-append "CC=" #$(cc-for-target)))
6722 #:phases
6723 #~(modify-phases %standard-phases
6724 (delete 'configure)
6725 ;; Disable x86 flags on other architectures
6726 #$@(if (target-x86?)
6727 #~()
6728 #~((add-after 'unpack 'fix-x86-flags
6729 (lambda* _
6730 (substitute* (find-files "." "Makefile")
6731 (("-msse -msse2 -mfpmath=sse") "")))))))))
6732 (inputs
6733 (list cairo
6734 fftwf
6735 ftgl
6736 glib
6737 glu
6738 hicolor-icon-theme
6739 jack-1
6740 libltc
6741 libsamplerate
6742 libx11
6743 pango
6744 zita-convolver))
6745 (native-inputs
6746 (list help2man liblo lv2 font-dejavu pkg-config))
6747 (synopsis "Collection of LV2/JACK audio/MIDI processing plugins")
6748 (description "x42-plugins is a collection of over 80 cross-platform LV2
6749audio and MIDI plugins that can also run as standalone JACK applications.")
6750 (home-page "https://x42-plugins.com/x42/")
6751 (license license:gpl2+)))
6752
6753(define-public xuidesigner
6754 (package
6755 (name "xuidesigner")
6756 (version "0.9")
6757 (source (origin
6758 (method git-fetch)
6759 (uri (git-reference
6760 (url "https://github.com/brummer10/XUiDesigner")
6761 (commit (string-append "v" version))
6762 ;; For libxputty
6763 (recursive? #true)))
6764 (file-name (git-file-name name version))
6765 (sha256
6766 (base32 "1ap6g2j9lr4x9gpnavdhs4qa3z4dw100xgknpi6ysj0rmzc220mi"))))
6767 (build-system gnu-build-system)
6768 (arguments
6769 (list
6770 #:tests? #f ;no "check" target
6771 #:make-flags
6772 #~(list (string-append "PREFIX=" #$output)
6773 (string-append "CC=" #$(cc-for-target)))
6774 #:phases
6775 #~(modify-phases %standard-phases
6776 (delete 'configure))))
6777 (inputs
6778 (list cairo libx11 lilv))
6779 (native-inputs
6780 (list pkg-config which xxd))
6781 (home-page "https://github.com/brummer10/XUiDesigner")
6782 (synopsis "GUI generator tool to create X11 UIs for LV2 plugins")
6783 (description "XUiDesigner parses an LV2 plugin's ttl file and generates
6784the needed controller widgets. The created GUI can be saved as UI-Bundle,
6785which then could be built and installed. For later editing of the UI, a JSON
6786file is added, which you could load per drag 'n drop into XUiDesigner.")
6787 (license license:bsd-0)))
6788
6789(define-public zam-plugins
6790 (package
6791 (name "zam-plugins")
6792 (version "4.5")
6793 (source
6794 (origin
6795 (method git-fetch)
6796 (uri
6797 (git-reference
6798 (url "https://github.com/zamaudio/zam-plugins")
6799 (commit version)
6800 ;; Recursive to fetch the DISTRHO plugin framework. This
6801 ;; framework is intended to be included in the sources
6802 ;; and not to be used as a library.
6803 (recursive? #t)))
6804 (file-name (git-file-name name version))
6805 (sha256
6806 (base32 "1a5i31rg1rd8phvgj2f6wv1jkagc5cynj2plzq7rm818hkykdf52"))))
6807 (build-system gnu-build-system)
6808 (arguments
6809 (list
6810 #:tests? #f ;no "check" target
6811 #:make-flags
6812 #~(list (string-append "CC=" #$(cc-for-target))
6813 (string-append "PREFIX=" #$output)
6814 "HAVE_ZITA_CONVOLVER=true")
6815 #:phases
6816 #~(modify-phases %standard-phases
6817 (delete 'configure))))
6818 (inputs
6819 (list fftwf
6820 jack-1 ;for the standalone JACK application
6821 liblo
6822 libsamplerate
6823 mesa
6824 zita-convolver))
6825 (native-inputs
6826 (list ladspa lv2 pkg-config))
6827 (synopsis "Collection of audio processing plugins")
6828 (description
6829 "Zam plugins is a collection of audio processing plugins in the LADSPA,
6830LV2 and VST2 formats, as well as standalone JACK versions. The collection
6831includes ZaMaximX2, ZamAutoSat, ZamComp, ZamCompX2, ZamEQ2, ZamGEQ31,
6832ZamHeadX2, ZamPhono, ZamGate, ZamGateX2, ZamTube, ZamDelay, ZamDynamicEQ,
6833ZaMultiComp, ZaMultiCompX2 and ZamSynth.")
6834 (home-page "https://www.zamaudio.com/?p=976")
6835 (license license:gpl2+)))
6836
6837(define-public geonkick
6838 (package
6839 (name "geonkick")
6840 (version "3.6.2")
6841 (source
6842 (origin
6843 (method git-fetch)
6844 (uri (git-reference
6845 (url "https://codeberg.org/Geonkick-Synthesizer/geonkick")
6846 (commit (string-append "v" version))))
6847 (file-name (git-file-name name version))
6848 (sha256
6849 (base32 "0817hsfvgri315aw0y06rzjcw96lhgxjc37rbxqagk3ciw0naj6n"))))
6850 (build-system cmake-build-system)
6851 (arguments
6852 `(#:tests? #f ;no tests included
6853 #:configure-flags
6854 (list (string-append "-DGKICK_REDKITE_SDK_PATH="
6855 (assoc-ref %build-inputs "redkite"))
6856 (string-append "-DCMAKE_INSTALL_PREFIX="
6857 (assoc-ref %outputs "out")))))
6858 (inputs
6859 (list hicolor-icon-theme
6860 jack-1 ;for the standalone JACK application
6861 libsndfile
6862 libx11
6863 redkite
6864 rapidjson))
6865 (native-inputs
6866 (list lv2 pkg-config sord))
6867 (synopsis "Percussion synthesizer")
6868 (description "Geonkick is a synthesizer that can synthesize elements
6869of percussion such as kicks, snares, hit-hats, shakers, claps and sticks.
6870It can also play and mix samples.")
6871 (home-page "https://geonkick.org")
6872 (license license:gpl3+)))
6873
6874(define-public mamba
6875 (package
6876 (name "mamba")
6877 (version "2.6")
6878 (source
6879 (origin
6880 (method git-fetch)
6881 (uri
6882 (git-reference
6883 (url "https://github.com/brummer10/Mamba")
6884 (commit (string-append "v" version))
6885 (recursive? #t))) ; references specific commit of libxputty
6886 (file-name (git-file-name name version))
6887 (sha256
6888 (base32
6889 "1dndyz3dza4k1a4abd53h9fr07ssmm5b7plbh4a74b3mf0dafpsb"))))
6890 (build-system gnu-build-system)
6891 (arguments
6892 (list #:tests? #f ; no "check" target
6893 #:make-flags
6894 #~(list (string-append "PREFIX=" #$output)
6895 (string-append "CC=" #$(cc-for-target)))
6896 #:phases
6897 #~(modify-phases %standard-phases
6898 (delete 'configure))))
6899 (inputs
6900 (list alsa-lib
6901 cairo
6902 fluidsynth
6903 jack-2
6904 liblo
6905 libsigc++-2
6906 libsmf
6907 libx11))
6908 (native-inputs
6909 (list pkg-config xxd))
6910 (home-page "https://github.com/brummer10/Mamba")
6911 (synopsis "Virtual MIDI keyboard and MIDI file player/recorder for JACK")
6912 (description "Mamba is a virtual MIDI keyboard and MIDI file
6913player/recorder for the JACK Audio Connection Kit. It comes with predefined
6914keymaps for QWERTZ, QWERTY and AZERTY keyboards and also allows custom
6915ones.")
6916 (license license:bsd-0)))
6917
6918(define-public distrho-ports
6919 ;; From 2021-03-15 to this commit various important changes are made
6920 ;; including improved directory structure and updated JUCE versions.
6921 (let ((commit "f2dbaded0a05732e3499fa374a586e5b32370da5")
6922 (revision "0"))
6923 (package
6924 (name "distrho-ports")
6925 (version (git-version "2021-03-15" revision commit))
6926 (source (origin
6927 (method git-fetch)
6928 (uri (git-reference
6929 (url "https://github.com/DISTRHO/DISTRHO-Ports")
6930 (commit commit)))
6931 (file-name (git-file-name name version))
6932 (sha256
6933 (base32
6934 "1rrnqwask2qg05ynisk6bpj118cl7c3w53rqrfg5x3sx847rjjgc"))
6935 (modules '((guix build utils)))
6936 (snippet
6937 '(begin
6938 ;; Delete third party libraries, libraries without
6939 ;; licenses, and unneeded libraries.
6940 (for-each
6941 delete-file-recursively
6942 (list "ports-juce5/arctican-function" ;no license
6943 "ports-juce5/arctican-pilgrim" ;no license
6944 "ports-juce5/drowaudio-tremolo" ;no license
6945 "ports-juce5/juce-demo-host" ;not used
6946 "ports-juce5/juce-demo-plugin" ;not used
6947 "ports-juce5/temper/source/faust" ;bundled
6948 "ports-juce6/chow" ;not used
6949 "ports-juce6/swankyamp/thirdparty" ;bundled
6950 "ports-juce6/vitalium/third_party")) ;bundled
6951 ;; Exclude them from building.
6952 (substitute* (find-files "." "meson.build$")
6953 (("'arctican") "#'arctican")
6954 (("'drowaudio-tremolo") "#'drowaudio-tremolo")
6955 (("'third") "#'third"))
6956 ;; Use system provided "nlohmann/json.hpp".
6957 (with-directory-excursion "ports-juce6/vitalium/source"
6958 (substitute*
6959 (list "common/line_generator.h"
6960 "common/load_save.h"
6961 "common/tuning.h"
6962 "common/wavetable/wavetable_component.h"
6963 "common/wavetable/wavetable_creator.h"
6964 "common/wavetable/wavetable_keyframe.h"
6965 "interface/editor_sections/save_section.h"
6966 "interface/look_and_feel/skin.h"
6967 "synthesis/producers/sample_source.h")
6968 (("json/json\\.h") "nlohmann/json.hpp")))))))
6969 (build-system meson-build-system)
6970 (arguments
6971 (list
6972 #:tests? #f ;no test target
6973 #:configure-flags
6974 #~'("-Dcpp_args=-fpermissive") ;from `unsigned char*' to `char*'
6975 #:phases
6976 #~(modify-phases %standard-phases
6977 (add-after 'unpack 'patch-juce-fonts
6978 (lambda* (#:key inputs #:allow-other-keys)
6979 (let ((fonts (search-input-directory inputs "/etc/fonts")))
6980 (with-directory-excursion "libs"
6981 (substitute* (find-files "." "juce_linux_Fonts.cpp$")
6982 (("/usr/share/fonts") fonts)))))))))
6983 (native-inputs
6984 (list cmake-minimal
6985 concurrentqueue
6986 faust
6987 nlohmann-json
6988 optional-lite
6989 pkg-config))
6990 (inputs
6991 (list alsa-lib
6992 fontconfig
6993 freetype
6994 fftwf
6995 libx11
6996 libxcursor
6997 libxext
6998 libxrender
6999 mesa))
7000 (home-page "https://github.com/DISTRHO/DISTRHO-Ports")
7001 (synopsis "Audio plugins and LV2 ports")
7002 (description
7003 "This package contains LV2 ports of the following audio plugins:
7004@itemize
7005@item Dexed,
7006@item dRowAudio plugins (Distortion, Distortion Shaper, Flanger, Reverb,
7007 Tremolo),
7008@item DrumSynth,
7009@item EasySSP,
7010@item EQinox,
7011@item HiReSam,
7012@item JuceOPL,
7013@item KlangFalter,
7014@item LUFS Meter,
7015@item Luftikus,
7016@item Obxd,
7017@item PitchedDelay,
7018@item ReFine,
7019@item StereoSourceSeperation,
7020@item Swanky Amp,
7021@item TAL plugins (Dub-3, Filter, Filter-2, Noize Mak3r, Reverb, Reverb-II,
7022 Reverb-III, Vocoder-II),
7023@item Temper,
7024@item Vex,
7025@item Vitalium, and
7026@item Wolpertinger.
7027@end itemize")
7028 (license
7029 (list license:asl2.0 ;used by Dexed
7030 ;; mingw-std-threads and EasySSP (for dsp-utility) use FreeBSD.
7031 license:bsd-2
7032 ;; Licenses for dRowAudio is not found in this repository, but
7033 ;; the upstream project is licensed under MIT:
7034 ;; https://github.com/drowaudio/drowaudio.
7035 ;; Luftikus, PitchedDelay and ReFine are ported from lkjb plugins
7036 ;; which is licensed under MIT:
7037 ;; https://github.com/lkjbdsp/lkjb-plugins.
7038 license:expat
7039 (license:fsf-free ;used by Temper
7040 "file:///ports-juce5/temper/source/TemperDsp.hpp")
7041 ;; juce-plugin, LUFS Meter, Obxd and TAL plugins use GPLv2.
7042 license:gpl2
7043 ;; License for Wolpertinger is not found in this repository, but
7044 ;; the upstream project is licensed under GPLv2+:
7045 ;; https://github.com/jkroll20/wolpertinger.
7046 ;; dRowAudio plugins, juced, HiReSam and Vex use this license.
7047 ;; Packages using files from JUCETICE project use this license.
7048 license:gpl2+
7049 ;; License for EasySSP is not found in this repository, but the
7050 ;; upstream project is licensed under GPLv3:
7051 ;; https://github.com/automatl/audio-dsp-multi-visualize.
7052 license:gpl3 ;used by JUCE
7053 ;; Dexed, Swanky Amp, Vitalium and KlangFalter use GPLv3+.
7054 license:gpl3+
7055 ;; License for lv2-ttl-generator is not found in this repository,
7056 ;; but is a part of DPF-Plugins and is licensed under ISC:
7057 ;; https://github.com/DISTRHO/DPF.
7058 ;; JUCE uses this license for juce_audio_basics,
7059 ;; juce_audio_devices, juce_blocks_basics, juce_core and
7060 ;; juce_events.
7061 license:isc
7062 license:lgpl2.0+ ;used by DrumSynth and EQinox
7063 license:lgpl2.1+ ;used by SoundTouch and juce-opl
7064 ;; StereoSourceSeperation uses a non-copyleft license.
7065 (license:non-copyleft
7066 "file:///ports-juce5/stereosourceseparation/\
7067source/kiss_fft/kiss_fft.c")
7068 ;; dRowAudio uses a non-copyleft license for curl.
7069 (license:non-copyleft
7070 "file:///libs/drowaudio/source/dRowAudio/network/\
7071curl/include/curl/curl.h")
7072 license:wtfpl2))))) ;used by dRowAudio for FFTReal
7073
7074(define-public dpf-plugins
7075 (package
7076 (name "dpf-plugins")
7077 (version "1.7")
7078 (source
7079 (origin
7080 (method git-fetch)
7081 (uri
7082 (git-reference
7083 (url "https://github.com/DISTRHO/DPF-Plugins")
7084 (commit (string-append "v" version))))
7085 (file-name (git-file-name name version))
7086 (sha256
7087 (base32 "082f3f78x6k58j78mqr57qhw40f5s8fmcbkhl36nn3vbcsa07bzg"))))
7088 (build-system gnu-build-system)
7089 (arguments
7090 `(#:tests? #f ; no "check" target
7091 #:make-flags
7092 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
7093 (string-append "CC=" ,(cc-for-target)))
7094 #:phases
7095 (modify-phases %standard-phases
7096 (delete 'configure))))
7097 (inputs
7098 (list cairo
7099 liblo ; for dssi plugins
7100 jack-1 ; for standalone applications
7101 mesa))
7102 (native-inputs
7103 (list pkg-config dssi lv2))
7104 (home-page "https://github.com/DISTRHO/DPF-Plugins")
7105 (synopsis "Audio plugin collection")
7106 (description "Collection of audio plugins built with the DISTRHO Plugin
7107Framework (DPF) available in LADSPA, DSSI, LV2 and VST2 formats. This
7108package includes the following plugins: glBars, Kars, Max-Gen examples
7109(MaBitcrush, MaFreeverb, MaGigaverb, MaPitchshift), Mini-Series (3BandEQ,
71103BandSplitter, PingPongPan), ndc-Plugs (Amplitude Imposer, Cycle Shifter,
7111Soul Force), MVerb, Nekobi, and ProM.")
7112 ;; This package consists of several plugins refactored to use the
7113 ;; DISTHRO Plugin Framework (DPF). Different copyrights and licenses
7114 ;; apply to different plugins. The root LICENSE file has a table with
7115 ;; license information for each plugin and paths to each license
7116 (license (list license:isc license:gpl3 license:lgpl3 license:expat license:gpl2))))
7117
7118(define-public avldrums-lv2
7119 (package
7120 (name "avldrums-lv2")
7121 (version "0.7.3")
7122 (source
7123 (origin
7124 (method git-fetch)
7125 (uri (git-reference
7126 (url "https://github.com/x42/avldrums.lv2")
7127 (commit (string-append "v" version))
7128 ;; This plugin expects the robtk submodule's source files to be
7129 ;; there in order to build.
7130 (recursive? #t)))
7131 (file-name (git-file-name name version))
7132 (sha256
7133 (base32 "0bjg2wlnd04mlk123hsmacdbw9jiivn1f4qy3r5kpl9h727qg4h1"))))
7134 (build-system gnu-build-system)
7135 (arguments
7136 (list #:tests? #f ; no "check" target
7137 #:make-flags
7138 #~(list (string-append "PREFIX=" #$output)
7139 (string-append "CC=" #$(cc-for-target)))
7140 #:phases
7141 #~(modify-phases %standard-phases
7142 (delete 'configure)))) ; no configure script
7143 (inputs
7144 (list cairo dssi glu mesa pango))
7145 (native-inputs
7146 (list pkg-config lv2))
7147 (home-page "https://x42-plugins.com/x42/x42-avldrums")
7148 (synopsis "Drum sample player LV2 plugin dedicated to the AVLinux Drumkits")
7149 (description "AVLdrums is a drum sample player LV2 plugin dedicated to Glen
7150MacArthur's AVLdrums. This plugin provides a convenient way to sequence and mix
7151MIDI drums and comes as two separate drumkits: Black Pearl and Red Zeppelin.")
7152 (license license:gpl2+)))
7153
7154(define-public helm
7155 (package
7156 (name "helm")
7157 (version "0.9.0")
7158 (source
7159 (origin
7160 (method git-fetch)
7161 (uri
7162 (git-reference
7163 (url "https://github.com/mtytel/helm")
7164 (commit (string-append "v" version))))
7165 (file-name (git-file-name name version))
7166 (sha256
7167 (base32
7168 "17ys2vvhncx9i3ydg3xwgz1d3gqv4yr5mqi7vr0i0ca6nad6x3d4"))
7169 ;; Apply GCC 9 fixes from https://github.com/mtytel/helm/pull/233
7170 (patches (search-patches "helm-fix-gcc-9-build.patch"))))
7171 (build-system gnu-build-system)
7172 (arguments
7173 (list
7174 #:tests? #f ; no "check" target
7175 #:make-flags
7176 #~(list (string-append "DESTDIR=" #$output)
7177 "CXXFLAGS=-fpermissive" ; from ‘unsigned char*’ to ‘char*’
7178 "lv2" "standalone")
7179 #:phases
7180 #~(modify-phases %standard-phases
7181 (add-after 'unpack 'include-pnglib-code-and-remove-usr-from-paths
7182 (lambda _
7183 (substitute* (list "standalone/builds/linux/Makefile"
7184 "builds/linux/LV2/Makefile")
7185 (("JUCE_INCLUDE_PNGLIB_CODE=0") "JUCE_INCLUDE_PNGLIB_CODE=1"))
7186 (substitute* "Makefile"
7187 (("/usr") ""))))
7188 (add-after 'unpack 'fix-hardcoded-paths
7189 (lambda _
7190 (substitute* (list "src/common/load_save.cpp"
7191 "src/editor_sections/patch_browser.cpp")
7192 (("/usr") #$output))))
7193 (delete 'configure))))
7194 (inputs
7195 (list alsa-lib
7196 curl
7197 freetype
7198 hicolor-icon-theme
7199 jack-1
7200 libxcursor
7201 libxinerama
7202 mesa))
7203 (native-inputs
7204 (list lv2 pkg-config))
7205 (home-page "https://tytel.org/helm/")
7206 (synopsis "Polyphonic synth with lots of modulation")
7207 (description "Helm is a cross-platform polyphonic synthesizer available standalone
7208and as an LV2 plugin.")
7209 (license license:gpl3+)
7210 (properties '((lint-hidden-cpe-vendors . ("helm"))))))
7211
7212(define-public zrythm
7213 (package
7214 ;; Zrythm contains trademarks and comes with a trademark policy found in
7215 ;; TRADMARKS.md inside the release distribution. The trademark policy
7216 ;; allows verbatim re-distribution, and it also allows FSF-approved
7217 ;; distros to make necessary changes to integrate the software into the
7218 ;; distribution.
7219 (name "zrythm")
7220 (version "1.0.0-beta.4.12.5")
7221 (source
7222 (origin
7223 (method url-fetch)
7224 (uri (string-append "https://www.zrythm.org/releases/zrythm-"
7225 version ".tar.xz"))
7226 (sha256
7227 (base32
7228 "1kixf8rlim5qvkhcm65rf35mxkxv3hij039jc9rvh710vl2xxm0g"))))
7229 (build-system meson-build-system)
7230 (arguments
7231 (list
7232 #:glib-or-gtk? #t
7233 #:configure-flags
7234 '(list "-Dtests=true"
7235 "-Dmanpage=false" ;fish-completions breaks this
7236 "-Ddseg_font=false"
7237 "-Dextra_optimizations=false" ;machine-specific
7238 "-Dgraphviz=enabled" ;for exporting routing graphs
7239 "-Dguile=enabled" ;for Guile scripting
7240 "-Djack=enabled" ;for JACK audio/MIDI backend
7241 "-Drtaudio=enabled" ;for RtAudio backend (ALSA)
7242 "-Drtmidi=enabled" ;for RtMidi backend (ALSA sequencer)
7243 "-Dsdl=enabled") ;for SDL audio backend (which uses ALSA)
7244 #:phases
7245 #~(modify-phases %standard-phases
7246 (add-after 'unpack 'patch-tests
7247 (lambda _
7248 ;; zrythm: fails because curl wants to access the internet.
7249 ;; project: unknown failure XXX
7250 ;; The other tests fail with this error:
7251 ;; error: attempt to map invalid URI `'
7252 ;; This means that lilv is given an empty LV2 plugin URI.
7253 ;; This is probably because we don't provide all LV2
7254 ;; plugins that are needed for running the tests.
7255 (substitute* "tests/meson.build"
7256 (("foreach name, info : tests")
7257 "\
7258 disabled_tests = {
7259 'actions/mixer_selections_action': 0,
7260 'actions/tracklist_selections': 0,
7261 'dsp/audio_region': 0,
7262 'dsp/audio_track': 0,
7263 'dsp/midi_track': 0,
7264 'dsp/pool': 0,
7265 'integration/recording': 0,
7266 'project': 0,
7267 'zrythm': 0
7268 }
7269 enabled_tests = {}
7270 foreach name, info : tests
7271 if name not in disabled_tests
7272 enabled_tests += {name: info}
7273 endif
7274 endforeach
7275 foreach name, info : enabled_tests"))
7276 ;; Requires internet access
7277 (substitute* "data/meson.build"
7278 (("if appstream.*\\(\\)")
7279 "if false"))))
7280 (add-before 'build 'disable-guile-auto-compilation
7281 (lambda _
7282 (setenv "GUILE_AUTO_COMPILE" "0")))
7283 (add-after 'install 'wrap-program
7284 (lambda _
7285 (wrap-program (string-append #$output "/bin/zrythm")
7286 ;; Wrapping GDK_PIXBUF_MODULE_FILE allows Zrythm to load
7287 ;; its own SVG icons in pure environments.
7288 `("GDK_PIXBUF_MODULE_FILE" =
7289 (,(getenv "GDK_PIXBUF_MODULE_FILE")))))))))
7290 (inputs
7291 (list alsa-lib
7292 boost
7293 carla-2.6
7294 curl
7295 fftw
7296 fftwf
7297 flex
7298 font-dseg
7299 gettext-minimal
7300 glib
7301 graphviz
7302 gtk
7303 gtksourceview
7304 guile-3.0
7305 jack-2
7306 json-glib
7307 libadwaita
7308 (module-ref
7309 (resolve-interface '(gnu packages debug)) 'libbacktrace)
7310 libcyaml
7311 libpanel
7312 (librsvg-for-system)
7313 libsamplerate
7314 libsndfile
7315 libyaml
7316 lilv
7317 lsp-dsp-lib
7318 lv2
7319 pango
7320 pcre
7321 pipewire
7322 pulseaudio
7323 reproc
7324 rtaudio
7325 rtmidi
7326 rubberband
7327 sdl2
7328 soxr
7329 vamp
7330 xdg-utils
7331 xxhash
7332 zix
7333 `(,zstd "lib")))
7334 (native-inputs
7335 ;; Zrythm require breeze-icons to be installed. Having them listed in
7336 ;; the native inputs cause them to be wrapped and made available via
7337 ;; XDG_DATA_DIRS.
7338 (list breeze-icons ;native because not executable
7339 help2man
7340 `(,glib "bin") ;for 'glib-compile-resources'
7341 pkg-config
7342 python-sphinx
7343 python-sphinx-intl
7344 sassc))
7345 (synopsis "Digital audio workstation focusing on usability")
7346 (description "Zrythm is a digital audio workstation designed to be
7347featureful and easy to use. It offers unlimited automation options, LV2
7348plugin support, JACK support and chord assistance.")
7349 (home-page "https://www.zrythm.org/en/index.html")
7350 (license license:agpl3+)))
7351
7352(define-public dragonfly-reverb
7353 (package
7354 (name "dragonfly-reverb")
7355 (version "3.2.10")
7356 (source
7357 (origin
7358 (method git-fetch)
7359 (uri
7360 (git-reference
7361 (url "https://github.com/michaelwillis/dragonfly-reverb")
7362 (commit version)
7363 ;; Bundles a specific commit of the DISTRHO plugin framework.
7364 (recursive? #t)))
7365 (file-name (git-file-name name version))
7366 (sha256
7367 (base32 "11i2k888m3zj4gz9si4y5mach8dwdq3yksbvjn1syrbwj99phwk1"))))
7368 (build-system gnu-build-system)
7369 (arguments
7370 `(#:tests? #f ; no check target
7371 #:make-flags
7372 (list (string-append "CC=" ,(cc-for-target)))
7373 #:phases
7374 (modify-phases %standard-phases
7375 (delete 'configure) ;no configure target
7376 (replace 'install ;no install target
7377 (lambda* (#:key outputs #:allow-other-keys)
7378 (let* ((out (assoc-ref outputs "out"))
7379 (bin (string-append out "/bin"))
7380 (lv2 (string-append out "/lib/lv2")))
7381 ;; Install LV2.
7382 (for-each
7383 (lambda (file)
7384 (copy-recursively file
7385 (string-append lv2 "/" (basename file))))
7386 (find-files "bin" "\\.lv2$" #:directories? #t))
7387 ;; Install executables.
7388 (for-each
7389 (lambda (file)
7390 (install-file file bin))
7391 (find-files "bin"
7392 (lambda (name stat)
7393 (and
7394 (equal? (dirname name) "bin")
7395 (not (string-suffix? ".so" name))
7396 (not (string-suffix? ".lv2" name))))))))))))
7397 (native-inputs
7398 (list pkg-config))
7399 (inputs
7400 (list jack-1 libx11 mesa))
7401 (home-page "https://michaelwillis.github.io/dragonfly-reverb/")
7402 (synopsis "Concert hall reverb and room reverb effects")
7403 (description
7404 "Dragonfly Reverb is a bundle of two free audio effects: a concert
7405hall reverb and a room reverb. Both are available as LV2 plugins as well
7406as JACK standalone applications.")
7407 (license license:gpl3+)))
7408
7409(define-public zplugins
7410 (package
7411 (name "zplugins")
7412 (version "0.2.5")
7413 (source
7414 (origin
7415 (method git-fetch)
7416 (uri
7417 (git-reference
7418 (url "https://git.zrythm.org/zrythm/zplugins")
7419 (commit (string-append "v" version))))
7420 (file-name (git-file-name name version))
7421 (sha256
7422 (base32
7423 "0xsnq8kg57pdswqi9yy5nrpjbfgmym2m1qi3cj3hki33kwzx2nn1"))))
7424 (build-system meson-build-system)
7425 (inputs
7426 (list guile-3.0 libsndfile lv2 ztoolkit-rsvg))
7427 (native-inputs
7428 (list pkg-config))
7429 (synopsis "Audio plugin collection")
7430 (description "ZPlugins is a collection of audio DSP plugins intended
7431to be bundled with the Zrythm @dfn{digital audio workstation} (DAW).")
7432 (home-page "https://www.zrythm.org/en/plugins.html")
7433 (license license:agpl3+)))
7434
7435(define-public remid-lv2
7436 (package
7437 (name "remid-lv2")
7438 (version "0.3")
7439 (source
7440 (origin
7441 (method git-fetch)
7442 (uri (git-reference
7443 (url "https://github.com/ssj71/reMID.lv2")
7444 (commit (string-append "v" version))))
7445 (file-name (git-file-name name version))
7446 (sha256
7447 (base32
7448 "062kriniidsrhzwrf89kfxm9wb0cmgrl07asnlmgil8vcl7gl9y5"))))
7449 (build-system cmake-build-system)
7450 (arguments
7451 (list #:tests? #f ; no tests included
7452 #:configure-flags
7453 #~(list "-DCMAKE_C_FLAGS=-Wno-implicit-function-declaration")))
7454 (inputs
7455 (list alsa-lib glib jack-1 lv2))
7456 (native-inputs
7457 (list pkg-config))
7458 (home-page "https://github.com/ssj71/reMID.lv2")
7459 (synopsis
7460 "MIDI-controlled implementation of the SID 6581 chip used in the
7461Commodore 64")
7462 (description
7463 "The 6581 SID chip is the sound chip used in the Commodore 64 computer.
7464reMID is a MIDI implementation of the 6581 SID chip using the reSID library
7465to provide a virtual SID-based synthesizer, controllable in real-time via
7466MIDI. It includes support for scripted instruments that allow complex sonic
7467control of the chip.")
7468 (license license:gpl2+)))
7469
7470(define-public vl1-emulator
7471 (package
7472 (name "vl1-emulator")
7473 (version "1.1.0.0")
7474 (source
7475 (origin
7476 (method git-fetch)
7477 (uri (git-reference
7478 (url "https://github.com/linuxmao-org/VL1-emulator")
7479 (commit (string-append "v" version))
7480 ;; bundles a specific commit of the DISTRHO plugin framework
7481 (recursive? #t)))
7482 (file-name (git-file-name name version))
7483 (sha256
7484 (base32
7485 "1npc86vqma8gk1hawa0lii0r2xmnv846plyl1ci3bdswyrdk5chm"))))
7486 (build-system gnu-build-system)
7487 (arguments
7488 `(#:tests? #f ;no check target
7489 #:make-flags
7490 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
7491 "CC=gcc")
7492 #:phases
7493 (modify-phases %standard-phases
7494 (delete 'configure)))) ;no configure target
7495 (inputs
7496 (list cairo jack-1 mesa))
7497 (native-inputs
7498 (list pkg-config))
7499 (home-page "https://github.com/linuxmao-org/VL1-emulator")
7500 (synopsis "Emulator of Casio VL-Tone VL1")
7501 (description "The VL1-Emulator is an emulator of Casio VL-Tone VL1,
7502based on source code by PolyValens, offered as an LV2 plugin and a
7503standalone JACK application.")
7504 ;; Expat or CC0
7505 (license (list license:expat license:cc0))))
7506
7507(define-public tap-lv2
7508 (let ((commit "cab6e0dfb2ce20e4ad34b067d1281ec0b193598a")
7509 (revision "1"))
7510 (package
7511 (name "tap-lv2")
7512 (version (git-version "0.0" revision commit))
7513 (source
7514 (origin
7515 (method git-fetch)
7516 (uri (git-reference
7517 (url "https://github.com/moddevices/tap-lv2")
7518 (commit commit)))
7519 (file-name (git-file-name name version))
7520 (sha256
7521 (base32
7522 "0q480djfqd9g8mzrggc4vl7yclrhdjqx563ghs8mvi2qq8liycw3"))))
7523 (build-system gnu-build-system)
7524 (arguments
7525 `(#:tests? #f ; no check target
7526 #:make-flags
7527 (list "CC=gcc")
7528 #:phases
7529 (modify-phases %standard-phases
7530 (delete 'configure) ; no configure
7531 (replace 'install
7532 (lambda _
7533 (invoke "make"
7534 (string-append "INSTALL_PATH="
7535 (assoc-ref %outputs "out")
7536 "/lib/lv2")
7537 "install"))))))
7538 (inputs
7539 (list lv2))
7540 (native-inputs
7541 (list pkg-config))
7542 (synopsis "Audio plugin collection")
7543 (description "TAP (Tom's Audio Processing) plugins is a collection of
7544 audio effect plugins originally released as LADSPA plugins. This package
7545 offers an LV2 version ported by moddevices.")
7546 (home-page "https://tap-plugins.sourceforge.net/")
7547 (license license:gpl2))))
7548
7549(define-public wolf-shaper
7550 (package
7551 (name "wolf-shaper")
7552 (version "1.0.2")
7553 (source
7554 (origin
7555 (method git-fetch)
7556 (uri (git-reference
7557 (url "https://github.com/wolf-plugins/wolf-shaper")
7558 (commit (string-append "v" version))
7559 ;; Bundles a specific commit of the DISTRHO plugin framework.
7560 (recursive? #t)))
7561 (file-name (git-file-name name version))
7562 (sha256
7563 (base32
7564 "03m6vq83lbj61xmg5f45yziajsmfxxwn95s53m8y7sdifz1bb272"))))
7565 (build-system gnu-build-system)
7566 (arguments
7567 (list #:tests? #f ; no check target
7568 #:make-flags
7569 #~(list (string-append "CC=" #$(cc-for-target))
7570 "NOOPT=true")
7571 #:phases
7572 #~(modify-phases %standard-phases
7573 (delete 'configure) ;no configure target
7574 (replace 'install ;no install target
7575 (lambda* (#:key outputs #:allow-other-keys)
7576 (let* ((out (assoc-ref outputs "out"))
7577 (bin (string-append out "/bin"))
7578 (lv2 (string-append out "/lib/lv2")))
7579 ;; Install LV2.
7580 (for-each
7581 (lambda (file)
7582 (copy-recursively file
7583 (string-append lv2 "/"
7584 (basename file))))
7585 (find-files "bin" "\\.lv2$" #:directories? #t))
7586 ;; Install executables.
7587 (for-each
7588 (lambda (file)
7589 (install-file file bin))
7590 (find-files "bin"
7591 (lambda (name stat)
7592 (and
7593 (equal? (dirname name) "bin")
7594 (not (string-suffix? ".so" name))
7595 (not
7596 (string-suffix? ".lv2" name))))))))))))
7597 (native-inputs
7598 (list pkg-config))
7599 (inputs
7600 (list jack-1 lv2 mesa))
7601 (synopsis "Waveshaper plugin")
7602 (description "Wolf Shaper is a waveshaper plugin with a graph editor.
7603It is provided as an LV2 plugin and as a standalone Jack application.")
7604 (home-page "https://wolf-plugins.github.io/wolf-shaper/")
7605 (properties `((tunable? . #t)))
7606 (license license:gpl3)))
7607
7608(define-public wolf-spectrum
7609 (package
7610 (inherit wolf-shaper)
7611 (name "wolf-spectrum")
7612 (version "1.0.0")
7613 (source
7614 (origin
7615 (method git-fetch)
7616 (uri (git-reference
7617 (url "https://github.com/pdesaulniers/wolf-spectrum")
7618 (commit (string-append "v" version))
7619 ;; Bundles a specific commit of the DISTRHO plugin framework.
7620 (recursive? #t)))
7621 (file-name (git-file-name name version))
7622 (sha256
7623 (base32
7624 "17db1jlj7vb1xyvkdhhrsvdbwb7jqw6i4168cdvlj3yvn2ra8gpm"))))
7625 (synopsis "2D spectrogram plugin")
7626 (description "Wolf Spectrum is a real-time 2D spectrogram plugin.
7627It is provided as an LV2 plugin and as a standalone Jack application.")
7628 (home-page "https://github.com/pdesaulniers/wolf-spectrum")
7629 (license license:gpl3)))
7630
7631(define-public shiru-lv2
7632 (let ((commit "08853f99140012234649e67e5647906fda74f6cc")
7633 (revision "1"))
7634 (package
7635 (name "shiru-lv2")
7636 (version (git-version "0.0" revision commit))
7637 (source
7638 (origin
7639 (method git-fetch)
7640 (uri (git-reference
7641 (url "https://github.com/linuxmao-org/shiru-plugins")
7642 (commit commit)
7643 ;; Bundles a specific commit of the DISTRHO plugin framework.
7644 (recursive? #t)))
7645 (file-name (git-file-name name version))
7646 (sha256
7647 (base32
7648 "00rf6im3rhg98h60sgl1r2s37za5vr5h14pybwi07h8zbc8mi6fm"))))
7649 (build-system gnu-build-system)
7650 (arguments
7651 `(#:tests? #f ; no check target
7652 #:make-flags (list "CC=gcc")
7653 #:phases
7654 (modify-phases %standard-phases
7655 (delete 'configure) ;no configure target
7656 (replace 'install ;no install target
7657 (lambda* (#:key outputs #:allow-other-keys)
7658 (let* ((out (assoc-ref outputs "out"))
7659 (bin (string-append out "/bin"))
7660 (lv2 (string-append out "/lib/lv2")))
7661 ;; Install LV2.
7662 (for-each
7663 (lambda (file)
7664 (copy-recursively file
7665 (string-append lv2 "/" (basename file))))
7666 (find-files "bin" "\\.lv2$" #:directories? #t))
7667 ;; Install executables.
7668 (for-each
7669 (lambda (file)
7670 (install-file file bin))
7671 (find-files "bin"
7672 (lambda (name stat)
7673 (and
7674 (equal? (dirname name) "bin")
7675 (not (string-suffix? ".so" name))
7676 (not (string-suffix? ".lv2" name))))))
7677 #t))))))
7678 (native-inputs
7679 (list pkg-config))
7680 (inputs
7681 (list cairo
7682 glu
7683 jack-1
7684 lv2
7685 mesa
7686 pango))
7687 (synopsis "Audio plugin collection")
7688 (description "Shiru plugins is a collection of audio plugins created
7689 by Shiru, ported to LV2 by the Linux MAO project using the DISTRHO plugin
7690 framework.")
7691 (home-page "https://shiru.untergrund.net/software.shtml")
7692 (license license:wtfpl2))))
7693
7694(define-public a2jmidid
7695 (package
7696 (name "a2jmidid")
7697 (version "12")
7698 (source (origin
7699 (method url-fetch)
7700 (uri (string-append "https://dl.ladish.org/a2jmidid/a2jmidid-"
7701 version ".tar.bz2"))
7702 (sha256
7703 (base32 "1m05kbxkfw992pl23vfbg4s4rlhailkh04fa7bjdhr39j32q4qjk"))))
7704 (arguments
7705 (list #:tests? #f ; No tests.
7706 #:phases
7707 #~(modify-phases %standard-phases
7708 (add-after 'install 'wrap-programs
7709 (lambda* (#:key inputs outputs #:allow-other-keys)
7710 (let ((bin (string-append #$output "/bin/")))
7711 (substitute* (string-append bin "a2j")
7712 (("a2j_control") (string-append bin "a2j_control")))
7713 (wrap-program (string-append bin "a2j_control")
7714 `("PYTHONPATH" prefix (,(getenv "GUIX_PYTHONPATH"))))))))))
7715 (build-system meson-build-system)
7716 (inputs
7717 (list alsa-lib
7718 bash-minimal ; for wrap-program
7719 dbus
7720 jack-1
7721 python
7722 python-dbus-1.2))
7723 (native-inputs
7724 (list pkg-config))
7725 (synopsis "ALSA sequencer to JACK MIDI bridging")
7726 (description
7727 "@code{a2jmidid} is a daemon that implements automatic bridging of ALSA
7728midi devices to JACK midi devices.")
7729 (home-page "https://a2jmidid.ladish.org/")
7730 (license license:gpl2)))
7731
7732(define-public opustags
7733 (package
7734 (name "opustags")
7735 (version "1.10.1")
7736 (source (origin
7737 (method git-fetch)
7738 (uri (git-reference
7739 (url "https://github.com/fmang/opustags")
7740 (commit version)))
7741 (sha256
7742 (base32 "13ibqmp37hvm1k17zqi81r8ya727b5f56wg4a8bnqp0qaghkwnnj"))
7743 (file-name (git-file-name name version))))
7744 (arguments
7745 (list
7746 #:modules '((guix build cmake-build-system)
7747 ((guix build gnu-build-system) #:prefix gnu:)
7748 (guix build utils))
7749 #:phases
7750 #~(modify-phases %standard-phases
7751 ;; This package does not use the perl-build-system, so we have to
7752 ;; manually set up the Perl environment used by the test suite.
7753 (add-before 'check 'setup-perl-environment
7754 (lambda* (#:key inputs #:allow-other-keys)
7755 (let* ((perl-list-moreutils-lib
7756 (string-append #$(this-package-native-input "perl-list-moreutils")
7757 "/lib/perl5/site_perl/"
7758 #$(package-version perl)))
7759 (perl-exporter-tiny-lib
7760 (string-append #$(this-package-native-input "perl-exporter-tiny")
7761 "/lib/perl5/site_perl/"
7762 #$(package-version perl)))
7763 (perl-test-deep-lib
7764 (string-append #$(this-package-native-input "perl-test-deep")
7765 "/lib/perl5/site_perl/"
7766 #$(package-version perl))))
7767 (setenv "PERL5LIB" (string-append perl-list-moreutils-lib ":"
7768 perl-exporter-tiny-lib ":"
7769 perl-test-deep-lib)))))
7770 (replace 'check (assoc-ref gnu:%standard-phases 'check)))))
7771 (build-system cmake-build-system)
7772 (inputs
7773 (list libogg))
7774 (native-inputs
7775 (list pkg-config
7776 ffmpeg
7777 perl-exporter-tiny
7778 perl-list-moreutils
7779 perl-test-deep
7780 perl-test-harness))
7781 (synopsis "Ogg Opus tags editor")
7782 (description "@code{opustags} is an Ogg Opus tag editor. It reads and edits
7783the comment header of an Ogg Opus audio file, offering both read-only and
7784editing modes. Tags can be edited interactively with an editor of your
7785choice.")
7786 (home-page "https://github.com/fmang/opustags")
7787 (license license:bsd-3)))
7788
7789(define-public musikcube
7790 (package
7791 (name "musikcube")
7792 (version "3.0.5")
7793 (source (origin
7794 (method git-fetch)
7795 (uri (git-reference
7796 (url "https://github.com/clangen/musikcube/")
7797 (commit version)))
7798 (file-name (git-file-name name version))
7799 (sha256
7800 (base32
7801 "0kfdfai2w4qh31kypl94yknir9f41y1wh93k38cpj04w3chdzdx2"))))
7802 (build-system cmake-build-system)
7803 (arguments
7804 '(#:tests? #f ; No test suite
7805 #:configure-flags
7806 '("-DCMAKE_BUILD_TYPE=Release"
7807 ;; Use the "wide" ncurses headers but don't look for them in an
7808 ;; ncursesw directory. For more info:
7809 ;; https://github.com/clangen/musikcube/wiki/building#compiler-cannot-find-ncurseswcursesh
7810 "-DNO_NCURSESW=true"
7811 ;; We will strip the binaries ourselves in the 'strip' phase.
7812 "-DDISABLE_STRIP=true")))
7813 (native-inputs
7814 (list asio pkg-config))
7815 (inputs
7816 (list alsa-lib
7817 boost
7818 curl
7819 ffmpeg
7820 lame
7821 libev
7822 libgme
7823 libmicrohttpd
7824 libogg
7825 libopenmpt
7826 libvorbis
7827 ncurses/tinfo
7828 openssl
7829 pipewire
7830 pulseaudio
7831 taglib
7832 zlib))
7833 (synopsis "Terminal-based music player, library, and streaming audio server")
7834 (description "Musikcube is a terminal-based music player, library, and
7835streaming audio server.")
7836 (home-page "https://musikcube.com/")
7837 (license license:bsd-3)))
7838
7839(define-public quodlibet
7840 (package
7841 (name "quodlibet")
7842 (version "4.7.1")
7843 (source
7844 (origin
7845 (method git-fetch)
7846 (uri (git-reference
7847 (url "https://github.com/quodlibet/quodlibet")
7848 (commit (string-append "release-" version))))
7849 (file-name (git-file-name name version))
7850 (sha256
7851 (base32 "0nk2n4j0vm9ibrm3p9qwf5s0a4iwjkbvr6z23sc0v3rdxvaxrgf6"))
7852
7853 ;; Disable and remove bundled packages.
7854 (patches (search-patches "quodlibet-disable-bundled-packages.patch"))
7855 (modules '((guix build utils)))
7856 (snippet '(delete-file-recursively "quodlibet/packages"))))
7857 (build-system pyproject-build-system)
7858 (arguments
7859 (list
7860 #:imported-modules `(,@%pyproject-build-system-modules
7861 ,@%glib-or-gtk-build-system-modules)
7862 #:modules '((guix build pyproject-build-system)
7863 ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
7864 (guix build utils))
7865 ;; tests: 4020 passed, 57 skipped, 3 deselected, 106 warnings
7866 #:test-flags
7867 ;; The majority of ignored tests require access to plugin or running
7868 ;; DBus.
7869 ;;
7870 ;; XXX: ValueError: Cannot set parent property without first setting it
7871 ;; to 'None'.
7872 #~(list "--ignore=tests/plugin/test_mediaserver.py"
7873 "--ignore=tests/plugin/test_mpdserver.py"
7874 "--ignore=tests/plugin/test_mpris.py"
7875 "--ignore=tests/plugin/test_prefs.py"
7876 "--ignore=tests/plugin/test_randomalbum.py"
7877 "--ignore=tests/plugin/test_trayicon.py"
7878 "--ignore=tests/plugin/test_viewlyrics.py"
7879 "--ignore=tests/test_browsers__base.py"
7880 "--ignore=tests/test_browsers_playlists.py"
7881 "--ignore=tests/test_browsers_soundcloud.py"
7882 "--ignore=tests/test_commands.py"
7883 "--ignore=tests/test_formats__audio.py"
7884 "--ignore=tests/test_library_file.py"
7885 "--ignore=tests/test_mmkeys.py"
7886 "--ignore=tests/test_qltk_about.py"
7887 "--ignore=tests/test_qltk_browser.py"
7888 "--ignore=tests/test_qltk_cover.py"
7889 "--ignore=tests/test_qltk_edittags.py"
7890 "--ignore=tests/test_qltk_exfalso.py"
7891 "--ignore=tests/test_qltk_info.py"
7892 "--ignore=tests/test_qltk_information.py"
7893 "--ignore=tests/test_qltk_lyrics.py"
7894 "--ignore=tests/test_qltk_prefs.py"
7895 "--ignore=tests/test_qltk_quodlibetwindow.py"
7896 "--ignore=tests/test_session.py"
7897 ;; AssertionError: not expecting a librarian - leaky test?
7898 "--ignore=tests/test_qltk_songlist.py"
7899 ;; Assertion is not equal in tests:
7900 (string-append "--deselect=tests/plugin/test_covers.py"
7901 "::test_live_cover_download[lastfm-cover]")
7902 (string-append "--deselect=tests/plugin/test_covers.py"
7903 "::test_live_cover_download[discogs-cover]")
7904 (string-append "--deselect=tests/test_browsers_iradio.py"
7905 "::TInternetRadio::test_click_add_station"))
7906 #:phases
7907 #~(modify-phases %standard-phases
7908 (add-before 'sanity-check 'pre-check
7909 (lambda _
7910 (setenv "HOME" (getcwd))))
7911 (add-after 'wrap 'glib-or-gtk-wrap ; ensure icons loaded
7912 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
7913 (add-after 'glib-or-gtk-wrap 'wrap-extra-paths
7914 (lambda _
7915 (let ((gi-typelib-path (getenv "GI_TYPELIB_PATH"))
7916 (gst-plugins-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
7917 (for-each
7918 (lambda (prog)
7919 (wrap-program (string-append #$output "/bin/" prog)
7920 `("GI_TYPELIB_PATH" ":" = (,gi-typelib-path))
7921 `("GST_PLUGIN_SYSTEM_PATH" ":" suffix
7922 (,gst-plugins-path))))
7923 '("exfalso" "operon" "quodlibet")))))
7924 (add-before 'check 'prepare-x
7925 (lambda _
7926 (system "Xvfb &")
7927 (setenv "DISPLAY" ":0"))))))
7928 (native-inputs
7929 (list xorg-server-for-tests
7930 gettext-minimal
7931 gobject-introspection
7932 python-pytest
7933 python-setuptools))
7934 (inputs
7935 (list adwaita-icon-theme
7936 bash-minimal
7937 glib
7938 gsettings-desktop-schemas
7939 gst-plugins-bad
7940 gst-plugins-base
7941 gst-plugins-good
7942 gst-plugins-ugly
7943 gstreamer
7944 gtk+
7945 gtksourceview-4 ; undo, redo, multiline text fields
7946 keybinder ; keybindings outside of GNOME
7947 (librsvg-for-system)
7948 libsoup-minimal
7949 python
7950 python-cheetah
7951 python-dbus-1.2
7952 python-feedparser
7953 python-gst
7954 python-iniconfig
7955 python-musicbrainzngs
7956 python-mutagen
7957 python-pycairo
7958 python-pygobject
7959 python-pyinotify
7960 python-senf
7961 python-sgmllib3k
7962 python-toml))
7963 (home-page "https://github.com/quodlibet/quodlibet")
7964 (synopsis "Music manager and player")
7965 (description "Quod Libet provides several ways to browse and view your
7966local music library, along with flexible search capabilities. It includes
7967a tag editor, which can also be invoked as a standalone program, and further
7968supports streaming audio and feeds (such as podcasts).")
7969 (license license:gpl2+)))
7970
7971(define-public exaile
7972 (package
7973 (name "exaile")
7974 (version "4.2.1")
7975 (source
7976 (origin
7977 (method git-fetch)
7978 (uri (git-reference
7979 (url "https://github.com/exaile/exaile")
7980 (commit version)))
7981 (file-name (git-file-name name version))
7982 (sha256
7983 (base32 "12vcddsvx81yvz1xs4b9qig09n7a6wgjy6ggr6d3irlxh63cjzkq"))
7984 (patches (search-patches "exaile-gstreamer-1.28.patch"))))
7985 (build-system glib-or-gtk-build-system)
7986 (arguments
7987 (list
7988 #:make-flags
7989 #~(list (string-append "PREFIX="
7990 #$output))
7991 #:phases
7992 #~(modify-phases %standard-phases
7993 (delete 'configure)
7994 (add-before 'check 'set-environment-variables
7995 (lambda _
7996 (setenv "PYTEST" "pytest")
7997 (setenv "XDG_CACHE_HOME" "/tmp/.cache")))
7998 (replace 'check
7999 (lambda* (#:key tests? #:allow-other-keys)
8000 (when tests?
8001 (invoke "make" "test"))))
8002 (add-after 'install 'wrap-environment-variables
8003 (lambda _
8004 (wrap-program (string-append #$output "/bin/exaile")
8005 `("PATH" ":" prefix
8006 (,(string-append #$(this-package-input "python") "/bin")))
8007 `("GDK_PIXBUF_MODULE_FILE" =
8008 (,(getenv "GDK_PIXBUF_MODULE_FILE")))
8009 `("GI_TYPELIB_PATH" ":" =
8010 (,(getenv "GI_TYPELIB_PATH")))
8011 `("GST_PLUGIN_SYSTEM_PATH" ":" suffix
8012 (,(getenv "GST_PLUGIN_SYSTEM_PATH")))
8013 `("GUIX_PYTHONPATH" ":" prefix
8014 (,(getenv "GUIX_PYTHONPATH")))))))))
8015 (inputs (list adwaita-icon-theme
8016 bash-minimal
8017 gstreamer
8018 gst-plugins-base
8019 gst-plugins-good
8020 gtk+
8021 python
8022 python-dbus
8023 python-gst
8024 python-mutagen
8025 python-pycairo
8026 python-pygobject
8027 ;; Optional dependencies
8028 libnotify ;native notifications
8029 librsvg ;scalable icons
8030 udisks)) ;device detection
8031 (native-inputs (list gettext-minimal
8032 gobject-introspection
8033 python-berkeleydb
8034 python-pytest
8035 ;; Optional documentation support
8036 help2man
8037 python-sphinx
8038 python-sphinx-rtd-theme))
8039 (native-search-paths
8040 (list (search-path-specification
8041 (variable "GST_PLUGIN_SYSTEM_PATH")
8042 (files '("lib/gstreamer-1.0")))))
8043 (synopsis "Cross-platform music player")
8044 (description
8045 "Exaile is a music player with a simple interface and powerful music
8046management capabilities. Features include automatic fetching of album art,
8047lyrics fetching, streaming internet radio, tabbed playlists, smart playlists
8048with extensive filtering/search capabilities, and much more.")
8049 (home-page "https://exaile.org/")
8050 (license license:gpl2)))
8051
8052(define-public orca-music
8053 (let ((commit "e55b8fdc3606341345938d5b24b2d9d9326afdb5") (revision "1"))
8054 (package
8055 (name "orca-music")
8056 ;; No upstream version numbers; Using commit instead.
8057 (version (git-version "0" revision commit))
8058 (source (origin
8059 (method git-fetch)
8060 (uri (git-reference
8061 (url "https://git.sr.ht/~rabbits/orca")
8062 (commit commit)))
8063 (file-name (git-file-name name version))
8064 (sha256
8065 (base32
8066 "0xf5i9vd2wyrhvfp68j5gvd40iqm9rf6g1p74jan7d875g6kpppq"))))
8067 (build-system gnu-build-system)
8068 (arguments
8069 `(#:tests? #f
8070 #:phases
8071 (modify-phases %standard-phases
8072 (delete 'configure) ;No autoconf
8073 (replace 'build
8074 (lambda* (#:key inputs outputs #:allow-other-keys)
8075 (setenv "CC"
8076 ,(cc-for-target))
8077 (invoke "make" "release")))
8078 (add-after 'build 'rename-orca
8079 (lambda* _
8080 (invoke "mv" "-v" "./build/orca" "./build/orca-music")))
8081 (replace 'install
8082 (lambda* (#:key outputs #:allow-other-keys)
8083 (let* ((out (assoc-ref outputs "out")) (dest-bin (string-append
8084 out "/bin"))
8085 (share (string-append out "/share"))
8086 (dest-examples (string-append share "/examples"))
8087 (dest-doc (string-append share "/doc")))
8088 (install-file "./build/orca-music" dest-bin)
8089 (copy-recursively "./examples" dest-examples)
8090 (install-file "./README.md" dest-doc)))))))
8091 (inputs (list ncurses portmidi alsa-plugins
8092 `(,alsa-plugins "pulseaudio")))
8093 (native-inputs (list pkg-config))
8094 (native-search-paths
8095 (list (search-path-specification
8096 (variable "TERMINFO_DIRS")
8097 (files '("share/terminfo")))))
8098 (synopsis "Musical live-coding environment")
8099 (description
8100 "This is the C implementation of the ORCΛ language and terminal
8101livecoding environment. It's designed to be power efficient. It can handle
8102large files, even if your terminal is small.
8103
8104Orca is not a synthesizer, but a flexible livecoding environment capable of
8105sending MIDI, OSC, and UDP to your audio/visual interfaces like Ableton,
8106Renoise, VCV Rack, or SuperCollider.")
8107 (home-page "https://100r.co/site/orca.html")
8108 (license license:expat))))
8109
8110(define-public samplebrain
8111 (package
8112 (name "samplebrain")
8113 (version "0.18.5")
8114 (source (origin
8115 (method git-fetch)
8116 (uri (git-reference
8117 (url "https://gitlab.com/then-try-this/samplebrain")
8118 (commit (string-append "v" version "_release"))))
8119 (file-name (git-file-name name version))
8120 (sha256
8121 (base32
8122 "17p6n16x89bbzlpn9r7w1lgr1ifxs45npn8gxymkdr3j16dhg4zy"))))
8123 (build-system qt-build-system)
8124 (arguments
8125 (list #:tests? #f ;no tests
8126 #:modules '((guix build qt-build-system)
8127 ((guix build gnu-build-system) #:prefix gnu:)
8128 (guix build utils))
8129 #:phases #~(modify-phases %standard-phases
8130 (replace 'configure
8131 (lambda _
8132 (substitute* "samplebrain.pro"
8133 (("\\/usr")
8134 #$output))
8135 (invoke "qmake")))
8136 (replace 'build (assoc-ref gnu:%standard-phases 'build))
8137 (replace 'check (assoc-ref gnu:%standard-phases 'check))
8138 (replace 'install (assoc-ref gnu:%standard-phases 'install)))))
8139 (inputs (list fftw liblo libsndfile portaudio))
8140 (home-page "https://thentrythis.org/projects/samplebrain/")
8141 (synopsis "Sample mashing synthesizer designed by Aphex Twin")
8142 (description
8143 "Samplebrain chops samples up into a 'brain' of interconnected small
8144sections called blocks which are connected into a network by similarity. It
8145processes a target sample, chopping it up into blocks in the same way, and
8146tries to match each block with one in its brain to play in realtime.")
8147 (license license:gpl2+)))
8148
8149(define-public le-biniou-data
8150 (package
8151 (name "le-biniou-data")
8152 (version "3.67.0")
8153 (source (origin
8154 (method git-fetch)
8155 (uri (git-reference
8156 (url "https://gitlab.com/lebiniou/lebiniou-data")
8157 (commit (string-append "version-" version))))
8158 (file-name (git-file-name name version))
8159 (sha256
8160 (base32
8161 "1kgwxy2kcjv4x32smp5108cn5qvlixjcxi23hqd3g6diws3s45v5"))))
8162 (build-system gnu-build-system)
8163 (native-inputs (list autoconf automake libtool))
8164 (home-page "https://biniou.net/")
8165 (synopsis "Data files for use with Le Biniou")
8166 (description
8167 "This package contains data files for use with Le Biniou.")
8168 (license license:gpl2+)))
8169
8170(define-public le-biniou
8171 (package
8172 (name "le-biniou")
8173 (version "3.67.0")
8174 (source (origin
8175 (method git-fetch)
8176 (uri (git-reference
8177 (url "https://gitlab.com/lebiniou/lebiniou")
8178 (commit (string-append "version-" version))))
8179 (file-name (git-file-name name version))
8180 (sha256
8181 (base32
8182 "1p3g2m16fr52xi4rwkpm7j278yaml9443szji4s5l3f78m9aiwcm"))))
8183 (build-system gnu-build-system)
8184 (arguments
8185 (list #:configure-flags #~(list (string-append "LDFLAGS=-Wl,-rpath="
8186 #$output "/lib")
8187 (string-append
8188 "LEBINIOU_DATADIR="
8189 #$(this-package-input "le-biniou-data")))
8190 #:phases #~(modify-phases %standard-phases
8191 (add-after 'unpack 'patch
8192 (lambda _
8193 (substitute* "src/bulfius_vui.c"
8194 (("xdg-open")
8195 (string-append
8196 #$(this-package-input "xdg-utils")
8197 "/bin/xdg-open"))))))))
8198 (native-inputs (list autoconf
8199 automake
8200 libtool
8201 perl ;for pod2man
8202 pkg-config))
8203 (inputs (list alsa-lib
8204 curl
8205 ffmpeg
8206 fftw
8207 glib
8208 imagemagick
8209 jack-1
8210 jansson
8211 le-biniou-data
8212 libcaca
8213 libsndfile
8214 pulseaudio
8215 sdl2
8216 ulfius
8217 xdg-utils))
8218 (home-page "https://biniou.net/")
8219 (synopsis "Audio visualization and VJing tool")
8220 (description
8221 "Le Biniou is a music visualization & VJing tool. It creates live
8222visuals based on audio performances or existing tracks.")
8223 (license license:gpl2+)))
8224
8225(define-public firefly-synth
8226 (package
8227 (name "firefly-synth")
8228 (version "1.9.9")
8229 (source
8230 (origin
8231 (method git-fetch)
8232 ;; TODO: unbundle Submodule 'lib/JUCE' (https://github.com/sjoerdvankreel/JUCE.git) registered for path 'lib/JUCE'
8233 ;; TODO: unbundle Submodule 'lib/MTS-ESP' (https://github.com/sjoerdvankreel/MTS-ESP.git) registered for path 'lib/MTS-ESP'
8234 ;; TODO: unbundle Submodule 'lib/clap' (https://github.com/sjoerdvankreel/clap.git) registered for path 'lib/clap'
8235 ;; TODO: unbundle Submodule 'lib/clap-helpers' (https://github.com/sjoerdvankreel/clap-helpers.git) registered for path 'lib/clap-helpers'
8236 ;; TODO: unbundle Submodule 'lib/readerwriterqueue' (https://github.com/sjoerdvankreel/readerwriterqueue.git) registered for path 'lib/readerwriterqueue'
8237 ;; TODO: unbundle Submodule 'lib/sse2neon' (https://github.com/sjoerdvankreel/sse2neon) registered for path 'lib/sse2neon'
8238 ;; TODO: unbundle Submodule 'lib/vst3/base' (https://github.com/sjoerdvankreel/vst3_base.git) registered for path 'lib/vst3/base'
8239 ;; TODO: unbundle Submodule 'lib/vst3/cmake' (https://github.com/sjoerdvankreel/vst3_cmake.git) registered for path 'lib/vst3/cmake'
8240 ;; TODO: unbundle Submodule 'lib/vst3/pluginterfaces' (https://github.com/sjoerdvankreel/vst3_pluginterfaces.git) registered for path 'lib/vst3/pluginterfaces'
8241 ;; TODO: unbundle Submodule 'lib/vst3/public.sdk' (https://github.com/sjoerdvankreel/vst3_public_sdk.git) registered for path 'lib/vst3/public.sdk'
8242 (uri (git-reference
8243 (url "https://github.com/sjoerdvankreel/firefly-synth")
8244 (recursive? #t)
8245 (commit (string-append "v" version))))
8246 (sha256
8247 (base32 "1gkrmq942i3gsd7r3ilnz2rs3xxb4sv5kq36f9gdasrxxz65wyg8"))
8248 (file-name (git-file-name name version))))
8249 (build-system cmake-build-system)
8250 (arguments
8251 (list
8252 #:tests? #f ;; No test target
8253 #:build-type "Release"
8254 #:phases
8255 #~(modify-phases %standard-phases
8256 (add-after 'install 'plugin-base-ref-gen
8257 (lambda* (#:key outputs #:allow-other-keys)
8258 (let* ((out (assoc-ref outputs "out")))
8259 (with-directory-excursion
8260 "../source/dist/Release/linux"
8261 (system*
8262 "./plugin_base.ref_gen"
8263 "firefly_synth_1.vst3/Contents/x86_64-linux/firefly_synth_1.so"
8264 "../../../param_reference.html")))))
8265 (add-after 'plugin-base-ref-gen 'copy-plugin-artefacts
8266 (lambda* (#:key inputs outputs #:allow-other-keys)
8267 (let* ((out (assoc-ref outputs "out"))
8268 (src (assoc-ref inputs "source"))
8269 (clap (string-append out "/lib/clap"))
8270 (vst3 (string-append out "/lib/vst3")))
8271 ;; Make clap and vst3 directories
8272 (mkdir-p clap)
8273 (mkdir-p vst3)
8274 (with-directory-excursion
8275 "../source/dist/Release/linux"
8276 ;; Install clap.
8277 (copy-recursively
8278 "firefly_synth_1.clap"
8279 (string-append clap "/firefly_synth_1.clap"))
8280 (copy-recursively
8281 "firefly_synth_fx_1.clap"
8282 (string-append clap "/firefly_synth_fx_1.clap"))
8283 ;; Install vst3.
8284 (copy-recursively
8285 "firefly_synth_1.vst3"
8286 (string-append vst3 "/firefly_synth_1.vst3"))
8287 (copy-recursively
8288 "firefly_synth_fx_1.vst3"
8289 (string-append vst3 "/firefly_synth_fx_1.vst3")))))))))
8290 (inputs (list libxrandr
8291 libxinerama
8292 libxcursor
8293 freetype
8294 fontconfig
8295 mesa
8296 alsa-lib))
8297 (native-inputs (list pkg-config))
8298 (home-page "https://github.com/sjoerdvankreel/firefly-synth")
8299 (synopsis "Semi-modular synthesizer and FX plugin, VST3 and CLAP")
8300 (description "A semi-modular software synthesizer and fx plugin")
8301 (license license:gpl3)))
8302
8303;;;
8304;;; Avoid adding new packages to the end of this file. To reduce the chances
8305;;; of a merge conflict, place them above by existing packages with similar
8306;;; functionality or similar names.
8307;;;