From 5d4cb57ad10c725053b101538f3a8605ca7d478a Mon Sep 17 00:00:00 2001 From: davidak Date: Sat, 18 Jul 2020 11:57:39 +0200 Subject: [PATCH 1/2] mbrola: init at 3.3 Co-authored-by: Sandro --- pkgs/applications/audio/mbrola/default.nix | 39 ++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 41 insertions(+) create mode 100644 pkgs/applications/audio/mbrola/default.nix diff --git a/pkgs/applications/audio/mbrola/default.nix b/pkgs/applications/audio/mbrola/default.nix new file mode 100644 index 00000000000..01a9fdd636b --- /dev/null +++ b/pkgs/applications/audio/mbrola/default.nix @@ -0,0 +1,39 @@ +{ stdenv, lib, fetchFromGitHub }: + +let + voices = fetchFromGitHub { + owner = "numediart"; + repo = "MBROLA-voices"; + rev = "fe05a0ccef6a941207fd6aaad0b31294a1f93a51"; # using latest commit + sha256 = "1w0y2xjp9rndwdjagp2wxh656mdm3d6w9cs411g27rjyfy1205a0"; + }; +in +stdenv.mkDerivation rec { + pname = "mbrola"; + version = "3.3"; + + src = fetchFromGitHub { + owner = "numediart"; + repo = "MBROLA"; + rev = version; + sha256 = "1w86gv6zs2cbr0731n49z8v6xxw0g8b0hzyv2iqb9mqcfh38l8zy"; + }; + + installPhase = '' + runHook preInstall + install -D Bin/mbrola $out/bin/mbrola + + # TODO: package separately because it's very big + install -d $out/share/mbrola/voices + cp -R ${voices}/data/* $out/share/mbrola/voices/ + runHook postInstall + ''; + + meta = with lib; { + description = "Speech synthesizer based on the concatenation of diphones"; + homepage = "https://github.com/numediart/MBROLA"; + license = licenses.agpl3Plus; + maintainers = with maintainers; [ davidak ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c8322e5dbdf..660510db352 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -23571,6 +23571,8 @@ in mblaze = callPackage ../applications/networking/mailreaders/mblaze { }; + mbrola = callPackage ../applications/audio/mbrola { }; + mcomix3 = callPackage ../applications/graphics/mcomix3 {}; mcpp = callPackage ../development/compilers/mcpp { }; From bcfd64fc1a243072e933b6dde9b842ae02fa2aa0 Mon Sep 17 00:00:00 2001 From: davidak Date: Sat, 18 Jul 2020 11:57:39 +0200 Subject: [PATCH 2/2] espeak-ng: add mbrola support --- pkgs/applications/audio/espeak-ng/default.nix | 20 ++++++++++++++--- .../applications/audio/espeak-ng/mbrola.patch | 22 +++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 pkgs/applications/audio/espeak-ng/mbrola.patch diff --git a/pkgs/applications/audio/espeak-ng/default.nix b/pkgs/applications/audio/espeak-ng/default.nix index 50d7af6d116..44d5a0aa15a 100644 --- a/pkgs/applications/audio/espeak-ng/default.nix +++ b/pkgs/applications/audio/espeak-ng/default.nix @@ -1,5 +1,6 @@ { stdenv, lib, fetchFromGitHub, autoconf, automake, which, libtool, pkg-config -, ronn +, ronn, substituteAll +, mbrolaSupport ? true, mbrola , pcaudiolibSupport ? true, pcaudiolib , sonicSupport ? true, sonic }: @@ -14,13 +15,26 @@ stdenv.mkDerivation rec { sha256 = "0jkqhf2h94vbqq7mg7mmm23bq372fa7mdk941my18c3vkldcir1b"; }; + patches = lib.optionals mbrolaSupport [ + # Hardcode correct mbrola paths. + (substituteAll { + src = ./mbrola.patch; + inherit mbrola; + }) + ]; + nativeBuildInputs = [ autoconf automake which libtool pkg-config ronn ]; - buildInputs = lib.optional pcaudiolibSupport pcaudiolib + buildInputs = lib.optional mbrolaSupport mbrola + ++ lib.optional pcaudiolibSupport pcaudiolib ++ lib.optional sonicSupport sonic; preConfigure = "./autogen.sh"; + configureFlags = [ + "--with-mbrola=${if mbrolaSupport then "yes" else "no"}" + ]; + postInstall = lib.optionalString stdenv.isLinux '' patchelf --set-rpath "$(patchelf --print-rpath $out/bin/espeak-ng)" $out/bin/speak-ng ''; @@ -29,7 +43,7 @@ stdenv.mkDerivation rec { description = "Open source speech synthesizer that supports over 70 languages, based on eSpeak"; homepage = "https://github.com/espeak-ng/espeak-ng"; changelog = "https://github.com/espeak-ng/espeak-ng/blob/${version}/CHANGELOG.md"; - license = licenses.gpl3; + license = licenses.gpl3Plus; maintainers = with maintainers; [ aske ]; platforms = platforms.all; }; diff --git a/pkgs/applications/audio/espeak-ng/mbrola.patch b/pkgs/applications/audio/espeak-ng/mbrola.patch new file mode 100644 index 00000000000..2f6c61cca4e --- /dev/null +++ b/pkgs/applications/audio/espeak-ng/mbrola.patch @@ -0,0 +1,22 @@ +--- a/src/libespeak-ng/mbrowrap.c ++++ b/src/libespeak-ng/mbrowrap.c +@@ -205,7 +205,7 @@ + signal(SIGTERM, SIG_IGN); + + snprintf(charbuf, sizeof(charbuf), "%g", mbr_volume); +- execlp("mbrola", "mbrola", "-e", "-v", charbuf, ++ execlp("@mbrola@/bin/mbrola", "mbrola", "-e", "-v", charbuf, + voice_path, "-", "-.wav", (char *)NULL); + /* if execution reaches this point then the exec() failed */ + snprintf(mbr_errorbuf, sizeof(mbr_errorbuf), +--- a/src/libespeak-ng/synth_mbrola.c ++++ b/src/libespeak-ng/synth_mbrola.c +@@ -85,7 +85,7 @@ + if (!load_MBR()) + return ENS_MBROLA_NOT_FOUND; + +- sprintf(path, "%s/mbrola/%s", path_home, mbrola_voice); ++ sprintf(path, "@mbrola@/share/mbrola/voices/%s/%s", mbrola_voice, mbrola_voice); + #ifdef PLATFORM_POSIX + // if not found, then also look in + // usr/share/mbrola/xx, /usr/share/mbrola/xx/xx, /usr/share/mbrola/voices/xx