about summary refs log tree commit diff
path: root/pkgs/applications/audio
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/audio')
-rw-r--r--pkgs/applications/audio/ChowPhaser/default.nix76
-rw-r--r--pkgs/applications/audio/amberol/default.nix75
-rw-r--r--pkgs/applications/audio/audacity/0001-Use-a-different-approach-to-estimate-the-disk-space-.patch355
-rw-r--r--pkgs/applications/audio/audacity/default.nix93
-rw-r--r--pkgs/applications/audio/bespokesynth/default.nix1
-rw-r--r--pkgs/applications/audio/bitwig-studio/bitwig-studio4.nix4
-rw-r--r--pkgs/applications/audio/blanket/default.nix14
-rw-r--r--pkgs/applications/audio/callaudiod/default.nix4
-rw-r--r--pkgs/applications/audio/clementine/default.nix13
-rw-r--r--pkgs/applications/audio/cmus/default.nix4
-rw-r--r--pkgs/applications/audio/dragonfly-reverb/default.nix4
-rw-r--r--pkgs/applications/audio/faustPhysicalModeling/default.nix4
-rw-r--r--pkgs/applications/audio/flac/default.nix12
-rw-r--r--pkgs/applications/audio/ft2-clone/default.nix4
-rw-r--r--pkgs/applications/audio/furnace/default.nix4
-rw-r--r--pkgs/applications/audio/helio-workstation/default.nix4
-rw-r--r--pkgs/applications/audio/hivelytracker/default.nix2
-rw-r--r--pkgs/applications/audio/hqplayer-desktop/default.nix1
-rw-r--r--pkgs/applications/audio/jamesdsp/default.nix40
-rw-r--r--pkgs/applications/audio/jmusicbot/default.nix4
-rw-r--r--pkgs/applications/audio/libopenmpt/default.nix42
-rw-r--r--pkgs/applications/audio/lollypop/default.nix4
-rw-r--r--pkgs/applications/audio/losslessaudiochecker/default.nix2
-rw-r--r--pkgs/applications/audio/lyrebird/default.nix2
-rw-r--r--pkgs/applications/audio/moc/default.nix8
-rw-r--r--pkgs/applications/audio/ncspot/default.nix10
-rw-r--r--pkgs/applications/audio/ncspot/rust_1_57_support.patch21
-rw-r--r--pkgs/applications/audio/ocenaudio/default.nix4
-rw-r--r--pkgs/applications/audio/odin2/default.nix79
-rw-r--r--pkgs/applications/audio/osdlyrics/default.nix87
-rw-r--r--pkgs/applications/audio/parlatype/default.nix66
-rw-r--r--pkgs/applications/audio/pianobar/default.nix4
-rw-r--r--pkgs/applications/audio/pipecontrol/default.nix50
-rw-r--r--pkgs/applications/audio/plexamp/default.nix6
-rw-r--r--pkgs/applications/audio/pt2-clone/default.nix4
-rw-r--r--pkgs/applications/audio/puddletag/default.nix1
-rw-r--r--pkgs/applications/audio/pulseaudio-modules-bt/default.nix91
-rw-r--r--pkgs/applications/audio/pulseaudio-modules-bt/fix-install-path.patch11
-rw-r--r--pkgs/applications/audio/qpwgraph/default.nix6
-rw-r--r--pkgs/applications/audio/sfizz/default.nix7
-rw-r--r--pkgs/applications/audio/sfxr-qt/default.nix7
-rw-r--r--pkgs/applications/audio/shortwave/default.nix21
-rw-r--r--pkgs/applications/audio/sonixd/default.nix27
-rwxr-xr-xpkgs/applications/audio/soundwireserver/default.nix1
-rw-r--r--pkgs/applications/audio/spot/default.nix6
-rw-r--r--pkgs/applications/audio/spotify-tui/default.nix1
-rw-r--r--pkgs/applications/audio/strawberry/default.nix1
-rw-r--r--pkgs/applications/audio/whipper/default.nix8
-rw-r--r--pkgs/applications/audio/x42-plugins/default.nix4
49 files changed, 583 insertions, 716 deletions
diff --git a/pkgs/applications/audio/ChowPhaser/default.nix b/pkgs/applications/audio/ChowPhaser/default.nix
new file mode 100644
index 0000000000000..a828a1e1d0410
--- /dev/null
+++ b/pkgs/applications/audio/ChowPhaser/default.nix
@@ -0,0 +1,76 @@
+{ alsa-lib, at-spi2-core, cmake, curl, dbus, libepoxy, fetchFromGitHub, freeglut
+, freetype, gcc-unwrapped, gtk3, lib, libGL, libXcursor, libXdmcp, libXext
+, libXinerama, libXrandr, libXtst, libdatrie, libjack2, libpsl, libselinux
+, libsepol, libsysprof-capture, libthai, libxkbcommon, pcre, pkg-config
+, python3, sqlite, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "ChowPhaser";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "jatinchowdhury18";
+    repo = "ChowPhaser";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "sha256-9wo7ZFMruG3QNvlpILSvrFh/Sx6J1qnlWc8+aQyS4tQ=";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake ];
+
+  buildInputs = [
+    alsa-lib
+    at-spi2-core
+    curl
+    dbus
+    libepoxy
+    freeglut
+    freetype
+    gtk3
+    libGL
+    libXcursor
+    libXdmcp
+    libXext
+    libXinerama
+    libXrandr
+    libXtst
+    libdatrie
+    libjack2
+    libpsl
+    libselinux
+    libsepol
+    libsysprof-capture
+    libthai
+    libxkbcommon
+    pcre
+    python3
+    sqlite
+    gcc-unwrapped
+  ];
+
+  cmakeFlags = [
+    "-DCMAKE_AR=${gcc-unwrapped}/bin/gcc-ar"
+    "-DCMAKE_RANLIB=${gcc-unwrapped}/bin/gcc-ranlib"
+    "-DCMAKE_NM=${gcc-unwrapped}/bin/gcc-nm"
+  ];
+
+  installPhase = ''
+    mkdir -p $out/lib/lv2 $out/lib/vst3 $out/bin $out/share/doc/ChowPhaser/
+    cd ChowPhaserMono_artefacts/Release
+    cp libChowPhaserMono_SharedCode.a  $out/lib
+    cp -r VST3/ChowPhaserMono.vst3 $out/lib/vst3
+    cp Standalone/ChowPhaserMono  $out/bin
+    cd ../../ChowPhaserStereo_artefacts/Release
+    cp libChowPhaserStereo_SharedCode.a  $out/lib
+    cp -r VST3/ChowPhaserStereo.vst3 $out/lib/vst3
+    cp Standalone/ChowPhaserStereo  $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/jatinchowdhury18/ChowPhaser";
+    description = "Phaser effect based loosely on the Schulte Compact Phasing 'A'";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ magnetophon ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/audio/amberol/default.nix b/pkgs/applications/audio/amberol/default.nix
new file mode 100644
index 0000000000000..b778b7f2696ab
--- /dev/null
+++ b/pkgs/applications/audio/amberol/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, rustPlatform
+, desktop-file-utils
+, appstream-glib
+, meson
+, ninja
+, pkg-config
+, reuse
+, wrapGAppsHook4
+, glib
+, gtk4
+, gst_all_1
+, libadwaita
+, dbus
+}:
+
+stdenv.mkDerivation rec {
+  pname = "amberol";
+  version = "0.3.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-+9lrSkjk7V+ZnIhmhw7lEiEywDp5adoAW+5PEAlhpSI=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    sha256 = "sha256-ZJiD6RshEjZ7h+/KYcY+ZjL5fHRb5+RKgIdgbD6LdkA=";
+  };
+
+  postPatch = ''
+    patchShebangs build-aux
+  '';
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    reuse
+    wrapGAppsHook4
+  ] ++ (with rustPlatform; [
+    cargoSetupHook
+    rust.cargo
+    rust.rustc
+  ]);
+
+  buildInputs = [
+    glib
+    gtk4
+    libadwaita
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gst-plugins-bad
+    gst_all_1.gst-plugins-ugly
+    gst_all_1.gst-libav
+    dbus
+  ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.gnome.org/ebassi/amberol";
+    description = "A small and simple sound and music player";
+    maintainers = with maintainers; [ linsui ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/audio/audacity/0001-Use-a-different-approach-to-estimate-the-disk-space-.patch b/pkgs/applications/audio/audacity/0001-Use-a-different-approach-to-estimate-the-disk-space-.patch
deleted file mode 100644
index 33b7554db4483..0000000000000
--- a/pkgs/applications/audio/audacity/0001-Use-a-different-approach-to-estimate-the-disk-space-.patch
+++ /dev/null
@@ -1,355 +0,0 @@
-From deeb435829d73524df851f6f4c2d4be552c99230 Mon Sep 17 00:00:00 2001
-From: Dmitry Vedenko <dmitry@crsib.me>
-Date: Fri, 1 Oct 2021 16:21:22 +0300
-Subject: [PATCH] Use a different approach to estimate the disk space usage
-
-New a approach is a bit less precise, but removes the requirement for the "private" SQLite3 table and allows Audacity to be built against system SQLite3.
----
- cmake-proxies/sqlite/CMakeLists.txt |   5 -
- src/DBConnection.h                  |   4 +-
- src/ProjectFileIO.cpp               | 269 +++++-----------------------
- 3 files changed, 44 insertions(+), 234 deletions(-)
-
-diff --git a/cmake-proxies/sqlite/CMakeLists.txt b/cmake-proxies/sqlite/CMakeLists.txt
-index 63d70637c..d7b9b95ef 100644
---- a/cmake-proxies/sqlite/CMakeLists.txt
-+++ b/cmake-proxies/sqlite/CMakeLists.txt
-@@ -19,11 +19,6 @@ list( APPEND INCLUDES
- 
- list( APPEND DEFINES
-    PRIVATE
--      #
--      # We need the dbpage table for space calculations.
--      #
--      SQLITE_ENABLE_DBPAGE_VTAB=1
--
-       # Can't be set after a WAL mode database is initialized, so change
-       # the default here to ensure all project files get the same page 
-       # size.
-diff --git a/src/DBConnection.h b/src/DBConnection.h
-index 16a7fc9d4..07d3af95e 100644
---- a/src/DBConnection.h
-+++ b/src/DBConnection.h
-@@ -75,8 +75,8 @@ public:
-       LoadSampleBlock,
-       InsertSampleBlock,
-       DeleteSampleBlock,
--      GetRootPage,
--      GetDBPage
-+      GetSampleBlockSize,
-+      GetAllSampleBlocksSize
-    };
-    sqlite3_stmt *Prepare(enum StatementID id, const char *sql);
- 
-diff --git a/src/ProjectFileIO.cpp b/src/ProjectFileIO.cpp
-index 3b3e2e1fd..c9bc45af4 100644
---- a/src/ProjectFileIO.cpp
-+++ b/src/ProjectFileIO.cpp
-@@ -35,6 +35,7 @@ Paul Licameli split from AudacityProject.cpp
- #include "widgets/ProgressDialog.h"
- #include "wxFileNameWrapper.h"
- #include "xml/XMLFileReader.h"
-+#include "MemoryX.h"`
- 
- #undef NO_SHM
- #if !defined(__WXMSW__)
-@@ -2357,255 +2358,69 @@ int64_t ProjectFileIO::GetTotalUsage()
- }
- 
- //
--// Returns the amount of disk space used by the specified sample blockid or all
--// of the sample blocks if the blockid is 0.  It does this by using the raw SQLite
--// pages available from the "sqlite_dbpage" virtual table to traverse the SQLite
--// table b-tree described here:  https://www.sqlite.org/fileformat.html
-+// Returns the estimation of disk space used by the specified sample blockid or all
-+// of the sample blocks if the blockid is 0. This does not include small overhead
-+// of the internal SQLite structures, only the size used by the data
- //
- int64_t ProjectFileIO::GetDiskUsage(DBConnection &conn, SampleBlockID blockid /* = 0 */)
- {
--   // Information we need to track our travels through the b-tree
--   typedef struct
--   {
--      int64_t pgno;
--      int currentCell;
--      int numCells;
--      unsigned char data[65536];
--   } page;
--   std::vector<page> stack;
--
--   int64_t total = 0;
--   int64_t found = 0;
--   int64_t right = 0;
--   int rc;
-+   sqlite3_stmt* stmt = nullptr;
- 
--   // Get the rootpage for the sampleblocks table.
--   sqlite3_stmt *stmt =
--      conn.Prepare(DBConnection::GetRootPage,
--                    "SELECT rootpage FROM sqlite_master WHERE tbl_name = 'sampleblocks';");
--   if (stmt == nullptr || sqlite3_step(stmt) != SQLITE_ROW)
-+   if (blockid == 0)
-    {
--      return 0;
--   }
--
--   // And store it in our first stack frame
--   stack.push_back({sqlite3_column_int64(stmt, 0)});
-+      static const char* statement =
-+R"(SELECT 
-+	sum(length(blockid) + length(sampleformat) + 
-+	length(summin) + length(summax) + length(sumrms) + 
-+	length(summary256) + length(summary64k) +
-+	length(samples))
-+FROM sampleblocks;)";
- 
--   // All done with the statement
--   sqlite3_clear_bindings(stmt);
--   sqlite3_reset(stmt);
--
--   // Prepare/retrieve statement to read raw database page
--   stmt = conn.Prepare(DBConnection::GetDBPage,
--      "SELECT data FROM sqlite_dbpage WHERE pgno = ?1;");
--   if (stmt == nullptr)
--   {
--      return 0;
-+      stmt = conn.Prepare(DBConnection::GetAllSampleBlocksSize, statement);
-    }
--
--   // Traverse the b-tree until we've visited all of the leaf pages or until
--   // we find the one corresponding to the passed in sample blockid. Because we
--   // use an integer primary key for the sampleblocks table, the traversal will
--   // be in ascending blockid sequence.
--   do
-+   else
-    {
--      // Acces the top stack frame
--      page &pg = stack.back();
-+      static const char* statement =
-+R"(SELECT 
-+	length(blockid) + length(sampleformat) + 
-+	length(summin) + length(summax) + length(sumrms) + 
-+	length(summary256) + length(summary64k) +
-+	length(samples)
-+FROM sampleblocks WHERE blockid = ?1;)";
- 
--      // Read the page from the sqlite_dbpage table if it hasn't yet been loaded
--      if (pg.numCells == 0)
--      {
--         // Bind the page number
--         sqlite3_bind_int64(stmt, 1, pg.pgno);
-+      stmt = conn.Prepare(DBConnection::GetSampleBlockSize, statement);
-+   }
- 
--         // And retrieve the page
--         if (sqlite3_step(stmt) != SQLITE_ROW)
-+   auto cleanup = finally(
-+      [stmt]() {
-+         // Clear statement bindings and rewind statement
-+         if (stmt != nullptr)
-          {
--            // REVIEW: Likely harmless failure - says size is zero on
--            // this error.
--            // LLL: Yea, but not much else we can do.
--            return 0;
-+            sqlite3_clear_bindings(stmt);
-+            sqlite3_reset(stmt);
-          }
-+      });
- 
--         // Copy the page content to the stack frame
--         memcpy(&pg.data,
--                sqlite3_column_blob(stmt, 0),
--                sqlite3_column_bytes(stmt, 0));
--
--         // And retrieve the total number of cells within it
--         pg.numCells = get2(&pg.data[3]);
--
--         // Reset statement for next usage
--         sqlite3_clear_bindings(stmt);
--         sqlite3_reset(stmt);
--      }
--
--      //wxLogDebug("%*.*spgno %lld currentCell %d numCells %d", (stack.size() - 1) * 2, (stack.size() - 1) * 2, "", pg.pgno, pg.currentCell, pg.numCells);
--
--      // Process an interior table b-tree page
--      if (pg.data[0] == 0x05)
--      {
--         // Process the next cell if we haven't examined all of them yet
--         if (pg.currentCell < pg.numCells)
--         {
--            // Remember the right-most leaf page number.
--            right = get4(&pg.data[8]);
--
--            // Iterate over the cells.
--            //
--            // If we're not looking for a specific blockid, then we always push the
--            // target page onto the stack and leave the loop after a single iteration.
--            //
--            // Otherwise, we match the blockid against the highest integer key contained
--            // within the cell and if the blockid falls within the cell, we stack the
--            // page and stop the iteration.
--            //
--            // In theory, we could do a binary search for a specific blockid here, but
--            // because our sample blocks are always large, we will get very few cells
--            // per page...usually 6 or less.
--            //
--            // In both cases, the stacked page can be either an internal or leaf page.
--            bool stacked = false;
--            while (pg.currentCell < pg.numCells)
--            {
--               // Get the offset to this cell using the offset in the cell pointer
--               // array.
--               //
--               // The cell pointer array starts immediately after the page header
--               // at offset 12 and the retrieved offset is from the beginning of
--               // the page.
--               int celloff = get2(&pg.data[12 + (pg.currentCell * 2)]);
--
--               // Bump to the next cell for the next iteration.
--               pg.currentCell++;
--
--               // Get the page number this cell describes
--               int pagenum = get4(&pg.data[celloff]);
--
--               // And the highest integer key, which starts at offset 4 within the cell.
--               int64_t intkey = 0;
--               get_varint(&pg.data[celloff + 4], &intkey);
--
--               //wxLogDebug("%*.*sinternal - right %lld celloff %d pagenum %d intkey %lld", (stack.size() - 1) * 2, (stack.size() - 1) * 2, " ", right, celloff, pagenum, intkey);
--
--               // Stack the described page if we're not looking for a specific blockid
--               // or if this page contains the given blockid.
--               if (!blockid || blockid <= intkey)
--               {
--                  stack.push_back({pagenum, 0, 0});
--                  stacked = true;
--                  break;
--               }
--            }
--
--            // If we pushed a new page onto the stack, we need to jump back up
--            // to read the page
--            if (stacked)
--            {
--               continue;
--            }
--         }
-+   if (blockid != 0)
-+   {
-+      int rc = sqlite3_bind_int64(stmt, 1, blockid);
- 
--         // We've exhausted all the cells with this page, so we stack the right-most
--         // leaf page.  Ensure we only process it once.
--         if (right)
--         {
--            stack.push_back({right, 0, 0});
--            right = 0;
--            continue;
--         }
--      }
--      // Process a leaf table b-tree page
--      else if (pg.data[0] == 0x0d)
-+      if (rc != SQLITE_OK)
-       {
--         // Iterate over the cells
--         //
--         // If we're not looking for a specific blockid, then just accumulate the
--         // payload sizes. We will be reading every leaf page in the sampleblocks
--         // table.
--         //
--         // Otherwise we break out when we find the matching blockid. In this case,
--         // we only ever look at 1 leaf page.
--         bool stop = false;
--         for (int i = 0; i < pg.numCells; i++)
--         {
--            // Get the offset to this cell using the offset in the cell pointer
--            // array.
--            //
--            // The cell pointer array starts immediately after the page header
--            // at offset 8 and the retrieved offset is from the beginning of
--            // the page.
--            int celloff = get2(&pg.data[8 + (i * 2)]);
--
--            // Get the total payload size in bytes of the described row.
--            int64_t payload = 0;
--            int digits = get_varint(&pg.data[celloff], &payload);
--
--            // Get the integer key for this row.
--            int64_t intkey = 0;
--            get_varint(&pg.data[celloff + digits], &intkey);
--
--            //wxLogDebug("%*.*sleaf - celloff %4d intkey %lld payload %lld", (stack.size() - 1) * 2, (stack.size() - 1) * 2, " ", celloff, intkey, payload);
--
--            // Add this payload size to the total if we're not looking for a specific
--            // blockid
--            if (!blockid)
--            {
--               total += payload;
--            }
--            // Otherwise, return the payload size for a matching row
--            else if (blockid == intkey)
--            {
--               return payload;
--            }
--         }
-+         conn.ThrowException(false);
-       }
-+   }
- 
--      // Done with the current branch, so pop back up to the previous one (if any)
--      stack.pop_back();
--   } while (!stack.empty());
--
--   // Return the total used for all sample blocks
--   return total;
--}
--
--// Retrieves a 2-byte big-endian integer from the page data
--unsigned int ProjectFileIO::get2(const unsigned char *ptr)
--{
--   return (ptr[0] << 8) | ptr[1];
--}
--
--// Retrieves a 4-byte big-endian integer from the page data
--unsigned int ProjectFileIO::get4(const unsigned char *ptr)
--{
--   return ((unsigned int) ptr[0] << 24) |
--          ((unsigned int) ptr[1] << 16) |
--          ((unsigned int) ptr[2] << 8)  |
--          ((unsigned int) ptr[3]);
--}
--
--// Retrieves a variable length integer from the page data. Returns the
--// number of digits used to encode the integer and the stores the
--// value at the given location.
--int ProjectFileIO::get_varint(const unsigned char *ptr, int64_t *out)
--{
--   int64_t val = 0;
--   int i;
-+   int rc = sqlite3_step(stmt);
- 
--   for (i = 0; i < 8; ++i)
-+   if (rc != SQLITE_ROW)
-    {
--      val = (val << 7) + (ptr[i] & 0x7f);
--      if ((ptr[i] & 0x80) == 0)
--      {
--         *out = val;
--         return i + 1;
--      }
-+      conn.ThrowException(false);
-    }
- 
--   val = (val << 8) + (ptr[i] & 0xff);
--   *out = val;
-+   const int64_t size = sqlite3_column_int64(stmt, 0);
- 
--   return 9;
-+   return size;
- }
- 
- InvisibleTemporaryProject::InvisibleTemporaryProject()
--- 
-2.33.1
-
diff --git a/pkgs/applications/audio/audacity/default.nix b/pkgs/applications/audio/audacity/default.nix
index 9d4c522edc1a9..653d5555eb144 100644
--- a/pkgs/applications/audio/audacity/default.nix
+++ b/pkgs/applications/audio/audacity/default.nix
@@ -3,6 +3,7 @@
 , fetchFromGitHub
 , fetchpatch
 , cmake
