about summary refs log tree commit diff
path: root/pkgs/tools/audio
diff options
context:
space:
mode:
authorCharles Strahan <charles.c.strahan@gmail.com>2015-01-20 20:21:03 -0500
committerCharles Strahan <charles.c.strahan@gmail.com>2015-01-20 20:21:03 -0500
commitdfc225d143142764daf2c1e933e7303a82f7b0cd (patch)
tree351925e835e82d7f7d20a7eb8567b5a2aaa658c7 /pkgs/tools/audio
parentbd5374664663bbf1c2675c100eee8cfe14c6d148 (diff)
parentc55b5eb245198cf3fa58e477a301c90f754f6682 (diff)
downloadnixlib-dfc225d143142764daf2c1e933e7303a82f7b0cd.tar
nixlib-dfc225d143142764daf2c1e933e7303a82f7b0cd.tar.gz
nixlib-dfc225d143142764daf2c1e933e7303a82f7b0cd.tar.bz2
nixlib-dfc225d143142764daf2c1e933e7303a82f7b0cd.tar.lz
nixlib-dfc225d143142764daf2c1e933e7303a82f7b0cd.tar.xz
nixlib-dfc225d143142764daf2c1e933e7303a82f7b0cd.tar.zst
nixlib-dfc225d143142764daf2c1e933e7303a82f7b0cd.zip
Merge branch 'master' of github.com:nixos/nixpkgs into pleasant-ruby
Conflicts:
	pkgs/applications/version-management/git-and-tools/default.nix
	pkgs/applications/version-management/git-and-tools/hub/default.nix
	pkgs/tools/audio/mpdcron/default.nix
