gnu: qjackctl: Remove unused qtx11extras input.
[jackhill/guix/guix.git] / gnu / packages / audio.scm
index 01f809d..37a38ba 100644 (file)
@@ -37,6 +37,8 @@
 ;;; Copyright © 2021 jgart <jgart@dismail.de>
 ;;; Copyright © 2021 Aleksandr Vityazev <avityazev@posteo.org>
 ;;; Copyright © 2022 Arjan Adriaanse <arjan@adriaan.se>
+;;; Copyright © 2022 Juliana Sims <jtsims@protonmail.com>
+;;; Copyright © 2022 Simon Streit <simon@netpanic.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (gnu packages web)
   #:use-module (gnu packages webkit)
   #:use-module (gnu packages wxwidgets)
+  #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -233,7 +236,7 @@ promoting the market for advanced audio.")
        ("openal" ,openal)))
     (synopsis "Software Synthesizer")
     (description "WildMIDI is a simple software midi player which has a core
-softsynth library that can be use with other applications.")
+softsynth library that can be used with other applications.")
     (home-page "https://www.mindwerks.net/projects/wildmidi/")
     (license
      (list
@@ -363,7 +366,12 @@ Linux kernel.")
                 "07857vdkak306d9s5g6fhmjyxk7vijzjhkmqb15s7ihfxx9lx8xb"))))
     (build-system cmake-build-system)
     (arguments
-     '(#:tests? #f))                    ; no check target
+     '(#:tests? #f                                ;no check target
+
+       ;; XXX: Building with '-fsanitize=undefined' leads to embedded C++ STL
+       ;; header file names in libgme.so, meaning that libgme retains a
+       ;; reference to GCC.  Disable UBSAN to avoid that.
+       #:configure-flags '("-DENABLE_UBSAN=OFF")))
     (home-page "https://bitbucket.org/mpyne/game-music-emu")
     (synopsis "Video game music file playback library")
     (description
@@ -467,31 +475,6 @@ by MusicIP.")
     (home-page "https://code.google.com/archive/p/musicip-libofa/")
     (license license:gpl2+)))
 
-(define-public faac
-  (package
-    (name "faac")
-    (version "1.30")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append "mirror://sourceforge/faac/faac-src"
-                       "/faac-" version "/faac-1_30.tar.gz"))
-       (sha256
-        (base32 "1lmj0dib3mjp84jhxc5ddvydkzzhb0gfrdh3ikcidjlcb378ghxd"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     (list autoconf automake libtool pkg-config))
-    (synopsis "Freeware Advanced Audio Coder")
-    (description "FAAC is an MPEG-4 and MPEG-2 AAC encoder.")
-    (home-page "https://www.audiocoding.com/faac.html")
-    (license
-     (list
-      ;; ISO MPEG-4 reference code.
-      license:gpl2+
-      ;; Others.
-      license:lgpl2.0+))))
-
 (define-public libtimidity
   (package
     (name "libtimidity")
@@ -585,7 +568,7 @@ implementation of Adaptive Multi Rate Narrowband and Wideband
            liblo
            qtbase-5))
     (native-inputs
-     (list pkg-config qttools))
+     (list pkg-config qttools-5))
     (home-page "http://alsamodular.sourceforge.net/")
     (synopsis "Realtime modular synthesizer and effect processor")
     (description
@@ -873,6 +856,10 @@ engineers, musicians, soundtrack editors and composers.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* '("libraries/lib-files/FileNames.cpp")
                (("\"/usr/include/linux/magic.h\"") "<linux/magic.h>"))))
+         (add-after 'install 'delete-gratuitous-script
+           (lambda* (#:key outputs #:allow-other-keys)
+             (delete-file (string-append (assoc-ref outputs "out")
+                                         "/audacity"))))
          (add-after 'wrap-program 'glib-or-gtk-wrap
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))
        ;; The test suite is not "well exercised" according to the developers,
