summaryrefslogtreecommitdiff
path: root/gnu/packages/music.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/music.scm')
-rw-r--r--gnu/packages/music.scm570
1 files changed, 226 insertions, 344 deletions
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index b224a145d5..554d70f266 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -45,6 +45,8 @@
;;; Copyright © 2021 Xinglu Chen <[email protected]>
;;; Copyright © 2021 Thomas Albers Raviola <[email protected]>
;;; Copyright © 2022 Sughosha <[email protected]>
+;;; Copyright © 2022 Remco van 't Veer <[email protected]>
+;;; Copyright © 2022 Maxim Cournoyer <[email protected]>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -153,6 +155,7 @@
#:use-module (gnu packages protobuf)
#:use-module (gnu packages pulseaudio) ;libsndfile
#:use-module (gnu packages python)
+ #:use-module (gnu packages python-build)
#:use-module (gnu packages python-check)
#:use-module (gnu packages python-compression)
#:use-module (gnu packages python-web)
@@ -1272,52 +1275,6 @@ standalone program which is able to download cover art, lyrics, photos,
biographies, reviews and more.")
(license license:lgpl3+)))
-(define-public gtklick
- (package
- (name "gtklick")
- (version "0.6.4")
- (source (origin
- (method url-fetch)
- (uri (string-append "http://das.nasophon.de/download/gtklick-"
- version ".tar.gz"))
- (sha256
- (base32
- "0dq1km6njnzsqdqyf6wzir9g733z0mc9vmxfg2383k3c2a2di6bp"))))
- (build-system python-build-system)
- (arguments
- `(#:tests? #f ; no tests
- #:python ,python-2
- #:phases
- (modify-phases %standard-phases
- (add-before 'build 'add-sitedirs
- ;; .pth files are not automatically interpreted unless the
- ;; directories containing them are added as "sites". The directories
- ;; are then added to those in the PYTHONPATH. This is required for
- ;; the operation of pygtk.
- (lambda _
- (substitute* "gtklick/gtklick.py"
- (("import pygtk")
- "import pygtk, site, sys
-for path in [path for path in sys.path if 'site-packages' in path]: site.addsitedir(path)"))))
- (add-after 'unpack 'inject-store-path-to-klick
- (lambda* (#:key inputs #:allow-other-keys)
- (substitute* "gtklick/klick_backend.py"
- (("KLICK_PATH = 'klick'")
- (string-append "KLICK_PATH = '"
- (assoc-ref inputs "klick")
- "/bin/klick'")))
- #t)))))
- (inputs
- (list klick python2-pyliblo python2-pygtk))
- (native-inputs
- `(("gettext" ,gettext-minimal)))
- (home-page "http://das.nasophon.de/gtklick/")
- (synopsis "Simple metronome with an easy-to-use graphical interface")
- (description
- "Gtklick is a simple metronome with an easy-to-use graphical user
-interface. It is implemented as a frontend to @code{klick}.")
- (license license:gpl2+)))
-
(define-public lingot
(package
(name "lingot")
@@ -1750,20 +1707,20 @@ music theorist Paul Nauert's quantization grids or Q-Grids, for short.")
(define-public non-sequencer
;; The latest tagged release is three years old and uses a custom build
;; system, so we take the last commit.
- (let ((commit "5ae43bb27c42387052a73e5ffc5d33efb9d946a9")
- (revision "4"))
+ (let ((commit "257ec5951e7d4086344d98c99ebbe569f7c31211")
+ (revision "5"))
(package
(name "non-sequencer")
- (version (string-append "1.9.5-" revision "." (string-take commit 7)))
+ (version (git-version "1.9.5" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
- (url "git://git.tuxfamily.org/gitroot/non/non.git")
+ (url "https://github.com/falkTX/non/")
(commit commit)))
(sha256
(base32
- "1cljkkyi9dxqpqhx8y6l2ja4zjmlya26m26kqxml8gx08vyvddhx"))
- (file-name (string-append name "-" version "-checkout"))))
+ "0h6ycm3nbb5lvjvhymz5xlj8wqm3z3ggzn4ghmw6xyzd0l7c3m8b"))
+ (file-name (git-file-name name version))))
(build-system waf-build-system)
(arguments
`(#:tests? #f ;no "check" target
@@ -1774,11 +1731,16 @@ music theorist Paul Nauert's quantization grids or Q-Grids, for short.")
(%current-system))))
'("--disable-sse")
'()))
- #:python ,python-2))
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'configure 'setup-waf
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((waf (assoc-ref inputs "python-waf")))
+ (copy-file (string-append waf "/bin/waf") "waf")))))))
(inputs
(list jack-1 libsigc++-2 liblo ntk))
(native-inputs
- (list pkg-config))
+ (list python-waf pkg-config))
(home-page "https://non.tuxfamily.org/wiki/Non%20Sequencer")
(synopsis "Pattern-based MIDI sequencer")
(description
@@ -1789,6 +1751,31 @@ Sequencer happens on-line, in real-time. Music can be composed live, while the
transport is rolling.")
(license license:gpl2+))))
+(define-public new-session-manager
+ (package
+ (name "new-session-manager")
+ (version "1.6.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/jackaudio/new-session-manager")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0ihngqbnc50izfy6x7nhgaah00byk8nl6n5smxbyb8fkhm2s8p21"))))
+ (build-system meson-build-system)
+ (native-inputs (list pkg-config))
+ (inputs (list fltk jack-2 liblo libx11))
+ (home-page "https://new-session-manager.jackaudio.org/")
+ (synopsis "Music production session management tool")
+ (description "New Session Manager (NSM) is a tool to assist music
+production by grouping standalone programs into sessions. It can be used
+create a session, or project, and add programs to it and then use commands to
+save, start/stop, hide/show all programs at once, or individually. The
+session can be interrupted and easily resumed at a later time.")
+ (license license:gpl3+)))
+
(define-public non-session-manager
(package (inherit non-sequencer)
(name "non-session-manager")
@@ -1800,14 +1787,15 @@ transport is rolling.")
(inputs
(list jack-1 liblo ntk))
(native-inputs
- (list pkg-config))
+ (list python-waf pkg-config))
(home-page "https://non.tuxfamily.org/nsm/")
(synopsis "Audio session management")
(description
"The Non Session Manager is an API and an implementation for audio
session management. NSM clients use a well-specified OSC protocol to
communicate with the session management daemon.")
- (license license:gpl2+)))
+ (license license:gpl2+)
+ (properties `((superseded . ,new-session-manager)))))
(define-public non-mixer
(package (inherit non-sequencer)
@@ -1818,9 +1806,9 @@ communicate with the session management daemon.")
`(cons "--project=mixer"
(delete "--project=sequencer" ,flags)))))
(inputs
- (list jack-1 liblo ladspa lrdf ntk))
+ (list jack-1 liblo ladspa lrdf ntk lv2 lilv))
(native-inputs
- (list pkg-config))
+ (list python-waf pkg-config))
(home-page "https://non.tuxfamily.org/wiki/Non%20Mixer")
(synopsis "Modular digital audio mixer")
(description
@@ -1842,7 +1830,7 @@ studio.")
(inputs
(list jack-1 liblo libsndfile ntk))
(native-inputs
- (list pkg-config))
+ (list python-waf pkg-config))
(home-page "https://non.tuxfamily.org/wiki/Non%20Timeline")
(synopsis "Modular digital audio timeline arranger")
(description
@@ -2020,72 +2008,85 @@ Key features include:
(define-public solfege
(package
(name "solfege")
- (version "3.22.2")
+ (version "3.23.5pre2")
(source (origin
- (method url-fetch)
- (uri (string-append
- "mirror://gnu/solfege/solfege-"
- version ".tar.xz"))
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.savannah.gnu.org/git/solfege.git")
+ (commit version)))
+ (file-name (git-file-name name version))
(sha256
(base32
- "1w25rxdbj907nsx285k9nm480pvy12w3yknfh4n1dfv17cwy072i"))))
+ "1lmzp4kn0xh58yc8gzriz1i34g5qaa2xxrxzpmr7v9jyk19dqmcm"))))
(build-system gnu-build-system)
(arguments
- `(#:tests? #f ; xmllint attempts to download DTD
- #:test-target "test"
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'fix-configuration
- (lambda* (#:key inputs #:allow-other-keys)
- (substitute* "default.config"
- (("/usr/bin/aplay") "aplay")
- (("/usr/bin/timidity") "timidity")
- (("/usr/bin/mpg123") "mpg123")
- (("/usr/bin/ogg123") "ogg123"))))
- (add-before 'build 'patch-python-shebangs
- (lambda _
- ;; Two python scripts begin with a Unicode BOM, so patch-shebang
- ;; has no effect.
- (substitute* '("solfege/parsetree.py"
- "solfege/presetup.py")
- (("#!/usr/bin/python") (string-append "#!" (which "python"))))))
- (add-before 'build 'add-sitedirs
- ;; .pth files are not automatically interpreted unless the
- ;; directories containing them are added as "sites". The directories
- ;; are then added to those in the PYTHONPATH. This is required for
- ;; the operation of pygtk and pygobject.
- (lambda _
- (substitute* "run-solfege.py"
- (("import os")
- "import os, site
-for path in [path for path in sys.path if 'site-packages' in path]: site.addsitedir(path)"))
- #t))
- (add-before 'build 'adjust-config-file-prefix
- (lambda* (#:key outputs #:allow-other-keys)
- (substitute* "run-solfege.py"
- (("prefix = os.path.*$")
- (string-append "prefix = " (assoc-ref outputs "out"))))
- #t))
- (add-after 'install 'wrap-program
- (lambda* (#:key inputs outputs #:allow-other-keys)
- ;; Make sure 'solfege' runs with the correct PYTHONPATH.
- (let* ((out (assoc-ref outputs "out"))
- (path (getenv "GUIX_PYTHONPATH")))
- (wrap-program (string-append out "/bin/solfege")
- `("GUIX_PYTHONPATH" ":" prefix (,path))))
- #t)))))
+ (list
+ #:tests? #f ;xmllint attempts to download DTD
+ #:test-target "test"
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'set-version
+ (lambda _
+ (substitute* "autogen.sh"
+ (("python3 -c \"import tools.*create_versions_file.*")
+ (string-append "echo \"version_info = '"
+ #$version "' > solfege/_version.py\"\n")))
+ (substitute* "Makefile.in"
+ (("\\$\\(PYTHON) -c \"import tools.*create_versions_file.*")
+ "true\n"))
+ (substitute* "solfege/buildinfo.py.in"
+ (("from solfege._version import version_info")
+ "version_info = {'git_sha': 'N/A'}"))))
+ (add-after 'unpack 'fix-configuration
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "default.config"
+ (("/usr/bin/aplay") "aplay")
+ (("/usr/bin/timidity") "timidity")
+ (("/usr/bin/mpg123") "mpg123")
+ (("/usr/bin/ogg123") "ogg123"))))
+ (add-before 'build 'patch-python-shebangs
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; Two python scripts begin with a Unicode BOM, so patch-shebang
+ ;; has no effect.
+ (substitute* '("solfege/parsetree.py"
+ "solfege/presetup.py")
+ (("#!/usr/bin/python")
+ (string-append "#!" search-input-file inputs "bin/python")))))
+ (add-before 'build 'add-sitedirs
+ ;; .pth files are not automatically interpreted unless the
+ ;; directories containing them are added as "sites". The
+ ;; directories are then added to those in the PYTHONPATH. This is
+ ;; required for the operation of pygtk and pygobject.
+ (lambda _
+ (substitute* "run-solfege.py"
+ (("import os")
+ "import os, site
+for path in [path for path in sys.path if 'site-packages' in path]: site.addsitedir(path)"))))
+ (add-before 'build 'adjust-config-file-prefix
+ (lambda _
+ (substitute* "run-solfege.py"
+ (("prefix = os.path.*$")
+ (string-append "prefix = " #$output)))))
+ (add-after 'install 'wrap-program
+ (lambda* (#:key outputs #:allow-other-keys)
+ ;; Make sure 'solfege' runs with the correct PYTHONPATH.
+ (let ((path (getenv "GUIX_PYTHONPATH")))
+ (wrap-program (search-input-file outputs "bin/solfege")
+ `("GUIX_PYTHONPATH" ":" prefix (,path)))))))))
(inputs
- `(("python" ,python-2)
- ("pygtk" ,python2-pygtk)
- ("gettext" ,gettext-minimal)
- ("gtk" ,gtk+)
- ("lilypond" ,lilypond)))
+ (list python-wrapper
+ python-pygobject
+ gettext-minimal
+ gtk+
+ lilypond))
(native-inputs
- (list pkg-config
+ (list autoconf
+ automake
+ pkg-config
txt2man
- libxml2 ; for tests
+ libxml2 ; for tests
ghostscript
- texinfo-5))
+ texinfo))
(home-page "https://www.gnu.org/software/solfege/")
(synopsis "Ear training")
(description
@@ -2294,7 +2295,7 @@ perform creative live mixes with digital music files.")
(list jack-1
lv2
alsa-lib
- non-session-manager
+ new-session-manager
liblo
qtbase-5))
(native-inputs
@@ -2326,7 +2327,7 @@ oscillators and stereo effects.")
lv2
libsndfile
alsa-lib
- non-session-manager
+ new-session-manager
liblo
qtbase-5))
(native-inputs
@@ -2358,7 +2359,7 @@ effects.")
lv2
libsndfile
alsa-lib
- non-session-manager
+ new-session-manager
liblo
qtbase-5))
(native-inputs
@@ -2389,7 +2390,7 @@ effects.")
(list jack-1
lv2
alsa-lib
- non-session-manager
+ new-session-manager
liblo
fftwf
qtbase-5))
@@ -2506,48 +2507,6 @@ modification devices that brought world-wide fame to the names and products of
Laurens Hammond and Don Leslie.")
(license license:gpl2+)))
-(define-public beast
- (package
- (name "beast")
- (version "0.10.0")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://testbit.eu/pub/dists/beast/beast-"
- version ".tar.xz"))
- (sha256
- (base32
- "1jzzmfwssklzw8fvvil04n8csc0zm99fnd9p2xa7c0xchg37lvhn"))))
- (build-system gnu-build-system)
- (arguments
- '(#:parallel-build? #f)) ; Race conditions cause build failures
- (inputs
- `(("rapicorn" ,rapicorn)
- ("guile" ,guile-1.8)
- ("python" ,python-2)
- ("libgnomecanvas" ,libgnomecanvas)
- ("libogg" ,libogg)
- ("libmad" ,libmad)
- ("flac" ,flac)
- ("alsa-lib" ,alsa-lib)
- ("libvorbis" ,libvorbis)
- ("gettext" ,gettext-minimal)))
- (native-inputs
- `(("pkg-config" ,pkg-config)
- ("glib:bin" ,glib "bin")
- ("cython" ,python2-cython)
- ("perl" ,perl)
- ("perl-xml-parser" ,perl-xml-parser)))
- (home-page "https://testbit.eu/wiki/Beast_Home")
- (synopsis "Music composition and modular synthesis environment")
- (description
- "Beast is a music composition and modular synthesis application. It
-supports a wide range of standards in the field, such as MIDI, various audio
-file formats and LADSPA modules. It allows for multitrack editing, real-time
-synthesis, 32bit audio rendering, precise timing down to sample granularity,
-on-demand and partial loading of wave files, on the fly decoding, stereo
-mixing, FFT scopes, MIDI automation and full scriptability in Scheme.")
- (license license:gpl3+)))
-
(define-public bristol
(package
(name "bristol")
@@ -3442,11 +3401,11 @@ analogue-like user interface.")
(define-public mod-host
;; The last release was in 2014 but since then hundreds of commits have
;; been made.
- (let ((commit "1726ad06b11323da7e1aaed690ff8aef91f702b5")
- (revision "3"))
+ (let ((commit "cdd30ddbd2cc916be8a0364275071c3d8335b3a7")
+ (revision "4"))
(package
(name "mod-host")
- (version (string-append "0.10.6-" revision "." (string-take commit 9)))
+ (version (git-version "0.10.6" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
@@ -3454,34 +3413,33 @@ analogue-like user interface.")
(commit commit)))
(sha256
(base32
- "1nrd37c35w6z6ldczgrwmmd9hx1n3zyvcjcgb3mi4cygqdanvspv"))
- (file-name (string-append name "-" version "-checkout"))))
+ "1xnflvcyj071gn9nhv5dynd0v85nq99sz1wn3adlj43l5m4fbx3a"))
+ (file-name (git-file-name name version))))
(build-system gnu-build-system)
(arguments
- `(#:tests? #f ; no tests included
- #:make-flags
- (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
- "CC=gcc")
- #:phases
- (modify-phases %standard-phases
- (delete 'configure)
- (add-after 'unpack 'fix-jack-installation-directory
- (lambda _
- ;; Do not attempt to install files to output of "jack" package.
- (substitute* "Makefile"
- (("\\$\\(shell pkg-config --variable=libdir jack\\)")
- "lib"))
- #t)))))
+ (list
+ #:tests? #f ; no tests included
+ #:make-flags
+ #~(list (string-append "PREFIX=" #$output) "CC=gcc")
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'configure)
+ (add-after 'unpack 'fix-jack-installation-directory
+ (lambda _
+ ;; Do not attempt to install files to output of "jack" package.
+ (substitute* "Makefile"
+ (("\\$\\(shell pkg-config --variable=libdir jack\\)")
+ "lib")))))))
(inputs
(list lilv
fftw
fftwf
lv2
- jack-1
+ jack-2
readline))
(native-inputs
- `(("pkg-config" ,pkg-config)
- ("python" ,python-2)))
+ (list pkg-config
+ python-wrapper))
(home-page "https://github.com/moddevices/mod-host")
(synopsis "LV2 host for Jack controllable via socket or command line")
(description "mod-host is an LV2 plugin host for JACK, controllable via
@@ -3672,9 +3630,6 @@ MusicBrainz database.")
;; 'musicbrainzngs/compat.py' is ISC licensed.
(license (list license:bsd-2 license:isc))))
-(define-public python2-musicbrainzngs
- (package-with-python2 python-musicbrainzngs))
-
(define-public python-isrcsubmit
(package
(name "python-isrcsubmit")
@@ -3696,39 +3651,6 @@ Standard Recording Code} (ISRCs) from audio CDs and submit them to
@url{https://musicbrainz.org/, MusicBrainz}.")
(license license:gpl3+)))
-(define-public python2-pyechonest
- (package
- (name "python2-pyechonest")
- (version "9.0.0")
- (source (origin
- (method url-fetch)
- (uri (pypi-uri "pyechonest" version))
- (sha256
- (base32
- "1584nira3rkiman9dm81kdshihmkj21s8navndz2l8spnjwb790x"))))
- (build-system python-build-system)
- (arguments
- `(;; Python 3 is not supported:
- ;; https://github.com/echonest/pyechonest/issues/42
- #:python ,python-2))
- (home-page "https://github.com/echonest/pyechonest")
- (synopsis "Python interface to The Echo Nest APIs")
- (description "Pyechonest is a Python library for the Echo Nest API. With
-Pyechonest you have Python access to the entire set of API methods including:
-
-@enumerate
-@item artist - search for artists by name, description, or attribute, and get
-back detailed information about any artist including audio, similar artists,
-blogs, familiarity, hotttnesss, news, reviews, urls and video.
-@item song - search songs by artist, title, description, or attribute (tempo,
-duration, etc) and get detailed information back about each song, such as
-hotttnesss, audio_summary, or tracks.
-@item track - upload a track to the Echo Nest and receive summary information
-about the track including key, duration, mode, tempo, time signature along with
-detailed track info including timbre, pitch, rhythm and loudness information.
-@end enumerate\n")
- (license license:bsd-3)))
-
(define-public python-pylast
(package
(name "python-pylast")
@@ -4475,91 +4397,6 @@ filters, crossovers, simple gain plugins without zipper noise, switch box
plugins, a switch trigger, a toggle switch, and a peakmeter.")
(license license:gpl2+))))
-(define-public ingen
- (let ((commit "cc4a4db33f4d126a07a4a498e053c5fb9a883be3")
- (revision "2"))
- (package
- (name "ingen")
- (version (string-append "0.0.0-" revision "."
- (string-take commit 9)))
- (source
- (origin
- (method git-fetch)
- (uri (git-reference
- (url "https://git.drobilla.net/ingen.git")
- (commit commit)))
- (file-name (string-append name "-" version "-checkout"))
- (sha256
- (base32
- "1wg47vjw9djn99gbnsl2bcwj4xhdid61m4wrbn2nlp797flj91ic"))))
- (build-system waf-build-system)
- (arguments
- `(#:python ,python-2
- #:tests? #f ; no "check" target
- #:configure-flags (list "--no-webkit")
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'patch-wscript
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (substitute* "wscript"
- ;; FIXME: Our version of lv2specgen.py does not behave as
- ;; expected. Maybe this requires a development version of
- ;; LV2.
- (("lv2specgen.py") "touch ingen.lv2/ingen.html; echo")
- ;; Add libraries to RUNPATH.
- (("^(.+)target.*= 'src/ingen/ingen'," line prefix)
- (string-append prefix
- "linkflags=[\"-Wl,-rpath="
- out "/lib" "\"]," line)))
- (substitute* '("src/wscript"
- "src/server/wscript")
- ;; Add libraries to RUNPATH.
- (("bld.env.PTHREAD_LINKFLAGS" line)
- (string-append line
- " + [\"-Wl,-rpath=" out "/lib" "\"]")))
- (substitute* "src/client/wscript"
- ;; Add libraries to RUNPATH.
- (("^(.+)target.*= 'ingen_client'," line prefix)
- (string-append prefix
- "linkflags=[\"-Wl,-rpath="
- out "/lib" "\"]," line)))
- (substitute* "src/gui/wscript"
- ;; Add libraries to RUNPATH.
- (("^(.+)target.* = 'ingen_gui.*" line prefix)
- (string-append prefix
- "linkflags=[\"-Wl,-rpath="
- out "/lib" "\"]," line))))
- #t)))))
- (inputs
- (list boost
- python-rdflib
- python
- jack-1
- lv2
- lilv
- raul-devel
- ganv
- suil
- serd
- sord
- sratom
- gtkmm-2))
- (native-inputs
- (list pkg-config python-pygments))
- (home-page "https://drobilla.net/software/ingen")
- (synopsis "Modular audio processing system")
- (description "Ingen is a modular audio processing system for JACK and
-LV2 based systems. Ingen is built around LV2 technology and a strict
-separation of engine from user interface. The engine is controlled
-exclusively through a protocol, and can execute as a headless process, with an
-in-process GUI, or as an LV2 plugin. The GUI can run as a program which
-communicates over a Unix or TCP/IP socket, or as an embeddable LV2 GUI which
-communicates via LV2 ports. Any saved Ingen graph can be loaded as an LV2
-plugin on any system where Ingen is installed. This allows users to visually
-develop custom plugins for use in other applications without programming.")
- (license license:agpl3+))))
-
(define-public qmidiarp
(package
(name "qmidiarp")
@@ -5669,45 +5506,6 @@ with error and volume history, and advanced features.")
;; are under LGPL2.1.
(license (list license:gpl2+ license:lgpl2.1))))
-(define-public mloop
- (let ((commit "adebff98b0b4dc5872a03acb82e89c77cb29c127")
- (revision "0"))
- (package
- (name "mloop")
- (version (git-version "0.0.1" revision commit))
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "http://git.fuzzle.org/mloop")
- (commit commit)))
- (file-name (git-file-name name version))
- (sha256
- (base32
- "175gxvg5slq0bllcx1c381rjlq3xpxww8c3kpiw5i2kfr4m52myz"))))
- (build-system waf-build-system)
- (arguments
- `(#:python ,python-2
- #:tests? #f)) ; no "check" target
- (inputs
- (list jack-1 ncurses))
- (native-inputs
- (list pkg-config))
- (home-page "https://fuzzle.org/~petern/mloop.html")
- (synopsis "Live MIDI looper")
- (description "mloop is a live MIDI looping system, using jack-midi.
-Loops are recorded, optionally with beat quantization, and can then be played
-back, either once or looping. A 'note cache' system is implemented to
-remember which notes are pressed and their velocities. This allows for a loop
-to start off with the currently pressed notes, making seamless loops much
-easier to perform. Features include:
-
-@itemize
-@item Quantisation; end a loop on a beat exactly.
-@item Delayed recording; wait for a MIDI event before starting a loop record.
-@item Adjust tempo; Playback speed of loops can be adjusted on the fly.
-@end itemize\n")
- (license license:gpl2))))
-
(define-public pragha
(package
(name "pragha")
@@ -6878,3 +6676,87 @@ choice.")
streaming audio server.")
(home-page "https://musikcube.com/")
(license license:bsd-3)))
+
+(define-public quodlibet
+ (package
+ (name "quodlibet")
+ (version "4.5.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/quodlibet/quodlibet")
+ (commit (string-append "release-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1i5k93k3bfp7hpcwkbr865mbj9jam3jv2a5k1bazcyp4f5vdrb0v"))))
+ (build-system python-build-system)
+ (arguments
+ (list
+ #:modules '((guix build python-build-system)
+ ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
+ (guix build utils))
+ #:imported-modules `((guix build python-build-system)
+ ,@%glib-or-gtk-build-system-modules)
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-before 'check 'pre-check
+ (lambda _
+ (setenv "HOME" (getcwd))))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (if tests?
+ (invoke "xvfb-run" "pytest"
+ ;; needs network
+ "--ignore=tests/test_browsers_iradio.py"
+ ;; broken upstream
+ "--disable-warnings"
+ "--ignore=tests/quality")
+ (format #t "test suite not run~%"))))
+ (add-after 'install 'glib-or-gtk-wrap ; ensure icons loaded
+ (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
+ (add-after 'install 'wrap-extra-paths
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out"))
+ (gi-typelib-path (getenv "GI_TYPELIB_PATH"))
+ (gst-plugins-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
+ (for-each
+ (lambda (prog)
+ (wrap-program (string-append out "/bin/" prog)
+ `("GI_TYPELIB_PATH" ":" = (,gi-typelib-path))
+ `("GST_PLUGIN_SYSTEM_PATH" ":" suffix (,gst-plugins-path))))
+ '("exfalso" "quodlibet"))))))))
+ (native-inputs (list xvfb-run gettext-minimal))
+ (inputs
+ (list adwaita-icon-theme
+ bash-minimal
+ glib
+ gsettings-desktop-schemas
+ gst-plugins-bad
+ gst-plugins-base
+ gst-plugins-good
+ gst-plugins-ugly
+ gstreamer
+ gtk+
+ hicolor-icon-theme
+ librsvg
+ libsoup-minimal-2
+ python
+ python-cheetah
+ python-dbus
+ python-feedparser
+ python-gst
+ python-iniconfig
+ python-mutagen
+ python-pycairo
+ python-pygobject
+ python-pytest
+ python-sgmllib3k
+ python-toml))
+ (home-page "https://github.com/quodlibet/quodlibet")
+ (synopsis "Music manager and player")
+ (description "Quod Libet provides several ways to browse and view your
+local music library, along with flexible search capabilities. It includes
+a tag editor, which can also be invoked as a standalone program, and further
+supports streaming audio and feeds (such as podcasts).")
+ (license license:gpl2+)))