+, makeWrapper
 , pkg-config
 , python3
 , gettext
@@ -20,14 +21,17 @@
 , libsndfile
 , soxr
 , flac
+, lame
 , twolame
 , expat
 , libid3tag
 , libopus
+, libuuid
 , ffmpeg_4
 , soundtouch
 , pcre
-/*, portaudio - given up fighting their portaudio.patch */
+, portaudio # given up fighting their portaudio.patch?
+, portmidi
 , linuxHeaders
 , alsa-lib
 , at-spi2-core
@@ -36,11 +40,14 @@
 , libXdmcp
 , libXtst
 , libpthreadstubs
+, libsbsms_2_3_0
 , libselinux
 , libsepol
 , libxkbcommon
 , util-linux
 , wxGTK
+, libpng
+, libjpeg
 , AppKit ? null
 , AudioToolbox ? null
 , AudioUnit ? null
@@ -58,12 +65,14 @@
 
 let
   inherit (lib) optionals;
+  pname = "audacity";
+  version = "3.1.3";
 
   wxWidgets_src = fetchFromGitHub {
-    owner = "audacity";
+    owner = pname;
     repo = "wxWidgets";
-    rev = "07e7d832c7a337aedba3537b90b2c98c4d8e2985";
-    sha256 = "1mawnkcrmqj98jp0jxlnh9xkc950ca033ccb51c7035pzmi9if9a";
+    rev = "v${version}-${pname}";
+    sha256 = "sha256-KrmYYv23DHBYKIuxMYBioCQ2e4KWdgmuREnimtm0XNU=";
     fetchSubmodules = true;
   };
 