@@ -1158,7 +1145,7 @@ envelope follower, distortion effects, tape effects and more.")
 (define-public snapcast
   (package
     (name "snapcast")
-    (version "0.24.0")
+    (version "0.26.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1167,7 +1154,7 @@ envelope follower, distortion effects, tape effects and more.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "13yz8alplnqwkcns3mcli01qbyy6l3h62xx0v71ygcrz371l4g9g"))))
+                "091gf3k1xv3k0m0kf2apr9bwiifw2czjcksd3vzwy544sfgrya08"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f))                    ; no included tests
@@ -1393,7 +1380,7 @@ object library.")
 (define-public csound
   (package
     (name "csound")
-    (version "6.14.0")
+    (version "6.16.2")
     (source
      (origin
        (method git-fetch)
@@ -1402,7 +1389,7 @@ object library.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1sr9knfhbm2m0wpkjq2l5n471vnl51wy4p6j4m95zqybimzb4s2j"))))
+        (base32 "1lgasyk8j4cl9178vci1dph63nks3cgwhf8y1d04z9dc8gg15dyn"))))
     (build-system cmake-build-system)
     (native-inputs
      (list bison flex gettext-minimal zlib))
@@ -1914,10 +1901,44 @@ also play midifiles using a Soundfont.")
      "Faust is a programming language for realtime audio signal processing.")
     (license license:gpl2+)))
 
