svox: add package
Signed-off-by: Alessandro Di Marco <dmr@ethzero.com>
This commit is contained in:
parent
3505f198bb
commit
1a82f58f8e
|
@ -0,0 +1,60 @@
|
|||
#
|
||||
# Copyright (C) 2015 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=svox
|
||||
PKG_VERSION:=1.0+git20130326
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).orig.tar.gz
|
||||
PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/non-free/s/svox
|
||||
PKG_MD5SUM:=df4bf610ff4273b420e80ff64af93130
|
||||
|
||||
PKG_MAINTAINER:=Alessandro Di Marco <dmr@ethzero.com>
|
||||
PKG_LICENSE:=Apache-2.0
|
||||
PKG_LICENSE_FILES:=
|
||||
|
||||
PKG_FIXUP:=autoreconf
|
||||
PKG_INSTALL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/svox
|
||||
TITLE:=SVOX PicoTTS text-to-speech engine
|
||||
SECTION:=sound
|
||||
CATEGORY:=Sound
|
||||
URL:=https://android.googlesource.com/platform/external/svox/
|
||||
DEPENDS:=+libpopt
|
||||
endef
|
||||
|
||||
define Package/svox/description
|
||||
SVOX is an embedded speech technology company founded in 2000 and
|
||||
headquartered in Zurich, Switzerland. SVOX was acquired by Nuance
|
||||
Communications in 2011. Company's products included Automated Speech
|
||||
Recognition (ASR), Text-to-Speech (TTS) and Speech Dialog systems,
|
||||
with customers mostly being manufacturers and system integrators in
|
||||
automotive and mobile device industries.
|
||||
SVOX TTS technology is characterized by natural and clear sound as well
|
||||
as unique polyglot capability - the same voice can speak multiple
|
||||
languages like a native speaker.
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
$(call Build/Prepare/Default)
|
||||
mv $(PKG_BUILD_DIR)/pico/* $(PKG_BUILD_DIR)
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
$(call Build/Configure/Default)
|
||||
endef
|
||||
|
||||
define Package/svox/install
|
||||
$(call Build/Install/Default)
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,svox))
|
|
@ -0,0 +1,113 @@
|
|||
From 9fe1aa475b2667446b081623abc5c6f6083a76e6 Mon Sep 17 00:00:00 2001
|
||||
From: Mathieu Parent <math.parent@gmail.com>
|
||||
Date: Sat, 24 Oct 2009 17:03:37 +0200
|
||||
Subject: [PATCH 1/7] autoconf building of library (using libtool)
|
||||
|
||||
---
|
||||
pico/Makefile.am | 36 ++++++++++++++++++++++++++++++++++++
|
||||
pico/autogen.sh | 36 ++++++++++++++++++++++++++++++++++++
|
||||
pico/configure.in | 16 ++++++++++++++++
|
||||
3 files changed, 88 insertions(+), 0 deletions(-)
|
||||
create mode 100644 pico/Makefile.am
|
||||
create mode 100755 pico/autogen.sh
|
||||
create mode 100644 pico/configure.in
|
||||
|
||||
--- /dev/null
|
||||
+++ b/pico/Makefile.am
|
||||
@@ -0,0 +1,36 @@
|
||||
+## Makefile.am -- Process this file with automake to produce Makefile.in
|
||||
+
|
||||
+ACLOCAL_AMFLAGS = -I m4
|
||||
+
|
||||
+lib_LTLIBRARIES = libttspico.la
|
||||
+libttspico_la_SOURCES = \
|
||||
+ lib/picoacph.c \
|
||||
+ lib/picoapi.c \
|
||||
+ lib/picobase.c \
|
||||
+ lib/picocep.c \
|
||||
+ lib/picoctrl.c \
|
||||
+ lib/picodata.c \
|
||||
+ lib/picodbg.c \
|
||||
+ lib/picoextapi.c \
|
||||
+ lib/picofftsg.c \
|
||||
+ lib/picokdbg.c \
|
||||
+ lib/picokdt.c \
|
||||
+ lib/picokfst.c \
|
||||
+ lib/picoklex.c \
|
||||
+ lib/picoknow.c \
|
||||
+ lib/picokpdf.c \
|
||||
+ lib/picokpr.c \
|
||||
+ lib/picoktab.c \
|
||||
+ lib/picoos.c \
|
||||
+ lib/picopal.c \
|
||||
+ lib/picopam.c \
|
||||
+ lib/picopr.c \
|
||||
+ lib/picorsrc.c \
|
||||
+ lib/picosa.c \
|
||||
+ lib/picosig.c \
|
||||
+ lib/picosig2.c \
|
||||
+ lib/picospho.c \
|
||||
+ lib/picotok.c \
|
||||
+ lib/picotrns.c \
|
||||
+ lib/picowa.c
|
||||
+
|
||||
--- /dev/null
|
||||
+++ b/pico/autogen.sh
|
||||
@@ -0,0 +1,38 @@
|
||||
+#!/bin/sh
|
||||
+
|
||||
+#created by aclocal
|
||||
+rm -rf autom4te.cache
|
||||
+rm -f aclocal.m4
|
||||
+
|
||||
+#created by libtoolize
|
||||
+rm -rf m4
|
||||
+mkdir m4
|
||||
+rm -f ltmain.sh
|
||||
+
|
||||
+#created by autoconf
|
||||
+rm -f configure
|
||||
+
|
||||
+#created by automake
|
||||
+rm -f install-sh missing depcomp Makefile.in config.guess config.sub
|
||||
+rm -f INSTALL COPYING compile
|
||||
+
|
||||
+#created by ./configure
|
||||
+rm -rf .deps
|
||||
+rm -f Makefile config.log config.status libtool
|
||||
+
|
||||
+if [ "$1" = "clean" ]; then
|
||||
+ exit
|
||||
+fi
|
||||
+
|
||||
+IPATHS="-I lib"
|
||||
+
|
||||
+libtoolize
|
||||
+aclocal $IPATHS
|
||||
+automake --add-missing
|
||||
+autoconf $IPATHS
|
||||
+
|
||||
+rm -rf autom4te.cache
|
||||
+
|
||||
+echo "Now run ./configure and then make."
|
||||
+exit 0
|
||||
+
|
||||
--- /dev/null
|
||||
+++ b/pico/configure.in
|
||||
@@ -0,0 +1,16 @@
|
||||
+dnl Process this file with autoconf to produce a configure script.
|
||||
+
|
||||
+AC_PREREQ(2.59)
|
||||
+
|
||||
+AC_INIT([svox], [1.0], [math.parent@gmail.com])
|
||||
+
|
||||
+AM_INIT_AUTOMAKE([1.9 foreign])
|
||||
+
|
||||
+AC_PROG_CC
|
||||
+LT_INIT
|
||||
+AC_PROG_LIBTOOL
|
||||
+
|
||||
+AC_CONFIG_FILES([Makefile])
|
||||
+AC_OUTPUT
|
||||
+
|
||||
+AC_CONFIG_MACRO_DIR([m4])
|
|
@ -0,0 +1,51 @@
|
|||
From b56b0a4bdf3e11271caab744f532cb055c517b51 Mon Sep 17 00:00:00 2001
|
||||
From: Mathieu Parent <math.parent@gmail.com>
|
||||
Date: Sat, 24 Oct 2009 17:12:42 +0200
|
||||
Subject: [PATCH 2/7] gitignore for autotools files
|
||||
|
||||
---
|
||||
pico/.gitignore | 32 ++++++++++++++++++++++++++++++++
|
||||
1 files changed, 32 insertions(+), 0 deletions(-)
|
||||
create mode 100644 pico/.gitignore
|
||||
|
||||
diff --git a/pico/.gitignore b/pico/.gitignore
|
||||
new file mode 100644
|
||||
index 0000000..4235569
|
||||
--- /dev/null
|
||||
+++ b/pico/.gitignore
|
||||
@@ -0,0 +1,32 @@
|
||||
+#created by aclocal
|
||||
+autom4te.cache
|
||||
+aclocal.m4
|
||||
+
|
||||
+#created by libtoolize
|
||||
+m4
|
||||
+ltmain.sh
|
||||
+
|
||||
+#created by autoconf
|
||||
+configure
|
||||
+
|
||||
+#created by automake
|
||||
+install-sh
|
||||
+missing
|
||||
+depcomp
|
||||
+Makefile.in
|
||||
+config.guess
|
||||
+config.sub
|
||||
+
|
||||
+#created by ./configure
|
||||
+.deps
|
||||
+Makefile
|
||||
+config.log
|
||||
+config.status
|
||||
+libtool
|
||||
+
|
||||
+#created by make
|
||||
+*.o
|
||||
+*.lo
|
||||
+.libs
|
||||
+libttspico.la
|
||||
+
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -0,0 +1,399 @@
|
|||
From 8bec80dccc9f4fe147a500486813f4e89a0d56d8 Mon Sep 17 00:00:00 2001
|
||||
From: Mathieu Parent <math.parent@gmail.com>
|
||||
Date: Sun, 25 Oct 2009 15:19:01 +0100
|
||||
Subject: [PATCH 3/7] pico2wave: Convert text to .wav using svox text-to-speech system.
|
||||
|
||||
---
|
||||
pico/.gitignore | 1 +
|
||||
pico/Makefile.am | 7 +
|
||||
pico/bin/pico2wave.c | 341 ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
pico/configure.in | 3 +
|
||||
4 files changed, 352 insertions(+), 0 deletions(-)
|
||||
create mode 100644 pico/bin/pico2wave.c
|
||||
|
||||
diff --git a/pico/.gitignore b/pico/.gitignore
|
||||
index 4235569..a110298 100644
|
||||
--- a/pico/.gitignore
|
||||
+++ b/pico/.gitignore
|
||||
@@ -29,4 +29,5 @@ libtool
|
||||
*.lo
|
||||
.libs
|
||||
libttspico.la
|
||||
+pico2wave
|
||||
|
||||
diff --git a/pico/Makefile.am b/pico/Makefile.am
|
||||
index 6d8a10c..0d9472d 100644
|
||||
--- a/pico/Makefile.am
|
||||
+++ b/pico/Makefile.am
|
||||
@@ -34,3 +34,10 @@ libttspico_la_SOURCES = \
|
||||
lib/picotrns.c \
|
||||
lib/picowa.c
|
||||
|
||||
+bin_PROGRAMS = pico2wave
|
||||
+pico2wave_SOURCES = \
|
||||
+ bin/pico2wave.c
|
||||
+pico2wave_LDADD = \
|
||||
+ libttspico.la -lm -lpopt
|
||||
+pico2wave_CFLAGS = -Wall -I lib
|
||||
+
|
||||
diff --git a/pico/bin/pico2wave.c b/pico/bin/pico2wave.c
|
||||
new file mode 100644
|
||||
index 0000000..0c035a7
|
||||
--- /dev/null
|
||||
+++ b/pico/bin/pico2wave.c
|
||||
@@ -0,0 +1,341 @@
|
||||
+/* pico2wave.c
|
||||
+
|
||||
+ * Copyright (C) 2009 Mathieu Parent <math.parent@gmail.com>
|
||||
+ *
|
||||
+ * Licensed under the Apache License, Version 2.0 (the "License");
|
||||
+ * you may not use this file except in compliance with the License.
|
||||
+ * You may obtain a copy of the License at
|
||||
+ *
|
||||
+ * http://www.apache.org/licenses/LICENSE-2.0
|
||||
+ *
|
||||
+ * Unless required by applicable law or agreed to in writing, software
|
||||
+ * distributed under the License is distributed on an "AS IS" BASIS,
|
||||
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
+ * See the License for the specific language governing permissions and
|
||||
+ * limitations under the License.
|
||||
+ *
|
||||
+ * Convert text to .wav using svox text-to-speech system.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+
|
||||
+#include <popt.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <string.h>
|
||||
+
|
||||
+#include <picoapi.h>
|
||||
+#include <picoapid.h>
|
||||
+#include <picoos.h>
|
||||
+
|
||||
+
|
||||
+/* adaptation layer defines */
|
||||
+#define PICO_MEM_SIZE 2500000
|
||||
+#define DummyLen 100000000
|
||||
+
|
||||
+/* string constants */
|
||||
+#define MAX_OUTBUF_SIZE 128
|
||||
+const char * PICO_LINGWARE_PATH = "./lang/";
|
||||
+const char * PICO_VOICE_NAME = "PicoVoice";
|
||||
+
|
||||
+/* supported voices
|
||||
+ Pico does not seperately specify the voice and locale. */
|
||||
+const char * picoSupportedLangIso3[] = { "eng", "eng", "deu", "spa", "fra", "ita" };
|
||||
+const char * picoSupportedCountryIso3[] = { "USA", "GBR", "DEU", "ESP", "FRA", "ITA" };
|
||||
+const char * picoSupportedLang[] = { "en-US", "en-GB", "de-DE", "es-ES", "fr-FR", "it-IT" };
|
||||
+const char * picoInternalLang[] = { "en-US", "en-GB", "de-DE", "es-ES", "fr-FR", "it-IT" };
|
||||
+const char * picoInternalTaLingware[] = { "en-US_ta.bin", "en-GB_ta.bin", "de-DE_ta.bin", "es-ES_ta.bin", "fr-FR_ta.bin", "it-IT_ta.bin" };
|
||||
+const char * picoInternalSgLingware[] = { "en-US_lh0_sg.bin", "en-GB_kh0_sg.bin", "de-DE_gl0_sg.bin", "es-ES_zl0_sg.bin", "fr-FR_nk0_sg.bin", "it-IT_cm0_sg.bin" };
|
||||
+const char * picoInternalUtppLingware[] = { "en-US_utpp.bin", "en-GB_utpp.bin", "de-DE_utpp.bin", "es-ES_utpp.bin", "fr-FR_utpp.bin", "it-IT_utpp.bin" };
|
||||
+const int picoNumSupportedVocs = 6;
|
||||
+
|
||||
+/* adapation layer global variables */
|
||||
+void * picoMemArea = NULL;
|
||||
+pico_System picoSystem = NULL;
|
||||
+pico_Resource picoTaResource = NULL;
|
||||
+pico_Resource picoSgResource = NULL;
|
||||
+pico_Resource picoUtppResource = NULL;
|
||||
+pico_Engine picoEngine = NULL;
|
||||
+pico_Char * picoTaFileName = NULL;
|
||||
+pico_Char * picoSgFileName = NULL;
|
||||
+pico_Char * picoUtppFileName = NULL;
|
||||
+pico_Char * picoTaResourceName = NULL;
|
||||
+pico_Char * picoSgResourceName = NULL;
|
||||
+pico_Char * picoUtppResourceName = NULL;
|
||||
+int picoSynthAbort = 0;
|
||||
+
|
||||
+
|
||||
+int main(int argc, const char *argv[]) {
|
||||
+ char * wavefile = NULL;
|
||||
+ char * lang = "en-US";
|
||||
+ int langIndex = -1, langIndexTmp = -1;
|
||||
+ char * text;
|
||||
+ int8_t * buffer;
|
||||
+ size_t bufferSize = 256;
|
||||
+
|
||||
+ /* Parsing options */
|
||||
+ poptContext optCon; /* context for parsing command-line options */
|
||||
+ int opt; /* used for argument parsing */
|
||||
+
|
||||
+ struct poptOption optionsTable[] = {
|
||||
+ { "wave", 'w', POPT_ARG_STRING, &wavefile, 0,
|
||||
+ "Write output to this WAV file (extension SHOULD be .wav)", "filename.wav" },
|
||||
+ { "lang", 'l', POPT_ARG_STRING | POPT_ARGFLAG_SHOW_DEFAULT, &lang, 0,
|
||||
+ "Language", "lang" },
|
||||
+ POPT_AUTOHELP
|
||||
+ POPT_TABLEEND
|
||||
+ };
|
||||
+ optCon = poptGetContext(NULL, argc, argv, optionsTable, POPT_CONTEXT_POSIXMEHARDER);
|
||||
+ poptSetOtherOptionHelp(optCon, "<words>");
|
||||
+
|
||||
+ /* Reporting about invalid extra options */
|
||||
+ while ((opt = poptGetNextOpt(optCon)) != -1) {
|
||||
+ switch (opt) {
|
||||
+ default:
|
||||
+ fprintf(stderr, "Invalid option %s: %s\n",
|
||||
+ poptBadOption(optCon, 0), poptStrerror(opt));
|
||||
+ poptPrintHelp(optCon, stderr, 0);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* Mandatory option: --wave */
|
||||
+ if(!wavefile) {
|
||||
+ fprintf(stderr, "Mandatory option: %s\n\n",
|
||||
+ "--wave=filename.wav");
|
||||
+ poptPrintHelp(optCon, stderr, 0);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+ /* option: --lang */
|
||||
+ for(langIndexTmp =0; langIndexTmp<picoNumSupportedVocs; langIndexTmp++) {
|
||||
+ if(!strcmp(picoSupportedLang[langIndexTmp], lang)) {
|
||||
+ langIndex = langIndexTmp;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ if(langIndex == -1) {
|
||||
+ fprintf(stderr, "Unknown language: %s\nValid languages:\n",
|
||||
+ lang);
|
||||
+ for(langIndexTmp =0; langIndexTmp<picoNumSupportedVocs; langIndexTmp++) {
|
||||
+ fprintf(stderr, "%s\n", picoSupportedLang[langIndexTmp]);
|
||||
+ }
|
||||
+ lang = "en-US";
|
||||
+ fprintf(stderr, "\n");
|
||||
+ poptPrintHelp(optCon, stderr, 0);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ /* Remaining argument is <words> */
|
||||
+ const char **extra_argv;
|
||||
+ extra_argv = poptGetArgs(optCon);
|
||||
+ if(extra_argv) {
|
||||
+ text = (char *) &(*extra_argv)[0];
|
||||
+ } else {
|
||||
+ //TODO: stdin not supported yet.
|
||||
+ fprintf(stderr, "Missing argument: %s\n\n",
|
||||
+ "<words>");
|
||||
+ poptPrintHelp(optCon, stderr, 0);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ poptFreeContext(optCon);
|
||||
+
|
||||
+ buffer = malloc( bufferSize );
|
||||
+
|
||||
+ int ret, getstatus;
|
||||
+ pico_Char * inp = NULL;
|
||||
+ pico_Char * local_text = NULL;
|
||||
+ short outbuf[MAX_OUTBUF_SIZE/2];
|
||||
+ pico_Int16 bytes_sent, bytes_recv, text_remaining, out_data_type;
|
||||
+ pico_Retstring outMessage;
|
||||
+
|
||||
+ picoSynthAbort = 0;
|
||||
+
|
||||
+ picoMemArea = malloc( PICO_MEM_SIZE );
|
||||
+ if((ret = pico_initialize( picoMemArea, PICO_MEM_SIZE, &picoSystem ))) {
|
||||
+ pico_getSystemStatusMessage(picoSystem, ret, outMessage);
|
||||
+ fprintf(stderr, "Cannot initialize pico (%i): %s\n", ret, outMessage);
|
||||
+ goto terminate;
|
||||
+ }
|
||||
+
|
||||
+ /* Load the text analysis Lingware resource file. */
|
||||
+ picoTaFileName = (pico_Char *) malloc( PICO_MAX_DATAPATH_NAME_SIZE + PICO_MAX_FILE_NAME_SIZE );
|
||||
+ strcpy((char *) picoTaFileName, PICO_LINGWARE_PATH);
|
||||
+ strcat((char *) picoTaFileName, (const char *) picoInternalTaLingware[langIndex]);
|
||||
+ if((ret = pico_loadResource( picoSystem, picoTaFileName, &picoTaResource ))) {
|
||||
+ pico_getSystemStatusMessage(picoSystem, ret, outMessage);
|
||||
+ fprintf(stderr, "Cannot load text analysis resource file (%i): %s\n", ret, outMessage);
|
||||
+ goto unloadTaResource;
|
||||
+ }
|
||||
+
|
||||
+ /* Load the signal generation Lingware resource file. */
|
||||
+ picoSgFileName = (pico_Char *) malloc( PICO_MAX_DATAPATH_NAME_SIZE + PICO_MAX_FILE_NAME_SIZE );
|
||||
+ strcpy((char *) picoSgFileName, PICO_LINGWARE_PATH);
|
||||
+ strcat((char *) picoSgFileName, (const char *) picoInternalSgLingware[langIndex]);
|
||||
+ if((ret = pico_loadResource( picoSystem, picoSgFileName, &picoSgResource ))) {
|
||||
+ pico_getSystemStatusMessage(picoSystem, ret, outMessage);
|
||||
+ fprintf(stderr, "Cannot load signal generation Lingware resource file (%i): %s\n", ret, outMessage);
|
||||
+ goto unloadSgResource;
|
||||
+ }
|
||||
+
|
||||
+ /* Load the utpp Lingware resource file if exists - NOTE: this file is optional
|
||||
+ and is currently not used. Loading is only attempted for future compatibility.
|
||||
+ If this file is not present the loading will still succeed. //
|
||||
+ picoUtppFileName = (pico_Char *) malloc( PICO_MAX_DATAPATH_NAME_SIZE + PICO_MAX_FILE_NAME_SIZE );
|
||||
+ strcpy((char *) picoUtppFileName, PICO_LINGWARE_PATH);
|
||||
+ strcat((char *) picoUtppFileName, (const char *) picoInternalUtppLingware[langIndex]);
|
||||
+ ret = pico_loadResource( picoSystem, picoUtppFileName, &picoUtppResource );
|
||||
+ pico_getSystemStatusMessage(picoSystem, ret, outMessage);
|
||||
+ printf("pico_loadResource: %i: %s\n", ret, outMessage);
|
||||
+ */
|
||||
+
|
||||
+ /* Get the text analysis resource name. */
|
||||
+ picoTaResourceName = (pico_Char *) malloc( PICO_MAX_RESOURCE_NAME_SIZE );
|
||||
+ if((ret = pico_getResourceName( picoSystem, picoTaResource, (char *) picoTaResourceName ))) {
|
||||
+ pico_getSystemStatusMessage(picoSystem, ret, outMessage);
|
||||
+ fprintf(stderr, "Cannot get the text analysis resource name (%i): %s\n", ret, outMessage);
|
||||
+ goto unloadUtppResource;
|
||||
+ }
|
||||
+
|
||||
+ /* Get the signal generation resource name. */
|
||||
+ picoSgResourceName = (pico_Char *) malloc( PICO_MAX_RESOURCE_NAME_SIZE );
|
||||
+ if((ret = pico_getResourceName( picoSystem, picoSgResource, (char *) picoSgResourceName ))) {
|
||||
+ pico_getSystemStatusMessage(picoSystem, ret, outMessage);
|
||||
+ fprintf(stderr, "Cannot get the signal generation resource name (%i): %s\n", ret, outMessage);
|
||||
+ goto unloadUtppResource;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ /* Create a voice definition. */
|
||||
+ if((ret = pico_createVoiceDefinition( picoSystem, (const pico_Char *) PICO_VOICE_NAME ))) {
|
||||
+ pico_getSystemStatusMessage(picoSystem, ret, outMessage);
|
||||
+ fprintf(stderr, "Cannot create voice definition (%i): %s\n", ret, outMessage);
|
||||
+ goto unloadUtppResource;
|
||||
+ }
|
||||
+
|
||||
+ /* Add the text analysis resource to the voice. */
|
||||
+ if((ret = pico_addResourceToVoiceDefinition( picoSystem, (const pico_Char *) PICO_VOICE_NAME, picoTaResourceName ))) {
|
||||
+ pico_getSystemStatusMessage(picoSystem, ret, outMessage);
|
||||
+ fprintf(stderr, "Cannot add the text analysis resource to the voice (%i): %s\n", ret, outMessage);
|
||||
+ goto unloadUtppResource;
|
||||
+ }
|
||||
+
|
||||
+ /* Add the signal generation resource to the voice. */
|
||||
+ if((ret = pico_addResourceToVoiceDefinition( picoSystem, (const pico_Char *) PICO_VOICE_NAME, picoSgResourceName ))) {
|
||||
+ pico_getSystemStatusMessage(picoSystem, ret, outMessage);
|
||||
+ fprintf(stderr, "Cannot add the signal generation resource to the voice (%i): %s\n", ret, outMessage);
|
||||
+ goto unloadUtppResource;
|
||||
+ }
|
||||
+
|
||||
+ /* Create a new Pico engine. */
|
||||
+ if((ret = pico_newEngine( picoSystem, (const pico_Char *) PICO_VOICE_NAME, &picoEngine ))) {
|
||||
+ pico_getSystemStatusMessage(picoSystem, ret, outMessage);
|
||||
+ fprintf(stderr, "Cannot create a new pico engine (%i): %s\n", ret, outMessage);
|
||||
+ goto disposeEngine;
|
||||
+ }
|
||||
+
|
||||
+ local_text = (pico_Char *) text ;
|
||||
+ text_remaining = strlen((const char *) local_text) + 1;
|
||||
+
|
||||
+ inp = (pico_Char *) local_text;
|
||||
+
|
||||
+ size_t bufused = 0;
|
||||
+
|
||||
+ picoos_Common common = (picoos_Common) pico_sysGetCommon(picoSystem);
|
||||
+
|
||||
+ picoos_SDFile sdOutFile = NULL;
|
||||
+
|
||||
+ picoos_bool done = TRUE;
|
||||
+ if(TRUE != (done = picoos_sdfOpenOut(common, &sdOutFile,
|
||||
+ (picoos_char *) wavefile, SAMPLE_FREQ_16KHZ, PICOOS_ENC_LIN)))
|
||||
+ {
|
||||
+ fprintf(stderr, "Cannot open output wave file\n");
|
||||
+ ret = 1;
|
||||
+ goto disposeEngine;
|
||||
+ }
|
||||
+
|
||||
+ /* synthesis loop */
|
||||
+ while (text_remaining) {
|
||||
+ /* Feed the text into the engine. */
|
||||
+ if((ret = pico_putTextUtf8( picoEngine, inp, text_remaining, &bytes_sent ))) {
|
||||
+ pico_getSystemStatusMessage(picoSystem, ret, outMessage);
|
||||
+ fprintf(stderr, "Cannot put Text (%i): %s\n", ret, outMessage);
|
||||
+ goto disposeEngine;
|
||||
+ }
|
||||
+
|
||||
+ text_remaining -= bytes_sent;
|
||||
+ inp += bytes_sent;
|
||||
+
|
||||
+ do {
|
||||
+ if (picoSynthAbort) {
|
||||
+ goto disposeEngine;
|
||||
+ }
|
||||
+ /* Retrieve the samples and add them to the buffer. */
|
||||
+ getstatus = pico_getData( picoEngine, (void *) outbuf,
|
||||
+ MAX_OUTBUF_SIZE, &bytes_recv, &out_data_type );
|
||||
+ if((getstatus !=PICO_STEP_BUSY) && (getstatus !=PICO_STEP_IDLE)){
|
||||
+ pico_getSystemStatusMessage(picoSystem, getstatus, outMessage);
|
||||
+ fprintf(stderr, "Cannot get Data (%i): %s\n", getstatus, outMessage);
|
||||
+ goto disposeEngine;
|
||||
+ }
|
||||
+ if (bytes_recv) {
|
||||
+ if ((bufused + bytes_recv) <= bufferSize) {
|
||||
+ memcpy(buffer+bufused, (int8_t *) outbuf, bytes_recv);
|
||||
+ bufused += bytes_recv;
|
||||
+ } else {
|
||||
+ done = picoos_sdfPutSamples(
|
||||
+ sdOutFile,
|
||||
+ bufused / 2,
|
||||
+ (picoos_int16*) (buffer));
|
||||
+ bufused = 0;
|
||||
+ memcpy(buffer, (int8_t *) outbuf, bytes_recv);
|
||||
+ bufused += bytes_recv;
|
||||
+ }
|
||||
+ }
|
||||
+ } while (PICO_STEP_BUSY == getstatus);
|
||||
+ /* This chunk of synthesis is finished; pass the remaining samples. */
|
||||
+ if (!picoSynthAbort) {
|
||||
+ done = picoos_sdfPutSamples(
|
||||
+ sdOutFile,
|
||||
+ bufused / 2,
|
||||
+ (picoos_int16*) (buffer));
|
||||
+ }
|
||||
+ picoSynthAbort = 0;
|
||||
+ }
|
||||
+
|
||||
+ if(TRUE != (done = picoos_sdfCloseOut(common, &sdOutFile)))
|
||||
+ {
|
||||
+ fprintf(stderr, "Cannot close output wave file\n");
|
||||
+ ret = 1;
|
||||
+ goto disposeEngine;
|
||||
+ }
|
||||
+
|
||||
+disposeEngine:
|
||||
+ if (picoEngine) {
|
||||
+ pico_disposeEngine( picoSystem, &picoEngine );
|
||||
+ pico_releaseVoiceDefinition( picoSystem, (pico_Char *) PICO_VOICE_NAME );
|
||||
+ picoEngine = NULL;
|
||||
+ }
|
||||
+unloadUtppResource:
|
||||
+ if (picoUtppResource) {
|
||||
+ pico_unloadResource( picoSystem, &picoUtppResource );
|
||||
+ picoUtppResource = NULL;
|
||||
+ }
|
||||
+unloadSgResource:
|
||||
+ if (picoSgResource) {
|
||||
+ pico_unloadResource( picoSystem, &picoSgResource );
|
||||
+ picoSgResource = NULL;
|
||||
+ }
|
||||
+unloadTaResource:
|
||||
+ if (picoTaResource) {
|
||||
+ pico_unloadResource( picoSystem, &picoTaResource );
|
||||
+ picoTaResource = NULL;
|
||||
+ }
|
||||
+terminate:
|
||||
+ if (picoSystem) {
|
||||
+ pico_terminate(&picoSystem);
|
||||
+ picoSystem = NULL;
|
||||
+ }
|
||||
+ exit(ret);
|
||||
+}
|
||||
+
|
||||
diff --git a/pico/configure.in b/pico/configure.in
|
||||
index 0afb56d..349eb1d 100644
|
||||
--- a/pico/configure.in
|
||||
+++ b/pico/configure.in
|
||||
@@ -14,3 +14,6 @@ AC_CONFIG_FILES([Makefile])
|
||||
AC_OUTPUT
|
||||
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
+
|
||||
+AC_CHECK_LIB(popt, poptGetContext)
|
||||
+
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
From 0866cb3f7cfe4b8bae1edc8d0dbf18c85e9ca74f Mon Sep 17 00:00:00 2001
|
||||
From: Mathieu Parent <math.parent@gmail.com>
|
||||
Date: Tue, 27 Oct 2009 18:29:45 +0100
|
||||
Subject: [PATCH 4/7] add header files
|
||||
|
||||
---
|
||||
pico/Makefile.am | 36 ++++++++++++++++++++++++++++++++++++
|
||||
1 files changed, 36 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/pico/Makefile.am b/pico/Makefile.am
|
||||
index 0d9472d..9151042 100644
|
||||
--- a/pico/Makefile.am
|
||||
+++ b/pico/Makefile.am
|
||||
@@ -34,6 +34,42 @@ libttspico_la_SOURCES = \
|
||||
lib/picotrns.c \
|
||||
lib/picowa.c
|
||||
|
||||
+libttspico_ladir = $(includedir)
|
||||
+libttspico_la_HEADERS = \
|
||||
+ lib/picoacph.h \
|
||||
+ lib/picoapid.h \
|
||||
+ lib/picoapi.h \
|
||||
+ lib/picobase.h \
|
||||
+ lib/picocep.h \
|
||||
+ lib/picoctrl.h \
|
||||
+ lib/picodata.h \
|
||||
+ lib/picodbg.h \
|
||||
+ lib/picodefs.h \
|
||||
+ lib/picodsp.h \
|
||||
+ lib/picoextapi.h \
|
||||
+ lib/picofftsg.h \
|
||||
+ lib/picokdbg.h \
|
||||
+ lib/picokdt.h \
|
||||
+ lib/picokfst.h \
|
||||
+ lib/picoklex.h \
|
||||
+ lib/picoknow.h \
|
||||
+ lib/picokpdf.h \
|
||||
+ lib/picokpr.h \
|
||||
+ lib/picoktab.h \
|
||||
+ lib/picoos.h \
|
||||
+ lib/picopal.h \
|
||||
+ lib/picopam.h \
|
||||
+ lib/picopltf.h \
|
||||
+ lib/picopr.h \
|
||||
+ lib/picorsrc.h \
|
||||
+ lib/picosa.h \
|
||||
+ lib/picosig2.h \
|
||||
+ lib/picosig.h \
|
||||
+ lib/picospho.h \
|
||||
+ lib/picotok.h \
|
||||
+ lib/picotrns.h \
|
||||
+ lib/picowa.h
|
||||
+
|
||||
bin_PROGRAMS = pico2wave
|
||||
pico2wave_SOURCES = \
|
||||
bin/pico2wave.c
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
From 486b9f924bdf38f5f213feed2631060b44024c11 Mon Sep 17 00:00:00 2001
|
||||
From: Mathieu Parent <math.parent@gmail.com>
|
||||
Date: Tue, 27 Oct 2009 23:06:46 +0100
|
||||
Subject: [PATCH 5/7] Install lang files
|
||||
|
||||
---
|
||||
pico/Makefile.am | 9 +++++++++
|
||||
1 files changed, 9 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/pico/Makefile.am b/pico/Makefile.am
|
||||
index 9151042..8898050 100644
|
||||
--- a/pico/Makefile.am
|
||||
+++ b/pico/Makefile.am
|
||||
@@ -70,6 +70,15 @@ libttspico_la_HEADERS = \
|
||||
lib/picotrns.h \
|
||||
lib/picowa.h
|
||||
|
||||
+picolangdir = $(datadir)/pico/lang
|
||||
+picolang_DATA = \
|
||||
+ lang/de-DE*.bin \
|
||||
+ lang/en-GB*.bin \
|
||||
+ lang/en-US*.bin \
|
||||
+ lang/es-ES*.bin \
|
||||
+ lang/fr-FR*.bin \
|
||||
+ lang/it-IT*.bin
|
||||
+
|
||||
bin_PROGRAMS = pico2wave
|
||||
pico2wave_SOURCES = \
|
||||
bin/pico2wave.c
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
From 0102d423b79de7af982c8d4619d816f95a9b9278 Mon Sep 17 00:00:00 2001
|
||||
From: Mathieu Parent <math.parent@gmail.com>
|
||||
Date: Thu, 29 Oct 2009 23:55:19 +0100
|
||||
Subject: [PATCH 6/7] Set picolangdir
|
||||
|
||||
---
|
||||
pico/Makefile.am | 2 +-
|
||||
pico/bin/pico2wave.c | 4 ++++
|
||||
2 files changed, 5 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/pico/Makefile.am b/pico/Makefile.am
|
||||
index 8898050..a19c42a 100644
|
||||
--- a/pico/Makefile.am
|
||||
+++ b/pico/Makefile.am
|
||||
@@ -84,5 +84,5 @@ pico2wave_SOURCES = \
|
||||
bin/pico2wave.c
|
||||
pico2wave_LDADD = \
|
||||
libttspico.la -lm -lpopt
|
||||
-pico2wave_CFLAGS = -Wall -I lib
|
||||
+pico2wave_CFLAGS = -Wall -Dpicolangdir=\"$(picolangdir)\" -I lib
|
||||
|
||||
diff --git a/pico/bin/pico2wave.c b/pico/bin/pico2wave.c
|
||||
index 0c035a7..ec7ab79 100644
|
||||
--- a/pico/bin/pico2wave.c
|
||||
+++ b/pico/bin/pico2wave.c
|
||||
@@ -35,7 +35,11 @@
|
||||
|
||||
/* string constants */
|
||||
#define MAX_OUTBUF_SIZE 128
|
||||
+#ifdef picolangdir
|
||||
+const char * PICO_LINGWARE_PATH = picolangdir "/";
|
||||
+#else
|
||||
const char * PICO_LINGWARE_PATH = "./lang/";
|
||||
+#endif
|
||||
const char * PICO_VOICE_NAME = "PicoVoice";
|
||||
|
||||
/* supported voices
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
Description: fix execution on 64bit archs
|
||||
Bug: http://code.google.com/p/android/issues/detail?id=12224
|
||||
Author: Samuel Thibault <sthibault@debian.org>
|
||||
|
||||
--- svox/pico/lib/picoapi.c.original 2010-10-25 19:06:57.000000000 +0200
|
||||
+++ svox/pico/lib/picoapi.c 2010-10-25 19:07:18.000000000 +0200
|
||||
@@ -90,7 +90,7 @@
|
||||
status = PICO_ERR_NULLPTR_ACCESS;
|
||||
} else {
|
||||
byte_ptr_t rest_mem;
|
||||
- picoos_uint32 rest_mem_size;
|
||||
+ picoos_objsize_t rest_mem_size;
|
||||
pico_System sys;
|
||||
picoos_MemoryManager sysMM;
|
||||
picoos_ExceptionManager sysEM;
|
||||
--- svox/pico/lib/picosig2.c.original 2010-10-26 00:17:18.000000000 +0200
|
||||
+++ svox/pico/lib/picosig2.c 2010-10-26 00:17:19.000000000 +0200
|
||||
@@ -568,7 +568,7 @@
|
||||
for (nI = 1; nI < m1; nI++) {
|
||||
XXr[nI] = c1[nI] << shift;
|
||||
}
|
||||
- i = sizeof(picoos_int32) * (PICODSP_FFTSIZE + 1 - m1);
|
||||
+ i = sizeof(picoos_int32) * (PICODSP_FFTSIZE - m1);
|
||||
picoos_mem_set(XXr + m1, 0, i);
|
||||
dfct_nmf(m4, XXr); /* DFCT directly in fixed point */
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
Index: svox-1.0+git20130326/pico/Makefile.am
|
||||
===================================================================
|
||||
--- svox-1.0+git20130326.orig/pico/Makefile.am 2013-11-12 12:37:05.939979854 -0500
|
||||
+++ svox-1.0+git20130326/pico/Makefile.am 2013-11-12 13:00:52.336945041 -0500
|
||||
@@ -70,6 +70,8 @@
|
||||
lib/picotrns.h \
|
||||
lib/picowa.h
|
||||
|
||||
+libttspico_la_LIBADD = -lm
|
||||
+
|
||||
picolangdir = $(datadir)/pico/lang
|
||||
picolang_DATA = \
|
||||
lang/de-DE*.bin \
|
||||
@@ -83,6 +85,6 @@
|
||||
pico2wave_SOURCES = \
|
||||
bin/pico2wave.c
|
||||
pico2wave_LDADD = \
|
||||
- libttspico.la -lm -lpopt
|
||||
+ libttspico.la -lpopt
|
||||
pico2wave_CFLAGS = -Wall -Dpicolangdir=\"$(picolangdir)\" -I lib
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
--- a/pico/lib/picopltf.h
|
||||
+++ b/pico/lib/picopltf.h
|
||||
@@ -39,6 +39,8 @@
|
||||
#define PICO_MacOSX 5 /* Macintosh OS X */
|
||||
#define PICO_Linux 7 /* Linux */
|
||||
|
||||
+#define PICO_GENERIC 99 /* Generic */
|
||||
+
|
||||
/* * definition of current platform ***/
|
||||
#if !defined(PICO_PLATFORM)
|
||||
#if defined(_WIN32)
|
||||
@@ -48,7 +50,7 @@
|
||||
#elif defined(linux) || defined(__linux__) || defined(__linux)
|
||||
#define PICO_PLATFORM PICO_Linux
|
||||
#else
|
||||
-#error PICO_PLATFORM not defined
|
||||
+#define PICO_PLATFORM PICO_GENERIC
|
||||
#endif
|
||||
#endif /* !defined(PICO_PLATFORM) */
|
||||
|
||||
@@ -64,7 +66,8 @@
|
||||
#define PICO_PLATFORM_STRING "UnknownPlatform"
|
||||
#endif
|
||||
|
||||
-#if (PICO_PLATFORM == PICO_MacOSX)
|
||||
+#include <endian.h>
|
||||
+#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#define PICO_ENDIANNESS ENDIANNESS_BIG
|
||||
#else
|
||||
#define PICO_ENDIANNESS ENDIANNESS_LITTLE
|
|
@ -0,0 +1,12 @@
|
|||
diff -urN a/pico/configure.in b/pico/configure.in
|
||||
--- a/pico/configure.in 2015-01-21 18:59:39.604452795 +0100
|
||||
+++ b/pico/configure.in 2015-01-21 19:00:53.288777298 +0100
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
AC_INIT([svox], [1.0], [math.parent@gmail.com])
|
||||
|
||||
-AM_INIT_AUTOMAKE([1.9 foreign])
|
||||
+AM_INIT_AUTOMAKE([1.9 foreign subdir-objects])
|
||||
|
||||
AC_PROG_CC
|
||||
LT_INIT
|
|
@ -0,0 +1,46 @@
|
|||
diff -urN a/pico/Makefile.am b/pico/Makefile.am
|
||||
--- a/pico/Makefile.am 2015-01-22 01:33:21.470895431 +0100
|
||||
+++ b/pico/Makefile.am 2015-01-22 01:36:03.042228475 +0100
|
||||
@@ -34,42 +34,6 @@
|
||||
lib/picotrns.c \
|
||||
lib/picowa.c
|
||||
|
||||
-libttspico_ladir = $(includedir)
|
||||
-libttspico_la_HEADERS = \
|
||||
- lib/picoacph.h \
|
||||
- lib/picoapid.h \
|
||||
- lib/picoapi.h \
|
||||
- lib/picobase.h \
|
||||
- lib/picocep.h \
|
||||
- lib/picoctrl.h \
|
||||
- lib/picodata.h \
|
||||
- lib/picodbg.h \
|
||||
- lib/picodefs.h \
|
||||
- lib/picodsp.h \
|
||||
- lib/picoextapi.h \
|
||||
- lib/picofftsg.h \
|
||||
- lib/picokdbg.h \
|
||||
- lib/picokdt.h \
|
||||
- lib/picokfst.h \
|
||||
- lib/picoklex.h \
|
||||
- lib/picoknow.h \
|
||||
- lib/picokpdf.h \
|
||||
- lib/picokpr.h \
|
||||
- lib/picoktab.h \
|
||||
- lib/picoos.h \
|
||||
- lib/picopal.h \
|
||||
- lib/picopam.h \
|
||||
- lib/picopltf.h \
|
||||
- lib/picopr.h \
|
||||
- lib/picorsrc.h \
|
||||
- lib/picosa.h \
|
||||
- lib/picosig2.h \
|
||||
- lib/picosig.h \
|
||||
- lib/picospho.h \
|
||||
- lib/picotok.h \
|
||||
- lib/picotrns.h \
|
||||
- lib/picowa.h
|
||||
-
|
||||
libttspico_la_LIBADD = -lm
|
||||
|
||||
picolangdir = $(datadir)/pico/lang
|
Loading…
Reference in New Issue