This repository has no description
1.2 kB
45 lines
1{ pkgs, ... }:
2let
3 model = pkgs.runCommand "model" { } ''
4 mkdir -p $out
5 ln -s ${
6 pkgs.fetchurl {
7 url = "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_US/libritts/high/en_US-libritts-high.onnx?download=true";
8 hash = "sha256-kSelWeEWA/ELNm0aIKx0JoJggdvFId5MJCDFdyjXPw8=";
9 }
10 } $out/model.onnx
11 ln -s ${
12 pkgs.fetchurl {
13 url = "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_US/libritts/high/en_US-libritts-high.onnx.json?download=true.json";
14 hash = "sha256-Lv3G1/lUWIuBgBMsvZuAAZM/3QCTLJK8kv0NICip6z0=";
15 }
16 } $out/model.onnx.json
17 '';
18
19 tts = pkgs.writers.writeBashBin "tts" ''
20 set -efu
21 set -x
22
23 offset=0
24 OUTPUT=$(mktemp -d)
25 trap 'rm -rf "$OUTPUT"' EXIT
26 SPEAKER=$[ $RANDOM % 900 ]
27 while read line; do
28 echo "$line" |
29 ${pkgs.piper-tts}/bin/piper \
30 --model ${model}/model.onnx \
31 -s "$SPEAKER" \
32 -f "$OUTPUT"/"$offset".wav >/dev/null
33
34 ((offset+=1))
35 done
36
37 ${pkgs.sox}/bin/sox "$OUTPUT"/*.wav "$OUTPUT"/all.wav
38 cat "$OUTPUT"/all.wav
39 '';
40in
41{
42 environment.systemPackages = [
43 tts
44 ];
45}