+;; This version is needed to build older synths that require the lv2synth.cpp
+;; architecture file, such as sorcer.
+(define-public faust-0.9.67
+  (package
+    (inherit faust)
+    (name "faust")
+    (version "0.9.67")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/grame-cncm/faust")
+                    (commit (string-append "v"
+                                           (string-map (lambda (c)
+                                                         (if (char=? c #\.) #\- c))
+                                                       version)))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0856x666s6ymzk8v15f9gy402dbr8c9v2s40hyfadhraqljmqrm0"))
+              (snippet
+               ;; Remove prebuilt library
+               '(delete-file "architecture/android/libs/armeabi-v7a/libfaust_dsp.so"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:make-flags
+      #~(list (string-append "prefix=" #$output))
+      #:tests? #f
+      #:phases
+      '(modify-phases %standard-phases
+         ;; no "configure" script
+         (delete 'configure))))
+    (native-inputs (list unzip))))
+
 (define-public faust-2
   (package
     (inherit faust)
-    (version "2.5.23")
+    (version "2.41.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/grame-cncm/faust/"
@@ -1925,15 +1946,29 @@ also play midifiles using a Soundfont.")
                                   "/faust-" version ".tar.gz"))
               (sha256
                (base32
-                "1yz5jnr76hh7rmxkpdi7gyrw1wp4gyqfpq8zyl97qdi5ga5gjznq"))))
-    (build-system gnu-build-system)
+                "0gk8ifxrbykq7ay0nvjns8fjryhp0wfhv5npgrl8xpgw9wfmw53j"))))
+    (build-system cmake-build-system)
     (arguments
-     (substitute-keyword-arguments (package-arguments faust)
-       ((#:make-flags flags)
-        `(list (string-append "prefix=" (assoc-ref %outputs "out"))
-               "world"))))
+     `(#:tests? #f ; no tests
+       #:phases
+       (modify-phases %standard-phases
+         ;; The upstream package uses make to run cmake during the build stage.
+         ;; Here we ignore the Makefile and call cmake directly.
+         (replace 'configure
+           (lambda _
+             (chdir "build")
+             (invoke "cmake" "-C" "backends/all.cmake"
+                     (string-append "-DCMAKE_INSTALL_PREFIX="
+                      (assoc-ref %outputs "out")))))
+         ;; The sound2faust tool would be built in the Makefile's "world" target
+         (add-after 'install 'sound2faust
+           (lambda _
+             (chdir "../tools/sound2faust")
+             (setenv "PREFIX" (assoc-ref %outputs "out"))
+             (invoke "make")
+             (invoke "make" "install"))))))
     (native-inputs
-     `(("llvm" ,llvm-3.8)
+     `(("llvm" ,llvm)
        ("which" ,which)
        ("xxd" ,xxd)
        ("ctags" ,emacs-minimal)  ; for ctags
@@ -2239,23 +2274,23 @@ synchronous execution of all clients, and low latency operation.")
 ;; jack-2 implement the same API.  JACK2 is provided primarily as a client
 ;; program for users who might benefit from the D-BUS features.
 (define-public jack-2
-  (package (inherit jack-1)
+  (package
+    (inherit jack-1)
     (name "jack2")
-    (version "1.9.14")
+    (version "1.9.21")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "https://github.com/jackaudio/jack2/releases/"
-                                 "download/v" version "/jack2-"
-                                 version ".tar.gz"))
-             (file-name (string-append name "-" version ".tar.gz"))
-             (sha256
-              (base32
-               "0z11hf55a6mi8h50hfz5wry9pshlwl4mzfwgslghdh40cwv342m2"))))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/jackaudio/jack2")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0sbrffmdbajvrk7iqvsvrnwnpvmicvbjyq3f52r6ashdsznsz03b"))))
     (build-system waf-build-system)
     (arguments
-     `(#:tests? #f  ; no check target
-       #:configure-flags '("--dbus"
-                           "--alsa")
+     `(#:tests? #f                      ; no check target
+       #:configure-flags '("--dbus" "--alsa")
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'set-linkflags
@@ -2269,16 +2304,13 @@ synchronous execution of all clients, and low latency operation.")
                ((".*CFLAGS.*-Wall.*" m)
                 (string-append m
                                "    conf.env.append_unique('LINKFLAGS',"
-                               "'-Wl,-rpath=" %output "/lib')\n")))
-             #t))
+                               "'-Wl,-rpath=" %output "/lib')\n")))))
          (add-after 'install 'wrap-python-scripts
-           (lambda* (#:key inputs outputs #:allow-other-keys)
+           (lambda* (#:key outputs #:allow-other-keys)
              ;; Make sure 'jack_control' runs with the correct PYTHONPATH.
-             (let* ((out (assoc-ref outputs "out"))
-                    (path (getenv "GUIX_PYTHONPATH")))
-               (wrap-program (string-append out "/bin/jack_control")
-                 `("GUIX_PYTHONPATH" ":" prefix (,path))))
-             #t)))))
+             (wrap-program (search-input-file outputs "bin/jack_control")
+               `("GUIX_PYTHONPATH" ":"
+                 prefix (,(getenv "GUIX_PYTHONPATH")))))))))
     (inputs
      (list alsa-lib
            dbus
@@ -2751,6 +2783,38 @@ add functionality to support the needs of increasingly powerful audio
 software.")
     (license license:isc)))
 
+(define-public ttl2c
+  (package
+    (name "ttl2c")
+    (version "1.0.0")
+    (source (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/lvtk/ttl2c")
+                   (commit version)))
+             (file-name (git-file-name name version))
+             (sha256
+              (base32
+               "0aybx8i5i0sridi9130a3937xgmfmjkk8m48f9whvhlhbzwy3xbl"))))
+    (build-system waf-build-system)
+    (arguments
+     (list
+      #:tests? #false  ;no check target
+      #: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 boost))
+    (native-inputs (list python-waf))
+    (home-page "https://github.com/lvtk/ttl2c")
+    (synopsis "Turtle to C header conversion utility for LV2 plugins")
+    (description
+     "This package provides a conversion utility for LV2 Plugin developers to
+generate C headers from Turtle files.")
+    (license license:gpl3+)))
+
 (define-public lv2-mda-piano
   (package
     (name "lv2-mda-piano")
@@ -2774,7 +2838,7 @@ software.")
     (inputs
      (list lv2 lvtk))
     (native-inputs
-     (list pkg-config))
+     (list pkg-config ttl2c))
     (native-search-paths
      (list (search-path-specification
             (variable "LV2_PATH")
@@ -2797,14 +2861,14 @@ software.")
     (synopsis "LV2 port of the mda EPiano plugin")
     (description "An LV2 port of the mda EPiano VSTi.")))
 
-(define-public lvtk
+(define-public lvtk-2
   ;; Use the latest commit, as the latest release was made in 2014 and depends
   ;; on Python 2.
   (let ((commit "a73feabe772f9650aa071e6a4df660e549ab7c48")
         (revision "0"))
     (package
       (name "lvtk")
-      (version (git-version "1.2.0" revision commit))
+      (version (git-version "2" revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -2826,6 +2890,49 @@ extensions into easy to use C++ classes.  It is the successor of
 lv2-c++-tools.")
       (license license:isc))))
 
+(define-public lvtk-1
+  ;; Use the latest commit, as the latest release was made in 2014 and depends
+  ;; on Python 2.
+  (let ((commit "23dd99531d88d7821b69f6f0d60516ef322a6729")
+        (revision "0"))
+    (package
+      (name "lvtk")
+      (version (git-version "1.2.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/lvtk/lvtk")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0iw7skvsn3whw69dhcxbbdns7mssaf6z6iyzxjav53607ibyfr8d"))))
+      (build-system waf-build-system)
+      (arguments
+       (list
+        #:tests? #false                 ;no check target
+        #:configure-flags
+        #~(list (string-append "--boost-includes="
+                               #$(this-package-input "boost")
+                               "/include"))
+        #: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 boost gtkmm lv2))
+      (native-inputs (list pkg-config python-waf))
+      (home-page "https://github.com/lvtk/lvtk")
+      (synopsis "C++ libraries for LV2 plugins")
+      (description
+       "The LV2 Toolkit (LVTK) contains libraries that wrap the LV2 C API and
+extensions into easy to use C++ classes.  It is the successor of
+lv2-c++-tools.")
+      (license license:isc))))
+
+(define-public lvtk lvtk-1)
+
 (define-public openal
   (package
     (name "openal")
@@ -2961,21 +3068,25 @@ different audio devices such as ALSA or PulseAudio.")
 (define-public qjackctl
   (package
     (name "qjackctl")
-    (version "0.9.7")
+    (version "0.9.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/qjackctl/qjackctl/"
                                   version "/qjackctl-" version ".tar.gz"))
               (sha256
                (base32
-                "104hfvr15v8cbkzil8slrqj48y3fl7lx060alj80q1sjh5hl6j2j"))))
+                "1rvxgxd7bbv7yazcpw3ily0jlra8ms5c0kkf7cybgivahw59zk87"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f))                    ; no check target
     (inputs
-     (list jack-1 alsa-lib portaudio qtbase-5 qtx11extras))
+     (list alsa-lib
+           jack-1
+           portaudio
+           qtbase-5
+           qtsvg-5))
     (native-inputs
-     (list pkg-config qttools))
+     (list pkg-config qttools-5))
     (home-page "https://qjackctl.sourceforge.io/")
     (synopsis "Jack server control application")
     (description "Control a Jack server.  Allows you to plug various sources
@@ -3096,7 +3207,7 @@ link REQUIRED)"))))))
                              (string-append ide "/bin"))
                (delete-file scide)))))))
     (native-inputs
-     (list ableton-link pkg-config qttools xorg-server-for-tests))
+     (list ableton-link pkg-config qttools-5 xorg-server-for-tests))
     (inputs (list jack-1
                   libsndfile
                   fftw
@@ -3110,12 +3221,12 @@ link REQUIRED)"))))))
                   boost-sync
                   yaml-cpp
                   qtbase-5
-                  qtdeclarative
-                  qtsvg
-                  qtwebchannel
-                  qtwebsockets))
+                  qtdeclarative-5
+                  qtsvg-5
+                  qtwebchannel-5
+                  qtwebsockets-5))
     (propagated-inputs                  ;to get native-search-path
-     (list qtwebengine))
+     (list qtwebengine-5))
     (home-page "https://github.com/supercollider/supercollider")
     (synopsis "Synthesis engine and programming language")
     (description "SuperCollider is a synthesis engine (@code{scsynth} or
@@ -3213,7 +3324,7 @@ tempo and pitch of an audio recording independently of one another.")
 (define-public rtmidi
   (package
     (name "rtmidi")
-    (version "4.0.0")
+    (version "5.0.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.music.mcgill.ca/~gary/rtmidi"
@@ -3221,7 +3332,7 @@ tempo and pitch of an audio recording independently of one another.")
               (file-name (string-append "rtmidi-" version ".tar.gz"))
               (sha256
                (base32
-                "1k962ljpnwyjw9jjiky2372khhri1wqvrj5qsalfpys31xqzw31p"))))
+                "1ff2yfq3k4l209fr71v3w98fpjjv1chs09vkbmxj03lcikahxns8"))))
     (build-system gnu-build-system)
     (inputs
      (list jack-1 alsa-lib))