@@ -74,41 +83,20 @@ let
   wxmac' = wxmac.overrideAttrs (oldAttrs: rec {
     src = wxWidgets_src;
   });
-
-in
-stdenv.mkDerivation rec {
-  pname = "audacity";
-  # nixpkgs-update: no auto update
-  # Humans too! Let's wait to see how the situation with
-  # https://github.com/audacity/audacity/issues/1213 develops before
-  # pulling any updates that are subject to this privacy policy. We
-  # may wish to switch to a fork, but at the time of writing
-  # (2021-07-05) it's too early to tell how well any of the forks will
-  # be maintained.
-  version = "3.0.2";
+in stdenv.mkDerivation rec {
+  inherit pname version;
 
   src = fetchFromGitHub {
-    owner = "audacity";
-    repo = "audacity";
+    owner = pname;
+    repo = pname;
     rev = "Audacity-${version}";
-    sha256 = "035qq2ff16cdl2cb9iply2bfjmhfl1dpscg79x6c9l0i9m8k41zj";
+    sha256 = "sha256-sdI4paxIHDZgoWTCekjrkFR4JFpQC6OatcnJdVXCCZk=";
   };
 
-  patches = [
-    (fetchpatch {
-      url = "https://github.com/audacity/audacity/commit/7f8135e112a0e1e8e906abab9339680d1e491441.patch";
-      sha256 = "0zp2iydd46analda9cfnbmzdkjphz5m7dynrdj5qdnmq6j3px9fw";
-      name = "audacity_xdg_paths.patch";
-    })
-    # This is required to make audacity work with nixpkgs’ sqlite
-    # https://github.com/audacity/audacity/pull/1802 rebased onto 3.0.2
-    ./0001-Use-a-different-approach-to-estimate-the-disk-space-.patch
-  ];
-
   postPatch = ''
-    touch src/RevisionIdent.h
+    mkdir src/private
   '' + lib.optionalString stdenv.isLinux ''
-    substituteInPlace src/FileNames.cpp \
+    substituteInPlace libraries/lib-files/FileNames.cpp \
       --replace /usr/include/linux/magic.h ${linuxHeaders}/include/linux/magic.h
   '';
 
@@ -119,6 +107,7 @@ stdenv.mkDerivation rec {
     python3
   ] ++ optionals stdenv.isLinux [
     linuxHeaders
+    makeWrapper
   ];
 
   buildInputs = [
@@ -126,15 +115,18 @@ stdenv.mkDerivation rec {
     ffmpeg_4
     file
     flac
+    lame
     libid3tag
     libjack2
     libmad
     libopus
+    libsbsms_2_3_0
     libsndfile
     libvorbis
     lilv
     lv2
     pcre
+    portmidi
     serd
     sord
     soundtouch
@@ -143,6 +135,7 @@ stdenv.mkDerivation rec {
     sratom
     suil
     twolame
+    portaudio
   ] ++ optionals stdenv.isLinux [
     alsa-lib # for portaudio
     at-spi2-core
@@ -154,6 +147,7 @@ stdenv.mkDerivation rec {
     libxkbcommon
     libselinux
     libsepol
+    libuuid
     util-linux
     wxGTK'
     wxGTK'.gtk
@@ -163,20 +157,49 @@ stdenv.mkDerivation rec {
     Cocoa
     CoreAudioKit
     AudioUnit AudioToolbox CoreAudio CoreServices Carbon # for portaudio
+    libpng
+    libjpeg
   ];
 
   cmakeFlags = [
-    "-Daudacity_use_ffmpeg=linked"
+    "-DAUDACITY_REV_LONG=nixpkgs"
+    "-DAUDACITY_REV_TIME=nixpkgs"
     "-DDISABLE_DYNAMIC_LOADING_FFMPEG=ON"
+    "-Daudacity_conan_enabled=Off"
+    "-Daudacity_use_ffmpeg=loaded"
   ];
 
   doCheck = false; # Test fails
 
+  # Replace audacity's wrapper, to:
+  # - put it in the right place, it shouldn't be in "$out/audacity"
+  # - Add the ffmpeg dynamic dependency
+  postInstall = lib.optionalString stdenv.isLinux ''
+    rm "$out/audacity"
+    wrapProgram "$out/bin/audacity" \
+      --prefix LD_LIBRARY_PATH : "$out/lib/audacity":${lib.makeLibraryPath [ ffmpeg_4 ]} \
+      --suffix AUDACITY_MODULES_PATH : "$out/lib/audacity/modules" \
+      --suffix AUDACITY_PATH : "$out/share/audacity"
+  '';
+
   meta = with lib; {
     description = "Sound editor with graphical UI";
-    homepage = "https://www.audacityteam.org/";
-    license = licenses.gpl2Plus;
+    homepage = "https://www.audacityteam.org";
+    changelog = "https://github.com/audacity/audacity/releases";
+    license = with licenses; [
+      gpl2Plus
+      # Must be GPL3 when building with "technologies that require it,
+      # such as the VST3 audio plugin interface".
+      # https://github.com/audacity/audacity/discussions/2142.
+      gpl3
+      # Documentation.
+      cc-by-30
+    ];
     maintainers = with maintainers; [ lheckemann veprbl ];
     platforms = platforms.unix;
+    # darwin-aarch due to qtbase broken for it.
+    # darwin-x86_64 due to
+    # https://logs.nix.ci/?attempt_id=5cbc4581-09b4-4148-82fe-0326411a56b3&key=nixos%2Fnixpkgs.152273.
+    broken = stdenv.isDarwin;
   };
 }
diff --git a/pkgs/applications/audio/bespokesynth/default.nix b/pkgs/applications/audio/bespokesynth/default.nix
index a5ef585969e61..6c48c756ab24c 100644
--- a/pkgs/applications/audio/bespokesynth/default.nix
+++ b/pkgs/applications/audio/bespokesynth/default.nix
@@ -142,6 +142,7 @@ stdenv.mkDerivation rec {
       gpl3Plus
     ] ++ lib.optional enableVST2 unfree;
     maintainers = with maintainers; [ astro tobiasBora OPNA2608 ];
+    mainProgram = "BespokeSynth";
     platforms = platforms.all;
   };
 }
diff --git a/pkgs/applications/audio/bitwig-studio/bitwig-studio4.nix b/pkgs/applications/audio/bitwig-studio/bitwig-studio4.nix
index 6f438a106ffbb..2f177c2f8c637 100644
--- a/pkgs/applications/audio/bitwig-studio/bitwig-studio4.nix
+++ b/pkgs/applications/audio/bitwig-studio/bitwig-studio4.nix
@@ -6,11 +6,11 @@
 
 stdenv.mkDerivation rec {
   pname = "bitwig-studio";
-  version = "4.2.1";
+  version = "4.2.3";
 
   src = fetchurl {
     url = "https://downloads.bitwig.com/stable/${version}/${pname}-${version}.deb";
-    sha256 = "sha256-kkpb8tLuj4QO+TBW2yNDugS4c6dCQ9Lddv6Z8NS0uio=";
+    sha256 = "sha256-UCafrjrEwwHkhPum7sTOjtXzy7PNeK5/aeKg+b3CGJU=";
   };
 
   nativeBuildInputs = [ dpkg makeWrapper wrapGAppsHook ];
diff --git a/pkgs/applications/audio/blanket/default.nix b/pkgs/applications/audio/blanket/default.nix
index b343953f3f849..6c648ed711591 100644
--- a/pkgs/applications/audio/blanket/default.nix
+++ b/pkgs/applications/audio/blanket/default.nix
@@ -9,21 +9,21 @@
 , appstream-glib
 , python3Packages
 , glib
-, gtk3
-, libhandy
+, gtk4
+, libadwaita
 , gobject-introspection
 , gst_all_1
 }:
 
 python3Packages.buildPythonApplication rec {
   pname = "blanket";
-  version = "0.5.0";
+  version = "0.6.0";
 
   src = fetchFromGitHub {
     owner = "rafaelmardojai";
     repo = "blanket";
-    rev = version;
-    sha256 = "00i821zqfbigxmc709322r16z75qsw4rg23yhv35gza9sl65bzkg";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-4gthT1x76IfXWkLaLMPtFS4TRlRGk5Enbu/k1jAHzwE=";
   };
 
   nativeBuildInputs = [
@@ -37,8 +37,8 @@ python3Packages.buildPythonApplication rec {
 
   buildInputs = [
     glib
-    gtk3
-    libhandy
+    gtk4
+    libadwaita
     gobject-introspection
     gst_all_1.gstreamer
     gst_all_1.gst-plugins-base
diff --git a/pkgs/applications/audio/callaudiod/default.nix b/pkgs/applications/audio/callaudiod/default.nix
index 74f4b2de49ea0..562a53fe59275 100644
--- a/pkgs/applications/audio/callaudiod/default.nix
+++ b/pkgs/applications/audio/callaudiod/default.nix
@@ -11,14 +11,14 @@
 
 stdenv.mkDerivation rec {
   pname = "callaudiod";
-  version = "0.1.3";
+  version = "0.1.4";
 
   src = fetchFromGitLab {
     domain = "gitlab.com";
     owner = "mobian1";
     repo = pname;
     rev = version;
-    sha256 = "sha256-WZ23jacCsZiNeMJfnYMaGdHXY9OCIBbeU9dWGDroaHE=";
+    sha256 = "sha256-71+9ALz55aqxXRBRwOcs9fwiQK31pJ9E72pGRmt0OkE=";
   };
 
   strictDeps = true;
diff --git a/pkgs/applications/audio/clementine/default.nix b/pkgs/applications/audio/clementine/default.nix
index 550100574db40..3c9e35c8726bb 100644
--- a/pkgs/applications/audio/clementine/default.nix
+++ b/pkgs/applications/audio/clementine/default.nix
@@ -51,24 +51,17 @@ let
   withCD = config.clementine.cd or true;
   withCloud = config.clementine.cloud or true;
 
-  # On the update after all 1.4rc, qt5.15 and protobuf 3.15 will be supported.
-  version = "1.4.0rc1";
+  version = "unstable-2022-04-11";
 
   src = fetchFromGitHub {
     owner = "clementine-player";
     repo = "Clementine";
-    rev = version;
-    sha256 = "1rqk0hrsn8f8bjk0j0vq1af0ygy6xx7qi9fw0jjw2cmj6kzckyi2";
+    rev = "250024e117fbe5fae7c62b9c8e655d66412a6ed7";
+    sha256 = "06fcbs3wig3mh711iypyj49qm5246f7qhvgvv8brqfrd8cqyh6qf";
   };
 
   patches = [
     ./clementine-spotify-blob.patch
-    (fetchpatch {
-      # "short-term" fix for execution on wayland (1.4.0rc1-131-g2179027a6)
-      # for https://github.com/clementine-player/Clementine/issues/6587
-      url = "https://github.com/clementine-player/Clementine/commit/2179027a6d97530c857e43be873baacd696ff332.patch";
-      sha256 = "0344bfcyvjim5ph8w4km6zkg96rj5g9ybp9x14qgyw2gkdksimn6";
-    })
   ];
 
   nativeBuildInputs = [
diff --git a/pkgs/applications/audio/cmus/default.nix b/pkgs/applications/audio/cmus/default.nix
index ea7ad1015be9a..3a4cae32a1fdc 100644
--- a/pkgs/applications/audio/cmus/default.nix
+++ b/pkgs/applications/audio/cmus/default.nix
@@ -1,5 +1,5 @@
 { config, lib, stdenv, fetchFromGitHub, runCommand, ncurses, pkg-config
-, libiconv, CoreAudio, AudioUnit
+, libiconv, CoreAudio, AudioUnit, VideoToolbox
 
 , alsaSupport ? stdenv.isLinux, alsa-lib ? null
 # simple fallback for everyone else
@@ -121,7 +121,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ pkg-config ];
   buildInputs = [ ncurses ]
     ++ lib.optional stdenv.cc.isClang clangGCC
-    ++ lib.optionals stdenv.isDarwin [ libiconv CoreAudio AudioUnit ]
+    ++ lib.optionals stdenv.isDarwin [ libiconv CoreAudio AudioUnit VideoToolbox ]
     ++ flatten (concatMap (a: a.deps) opts);
 
   makeFlags = [ "LD=$(CC)" ];
diff --git a/pkgs/applications/audio/dragonfly-reverb/default.nix b/pkgs/applications/audio/dragonfly-reverb/default.nix
index a07dca699d793..4c62e6a8b6ade 100644
--- a/pkgs/applications/audio/dragonfly-reverb/default.nix
+++ b/pkgs/applications/audio/dragonfly-reverb/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "dragonfly-reverb";
-  version = "3.2.5";
+  version = "3.2.6";
 
   src = fetchFromGitHub {
     owner = "michaelwillis";
     repo = "dragonfly-reverb";
     rev = version;
-    sha256 = "14kia9wjs0nqfx4psnr3vf4x6hihkf80gb0mjzmdnnnk4cnrdydm";
+    sha256 = "sha256-hTapy/wXt1rRZVdkx2RDW8LS/DcY30p+WaAWgemGqVo=";
     fetchSubmodules = true;
   };
 
diff --git a/pkgs/applications/audio/faustPhysicalModeling/default.nix b/pkgs/applications/audio/faustPhysicalModeling/default.nix
index f9dbd3f80f0c4..bea08b0bfc9f6 100644
--- a/pkgs/applications/audio/faustPhysicalModeling/default.nix
+++ b/pkgs/applications/audio/faustPhysicalModeling/default.nix
@@ -1,13 +1,13 @@
 { stdenv, lib, fetchFromGitHub, faust2jaqt, faust2lv2 }:
 stdenv.mkDerivation rec {
   pname = "faustPhysicalModeling";
-  version = "2.37.3";
+  version = "2.40.0";
 
   src = fetchFromGitHub {
     owner = "grame-cncm";
     repo = "faust";
     rev = version;
-    sha256 = "sha256-h6L+qRkN2chnI4821WrjD3uRFw3J0sUYVLL8w57vR1U=";
+    sha256 = "sha256-t3I3j5s2ACHfub+fxxaTwu+5ptEwH0JQpVdmHYOzbCA=";
   };
 
   buildInputs = [ faust2jaqt faust2lv2 ];
diff --git a/pkgs/applications/audio/flac/default.nix b/pkgs/applications/audio/flac/default.nix
index 0b1a2edc3baab..621804840bf02 100644
--- a/pkgs/applications/audio/flac/default.nix
+++ b/pkgs/applications/audio/flac/default.nix
@@ -2,21 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "flac";
-  version = "1.3.3";
+  version = "1.3.4";
 
   src = fetchurl {
     url = "http://downloads.xiph.org/releases/flac/${pname}-${version}.tar.xz";
-    sha256 = "0j0p9sf56a2fm2hkjnf7x3py5ir49jyavg4q5zdyd7bcf6yq4gi1";
+    sha256 = "0dz7am8kbc97a6afml1h4yp085274prg8j7csryds8m3fmz61w4g";
   };
 
-  patches = [
-    (fetchpatch {
-      name = "CVE-2020-0499.patch";
-      url = "https://github.com/xiph/flac/commit/2e7931c27eb15e387da440a37f12437e35b22dd4.patch";
-      sha256 = "160qzq9ms5addz7sx06pnyjjkqrffr54r4wd8735vy4x008z71ah";
-    })
-  ];
-
   buildInputs = [ libogg ];
 
   #doCheck = true; # takes lots of time
diff --git a/pkgs/applications/audio/ft2-clone/default.nix b/pkgs/applications/audio/ft2-clone/default.nix
index 7e0fcf2717ebe..03c8e8d6ce699 100644
--- a/pkgs/applications/audio/ft2-clone/default.nix
+++ b/pkgs/applications/audio/ft2-clone/default.nix
@@ -13,13 +13,13 @@
 
 stdenv.mkDerivation rec {
   pname = "ft2-clone";
-  version = "1.52";
+  version = "1.54";
 
   src = fetchFromGitHub {
     owner = "8bitbubsy";
     repo = "ft2-clone";
     rev = "v${version}";
-    sha256 = "sha256-RyZ3PV7jaTN3DEYMT0BqKDHbb+7/IgiRaCra1xA0h1A=";
+    sha256 = "sha256-lNiQ0X2vvPGubb4Pde+eh0Z6ClCQgigIUM+PddaiVUg=";
   };
 
   # Adapt the linux-only CMakeLists to darwin (more reliable than make-macos.sh)
diff --git a/pkgs/applications/audio/furnace/default.nix b/pkgs/applications/audio/furnace/default.nix
index 841a65e541fc1..115c5b7767d2e 100644
--- a/pkgs/applications/audio/furnace/default.nix
+++ b/pkgs/applications/audio/furnace/default.nix
@@ -1,7 +1,7 @@
 { stdenv
 , lib
 , gitUpdater
-, testVersion
+, testers
 , furnace
 , fetchFromGitHub
 , cmake
@@ -83,7 +83,7 @@ stdenv.mkDerivation rec {
       inherit pname version;
       rev-prefix = "v";
     };
-    tests.version = testVersion {
+    tests.version = testers.testVersion {
       package = furnace;
       # The command always exits with code 1
       command = "(furnace --version || [ $? -eq 1 ])";
diff --git a/pkgs/applications/audio/helio-workstation/default.nix b/pkgs/applications/audio/helio-workstation/default.nix
index b36d977b2bdf1..9801f2d2b2adc 100644
--- a/pkgs/applications/audio/helio-workstation/default.nix
+++ b/pkgs/applications/audio/helio-workstation/default.nix
@@ -5,14 +5,14 @@
 
 stdenv.mkDerivation rec {
   pname = "helio-workstation";
-  version = "3.8";
+  version = "3.9";
 
   src = fetchFromGitHub {
     owner = "helio-fm";
     repo = pname;
     rev = version;
     fetchSubmodules = true;
-    sha256 = "sha256-uwRSOJ5WvDH4mfL9pCTCGzuSRT8SIBrI+Wsbumzejv0=";
+    sha256 = "sha256-AtgKgw+F5lc0Ma3zOxmk3iaZQp2KZb2FP5F8QvvYTT4=";
   };
 
   buildInputs = [
diff --git a/pkgs/applications/audio/hivelytracker/default.nix b/pkgs/applications/audio/hivelytracker/default.nix
index 4cf20e3c89852..8f9e3809fd2de 100644
--- a/pkgs/applications/audio/hivelytracker/default.nix
+++ b/pkgs/applications/audio/hivelytracker/default.nix
@@ -60,7 +60,7 @@ stdenv.mkDerivation rec {
     # files passed as arguments anyway, so this works well enough until the
     # issue is fixed.
     wrapProgram $out/bin/hivelytracker \
-      --run "cd $out/share/hivelytracker"
+      --chdir "$out/share/hivelytracker"
 
     # Also install the hvl2wav tool
     install -Dm755 hvl2wav/hvl2wav $out/bin/hvl2wav
diff --git a/pkgs/applications/audio/hqplayer-desktop/default.nix b/pkgs/applications/audio/hqplayer-desktop/default.nix
index 38b7e04060386..5cfd9c7cbe898 100644
--- a/pkgs/applications/audio/hqplayer-desktop/default.nix
+++ b/pkgs/applications/audio/hqplayer-desktop/default.nix
@@ -86,6 +86,7 @@ mkDerivation rec {
     homepage = "https://www.signalyst.com/custom.html";
     description = "High-end upsampling multichannel software HD-audio player";
     license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
     maintainers = with maintainers; [ lovesegfault ];
   };
 }
diff --git a/pkgs/applications/audio/jamesdsp/default.nix b/pkgs/applications/audio/jamesdsp/default.nix
index 16683564b2c76..61f8907f99ca1 100644
--- a/pkgs/applications/audio/jamesdsp/default.nix
+++ b/pkgs/applications/audio/jamesdsp/default.nix
@@ -2,18 +2,31 @@
 , mkDerivation
 , fetchFromGitHub
 , pipewire
+, pulseaudio
+, gst_all_1
 , glibmm
 , qmake
+, qtbase
+, qtsvg
+, wrapQtAppsHook
 , makeDesktopItem
 , pkg-config
 , libarchive
 , fetchpatch
+, copyDesktopItems
+, usePipewire ? true
+, usePulseaudio ? false
 }:
 
-mkDerivation rec{
+assert lib.asserts.assertMsg (usePipewire != usePulseaudio) "You need to enable one and only one of pulseaudio or pipewire support";
+
+let
+  pluginPath = lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0" (with gst_all_1; [ gstreamer gst-plugins-base gst-plugins-good ]);
+in
+  mkDerivation rec {
   pname = "jamesdsp";
   version = "2.3";
-  src = fetchFromGitHub rec{
+  src = fetchFromGitHub rec {
     owner = "Audio4Linux";
     repo = "JDSP4Linux";
     fetchSubmodules = true;
@@ -29,13 +42,30 @@ mkDerivation rec{
     })
   ];
 
-  nativeBuildInputs = [ qmake pkg-config ];
+  nativeBuildInputs = [
+    qmake
+    pkg-config
+    copyDesktopItems
+    wrapQtAppsHook
+  ];
+
   buildInputs = [
     glibmm
     libarchive
-    pipewire
+    qtbase
+    qtsvg
+  ] ++ lib.optional usePipewire pipewire
+  ++ lib.optionals usePulseaudio [
+    pulseaudio
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gstreamer
   ];
 
+  qtWrapperArgs = lib.optionals usePulseaudio [ "--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : ${pluginPath}" ];
+
+  qmakeFlags = lib.optionals usePulseaudio [ "CONFIG+=USE_PULSEAUDIO" ];
+
   desktopItems = [
     (makeDesktopItem {
       name = "jamesdsp";
@@ -54,7 +84,7 @@ mkDerivation rec{
     description = "An audio effect processor for PipeWire clients";
     homepage = "https://github.com/Audio4Linux/JDSP4Linux";
     license = licenses.gpl3Only;
-    maintainers = with maintainers;[ pasqui23 ];
+    maintainers = with maintainers; [ pasqui23 rewine ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/applications/audio/jmusicbot/default.nix b/pkgs/applications/audio/jmusicbot/default.nix
index 60df749a14268..94290ada7b353 100644
--- a/pkgs/applications/audio/jmusicbot/default.nix
+++ b/pkgs/applications/audio/jmusicbot/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "JMusicBot";
-  version = "0.3.6";
+  version = "0.3.8";
 
   src = fetchurl {
     url = "https://github.com/jagrosh/MusicBot/releases/download/${version}/JMusicBot-${version}.jar";
-    sha256 = "sha256-Hc3dsOADC+jVZScY19OYDkHimntMjdw/BoB3EUS/d0k=";
+    sha256 = "sha256-wzmrh9moY6oo3RqOy9Zl1X70BZlvbJkQmz8BaBIFtIM=";
   };
 
   dontUnpack = true;
diff --git a/pkgs/applications/audio/libopenmpt/default.nix b/pkgs/applications/audio/libopenmpt/default.nix
deleted file mode 100644
index b2b5ebecd7e23..0000000000000
--- a/pkgs/applications/audio/libopenmpt/default.nix
+++ /dev/null
@@ -1,42 +0,0 @@
-{ config, lib, stdenv, fetchurl, fetchpatch, zlib, pkg-config, mpg123, libogg, libvorbis, portaudio, libsndfile, flac
-, usePulseAudio ? config.pulseaudio or stdenv.isLinux, libpulseaudio }:
-
-stdenv.mkDerivation rec {
-  pname = "libopenmpt";
-  version = "0.5.11";
-
-  outputs = [ "out" "lib" "dev" ];
-
-  src = fetchurl {
-    url = "https://lib.openmpt.org/files/libopenmpt/src/libopenmpt-${version}+release.autotools.tar.gz";
-    sha256 = "1c54lldr2imjzhlhq5lvwhj7d5794xm97cby9pznr5wdjjay0sa4";
-  };
-
-  patches = [
-    # Fix pending upstream inclusion for gcc-12 include headers:
-    #  https://github.com/OpenMPT/openmpt/pull/8
-    (fetchpatch {
-      name = "gcc-12.patch";
-      url = "https://github.com/OpenMPT/openmpt/commit/6e7a43190ef2f9ba0b3efc19b9527261b69ec8f7.patch";
-      sha256 = "081m1rf09bbrlg52aihaajmld5dcnwbp6y7zpyik92mm332r330h";
-    })
-  ];
-
-  enableParallelBuilding = true;
-
-  nativeBuildInputs = [ pkg-config ];
-  buildInputs = [ zlib mpg123 libogg libvorbis portaudio libsndfile flac ]
-  ++ lib.optional usePulseAudio libpulseaudio;
-
-  configureFlags = lib.optional (!usePulseAudio) "--without-pulseaudio";
-
-  doCheck = true;
-
-  meta = with lib; {
-    description = "A cross-platform command-line based module file player";
-    homepage = "https://lib.openmpt.org/libopenmpt/";
-    license = licenses.bsd3;
-    maintainers = with maintainers; [ OPNA2608 ];
-    platforms = platforms.unix;
-  };
-}
diff --git a/pkgs/applications/audio/lollypop/default.nix b/pkgs/applications/audio/lollypop/default.nix
index 7c93760d2ca31..8b6e1c7aa4caa 100644
--- a/pkgs/applications/audio/lollypop/default.nix
+++ b/pkgs/applications/audio/lollypop/default.nix
@@ -25,7 +25,7 @@
 
 python3.pkgs.buildPythonApplication rec  {
   pname = "lollypop";
-  version = "1.4.26";
+  version = "1.4.31";
 
   format = "other";
   doCheck = false;
@@ -34,7 +34,7 @@ python3.pkgs.buildPythonApplication rec  {
     url = "https://gitlab.gnome.org/World/lollypop";
     rev = "refs/tags/${version}";
     fetchSubmodules = true;
-    sha256 = "sha256-Q/z9oET06DimMRZl03TgjEeheoVHtIkH+Z69qWZetcI=";
+    sha256 = "sha256-kWqTDhk7QDmN0yr6x8ER5oHkUAkP3i5yOabnNXSHSqA=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/applications/audio/losslessaudiochecker/default.nix b/pkgs/applications/audio/losslessaudiochecker/default.nix
index 551f56a3ce145..9fecf7b9ba924 100644
--- a/pkgs/applications/audio/losslessaudiochecker/default.nix
+++ b/pkgs/applications/audio/losslessaudiochecker/default.nix
@@ -23,7 +23,7 @@ stdenv.mkDerivation {
     description = "Utility to check whether audio is truly lossless or not";
     homepage = "https://losslessaudiochecker.com";
     license = lib.licenses.unfree;
-    platforms = lib.platforms.x86_64;
+    platforms = [ "x86_64-linux" ];
     maintainers = with lib.maintainers; [ p-h ];
   };
 }
diff --git a/pkgs/applications/audio/lyrebird/default.nix b/pkgs/applications/audio/lyrebird/default.nix
index 81c792d95e2dc..055662ce743f8 100644
--- a/pkgs/applications/audio/lyrebird/default.nix
+++ b/pkgs/applications/audio/lyrebird/default.nix
@@ -42,7 +42,7 @@ python3Packages.buildPythonApplication rec {
   makeWrapperArgs = [
     "--prefix 'PATH' ':' '${lib.makeBinPath [ sox pulseaudio ]}'"
     "--prefix 'PYTHONPATH' ':' '${placeholder "out"}/share/lyrebird'"
-    "--run 'cd ${placeholder "out"}/share/lyrebird'"
+    "--chdir '${placeholder "out"}/share/lyrebird'"
     ''"''${gappsWrapperArgs[@]}"''
   ];
 
diff --git a/pkgs/applications/audio/moc/default.nix b/pkgs/applications/audio/moc/default.nix
index 1d26782b6ae02..4abf799d01551 100644
--- a/pkgs/applications/audio/moc/default.nix
+++ b/pkgs/applications/audio/moc/default.nix
@@ -1,7 +1,8 @@
 { lib, stdenv, fetchurl, pkg-config
 , ncurses, db , popt, libtool
+, libiconv, CoreServices
 # Sound sub-systems
-, alsaSupport ? true, alsa-lib
+, alsaSupport ? (!stdenv.isDarwin), alsa-lib
 , pulseSupport ? true, libpulseaudio, autoreconfHook
 , jackSupport ? true, libjack2
 , ossSupport ? true
@@ -64,7 +65,8 @@ in stdenv.mkDerivation rec {
     ++ opt wavpackSupport wavpack
     # Misc
     ++ opt curlSupport curl
-    ++ opt samplerateSupport libsamplerate;
+    ++ opt samplerateSupport libsamplerate
+    ++ lib.optionals stdenv.isDarwin [ libiconv CoreServices ];
 
   configureFlags = [
     # Sound sub-systems
@@ -97,6 +99,6 @@ in stdenv.mkDerivation rec {
     homepage = "http://moc.daper.net/";
     license = licenses.gpl2;
     maintainers = with maintainers; [ aethelz pSub jagajaga ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/applications/audio/ncspot/default.nix b/pkgs/applications/audio/ncspot/default.nix
index fc7ab505ac2df..f2d912a786147 100644
--- a/pkgs/applications/audio/ncspot/default.nix
+++ b/pkgs/applications/audio/ncspot/default.nix
@@ -7,20 +7,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "ncspot";
-  version = "0.9.5";
+  version = "0.9.7";
 
   src = fetchFromGitHub {
     owner = "hrkfdn";
     repo = "ncspot";
     rev = "v${version}";
-    sha256 = "sha256-HnP0dXKkMssDAhrsA99bTCVGdov9t5+1y8fJ+BWTM80=";
+    sha256 = "sha256-s2rWn6EK+io/yxQiWsWuXpqLOGd0F6ehWqVqgHBGZd0=";
   };
 
-  # Upstream now only supports rust 1.58+, but this version is not yet available in nixpkgs.
-  # See https://github.com/hrkfdn/ncspot/issues/714
-  patches = [ ./rust_1_57_support.patch ];
-
-  cargoSha256 = "sha256-g6UMwirsSV+/NtFIfEZrz5h/OitPQcDeSawh7wq4TLI=";
+  cargoSha256 = "sha256-aorRy5j3VaOIibuHc6gf6HuB3g739T59vzbybehPirc=";
 
   nativeBuildInputs = [ pkg-config ];
 
diff --git a/pkgs/applications/audio/ncspot/rust_1_57_support.patch b/pkgs/applications/audio/ncspot/rust_1_57_support.patch
deleted file mode 100644
index ce4d473989c31..0000000000000
--- a/pkgs/applications/audio/ncspot/rust_1_57_support.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff --git a/src/ui/listview.rs b/src/ui/listview.rs
-index 17fead7..e6c72b6 100644
---- a/src/ui/listview.rs
-+++ b/src/ui/listview.rs
-@@ -85,7 +85,7 @@ impl<I: ListItem> ListView<I> {
- 
-     pub fn content_height_with_paginator(&self) -> usize {
-         let content_len = self.content.read().unwrap().len();
--        log::info!("content len: {content_len}");
-+        log::info!("content len: {}", content_len);
- 
-         // add 1 more row for paginator if we can paginate
-         if self.can_paginate() {
-@@ -97,7 +97,7 @@ impl<I: ListItem> ListView<I> {
- 
-     fn can_paginate(&self) -> bool {
-         let loaded = self.get_pagination().loaded_content();
--        log::info!("can paginate: {loaded}");
-+        log::info!("can paginate: {}", loaded);
-         self.get_pagination().max_content().unwrap_or(0) > self.get_pagination().loaded_content()
-     }
diff --git a/pkgs/applications/audio/ocenaudio/default.nix b/pkgs/applications/audio/ocenaudio/default.nix
index 50697c6c81a9e..c927d8997ed82 100644
--- a/pkgs/applications/audio/ocenaudio/default.nix
+++ b/pkgs/applications/audio/ocenaudio/default.nix
@@ -11,11 +11,11 @@
 
 stdenv.mkDerivation rec {
   pname = "ocenaudio";
-  version = "3.11.7";
+  version = "3.11.10";
 
   src = fetchurl {
     url = "https://www.ocenaudio.com/downloads/index.php/ocenaudio_debian9_64.deb?version=${version}";
-    sha256 = "sha256-fTeDRo7gCM1jXTQGm9MsmKu4KvTGDUogF3VSZWk91RM=";
+    sha256 = "sha256-Ah6Ni5EbFdIQ/wN7uGeMrSP5ybQfI4iy9gI1VT5LztU=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/applications/audio/odin2/default.nix b/pkgs/applications/audio/odin2/default.nix
new file mode 100644
index 0000000000000..f0bd5e0156483
--- /dev/null
+++ b/pkgs/applications/audio/odin2/default.nix
@@ -0,0 +1,79 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, alsa-lib
+, freetype
+, libjack2
+, lv2
+, libX11
+, libXcursor
+, libXext
+, libXinerama
+, libXrandr
+, libGL
+, gcc-unwrapped
+}:
+
+stdenv.mkDerivation rec {
+  pname = "odin2";
+  version = "unstable-2022-02-23";
+
+  src = fetchFromGitHub {
+    owner = "baconpaul";
+    repo = "odin2";
+    rev = "ed02d06cfb5db8a118d291c00bd2e4cd6e262cde";
+    fetchSubmodules = true;
+    sha256 = "sha256-VkZ+mqCmqWQafdN0nQxJdPxbiaZ37/0jOhLvVbnGLvQ=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    alsa-lib
+    freetype
+    libjack2
+    lv2
+    libX11
+    libXcursor
+    libXext
+    libXinerama
+    libXrandr
+    libGL
+  ];
+
+  # JUCE dlopen's these at runtime, crashes without them
+  NIX_LDFLAGS = (toString [
+    "-lX11"
+    "-lXext"
+    "-lXcursor"
+    "-lXinerama"
+    "-lXrandr"
+  ]);
+
+  cmakeFlags = [
+    "-DCMAKE_AR=${gcc-unwrapped}/bin/gcc-ar"
+    "-DCMAKE_RANLIB=${gcc-unwrapped}/bin/gcc-ranlib"
+    "-DCMAKE_NM=${gcc-unwrapped}/bin/gcc-nm"
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib/vst3
+    cd Odin2_artefacts/Release
+    cp -r VST3/Odin2.vst3 $out/lib/vst3
+    cp -r Standalone/Odin2 $out/bin
+'';
+
+
+  meta = with lib; {
+    description = "Odin 2 Synthesizer Plugin";
+    homepage = "https://thewavewarden.com/odin2";
+    license = licenses.gpl3;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ magnetophon ];
+  };
+}
diff --git a/pkgs/applications/audio/osdlyrics/default.nix b/pkgs/applications/audio/osdlyrics/default.nix
new file mode 100644
index 0000000000000..0c14b8be2b6b8
--- /dev/null
+++ b/pkgs/applications/audio/osdlyrics/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+
+, autoreconfHook
+, pkg-config
+, intltool
+
+, glib
+, gtk2
+, dbus-glib
+, libappindicator-gtk2
+, libnotify
+, python3
+, runtimeShell
+}:
+
+stdenv.mkDerivation rec {
+  pname = "osdlyrics";
+  version = "0.5.10";
+
+  src = fetchFromGitHub {
+    owner = "osdlyrics";
+    repo = "osdlyrics";
+    rev = version;
+    sha256 = "sha256-x9gIT1JkfPIc4RmmQJLv9rOG2WqAftoTK5uiRlS65zU=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    intltool
+  ];
+
+  buildInputs = [
+    glib
+    gtk2
+    dbus-glib
+    libappindicator-gtk2
+    libnotify
+    python3.pkgs.wrapPython
+    (python3.withPackages (pp: with pp; [
+      chardet
+      dbus-python
+      future
+      pycurl
+      pygobject3
+    ]))
+  ];
+
+  postFixup = ''
+    extractExecLine() {
+      serviceFile=$1
+      program=$2
+
+      execLine=$(grep --only-matching --perl-regexp 'Exec=\K(.+)' "$serviceFile")
+      echo "#!${runtimeShell}" > "$program"
+      echo "exec $execLine" >> "$program"
+      chmod +x "$program"
+
+      substituteInPlace "$serviceFile" \
+        --replace "Exec=$execLine" "Exec=$program"
+    }
+
+    # Extract the exec line into a separate program so that it can be wrapped.
+    mkdir -p "$out/libexec/osdlyrics/"
+    for svcFile in "$out/share/dbus-1/services"/*; do
+      svc=$(basename "$svcFile" ".service")
+      if grep "python" "$svcFile"; then
+        extractExecLine "$svcFile" "$out/libexec/osdlyrics/$svc"
+      fi
+    done
+
+    for p in "$out/bin/osdlyrics-create-lyricsource" "$out/bin/osdlyrics-daemon" "$out/libexec/osdlyrics"/*; do
+      wrapProgram "$p" \
+        --prefix PYTHONPATH : "$out/${python3.sitePackages}"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Standalone lyrics fetcher/displayer";
+    homepage = "https://github.com/osdlyrics/osdlyrics";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/applications/audio/parlatype/default.nix b/pkgs/applications/audio/parlatype/default.nix
deleted file mode 100644
index c1bb1102bf1b6..0000000000000
--- a/pkgs/applications/audio/parlatype/default.nix
+++ /dev/null
@@ -1,66 +0,0 @@
-{ lib, stdenv, fetchFromGitHub, pkg-config, meson, gtk3, at-spi2-core, dbus, gst_all_1, sphinxbase, pocketsphinx, ninja, gettext, appstream-glib, python3, glib, gobject-introspection, gsettings-desktop-schemas, itstool, wrapGAppsHook, hicolor-icon-theme }:
-
-stdenv.mkDerivation rec {
-  pname = "parlatype";
-  version = "2.1";
-
-  src = fetchFromGitHub {
-    owner  = "gkarsay";
-    repo   = pname;
-    rev    = "v${version}";
-    sha256 = "1k53q0kbwpnbgyr0lmfzf5sm4f93d8nbjrzdz9pdhzpxgihndg25";
-  };
-
-  nativeBuildInputs = [
-    pkg-config
-    meson
-    ninja
-    gettext
-    appstream-glib
-    python3
-    gobject-introspection
-    itstool
-    wrapGAppsHook
-  ];
-
-  buildInputs = [
-    gtk3
-    at-spi2-core
-    dbus
-    gst_all_1.gstreamer
-    gst_all_1.gst-plugins-base
-    gst_all_1.gst-plugins-good
-    gst_all_1.gst-plugins-bad
-    gst_all_1.gst-plugins-ugly
-    gst_all_1.gst-libav
-    sphinxbase
-    pocketsphinx
-    glib
-    gsettings-desktop-schemas
-    hicolor-icon-theme
-  ];
-
-  postPatch = ''
-    chmod +x data/meson_post_install.py
-    patchShebangs data/meson_post_install.py
-  '';
-
-  doCheck = false;
-
-  buildPhase = ''
-    export GST_PLUGIN_SYSTEM_PATH_1_0="$out/lib/gstreamer-1.0/:$GST_PLUGIN_SYSTEM_PATH_1_0"
-  '';
-
-  meta = with lib; {
-    description = "GNOME audio player for transcription";
-    longDescription = ''
-      Parlatype is a minimal audio player for manual speech transcription, written for the GNOME desktop environment.
-      It plays audio sources to transcribe them in your favourite text application.
-      It’s intended to be useful for journalists, students, scientists and whoever needs to transcribe audio files.
-    '';
-    homepage = "https://gkarsay.github.io/parlatype/";
-    license = licenses.gpl3Plus;
-    maintainers = [ maintainers.melchips ];
-    platforms = platforms.linux;
-  };
-}
diff --git a/pkgs/applications/audio/pianobar/default.nix b/pkgs/applications/audio/pianobar/default.nix
index c5ef0352503fc..9949fce8b09c7 100644
--- a/pkgs/applications/audio/pianobar/default.nix
+++ b/pkgs/applications/audio/pianobar/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "pianobar";
-  version = "2020.11.28";
+  version = "2022.04.01";
 
   src = fetchurl {
     url = "https://6xq.net/projects/pianobar/${pname}-${version}.tar.bz2";
-    sha256 = "1znlwybfpxsjqr1jmr8j0ci8wzmpzmk2yxb0qcx9w9a8nnbgnfv5";
+    sha256 = "sha256-FnCyiGWouCpXu23+p/FuL6QUXS81SRC7FzgLMsm5R2M=";
   };
 
   nativeBuildInputs = [ pkg-config ];
diff --git a/pkgs/applications/audio/pipecontrol/default.nix b/pkgs/applications/audio/pipecontrol/default.nix
new file mode 100644
index 0000000000000..4acba5d75ee0f
--- /dev/null
+++ b/pkgs/applications/audio/pipecontrol/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pipewire
+, cmake
+, extra-cmake-modules
+, gnumake
+, wrapQtAppsHook
+, qtbase
+, qttools
+, kirigami2
+, kcoreaddons
+, ki18n
+, qtquickcontrols2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pipecontrol";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "portaloffreedom";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-BeubRDx82MQX1gB7GnGJlQ2FyYX1S83C3gqPZgIjgoM=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    wrapQtAppsHook
+    qttools
+  ];
+
+  buildInputs = [
+    pipewire
+    qtbase
+    kirigami2
+    kcoreaddons
+    ki18n
+    qtquickcontrols2
+  ];
+
+  meta = with lib; {
+    description = "Pipewire control GUI program in Qt (Kirigami2)";
+    homepage = "https://github.com/portaloffreedom/pipecontrol";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ tilcreator ];
+  };
+}
diff --git a/pkgs/applications/audio/plexamp/default.nix b/pkgs/applications/audio/plexamp/default.nix
index d86223dcdcb1f..fa76b50f8ae62 100644
--- a/pkgs/applications/audio/plexamp/default.nix
+++ b/pkgs/applications/audio/plexamp/default.nix
@@ -2,12 +2,12 @@
 
 let
   pname = "plexamp";
-  version = "4.1.0";
+  version = "4.2.0";
 
   src = fetchurl {
     url = "https://plexamp.plex.tv/plexamp.plex.tv/desktop/Plexamp-${version}.AppImage";
     name="${pname}-${version}.AppImage";
-    sha512 = "N+WkH6n7MWfRd2rsk/2b/rABL6pcjpKa1iBZSHslIOEc5fYWjGAxjwwTU0RgSaqptS1DyPeCUeWuphWPZJsQgw==";
+    sha512 = "yIdZoKTJJEpUzEqvixQ7JJBxzrtCRov31dGBDOjMiK/oA2q00Xo6XVDvAhYuIn6ocZqK+I5jHfmf4qYaRePDvg==";
   };
 
   appimageContents = appimageTools.extractType2 {
@@ -33,7 +33,7 @@ in appimageTools.wrapType2 {
   meta = with lib; {
     description = "A beautiful Plex music player for audiophiles, curators, and hipsters";
     homepage = "https://plexamp.com/";
-    changelog = "https://forums.plex.tv/t/plexamp-release-notes/221280/42";
+    changelog = "https://forums.plex.tv/t/plexamp-release-notes/221280/43";
     license = licenses.unfree;
     maintainers = with maintainers; [ killercup synthetica ];
     platforms = [ "x86_64-linux" ];
diff --git a/pkgs/applications/audio/pt2-clone/default.nix b/pkgs/applications/audio/pt2-clone/default.nix
index 2577f61e8d518..8b586c455e3bf 100644
--- a/pkgs/applications/audio/pt2-clone/default.nix
+++ b/pkgs/applications/audio/pt2-clone/default.nix
@@ -8,13 +8,13 @@
 
 stdenv.mkDerivation rec {
   pname = "pt2-clone";
-  version = "1.43";
+  version = "1.46";
 
   src = fetchFromGitHub {
     owner = "8bitbubsy";
     repo = "pt2-clone";
     rev = "v${version}";
-    sha256 = "sha256-+sHGjgDqizv/9n0dDj8knsl+4MBfO3/pMkmD+MPsuNM=";
+    sha256 = "sha256-xRq37hjuMiGxsWRnZ/ryXYLvQpjbfQEjQkMjjuqL7r8=";
   };
 
   nativeBuildInputs = [ cmake ];
diff --git a/pkgs/applications/audio/puddletag/default.nix b/pkgs/applications/audio/puddletag/default.nix
index 701e6fffbbb89..936fb2f54ecae 100644
--- a/pkgs/applications/audio/puddletag/default.nix
+++ b/pkgs/applications/audio/puddletag/default.nix
@@ -17,6 +17,7 @@
 let
   # NOTE: check if we can drop any of these overrides when bumping the version
   overrideVersions = [
+    "lxml"
     "pyparsing"
     "pyqt5"
   ];
diff --git a/pkgs/applications/audio/pulseaudio-modules-bt/default.nix b/pkgs/applications/audio/pulseaudio-modules-bt/default.nix
deleted file mode 100644
index 331bce3e8be31..0000000000000
--- a/pkgs/applications/audio/pulseaudio-modules-bt/default.nix
+++ /dev/null
@@ -1,91 +0,0 @@
-{ stdenv
-, runCommand
-, fetchFromGitHub
-, pulseaudio
-, pkg-config
-, ffmpeg
-, patchelf
-, fdk_aac
-, libtool
-, ldacbt
-, cmake
-, bluez
-, dbus
-, sbc
-, lib
-}:
-
-let
-  pulseSources = runCommand "pulseaudio-sources" {} ''
-    mkdir $out
-    if [ -d ${pulseaudio.src} ]; then
-      ln -s ${pulseaudio.src}/* $out/
-    else
-      tar -xf ${pulseaudio.src}
-      mv pulseaudio*/* $out/
-    fi
-  '';
-
-in stdenv.mkDerivation rec {
-  pname = "pulseaudio-modules-bt";
-  version = "1.4";
-
-  src = fetchFromGitHub {
-    owner = "EHfive";
-    repo = "pulseaudio-modules-bt";
-    rev = "v${version}";
-    sha256 = "0bzg6x405j39axnkvc6n6vkl1hv1frk94y1i9sl170081bk23asd";
-  };
-
-  patches = [
-    ./fix-install-path.patch
-  ];
-
-  nativeBuildInputs = [
-    pkg-config
-    patchelf
-    cmake
-  ];
-
-  buildInputs = [
-    pulseaudio
-    ffmpeg
-    fdk_aac
-    libtool
-    ldacbt
-    bluez
-    dbus
-    sbc
-  ];
-
-  postPatch = ''
-    # Upstream bundles pulseaudio as a submodule
-    rm -r pa
-    ln -s ${pulseSources} pa
-
-    # Pulseaudio version is detected with a -rebootstrapped suffix which build system assumptions
-    substituteInPlace config.h.in --replace PulseAudio_VERSION ${pulseaudio.version}
-    substituteInPlace CMakeLists.txt --replace '${"\${PULSE_DIR}"}' ${pulseaudio.pulseDir}
-
-    # Fraunhofer recommends to enable afterburner but upstream has it set to false by default
-    substituteInPlace src/modules/bluetooth/a2dp/a2dp_aac.c \
-      --replace "info->aac_afterburner = false;" "info->aac_afterburner = true;"
-  '';
-
-  postFixup = ''
-    for so in $out/lib/pulse-${pulseaudio.version}/modules/*.so; do
-      orig_rpath=$(patchelf --print-rpath "$so")
-      patchelf \
-        --set-rpath "${ldacbt}/lib:${lib.getLib ffmpeg}/lib:$out/${pulseaudio.pulseDir}/modules:$orig_rpath" \
-        "$so"
-    done
-  '';
-
-  meta = with lib; {
-    homepage = "https://github.com/EHfive/pulseaudio-modules-bt";
-    description = "LDAC, aptX, aptX HD, AAC codecs (A2DP Audio) support for Linux PulseAudio";
-    platforms = platforms.linux;
-    license = licenses.mit;
-    maintainers = with maintainers; [ adisbladis ];
-  };
-}
diff --git a/pkgs/applications/audio/pulseaudio-modules-bt/fix-install-path.patch b/pkgs/applications/audio/pulseaudio-modules-bt/fix-install-path.patch
deleted file mode 100644
index 7cdb7de4dd13e..0000000000000
--- a/pkgs/applications/audio/pulseaudio-modules-bt/fix-install-path.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 8d20dbf..63fe7ba 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -213,5 +213,4 @@ INSTALL(TARGETS
-         module-bluez5-device
-         module-bluetooth-discover
-         module-bluetooth-policy
--        LIBRARY DESTINATION ${PulseAudio_modlibexecdir})
--
-+        LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${PULSE_DIR}/modules/)
diff --git a/pkgs/applications/audio/qpwgraph/default.nix b/pkgs/applications/audio/qpwgraph/default.nix
index 860eca652e7a5..e415798b46049 100644
--- a/pkgs/applications/audio/qpwgraph/default.nix
+++ b/pkgs/applications/audio/qpwgraph/default.nix
@@ -5,14 +5,14 @@
 
 mkDerivation rec {
   pname = "qpwgraph";
-  version = "0.2.2";
+  version = "0.2.5";
 
   src = fetchFromGitLab {
     domain = "gitlab.freedesktop.org";
     owner = "rncbc";
     repo = "qpwgraph";
     rev = "v${version}";
-    sha256 = "sha256-BBvF1L3IqkYqSghHxcbwOBizdu6GtxaWof3Q/bc+aTY=";
+    sha256 = "sha256-OYIBlTO1vXmmY4/ZacvsEQ5EnOfetBvnG2v5xL44czY=";
   };
 
   nativeBuildInputs = [ cmake pkg-config ];
@@ -29,6 +29,6 @@ mkDerivation rec {
     homepage = "https://gitlab.freedesktop.org/rncbc/qpwgraph";
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
-    maintainers = with maintainers; [ kanashimia ];
+    maintainers = with maintainers; [ kanashimia exi ];
   };
 }
diff --git a/pkgs/applications/audio/sfizz/default.nix b/pkgs/applications/audio/sfizz/default.nix
index 54acc782c6037..aaa79bd3e3922 100644
--- a/pkgs/applications/audio/sfizz/default.nix
+++ b/pkgs/applications/audio/sfizz/default.nix
@@ -1,6 +1,7 @@
 { lib, stdenv, fetchFromGitHub, libjack2, libsndfile, xorg, freetype
 , libxkbcommon, cairo, glib, gnome, flac, libogg, libvorbis, libopus, cmake
-, pango, pkg-config }:
+, pango, pkg-config, catch2
+}:
 
 stdenv.mkDerivation rec {
   pname = "sfizz";
@@ -40,6 +41,8 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ cmake pkg-config ];
 
   postPatch = ''
+    cp ${catch2}/include/catch2/catch.hpp tests/catch2/catch.hpp
+
     substituteInPlace plugins/editor/external/vstgui4/vstgui/lib/platform/linux/x11fileselector.cpp \
       --replace 'zenitypath = "zenity"' 'zenitypath = "${gnome.zenity}/bin/zenity"'
     substituteInPlace plugins/editor/src/editor/NativeHelpers.cpp \
@@ -48,6 +51,8 @@ stdenv.mkDerivation rec {
 
   cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" "-DSFIZZ_TESTS=ON" ];
 
+  doCheck = true;
+
   meta = with lib; {
     homepage = "https://github.com/sfztools/sfizz";
     description = "SFZ jack client and LV2 plugin";
diff --git a/pkgs/applications/audio/sfxr-qt/default.nix b/pkgs/applications/audio/sfxr-qt/default.nix
index 0ffd754c04766..2b264cfd56b99 100644
--- a/pkgs/applications/audio/sfxr-qt/default.nix
+++ b/pkgs/applications/audio/sfxr-qt/default.nix
@@ -8,6 +8,7 @@
 , qtquickcontrols2
 , SDL
 , python3
+, catch2
 , callPackage
 , nixosTests
 }:
@@ -24,6 +25,10 @@ mkDerivation rec {
     fetchSubmodules = true;
   };
 
+  postPatch = ''
+    cp ${catch2}/include/catch2/catch.hpp 3rdparty/catch2/single_include/catch2/catch.hpp
+  '';
+
   # Remove on next release
   patches = [(fetchpatch {
     name = "sfxr-qr-missing-qpainterpath-include";
@@ -43,6 +48,8 @@ mkDerivation rec {
     SDL
   ];
 
+  doCheck = true;
+
   passthru.tests = {
     export-square-wave = callPackage ./test-export-square-wave {};
     sfxr-qt-starts = nixosTests.sfxr-qt;
diff --git a/pkgs/applications/audio/shortwave/default.nix b/pkgs/applications/audio/shortwave/default.nix
index 49492d05d15f1..4642565e678ea 100644
--- a/pkgs/applications/audio/shortwave/default.nix
+++ b/pkgs/applications/audio/shortwave/default.nix
@@ -14,28 +14,29 @@
 , ninja
 , openssl
 , pkg-config
-, python3
 , rustPlatform
 , sqlite
-, wrapGAppsHook
+, wrapGAppsHook4
+, cmake
+, libshumate
 }:
 
 stdenv.mkDerivation rec {
   pname = "shortwave";
-  version = "2.0.1";
+  version = "3.0.0";
 
   src = fetchFromGitLab {
     domain = "gitlab.gnome.org";
     owner = "World";
     repo = "Shortwave";
     rev = version;
-    sha256 = "sha256-25qPb7qlqCwYJzl4qZxAZYx5asxSlXBlc/0dGyBdk1o=";
+    sha256 = "sha256-qwk63o9pfqpAm6l9ioj3RccacemQU8R6LF6El4yHkjQ";
   };
 
   cargoDeps = rustPlatform.fetchCargoTarball {
     inherit src;
     name = "${pname}-${version}";
-    hash = "sha256-00dQXcSNmdZb2nSLG3q7jm4sugF9XR4LbH0OmcuHVxA=";
+    hash = "sha256-YrB322nv9CgZqt5//VMvVwjWA51ePlX2PI6raRJGBxA=";
   };
 
   nativeBuildInputs = [
@@ -46,11 +47,11 @@ stdenv.mkDerivation rec {
     meson
     ninja
     pkg-config
-    python3
     rustPlatform.rust.cargo
     rustPlatform.cargoSetupHook
     rustPlatform.rust.rustc
-    wrapGAppsHook
+    wrapGAppsHook4
+    cmake
   ];
 
   buildInputs = [
@@ -61,6 +62,7 @@ stdenv.mkDerivation rec {
     libadwaita
     openssl
     sqlite
+    libshumate
   ] ++ (with gst_all_1; [
     gstreamer
     gst-plugins-base
@@ -68,10 +70,6 @@ stdenv.mkDerivation rec {
     gst-plugins-bad
   ]);
 
-  postPatch = ''
-    patchShebangs build-aux/meson/postinstall.py
-  '';
-
   meta = with lib; {
     homepage = "https://gitlab.gnome.org/World/Shortwave";
     description = "Find and listen to internet radio stations";
@@ -80,7 +78,6 @@ stdenv.mkDerivation rec {
       desktop. It is the successor to the older Gradio application.
     '';
     maintainers = with maintainers; [ lasandell ];
-    broken = true; # incompatible with latest libadwaita
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
   };
diff --git a/pkgs/applications/audio/sonixd/default.nix b/pkgs/applications/audio/sonixd/default.nix
new file mode 100644
index 0000000000000..961fa2c8c1cd1
--- /dev/null
+++ b/pkgs/applications/audio/sonixd/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, fetchurl
+, appimageTools
+}:
+
+appimageTools.wrapType2 rec {
+  pname = "sonixd";
+  version = "0.15.1";
+
+  src = fetchurl {
+    url = "https://github.com/jeffvli/sonixd/releases/download/v${version}/Sonixd-${version}-linux-x86_64.AppImage";
+    sha256 = "sha256-23WU1nwvrzyw0J+Pplm3JbsScjJxu+RhmwVoe/PjozY=";
+  };
+
+  extraInstallCommands = ''
+    mv $out/bin/sonixd-${version} $out/bin/sonixd
+  '';
+
+  meta = with lib; {
+    description = "Full-featured Subsonic/Jellyfin compatible desktop music player";
+    homepage = "https://github.com/jeffvli/sonixd";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ onny ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
+
diff --git a/pkgs/applications/audio/soundwireserver/default.nix b/pkgs/applications/audio/soundwireserver/default.nix
index 17660599b6890..db8d28989b27a 100755
--- a/pkgs/applications/audio/soundwireserver/default.nix
+++ b/pkgs/applications/audio/soundwireserver/default.nix
@@ -34,6 +34,7 @@ qt5.mkDerivation {
     description = "Turn your Android device into wireless headphones / wireless speaker";
     homepage = "https://georgielabs.net/";
     maintainers = with maintainers; [ mkg20001 ];
+    platforms = [ "x86_64-linux" ];
     license = licenses.unfree;
   };
 }
diff --git a/pkgs/applications/audio/spot/default.nix b/pkgs/applications/audio/spot/default.nix
index 3fe3b0d06d31d..7dab868b941a4 100644
--- a/pkgs/applications/audio/spot/default.nix
+++ b/pkgs/applications/audio/spot/default.nix
@@ -21,19 +21,19 @@
 
 stdenv.mkDerivation rec {
   pname = "spot";
-  version = "0.3.1";
+  version = "0.3.3";
 
   src = fetchFromGitHub {
     owner = "xou816";
     repo = "spot";
     rev = version;
-    hash = "sha256-uZzylK9imEazwC/ogsDO8ZBvByE5/SNSV+mIlp7Z9Ww=";
+    hash = "sha256-0iuLZq9FSxaOchxx6LzGwpY8qnOq2APl/qkBYzEV2uw=";
   };
 
   cargoDeps = rustPlatform.fetchCargoTarball {
     inherit src;
     name = "${pname}-${version}";
-    hash = "sha256-v5xdlsI6OlEpCYOTFePTyI8BkIrAwT6FR2JwiRTGgOA=";
+    hash = "sha256-g46BkrTv6tdrGe/p245O4cBoPjbvyRP7U6hH1Hp4ja0=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/applications/audio/spotify-tui/default.nix b/pkgs/applications/audio/spotify-tui/default.nix
index 7395ca85d9f6d..055034df4ce2e 100644
--- a/pkgs/applications/audio/spotify-tui/default.nix
+++ b/pkgs/applications/audio/spotify-tui/default.nix
@@ -31,5 +31,6 @@ rustPlatform.buildRustPackage rec {
     changelog = "https://github.com/Rigellute/spotify-tui/blob/v${version}/CHANGELOG.md";
     license = licenses.mit;
     maintainers = with maintainers; [ jwijenbergh ];
+    mainProgram = "spt";
   };
 }
diff --git a/pkgs/applications/audio/strawberry/default.nix b/pkgs/applications/audio/strawberry/default.nix
index ee77144104c2e..1ea01353f80ab 100644
--- a/pkgs/applications/audio/strawberry/default.nix
+++ b/pkgs/applications/audio/strawberry/default.nix
@@ -72,6 +72,7 @@ mkDerivation rec {
   ] ++ lib.optionals withGstreamer (with gst_all_1; [
     glib-networking
     gstreamer
+    gst-libav
     gst-plugins-base
     gst-plugins-good
     gst-plugins-bad
diff --git a/pkgs/applications/audio/whipper/default.nix b/pkgs/applications/audio/whipper/default.nix
index a7a8f054172cd..f06907ad32f2c 100644
--- a/pkgs/applications/audio/whipper/default.nix
+++ b/pkgs/applications/audio/whipper/default.nix
@@ -8,6 +8,8 @@
 , flac
 , sox
 , util-linux
+, testers
+, whipper
 }:
 
 let
@@ -45,6 +47,7 @@ in python3.pkgs.buildPythonApplication rec {
     ruamel-yaml
     discid
     pillow
+    setuptools
   ];
 
   buildInputs = [ libsndfile ];
@@ -71,6 +74,11 @@ in python3.pkgs.buildPythonApplication rec {
     runHook postCheck
   '';
 
+  passthru.tests.version = testers.testVersion {
+    package = whipper;
+    command = "HOME=$TMPDIR whipper --version";
+  };
+
   meta = with lib; {
     homepage = "https://github.com/whipper-team/whipper";
     description = "A CD ripper aiming for accuracy over speed";
diff --git a/pkgs/applications/audio/x42-plugins/default.nix b/pkgs/applications/audio/x42-plugins/default.nix
index 0a6ad4bdc4cde..4e2bb5600d3bc 100644
--- a/pkgs/applications/audio/x42-plugins/default.nix
+++ b/pkgs/applications/audio/x42-plugins/default.nix
@@ -3,12 +3,12 @@
 , libGLU, lv2, gtk2, cairo, pango, fftwFloat, zita-convolver }:
 
 stdenv.mkDerivation rec {
-  version = "20220107";
+  version = "20220327";
   pname = "x42-plugins";
 
   src = fetchurl {
     url = "https://gareus.org/misc/x42-plugins/${pname}-${version}.tar.xz";
-    sha256 = "sha256-+lzgkRQHe6moid3h6az/iqt2XL5vbyM0BjSTwMBvd3I=";
+    sha256 = "sha256-IhuPqTlCbCxExT5B9Au42RQQl4sDEvz6+HhsuT02KVs=";
   };
 
   nativeBuildInputs = [ pkg-config ];