diff options
Diffstat (limited to 'yellowsquid')
-rw-r--r-- | yellowsquid/packages/patches/nerd-dictation-setup.patch | 52 | ||||
-rw-r--r-- | yellowsquid/packages/patches/vosk-makefile.patch | 102 | ||||
-rw-r--r-- | yellowsquid/packages/vosk.scm | 136 |
3 files changed, 290 insertions, 0 deletions
diff --git a/yellowsquid/packages/patches/nerd-dictation-setup.patch b/yellowsquid/packages/patches/nerd-dictation-setup.patch new file mode 100644 index 0000000..9693d02 --- /dev/null +++ b/yellowsquid/packages/patches/nerd-dictation-setup.patch @@ -0,0 +1,52 @@ +diff --git a/pyproject.toml b/pyproject.toml +index c228223..62cbcb4 100644 +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -1,2 +1,17 @@ ++[project] ++name = "nerd-dictation" ++version = "0.0.1" ++description = "Offline text to speech" ++readme = "readme.rst" ++license = { text = "GPL-3.0-only" } ++dependencies = ["vosk>=0.3.32"] ++ ++[project.scripts] ++nerd-dictation = "nerd_dictation:main" ++ + [tool.black] + line-length = 119 ++ ++[build-system] ++requires = ["setuptools>=61"] ++build-backend = "setuptools.build_meta" +diff --git a/setup.cfg b/setup.cfg +new file mode 100644 +index 0000000..ba8d818 +--- /dev/null ++++ b/setup.cfg +@@ -0,0 +1,15 @@ ++[metadata] ++name = nerd-dictation ++version = 0.0.1 ++description = Offline text to speech ++long_description = file: readme.rst ++license = GPL-3.0-only ++ ++[options] ++py_modules = nerd_dictation ++install_requires = ++ vosk>="0.3.32" ++ ++[options.entry_points] ++console_scripts = ++ nerd-dictation = nerd_dictation:main +diff --git a/setup.py b/setup.py +new file mode 100644 +index 0000000..6068493 +--- /dev/null ++++ b/setup.py +@@ -0,0 +1,3 @@ ++from setuptools import setup ++ ++setup() diff --git a/yellowsquid/packages/patches/vosk-makefile.patch b/yellowsquid/packages/patches/vosk-makefile.patch new file mode 100644 index 0000000..d590e89 --- /dev/null +++ b/yellowsquid/packages/patches/vosk-makefile.patch @@ -0,0 +1,102 @@ +diff --git a/src/Makefile b/src/Makefile +index bcadf09..4fd1ade 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -1,20 +1,11 @@ +-# Locations of the dependencies +-KALDI_ROOT?=$(HOME)/travis/kaldi +-OPENFST_ROOT?=$(KALDI_ROOT)/tools/openfst +-OPENBLAS_ROOT?=$(KALDI_ROOT)/tools/OpenBLAS/install +-MKL_ROOT?=/opt/intel/mkl +-CUDA_ROOT?=/usr/local/cuda +-# Math libraries +-HAVE_OPENBLAS_CLAPACK?=1 +-HAVE_MKL?=0 +-HAVE_ACCELERATE=0 +-HAVE_CUDA?=0 + # Compiler + CXX?=g++ + EXT?=so ++ + # Extra + EXTRA_CFLAGS?= + EXTRA_LDFLAGS?= ++OUTDIR?=. + + VOSK_SOURCES= \ + kaldi_recognizer.cc \ +@@ -30,60 +21,26 @@ VOSK_HEADERS= \ + spk_model.h \ + vosk_api.h + +-CFLAGS=-g -O3 -std=c++17 -fPIC -DFST_NO_DYNAMIC_LINKING \ +- -I. -I$(KALDI_ROOT)/src -I$(OPENFST_ROOT)/include $(EXTRA_CFLAGS) +- +-LIBS= \ +- $(KALDI_ROOT)/src/online2/kaldi-online2.a \ +- $(KALDI_ROOT)/src/decoder/kaldi-decoder.a \ +- $(KALDI_ROOT)/src/ivector/kaldi-ivector.a \ +- $(KALDI_ROOT)/src/gmm/kaldi-gmm.a \ +- $(KALDI_ROOT)/src/nnet3/kaldi-nnet3.a \ +- $(KALDI_ROOT)/src/tree/kaldi-tree.a \ +- $(KALDI_ROOT)/src/feat/kaldi-feat.a \ +- $(KALDI_ROOT)/src/lat/kaldi-lat.a \ +- $(KALDI_ROOT)/src/lm/kaldi-lm.a \ +- $(KALDI_ROOT)/src/rnnlm/kaldi-rnnlm.a \ +- $(KALDI_ROOT)/src/hmm/kaldi-hmm.a \ +- $(KALDI_ROOT)/src/transform/kaldi-transform.a \ +- $(KALDI_ROOT)/src/cudamatrix/kaldi-cudamatrix.a \ +- $(KALDI_ROOT)/src/matrix/kaldi-matrix.a \ +- $(KALDI_ROOT)/src/fstext/kaldi-fstext.a \ +- $(KALDI_ROOT)/src/util/kaldi-util.a \ +- $(KALDI_ROOT)/src/base/kaldi-base.a \ +- $(OPENFST_ROOT)/lib/libfst.a \ +- $(OPENFST_ROOT)/lib/libfstngram.a +- +- +-ifeq ($(HAVE_OPENBLAS_CLAPACK), 1) +- CFLAGS += -I$(OPENBLAS_ROOT)/include +- LIBS += \ +- $(OPENBLAS_ROOT)/lib/libopenblas.a \ +- $(OPENBLAS_ROOT)/lib/liblapack.a \ +- $(OPENBLAS_ROOT)/lib/libblas.a \ +- $(OPENBLAS_ROOT)/lib/libf2c.a +-endif ++CFLAGS=-g -O3 -std=c++17 -Wno-deprecated-declarations -fPIC -DFST_NO_DYNAMIC_LINKING \ ++ -I. $(EXTRA_CFLAGS) + +-ifeq ($(HAVE_MKL), 1) +- CFLAGS += -I$(MKL_ROOT)/include +- LIBS += -L$(MKL_ROOT)/lib/intel64 -Wl,-rpath=$(MKL_ROOT)/lib/intel64 -lmkl_rt -lmkl_intel_lp64 -lmkl_core -lmkl_sequential +-endif ++LDFLAGS= + +-ifeq ($(HAVE_ACCELERATE), 1) +- LIBS += -framework Accelerate +-endif ++LDFLAGS += \ ++ -lkaldi-online2 -lkaldi-decoder -lkaldi-ivector -lkaldi-gmm -lkaldi-tree \ ++ -lkaldi-feat -lkaldi-lat -lkaldi-lm -lkaldi-rnnlm -lkaldi-hmm -lkaldi-nnet3 \ ++ -lkaldi-transform -lkaldi-cudamatrix -lkaldi-matrix -lkaldi-fstext \ ++ -lkaldi-util -lkaldi-base -lfst -lfstngram + +-ifeq ($(HAVE_CUDA), 1) +- CFLAGS+=-DHAVE_CUDA=1 -I$(CUDA_ROOT)/include +- LIBS+=-L$(CUDA_ROOT)/lib64 -lcublas -lcusparse -lcudart -lcurand -lcufft -lcusolver -lnvToolsExt +-endif ++# HAVE_OPENBLAS_CLAPACK ++LDFLAGS += -lopenblas -llapack -lblas -lf2c + +-all: libvosk.$(EXT) ++all: $(OUTDIR)/libvosk.$(EXT) + +-libvosk.$(EXT): $(VOSK_SOURCES:.cc=.o) +- $(CXX) --shared -s -o $@ $^ $(LIBS) -lm -latomic $(EXTRA_LDFLAGS) ++$(OUTDIR)/libvosk.$(EXT): $(VOSK_SOURCES:%.cc=$(OUTDIR)/%.o) $(LIBS) ++ $(CXX) --shared -s -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) + +-%.o: %.cc $(VOSK_HEADERS) ++$(OUTDIR)/%.o: %.cc $(VOSK_HEADERS) + $(CXX) $(CFLAGS) -c -o $@ $< + + clean: diff --git a/yellowsquid/packages/vosk.scm b/yellowsquid/packages/vosk.scm new file mode 100644 index 0000000..80a224e --- /dev/null +++ b/yellowsquid/packages/vosk.scm @@ -0,0 +1,136 @@ +(define-module (yellowsquid packages vosk) + #:use-module (gnu packages) + #:use-module (gnu packages audio) + #:use-module (gnu packages libffi) + #:use-module (gnu packages machine-learning) + #:use-module (gnu packages maths) + #:use-module (gnu packages python) + #:use-module (gnu packages python-build) + #:use-module (gnu packages xdisorg) + #:use-module (guix build-system python) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix git-download) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (srfi srfi-26)) + +(define-public openfst-1.7.2 + (package + (inherit openfst) + (version "1.7.2") + (source (origin + (method url-fetch) + (uri (string-append "http://www.openfst.org/twiki/pub/FST/" + "FstDownload/openfst-" version ".tar.gz")) + (sha256 + (base32 + "0fqgk8195kz21is09gwzwnrg7fr9526bi9mh4apyskapz27pbhr1")))))) + +(define-public openfst-1.7.2+far+lookahead+ngram + (package + (inherit openfst-1.7.2) + (version "1.7.2+far+lookahead+ngram") + (arguments + (cons* #:configure-flags + ''("--enable-far" + "--enable-ngram-fsts" + "--enable-lookahead-fsts") + (package-arguments openfst-1.7.2))))) + +(define-public kaldi-501de70 + (let ((commit "501de7066f24375fce5f9558a931381886a294e1") + (revision "3")) + (package + (inherit kaldi) + (version (git-version "0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/kaldi-asr/kaldi") + (commit commit))) + (file-name (git-file-name "kaldi" version)) + (sha256 + (base32 + "055znh22c0ppvnpb3av8b3brqff6rcbnyx9l414zn989c8a6h55k")))) + (inputs (modify-inputs (package-inputs kaldi) + (replace "openfst" openfst-1.7.2)))))) + +(define-public python-vosk + (package + (name "python-vosk") + (version "0.3.32") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/alphacep/vosk-api") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1inmw0wd0zvbz83cwk6x8svwycgxzzd9vd0n12xgjc4ypqlk8fk9")) + (patches + (parameterize ((%patch-path (map (cut string-append <> "/yellowsquid/packages/patches") %load-path))) + (search-patches "vosk-makefile.patch"))))) + (build-system python-build-system) + (inputs (list openfst-1.7.2+far+lookahead+ngram + kaldi-501de70 + openblas + clapack + python-cffi)) + (native-inputs (list python-wheel)) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-before 'build 'build-shared-library + (lambda* (#:key (make-flags '()) (parallel-build? #t) #:allow-other-keys) + (with-directory-excursion "src" + (apply invoke "make" + `(,@(if parallel-build? + `("-j" ,(number->string (parallel-job-count))) + '()) + ,@make-flags))))) + (add-after 'build-shared-library 'goto-python-dir + (lambda _ (chdir "python")))))) + (home-page "https://alphacephei.com/vosk/install") + (synopsis "Speech recognition toolkit") + (description "Vosk is a speech recognition toolkit with bindings in various +programming languages.") + (license license:asl2.0))) + +(define-public nerd-dictation + (let ((commit "a574dddb422010389c2f3a5cd84ed685738b7a4c") + (revision "1")) + (package + (name "nerd-dictation") + (version (git-version "0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ideasman42/nerd-dictation") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1lx8lgsqgs8qrss583wcyk7n0hv3xyr7wrwnvxhfjvpjx6jflmmx")) + (patches (parameterize ((%patch-path (map (cut string-append <> "/yellowsquid/packages/patches") %load-path))) + (search-patches "nerd-dictation-setup.patch")) ) + (snippet #~(rename-file "nerd-dictation" "nerd_dictation.py")))) + (build-system python-build-system) + (arguments + (list + #:phases + #~(begin + (use-modules (ice-9 format)) + (modify-phases %standard-phases + (add-before 'build 'patch-xdotool + (lambda _ + (substitute* "nerd_dictation.py" + (("cmd_base = \"xdotool\"") + (format #f "cmd_base = \"~a/bin/xdotool\"" #$(this-package-input "xdotool")))))))))) + (inputs (list python-cffi python-vosk xdotool)) + (home-page "https://github.com/ideasman42/nerd-dictation") + (synopsis "Offline text to speech") + (description "This is a utility that provides simple access speech to text +for using in Linux without being tied to a desktop environment.") + (license license:gpl3)))) |