@@ -3235,6 +3346,19 @@ classes) that provide a common cross-platform API for realtime MIDI
 input/output.")
     (license license:expat)))
 
+(define-public rtmidi-4.0
+  (package
+    (inherit rtmidi)
+    (version "4.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://www.music.mcgill.ca/~gary/rtmidi"
+                                  "/release/rtmidi-" version ".tar.gz"))
+              (file-name (string-append "rtmidi-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1k962ljpnwyjw9jjiky2372khhri1wqvrj5qsalfpys31xqzw31p"))))))
+
 (define-public sratom
   (package
     (name "sratom")
@@ -3463,19 +3587,19 @@ stretching and pitch scaling of audio.  This package contains the library.")
 (define-public libkeyfinder
   (package
     (name "libkeyfinder")
-    (version "2.2.6")
+    (version "2.2.7")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/mixxxdj/libkeyfinder")
-             (commit (string-append "v" version))))
+             (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0s7nqjmv44q5qjynfcs0j6h4a6qcz4mxzandkkdjjbnwv5rxc3zg"))))
+        (base32 "0nvhdzy0m3bchk3dpnspv2f518p2v9fjcrv36z1sva1pv9a2g35w"))))
     (build-system cmake-build-system)
     (native-inputs
-     (list catch-framework2))
+     (list catch2))
     (inputs
      (list fftw))
     (home-page "https://mixxxdj.github.io/libkeyfinder/")