Diffstat (limited to 'pkgs/tools/audio')
-rw-r--r--pkgs/tools/audio/beets/default.nix178
-rw-r--r--pkgs/tools/audio/beets/mediafile-codec-fix.patch25
-rw-r--r--pkgs/tools/audio/beets/replaygain-default-audiotools.patch17
-rw-r--r--pkgs/tools/audio/beets/test-bucket-fix-year.patch23
-rw-r--r--pkgs/tools/audio/mpdcron/default.nix2
-rw-r--r--pkgs/tools/audio/qastools/default.nix29
6 files changed, 273 insertions, 1 deletions
diff --git a/pkgs/tools/audio/beets/default.nix b/pkgs/tools/audio/beets/default.nix
new file mode 100644
index 000000000000..7148ca620273
--- /dev/null
+++ b/pkgs/tools/audio/beets/default.nix
@@ -0,0 +1,178 @@
+{ stdenv, fetchFromGitHub, writeScript
+, buildPythonPackage, pythonPackages, python
+
+, enableAcoustid   ? true
+, enableBeatport   ? true
+, enableDiscogs    ? true
+, enableEchonest   ? true
+, enableFetchart   ? true
+, enableLastfm     ? true
+, enableMpd        ? true
+, enableReplaygain ? true
+, enableWeb        ? true
+
+, bashInteractive, bashCompletion
+}:
+
+assert enableAcoustid    -> pythonPackages.pyacoustid     != null;
+assert enableBeatport    -> pythonPackages.responses      != null;
+assert enableDiscogs     -> pythonPackages.discogs_client != null;
+assert enableEchonest    -> pythonPackages.pyechonest     != null;
+assert enableFetchart    -> pythonPackages.responses      != null;
+assert enableLastfm      -> pythonPackages.pylast         != null;
+assert enableMpd         -> pythonPackages.mpd            != null;
+assert enableReplaygain  -> pythonPackages.audiotools     != null;
+assert enableWeb         -> pythonPackages.flask          != null;
+
+with stdenv.lib;
+
+let
+  optionalPlugins = {
+    beatport = enableBeatport;
+    chroma = enableAcoustid;
+    discogs = enableDiscogs;
+    echonest = enableEchonest;
+    echonest_tempo = enableEchonest;
+    fetchart = enableFetchart;
+    lastgenre = enableLastfm;
+    lastimport = enableLastfm;
+    mpdstats = enableMpd;
+    mpdupdate = enableMpd;
+    replaygain = enableReplaygain;
+    web = enableWeb;
+  };
+
+  pluginsWithoutDeps = [
+    "bench" "bpd" "bpm" "bucket" "convert" "duplicates" "embedart" "freedesktop"
+    "fromfilename" "ftintitle" "fuzzy" "ihate" "importadded" "importfeeds"
+    "info" "inline" "keyfinder" "lyrics" "mbcollection" "mbsync" "missing"
+    "play" "random" "rewrite" "scrub" "smartplaylist" "spotify" "the" "types"
+    "zero"
+  ];
+
+  enabledOptionalPlugins = attrNames (filterAttrs (_: id) optionalPlugins);
+
+  allPlugins = pluginsWithoutDeps ++ attrNames optionalPlugins;
+  allEnabledPlugins = pluginsWithoutDeps ++ enabledOptionalPlugins;
+
+  # Discogs plugin wants to have an API token, so skip install checks.
+  allTestablePlugins = remove "discogs" allEnabledPlugins;
+
+  testShell = "${bashInteractive}/bin/bash --norc";
+  completion = "${bashCompletion}/share/bash-completion/bash_completion";
+
+in buildPythonPackage rec {
+  name = "beets-${version}";
+  version = "1.3.9";
+  namePrefix = "";
+
+  src = fetchFromGitHub {
+    owner = "sampsyo";
+    repo = "beets";
+    rev = "v${version}";
+    sha256 = "1srhkiyjqx6i3gn20ihf087l5pa77yh5b81ivc52lj491fda7xqk";
+  };
+
+  propagatedBuildInputs = [
+    pythonPackages.enum34
+    pythonPackages.munkres
+    pythonPackages.musicbrainzngs
+    pythonPackages.mutagen
+    pythonPackages.pyyaml
+    pythonPackages.unidecode
+    python.modules.sqlite3
+    python.modules.readline
+  ] ++ optional enableAcoustid                     pythonPackages.pyacoustid
+    ++ optional (enableBeatport || enableFetchart) pythonPackages.requests2
+    ++ optional enableDiscogs                      pythonPackages.discogs_client
+    ++ optional enableEchonest                     pythonPackages.pyechonest
+    ++ optional enableLastfm                       pythonPackages.pylast
+    ++ optional enableMpd                          pythonPackages.mpd
+    ++ optional enableReplaygain                   pythonPackages.audiotools
+    ++ optional enableWeb                          pythonPackages.flask;
+
+  buildInputs = with pythonPackages; [
+    beautifulsoup4
+    flask
+    mock
+    nose
+    pyechonest
+    pylast
+    rarfile
+    requests2
+    responses
+  ];
+
+  patches = [
+    ./mediafile-codec-fix.patch
+    ./replaygain-default-audiotools.patch
+    ./test-bucket-fix-year.patch
+  ];
+
+  postPatch = ''
+    sed -i -e '/assertIn.*item.*path/d' test/test_info.py
+    echo echo completion tests passed > test/test_completion.sh
+
+    sed -i -e '/^BASH_COMPLETION_PATHS *=/,/^])$/ {
+      /^])$/i u"${completion}"
+    }' beets/ui/commands.py
+  '';
+
+  doCheck = true;
+
+  preCheck = ''
+    (${concatMapStrings (s: "echo \"${s}\";") allPlugins}) \
+      | sort -u > plugins_defined
+    find beetsplug -mindepth 1 \
+      \! -path 'beetsplug/__init__.py' -a \
+      \( -name '*.py' -o -path 'beetsplug/*/__init__.py' \) -print \
+      | sed -n -re 's|^beetsplug/([^/.]+).*|\1|p' \
+      | sort -u > plugins_available
+
+    if ! mismatches="$(diff -y plugins_defined plugins_available)"; then
+      echo "The the list of defined plugins (left side) doesn't match" \
+           "the list of available plugins (right side):" >&2
+      echo "$mismatches" >&2
+      exit 1
+    fi
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+
+    BEETS_TEST_SHELL="${testShell}" \
+    BASH_COMPLETION_SCRIPT="${completion}" \
+    HOME="$(mktemp -d)" \
+      nosetests -v
+
+    runHook postCheck
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    tmphome="$(mktemp -d)"
+
+    EDITOR="${writeScript "beetconfig.sh" ''
+      #!${stdenv.shell}
+      cat > "$1" <<CFG
+      plugins: ${concatStringsSep " " allTestablePlugins}
+      musicbrainz:
+        user: dummy
+        pass: dummy
+      CFG
+    ''}" HOME="$tmphome" "$out/bin/beet" config -e
+    EDITOR=true HOME="$tmphome" "$out/bin/beet" config -e
+
+    runHook postInstallCheck
+  '';
+
+  meta = {
+    homepage = http://beets.radbox.org;
+    description = "Music tagger and library organizer";
+    license = stdenv.lib.licenses.mit;
+    maintainers = with stdenv.lib.maintainers; [ iElectric aszlig ];
+  };
+}
diff --git a/pkgs/tools/audio/beets/mediafile-codec-fix.patch b/pkgs/tools/audio/beets/mediafile-codec-fix.patch
new file mode 100644
index 000000000000..7eaa5e19590e
--- /dev/null
+++ b/pkgs/tools/audio/beets/mediafile-codec-fix.patch
@@ -0,0 +1,25 @@
+From 903e88a228d6bd93bd1884c59dd23dd9f04a1199 Mon Sep 17 00:00:00 2001
+From: Adrian Sampson <adrian@radbox.org>
+Date: Wed, 26 Nov 2014 19:04:40 -0800
+Subject: [PATCH] Fix codec reference in MediaFile (fix #1117)
+
+---
+ beets/mediafile.py | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/beets/mediafile.py b/beets/mediafile.py
+index ce42621..a459e09 100644
+--- a/beets/mediafile.py
++++ b/beets/mediafile.py
+@@ -1340,8 +1340,9 @@ def __init__(self, path, id3v23=False):
+             raise FileTypeError(path)
+         elif (type(self.mgfile).__name__ == 'M4A' or
+               type(self.mgfile).__name__ == 'MP4'):
+-            if hasattr(self.mgfile.info, 'codec'):
+-                if self.mgfile.codec and self.mgfile.codec.startswith('alac'):
++            info = self.mgfile.info
++            if hasattr(info, 'codec'):
++                if info.codec and info.codec.startswith('alac'):
+                     self.type = 'alac'
+                 else:
+                     self.type = 'aac'
diff --git a/pkgs/tools/audio/beets/replaygain-default-audiotools.patch b/pkgs/tools/audio/beets/replaygain-default-audiotools.patch
new file mode 100644
index 000000000000..d852ea6fecaa
--- /dev/null
+++ b/pkgs/tools/audio/beets/replaygain-default-audiotools.patch
@@ -0,0 +1,17 @@
+diff --git a/beetsplug/replaygain.py b/beetsplug/replaygain.py
+index 40b3a3a..9b54a5a 100644
+--- a/beetsplug/replaygain.py
++++ b/beetsplug/replaygain.py
+@@ -627,11 +627,10 @@ class ReplayGainPlugin(BeetsPlugin):
+         super(ReplayGainPlugin, self).__init__()
+         self.import_stages = [self.imported]
+ 
+-        # default backend is 'command' for backward-compatibility.
+         self.config.add({
+             'overwrite': False,
+             'auto': True,
+-            'backend': u'command',
++            'backend': u'audiotools',
+             'targetlevel': 89,
+         })
+ 
diff --git a/pkgs/tools/audio/beets/test-bucket-fix-year.patch b/pkgs/tools/audio/beets/test-bucket-fix-year.patch
new file mode 100644
index 000000000000..967476006a8e
--- /dev/null
+++ b/pkgs/tools/audio/beets/test-bucket-fix-year.patch
@@ -0,0 +1,23 @@
+From 80038e2a3fe6f5ac174a30f6fd01ebf8dd63e414 Mon Sep 17 00:00:00 2001
+From: Fabrice Laporte <kraymer@gmail.com>
+Date: Sat, 3 Jan 2015 23:03:29 +0100
+Subject: [PATCH] test_bucket: update test_year_single_year
+
+2015 was used as an example of date outside of [1970-current year] intervall which is not true anymore
+---
+ test/test_bucket.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/test/test_bucket.py b/test/test_bucket.py
+index 4610ec7..060c360 100644
+--- a/test/test_bucket.py
++++ b/test/test_bucket.py
+@@ -51,7 +51,7 @@ def test_year_single_year_last_folder(self):
+         year."""
+         self._setup_config(bucket_year=['1950', '1970'])
+         self.assertEqual(self.plugin._tmpl_bucket('2014'), '1970')
+-        self.assertEqual(self.plugin._tmpl_bucket('2015'), '2015')
++        self.assertEqual(self.plugin._tmpl_bucket('2025'), '2025')
+ 
+     def test_year_two_years(self):
+         """Buckets can be named with the 'from-to' syntax."""
diff --git a/pkgs/tools/audio/mpdcron/default.nix b/pkgs/tools/audio/mpdcron/default.nix
index a6fe1151b77d..535ac5378fca 100644
--- a/pkgs/tools/audio/mpdcron/default.nix
+++ b/pkgs/tools/audio/mpdcron/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchgit, autoconf, automake, libtool, pkgconfig, glib, libdaemon, buildRubyGem
-, mpd_clientlib, curl, sqlite, ruby, rubyPackages, libnotify, haskellPackages }:
+, mpd_clientlib, curl, sqlite, ruby, rubyPackages, libnotify, pandoc }:
 
 stdenv.mkDerivation rec {
   version = "20130809";
diff --git a/pkgs/tools/audio/qastools/default.nix b/pkgs/tools/audio/qastools/default.nix
new file mode 100644
index 000000000000..920f6913d090
--- /dev/null
+++ b/pkgs/tools/audio/qastools/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, cmake, alsaLib, udev, qt }:
+
+let
+  version = "0.18.1";
+in
+
+stdenv.mkDerivation {
+  name = "qastools-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/qastools/qastools_${version}.tar.bz2";
+    sha256 = "1sac6a0j1881wgpv4491b2f4jnhqkab6xyldmcg1wfqb5qkdgzvg";
+  };
+
+  buildInputs = [
+    cmake alsaLib udev qt
+  ];
+
+  cmakeFlags = [
+    "-DCMAKE_INSALL_PREFIX=$out"
+    "-DALSA_INCLUDE=${alsaLib}/include/alsa/version.h"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Collection of desktop applications for ALSA configuration";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}