@@ -3768,7 +3892,7 @@ interface.")
     (arguments
      `(#:tests? #f))                    ; no "check" phase
     (native-inputs
-     (list qttools pkg-config))
+     (list qttools-5 pkg-config))
     (inputs
      (list fluidsynth qtbase-5 qtx11extras))
     (home-page "https://qsynth.sourceforge.io")
@@ -4218,7 +4342,7 @@ code, used in @code{libtoxcore}.")
 (define-public gsm
   (package
     (name "gsm")
-    (version "1.0.19")
+    (version "1.0.20")
     (source
      (origin
        (method url-fetch)
@@ -4226,8 +4350,7 @@ code, used in @code{libtoxcore}.")
         (string-append "http://www.quut.com/" name "/" name
                        "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1xkha9ss5g5qnfaybi8il0mcvp8knwg9plgh8404vh58d0pna0s9"))))
+        (base32 "1gwhmqs24c14gc9qr91iqb2jkbr3qqy4dvf27yf8j7mq322w65b3"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "tst"
@@ -4240,8 +4363,7 @@ code, used in @code{libtoxcore}.")
              ;; mediastreamer.
              (substitute* "Makefile"
                (("^CCFLAGS.*" all)
-                (string-append all "CCFLAGS += -fPIC\n")))
-             #t))
+                (string-append all "CCFLAGS += -fPIC\n")))))
          (add-before 'install 'pre-install
            (lambda _
              (let ((out (assoc-ref %outputs "out")))
@@ -4250,8 +4372,7 @@ code, used in @code{libtoxcore}.")
                (mkdir-p (string-append out "/man/man1"))
                (mkdir-p (string-append out "/man/man3"))
                (mkdir-p (string-append out "/bin"))
-               (mkdir-p (string-append out "/lib")))
-             #t))
+               (mkdir-p (string-append out "/lib")))))
          (add-after 'install 'post-install
            (lambda _
              (let ((out (assoc-ref %outputs "out")))
@@ -4259,8 +4380,7 @@ code, used in @code{libtoxcore}.")
                             (string-append out "/include"))
                (mkdir-p (string-append out "/include/gsm"))
                (copy-recursively "inc"
-                                 (string-append out "/include/gsm")))
-             #t))
+                                 (string-append out "/include/gsm")))))
          (delete 'configure))))         ; no configure script
     (synopsis "GSM 06.10 lossy speech compression library")
     (description "This C library provides an encoder and a decoder for the GSM
@@ -5324,11 +5444,11 @@ Rate} 3600x2250 bit/s vocoder used in various radio systems.")
            python ;for running tests
            portaudio ;for portaudio examples
            qtbase-5 ;for Qt examples
-           qtdeclarative
-           qttools))
+           qtdeclarative-5
+           qttools-5))
     (inputs
      (list jack-1 ;for JACK examples
-           qtquickcontrols)) ;for Qt examples
+           qtquickcontrols-5)) ;for Qt examples
     (propagated-inputs
      ;; This is because include/ableton/platforms/asio/AsioWrapper.hpp
      ;; contains '#include <asio.hpp>'.
@@ -5703,3 +5823,59 @@ source and extracts a 24-bit high resolution WAV file.  It handles both DST
 and DSD streams.")
    (home-page "https://tari.in/www/software/odio-sacd/")
    (license license:gpl3+)))
+
+(define-public qpwgraph
+  (package
+    (name "qpwgraph")
+    (version "0.3.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.freedesktop.org/rncbc/qpwgraph")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "01f4zabn22dp0yl7szxck6gkbayk1p5iqajfgzls7mdkba7515b6"))))
+    (build-system cmake-build-system)
+    (arguments (list #:tests? #f)) ;; no tests
+    (inputs (list alsa-lib
+                  libxkbcommon
+                  pipewire-0.3
+                  qtbase
+                  qtsvg))
+    (native-inputs (list pkg-config))
+    (synopsis "PipeWire graph manager")
+    (description
+     "qpwgraph is a graph manager dedicated to PipeWire, using the Qt C++
+framework.  It provides a visual interface to audio and video connections
+managed by PipeWire.")
+    (home-page "https://gitlab.freedesktop.org/rncbc/qpwgraph")
+    (license license:gpl2)))
+
+(define-public streamripper
+  (package
+    (name "streamripper")
+    (version "1.64.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://sourceforge.net/projects/streamripper"
+                           "/files/streamripper%20(current)/"
+                           version "/streamripper-" version ".tar.gz"))
+       (sha256
+        (base32 "0hnyv3206r0rfprn3k7k6a0j959kagsfyrmyjm3gsf3vkhp5zmy1"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Delete bundled copy of libmad.
+        '(delete-file-recursively "libmad-0.15.1b"))))
+    (build-system gnu-build-system)
+    (native-inputs (list pkg-config))
+    (inputs (list faad2 glib libmad libvorbis))
+    (home-page "http://streamripper.sourceforge.net")
+    (synopsis "Record audio streams to your hard drive")
+    (description "Streamripper records shoutcast-compatible
+streams.  For shoutcast style streams it finds the “meta data” or track
+separation data, and uses that as a marker for where the track should
+be separated.")
+    (license license:gpl2+)))