commit
9079ee2021
@ -0,0 +1,50 @@
|
|||||||
|
From a85193f122b7ec0d377e0a39ac58c64f12c51085 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rui Matos <tiagomatos@gmail.com>
|
||||||
|
Date: Mon, 6 Jan 2014 13:45:00 +0000
|
||||||
|
Subject: [PATCH] auserver.c: Only write audio data to a file in debug builds
|
||||||
|
|
||||||
|
This isn't useful in regular builds and is actually a security
|
||||||
|
concern.
|
||||||
|
---
|
||||||
|
src/audio/auserver.c | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/audio/auserver.c b/src/audio/auserver.c
|
||||||
|
index 29716d3..3e838d0 100644
|
||||||
|
--- a/src/audio/auserver.c
|
||||||
|
+++ b/src/audio/auserver.c
|
||||||
|
@@ -58,9 +58,11 @@ static int play_wave_from_socket(snd_header *header,int audiostream)
|
||||||
|
int q,i,n,r;
|
||||||
|
unsigned char bytes[CST_AUDIOBUFFSIZE];
|
||||||
|
short shorts[CST_AUDIOBUFFSIZE];
|
||||||
|
+#ifdef DEBUG
|
||||||
|
cst_file fff;
|
||||||
|
|
||||||
|
fff = cst_fopen("/tmp/awb.wav",CST_OPEN_WRITE|CST_OPEN_BINARY);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
if ((audio_device = audio_open(header->sample_rate,1,
|
||||||
|
(header->encoding == CST_SND_SHORT) ?
|
||||||
|
@@ -107,7 +109,9 @@ static int play_wave_from_socket(snd_header *header,int audiostream)
|
||||||
|
for (q=r; q > 0; q-=n)
|
||||||
|
{
|
||||||
|
n = audio_write(audio_device,shorts,q);
|
||||||
|
+#ifdef DEBUG
|
||||||
|
cst_fwrite(fff,shorts,2,q);
|
||||||
|
+#endif
|
||||||
|
if (n <= 0)
|
||||||
|
{
|
||||||
|
audio_close(audio_device);
|
||||||
|
@@ -116,7 +120,9 @@ static int play_wave_from_socket(snd_header *header,int audiostream)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
audio_close(audio_device);
|
||||||
|
+#ifdef DEBUG
|
||||||
|
cst_fclose(fff);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
return CST_OK_FORMAT;
|
||||||
|
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
4
README-ALSA.txt
Normal file
4
README-ALSA.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
Native ALSA support for Flite 1.3 - patch created by
|
||||||
|
Lukas Loehrer <listaddr1@gmx.net>
|
||||||
|
|
||||||
36
README.en.md
36
README.en.md
@ -1,36 +0,0 @@
|
|||||||
# flite
|
|
||||||
|
|
||||||
#### Description
|
|
||||||
{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
|
|
||||||
|
|
||||||
#### Software Architecture
|
|
||||||
Software architecture description
|
|
||||||
|
|
||||||
#### Installation
|
|
||||||
|
|
||||||
1. xxxx
|
|
||||||
2. xxxx
|
|
||||||
3. xxxx
|
|
||||||
|
|
||||||
#### Instructions
|
|
||||||
|
|
||||||
1. xxxx
|
|
||||||
2. xxxx
|
|
||||||
3. xxxx
|
|
||||||
|
|
||||||
#### Contribution
|
|
||||||
|
|
||||||
1. Fork the repository
|
|
||||||
2. Create Feat_xxx branch
|
|
||||||
3. Commit your code
|
|
||||||
4. Create Pull Request
|
|
||||||
|
|
||||||
|
|
||||||
#### Gitee Feature
|
|
||||||
|
|
||||||
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
|
|
||||||
2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
|
|
||||||
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
|
|
||||||
4. The most valuable open source project [GVP](https://gitee.com/gvp)
|
|
||||||
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
|
|
||||||
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
|
||||||
39
README.md
39
README.md
@ -1,39 +0,0 @@
|
|||||||
# flite
|
|
||||||
|
|
||||||
#### 介绍
|
|
||||||
{**以下是码云平台说明,您可以替换此简介**
|
|
||||||
码云是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台
|
|
||||||
无论是个人、团队、或是企业,都能够用码云实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)}
|
|
||||||
|
|
||||||
#### 软件架构
|
|
||||||
软件架构说明
|
|
||||||
|
|
||||||
|
|
||||||
#### 安装教程
|
|
||||||
|
|
||||||
1. xxxx
|
|
||||||
2. xxxx
|
|
||||||
3. xxxx
|
|
||||||
|
|
||||||
#### 使用说明
|
|
||||||
|
|
||||||
1. xxxx
|
|
||||||
2. xxxx
|
|
||||||
3. xxxx
|
|
||||||
|
|
||||||
#### 参与贡献
|
|
||||||
|
|
||||||
1. Fork 本仓库
|
|
||||||
2. 新建 Feat_xxx 分支
|
|
||||||
3. 提交代码
|
|
||||||
4. 新建 Pull Request
|
|
||||||
|
|
||||||
|
|
||||||
#### 码云特技
|
|
||||||
|
|
||||||
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
|
|
||||||
2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com)
|
|
||||||
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目
|
|
||||||
4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
|
|
||||||
5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
|
|
||||||
6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
|
||||||
20
flite-0001-Fixed-texi2html-ambiguity.patch
Normal file
20
flite-0001-Fixed-texi2html-ambiguity.patch
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
From: Peter Lemenkov <lemenkov@gmail.com>
|
||||||
|
Date: Fri, 8 Jan 2016 18:26:03 +0300
|
||||||
|
Subject: [PATCH] Fixed texi2html ambiguity
|
||||||
|
|
||||||
|
Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
|
||||||
|
|
||||||
|
diff --git a/doc/Makefile b/doc/Makefile
|
||||||
|
index 12a5720..8fb9a03 100644
|
||||||
|
--- a/doc/Makefile
|
||||||
|
+++ b/doc/Makefile
|
||||||
|
@@ -50,7 +50,8 @@ doc: flite.html flite.pdf
|
||||||
|
flite.html: flite.texi
|
||||||
|
@ if [ ! -d html ] ; \
|
||||||
|
then mkdir -p html ; fi
|
||||||
|
- (cd html; texi2html -number -split_chapter ../flite.texi)
|
||||||
|
+ (cd html; texi2html -number-sections -split_chapter ../flite.texi)
|
||||||
|
+ @mv html/flite/*.html html/
|
||||||
|
@ for i in html/*.html ; \
|
||||||
|
do \
|
||||||
|
sed 's/<BODY>/<BODY bgcolor="#ffffff">/' $$i >ttt.html; \
|
||||||
333
flite-1.3-alsa_support.patch
Normal file
333
flite-1.3-alsa_support.patch
Normal file
@ -0,0 +1,333 @@
|
|||||||
|
diff -uNr flite-1.3-release/configure.in flite-1.3-release-mod/configure.in
|
||||||
|
--- flite-1.3-release/configure.in 2005-08-13 13:43:21.000000000 +0200
|
||||||
|
+++ flite-1.3-release-mod/configure.in 2006-11-13 21:16:27.000000000 +0200
|
||||||
|
@@ -206,10 +206,10 @@
|
||||||
|
AC_CHECK_HEADER(sys/audioio.h,
|
||||||
|
[AUDIODRIVER="sun"
|
||||||
|
AUDIODEFS=-DCST_AUDIO_SUNOS])
|
||||||
|
-dnl AC_CHECK_HEADER(sys/asoundlib.h,
|
||||||
|
-dnl [AUDIODRIVER="alsa"
|
||||||
|
-dnl AUDIODEFS=-DCST_AUDIO_ALSA
|
||||||
|
-dnl AUDIOLIBS=-lasound])
|
||||||
|
+AC_CHECK_HEADER(alsa/asoundlib.h,
|
||||||
|
+ [AUDIODRIVER="alsa"
|
||||||
|
+ AUDIODEFS=-DCST_AUDIO_ALSA
|
||||||
|
+ AUDIOLIBS=-lasound])
|
||||||
|
AC_CHECK_HEADER(mmsystem.h,
|
||||||
|
[AUDIODRIVER="wince"
|
||||||
|
AUDIODEFS=-DCST_AUDIO_WINCE
|
||||||
|
diff -uNr flite-1.3-release/src/audio/au_alsa.c flite-1.3-release-mod/src/audio/au_alsa.c
|
||||||
|
--- flite-1.3-release/src/audio/au_alsa.c 1970-01-01 02:00:00.000000000 +0200
|
||||||
|
+++ flite-1.3-release-mod/src/audio/au_alsa.c 2006-11-13 21:16:54.000000000 +0200
|
||||||
|
@@ -0,0 +1,311 @@
|
||||||
|
+/*************************************************************************/
|
||||||
|
+/* */
|
||||||
|
+/* Language Technologies Institute */
|
||||||
|
+/* Carnegie Mellon University */
|
||||||
|
+/* Copyright (c) 2000 */
|
||||||
|
+/* All Rights Reserved. */
|
||||||
|
+/* */
|
||||||
|
+/* Permission is hereby granted, free of charge, to use and distribute */
|
||||||
|
+/* this software and its documentation without restriction, including */
|
||||||
|
+/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||||
|
+/* distribute, sublicense, and/or sell copies of this work, and to */
|
||||||
|
+/* permit persons to whom this work is furnished to do so, subject to */
|
||||||
|
+/* the following conditions: */
|
||||||
|
+/* 1. The code must retain the above copyright notice, this list of */
|
||||||
|
+/* conditions and the following disclaimer. */
|
||||||
|
+/* 2. Any modifications must be clearly marked as such. */
|
||||||
|
+/* 3. Original authors' names are not deleted. */
|
||||||
|
+/* 4. The authors' names are not used to endorse or promote products */
|
||||||
|
+/* derived from this software without specific prior written */
|
||||||
|
+/* permission. */
|
||||||
|
+/* */
|
||||||
|
+/* CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK */
|
||||||
|
+/* DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */
|
||||||
|
+/* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT */
|
||||||
|
+/* SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE */
|
||||||
|
+/* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */
|
||||||
|
+/* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN */
|
||||||
|
+/* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */
|
||||||
|
+/* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */
|
||||||
|
+/* THIS SOFTWARE. */
|
||||||
|
+/* */
|
||||||
|
+/*********************************************************************** */
|
||||||
|
+/* Author: Lukas Loehrer ( */
|
||||||
|
+/* Date: January 2005 */
|
||||||
|
+/*************************************************************************/
|
||||||
|
+/* */
|
||||||
|
+/* Native access to alsa audio devices on Linux */
|
||||||
|
+/* Tested with libasound version 1.0.10 */
|
||||||
|
+/*************************************************************************/
|
||||||
|
+
|
||||||
|
+#include <stdlib.h>
|
||||||
|
+#include <unistd.h>
|
||||||
|
+#include <sys/types.h>
|
||||||
|
+#include <assert.h>
|
||||||
|
+#include <errno.h>
|
||||||
|
+
|
||||||
|
+#include "cst_string.h"
|
||||||
|
+#include "cst_wave.h"
|
||||||
|
+#include "cst_audio.h"
|
||||||
|
+
|
||||||
|
+#include <alsa/asoundlib.h>
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+/*static char *pcm_dev_name = "hw:0,0"; */
|
||||||
|
+static char *pcm_dev_name ="default";
|
||||||
|
+
|
||||||
|
+static inline void print_pcm_state(snd_pcm_t *handle, char *msg)
|
||||||
|
+{
|
||||||
|
+ fprintf(stderr, "PCM state at %s = %s\n", msg,
|
||||||
|
+ snd_pcm_state_name(snd_pcm_state(handle)));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+cst_audiodev *audio_open_alsa(int sps, int channels, cst_audiofmt fmt)
|
||||||
|
+{
|
||||||
|
+ cst_audiodev *ad;
|
||||||
|
+ unsigned int real_rate;
|
||||||
|
+ int err;
|
||||||
|
+
|
||||||
|
+ /* alsa specific stuff */
|
||||||
|
+ snd_pcm_t *pcm_handle;
|
||||||
|
+ snd_pcm_stream_t stream = SND_PCM_STREAM_PLAYBACK;
|
||||||
|
+ snd_pcm_hw_params_t *hwparams;
|
||||||
|
+ snd_pcm_format_t format;
|
||||||
|
+ snd_pcm_access_t access = SND_PCM_ACCESS_RW_INTERLEAVED;
|
||||||
|
+
|
||||||
|
+ /* Allocate the snd_pcm_hw_params_t structure on the stack. */
|
||||||
|
+ snd_pcm_hw_params_alloca(&hwparams);
|
||||||
|
+
|
||||||
|
+ /* Open pcm device */
|
||||||
|
+ err = snd_pcm_open(&pcm_handle, pcm_dev_name, stream, 0);
|
||||||
|
+ if (err < 0)
|
||||||
|
+ {
|
||||||
|
+ cst_errmsg("audio_open_alsa: failed to open audio device %s. %s\n",
|
||||||
|
+ pcm_dev_name, snd_strerror(err));
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Init hwparams with full configuration space */
|
||||||
|
+ err = snd_pcm_hw_params_any(pcm_handle, hwparams);
|
||||||
|
+ if (err < 0)
|
||||||
|
+ {
|
||||||
|
+ snd_pcm_close(pcm_handle);
|
||||||
|
+ cst_errmsg("audio_open_alsa: failed to get hardware parameters from audio device. %s\n", snd_strerror(err));
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Set access mode */
|
||||||
|
+ err = snd_pcm_hw_params_set_access(pcm_handle, hwparams, access);
|
||||||
|
+ if (err < 0)
|
||||||
|
+ {
|
||||||
|
+ snd_pcm_close(pcm_handle);
|
||||||
|
+ cst_errmsg("audio_open_alsa: failed to set access mode. %s.\n", snd_strerror(err));
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Determine matching alsa sample format */
|
||||||
|
+ /* This could be implemented in a more */
|
||||||
|
+ /* flexible way (byte order conversion). */
|
||||||
|
+ switch (fmt)
|
||||||
|
+ {
|
||||||
|
+ case CST_AUDIO_LINEAR16:
|
||||||
|
+ if (CST_LITTLE_ENDIAN)
|
||||||
|
+ format = SND_PCM_FORMAT_S16_LE;
|
||||||
|
+ else
|
||||||
|
+ format = SND_PCM_FORMAT_S16_BE;
|
||||||
|
+ break;
|
||||||
|
+ case CST_AUDIO_LINEAR8:
|
||||||
|
+ format = SND_PCM_FORMAT_U8;
|
||||||
|
+ break;
|
||||||
|
+ case CST_AUDIO_MULAW:
|
||||||
|
+ format = SND_PCM_FORMAT_MU_LAW;
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ snd_pcm_close(pcm_handle);
|
||||||
|
+ cst_errmsg("audio_open_alsa: failed to find suitable format.\n");
|
||||||
|
+ return NULL;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Set samble format */
|
||||||
|
+ err = snd_pcm_hw_params_set_format(pcm_handle, hwparams, format);
|
||||||
|
+ if (err <0)
|
||||||
|
+ {
|
||||||
|
+ snd_pcm_close(pcm_handle);
|
||||||
|
+ cst_errmsg("audio_open_alsa: failed to set format. %s.\n", snd_strerror(err));
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Set sample rate near the disired rate */
|
||||||
|
+ real_rate = sps;
|
||||||
|
+ err = snd_pcm_hw_params_set_rate_near(pcm_handle, hwparams, &real_rate, 0);
|
||||||
|
+ if (err < 0)
|
||||||
|
+ {
|
||||||
|
+ snd_pcm_close(pcm_handle);
|
||||||
|
+ cst_errmsg("audio_open_alsa: failed to set sample rate near %d. %s.\n", sps, snd_strerror(err));
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+ /*FIXME: This is probably too strict */
|
||||||
|
+ assert(sps == real_rate);
|
||||||
|
+
|
||||||
|
+ /* Set number of channels */
|
||||||
|
+ assert(channels >0);
|
||||||
|
+ err = snd_pcm_hw_params_set_channels(pcm_handle, hwparams, channels);
|
||||||
|
+ if (err < 0)
|
||||||
|
+ {
|
||||||
|
+ snd_pcm_close(pcm_handle);
|
||||||
|
+ cst_errmsg("audio_open_alsa: failed to set number of channels to %d. %s.\n", channels, snd_strerror(err));
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Commit hardware parameters */
|
||||||
|
+ err = snd_pcm_hw_params(pcm_handle, hwparams);
|
||||||
|
+ if (err < 0)
|
||||||
|
+ {
|
||||||
|
+ snd_pcm_close(pcm_handle);
|
||||||
|
+ cst_errmsg("audio_open_alsa: failed to set hw parameters. %s.\n", snd_strerror(err));
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Make sure the device is ready to accept data */
|
||||||
|
+ assert(snd_pcm_state(pcm_handle) == SND_PCM_STATE_PREPARED);
|
||||||
|
+
|
||||||
|
+ /* Write hardware parameters to flite audio device data structure */
|
||||||
|
+ ad = cst_alloc(cst_audiodev, 1);
|
||||||
|
+ assert(ad != NULL);
|
||||||
|
+ ad->real_sps = ad->sps = sps;
|
||||||
|
+ ad->real_channels = ad->channels = channels;
|
||||||
|
+ ad->real_fmt = ad->fmt = fmt;
|
||||||
|
+ ad->platform_data = (void *) pcm_handle;
|
||||||
|
+
|
||||||
|
+ return ad;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int audio_close_alsa(cst_audiodev *ad)
|
||||||
|
+{
|
||||||
|
+ int result;
|
||||||
|
+ snd_pcm_t *pcm_handle;
|
||||||
|
+
|
||||||
|
+ if (ad == NULL)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ pcm_handle = (snd_pcm_t *) ad->platform_data;
|
||||||
|
+ result = snd_pcm_close(pcm_handle);
|
||||||
|
+ if (result < 0)
|
||||||
|
+ {
|
||||||
|
+ cst_errmsg("audio_close_alsa: Error: %s.\n", snd_strerror(result));
|
||||||
|
+ }
|
||||||
|
+ cst_free(ad);
|
||||||
|
+ return result;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/* Returns zero if recovery was successful. */
|
||||||
|
+static int recover_from_error(snd_pcm_t *pcm_handle, ssize_t res)
|
||||||
|
+{
|
||||||
|
+ if (res == -EPIPE) /* xrun */
|
||||||
|
+ {
|
||||||
|
+ res = snd_pcm_prepare(pcm_handle);
|
||||||
|
+ if (res < 0)
|
||||||
|
+ {
|
||||||
|
+ /* Failed to recover from xrun */
|
||||||
|
+ cst_errmsg("recover_from_write_error: failed to recover from xrun. %s\n.", snd_strerror(res));
|
||||||
|
+ return res;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ else if (res == -ESTRPIPE) /* Suspend */
|
||||||
|
+ {
|
||||||
|
+ while ((res = snd_pcm_resume(pcm_handle)) == -EAGAIN)
|
||||||
|
+ {
|
||||||
|
+ snd_pcm_wait(pcm_handle, 1000);
|
||||||
|
+ }
|
||||||
|
+ if (res < 0)
|
||||||
|
+ {
|
||||||
|
+ res = snd_pcm_prepare(pcm_handle);
|
||||||
|
+ if (res <0)
|
||||||
|
+ {
|
||||||
|
+ /* Resume failed */
|
||||||
|
+ cst_errmsg("audio_recover_from_write_error: failed to resume after suspend. %s\n.", snd_strerror(res));
|
||||||
|
+ return res;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ else if (res < 0)
|
||||||
|
+ {
|
||||||
|
+ /* Unknown failure */
|
||||||
|
+ cst_errmsg("audio_recover_from_write_error: %s.\n", snd_strerror(res));
|
||||||
|
+ return res;
|
||||||
|
+ }
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int audio_write_alsa(cst_audiodev *ad, void *samples, int num_bytes)
|
||||||
|
+{
|
||||||
|
+ size_t frame_size;
|
||||||
|
+ ssize_t num_frames, res;
|
||||||
|
+ snd_pcm_t *pcm_handle;
|
||||||
|
+ char *buf = (char *) samples;
|
||||||
|
+
|
||||||
|
+ /* Determine frame size in bytes */
|
||||||
|
+ frame_size = audio_bps(ad->real_fmt) * ad->real_channels;
|
||||||
|
+ /* Require that only complete frames are handed in */
|
||||||
|
+ assert((num_bytes % frame_size) == 0);
|
||||||
|
+ num_frames = num_bytes / frame_size;
|
||||||
|
+ pcm_handle = (snd_pcm_t *) ad->platform_data;
|
||||||
|
+
|
||||||
|
+ while (num_frames > 0)
|
||||||
|
+ {
|
||||||
|
+ res = snd_pcm_writei(pcm_handle, buf, num_frames);
|
||||||
|
+ if (res != num_frames)
|
||||||
|
+ {
|
||||||
|
+ if (res == -EAGAIN || (res > 0 && res < num_frames))
|
||||||
|
+ {
|
||||||
|
+ snd_pcm_wait(pcm_handle, 100);
|
||||||
|
+ }
|
||||||
|
+ else if (recover_from_error(pcm_handle, res) < 0)
|
||||||
|
+ {
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (res >0)
|
||||||
|
+ {
|
||||||
|
+ num_frames -= res;
|
||||||
|
+ buf += res * frame_size;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ return num_bytes;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int audio_flush_alsa(cst_audiodev *ad)
|
||||||
|
+{
|
||||||
|
+ int result;
|
||||||
|
+ result = snd_pcm_drain((snd_pcm_t *) ad->platform_data);
|
||||||
|
+ if (result < 0)
|
||||||
|
+ {
|
||||||
|
+ cst_errmsg("audio_flush_alsa: Error: %s.\n", snd_strerror(result));
|
||||||
|
+ }
|
||||||
|
+ /* Prepare device for more data */
|
||||||
|
+ result = snd_pcm_prepare((snd_pcm_t *) ad->platform_data);
|
||||||
|
+if (result < 0)
|
||||||
|
+ {
|
||||||
|
+ cst_errmsg("audio_flush_alsa: Error: %s.\n", snd_strerror(result));
|
||||||
|
+ }
|
||||||
|
+ return result;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int audio_drain_alsa(cst_audiodev *ad)
|
||||||
|
+{
|
||||||
|
+ int result;
|
||||||
|
+ result = snd_pcm_drop((snd_pcm_t *) ad->platform_data);
|
||||||
|
+ if (result < 0)
|
||||||
|
+ {
|
||||||
|
+ cst_errmsg("audio_drain_alsa: Error: %s.\n", snd_strerror(result));
|
||||||
|
+ }
|
||||||
|
+/* Prepare device for more data */
|
||||||
|
+ result = snd_pcm_prepare((snd_pcm_t *) ad->platform_data);
|
||||||
|
+if (result < 0)
|
||||||
|
+ {
|
||||||
|
+ cst_errmsg("audio_drain_alsa: Error: %s.\n", snd_strerror(result));
|
||||||
|
+ }
|
||||||
|
+ return result;
|
||||||
|
+}
|
||||||
30
flite-1.3-doc_texinfo.patch
Normal file
30
flite-1.3-doc_texinfo.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
diff -uNr flite-1.3-release/doc/flite.texi flite-1.3-mod/doc/flite.texi
|
||||||
|
--- flite-1.3-release/doc/flite.texi 2005-08-14 21:50:02.000000000 +0200
|
||||||
|
+++ flite-1.3-mod/doc/flite.texi 2006-05-08 12:39:54.000000000 +0200
|
||||||
|
@@ -711,14 +711,14 @@
|
||||||
|
cst_voice *register_cmu_us_kal();
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
-{
|
||||||
|
+@{
|
||||||
|
cst_voice *v;
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
- {
|
||||||
|
+ @{
|
||||||
|
fprintf(stderr,"usage: flite_test FILE\n");
|
||||||
|
exit(-1);
|
||||||
|
- }
|
||||||
|
+ @}
|
||||||
|
|
||||||
|
flite_init();
|
||||||
|
|
||||||
|
@@ -726,7 +726,7 @@
|
||||||
|
|
||||||
|
flite_file_to_speech(argv[1],v,"play");
|
||||||
|
|
||||||
|
-}
|
||||||
|
+@}
|
||||||
|
@end example
|
||||||
|
Assuming the shell variable FLITEDIR is set to the flite directory
|
||||||
|
the following will compile the system (with appropriate changes for
|
||||||
12
flite-1.3-implicit_dso_linking.patch
Normal file
12
flite-1.3-implicit_dso_linking.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
diff -uNr flite-1.3-release/tools/Makefile flite-1.3-release-mod/tools/Makefile
|
||||||
|
--- flite-1.3-release/tools/Makefile 2005-01-01 19:24:16.000000000 +0200
|
||||||
|
+++ flite-1.3-release-mod/tools/Makefile 2011-03-13 23:53:12.365235072 +0200
|
||||||
|
@@ -64,7 +64,7 @@
|
||||||
|
$(BINDIR)/find_sts: find_sts_main.o $(FLITELIBS) $(flite_LIBS_deps)
|
||||||
|
echo $(ALL)
|
||||||
|
echo $(HOST_PLATFORM) $(TARGET_PLATFORM)
|
||||||
|
- $(CC) $(CFLAGS) -o $@ find_sts_main.o $(flite_LIBS_flags) $(LDFLAGS)
|
||||||
|
+ $(CC) $(CFLAGS) -o $@ find_sts_main.o $(flite_LIBS_flags) $(LDFLAGS) -lm
|
||||||
|
$(BINDIR)/flite_sort: flite_sort_main.o $(FLITELIBS) $(flite_LIBS_deps)
|
||||||
|
$(CC) $(CFLAGS) -o $@ flite_sort_main.o $(flite_LIBS_flags) $(LDFLAGS)
|
||||||
|
$(BINDIR)/regexcomp: regexcomp_main.o $(FLITELIBS) $(flite_LIBS_deps)
|
||||||
BIN
flite-1.3-release.tar.gz
Normal file
BIN
flite-1.3-release.tar.gz
Normal file
Binary file not shown.
170
flite-1.3-sharedlibs.patch
Normal file
170
flite-1.3-sharedlibs.patch
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
diff -uNr flite-1.3-release/config/common_make_rules flite-1.3-release-mod/config/common_make_rules
|
||||||
|
--- flite-1.3-release/config/common_make_rules 2004-12-20 00:20:43.000000000 +0200
|
||||||
|
+++ flite-1.3-release-mod/config/common_make_rules 2006-11-12 12:17:25.000000000 +0200
|
||||||
|
@@ -59,27 +59,35 @@
|
||||||
|
endif
|
||||||
|
OBJDIR=$(BUILDDIR)/obj/$(DIRNAME)
|
||||||
|
BINDIR=$(BUILDDIR)/bin
|
||||||
|
+LIBDIR=$(BUILDDIR)/lib
|
||||||
|
ifeq ($(HOST_PLATFORM),$(TARGET_PLATFORM))
|
||||||
|
BINDIR=$(TOP)/bin
|
||||||
|
+LIBDIR=$(TOP)/lib
|
||||||
|
endif
|
||||||
|
|
||||||
|
-LIBDIR=$(BUILDDIR)/lib
|
||||||
|
BUILDDIRS=$(OBJDIR) $(BINDIR) $(LIBDIR)
|
||||||
|
|
||||||
|
-FLITELIBS = $(BUILDDIR)/lib/libflite.a
|
||||||
|
-LDFLAGS += -L$(BUILDDIR)/lib -lflite -lm $(AUDIOLIBS) $(OTHERLIBS)
|
||||||
|
+ifdef SHFLAGS
|
||||||
|
+FLITELIBS = $(LIBDIR)/libflite.so
|
||||||
|
+LDFLAGS += -L$(LIBDIR) -lflite $(OTHERLIBS)
|
||||||
|
+else
|
||||||
|
+FLITELIBS = $(LIBDIR)/libflite.a
|
||||||
|
+LDFLAGS += -L$(LIBDIR) -lflite -lm $(AUDIOLIBS) $(OTHERLIBS)
|
||||||
|
+endif
|
||||||
|
|
||||||
|
FULLOBJS = $(OBJS:%=$(OBJDIR)/%)
|
||||||
|
ifdef SHFLAGS
|
||||||
|
SOOBJS = $(OBJS:.o=.os)
|
||||||
|
-FULLSHOBJS = $(SOOBJS:%=$(OBJDIR)/%)
|
||||||
|
+FULLSOOBJS = $(SOOBJS:%=$(OBJDIR)/%)
|
||||||
|
ifdef LIBNAME
|
||||||
|
ALL += $(OBJDIR)/.build_so
|
||||||
|
endif
|
||||||
|
-endif
|
||||||
|
+else
|
||||||
|
ifdef LIBNAME
|
||||||
|
ALL += $(OBJDIR)/.build_lib
|
||||||
|
endif
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
# Only do some directories when you are not cross compiling
|
||||||
|
ifeq ($(HOST_PLATFORM),$(TARGET_PLATFORM))
|
||||||
|
OTHER_BUILD_DIRS = $(HOST_ONLY_DIRS)
|
||||||
|
@@ -117,14 +125,14 @@
|
||||||
|
@ touch $(OBJDIR)/.build_so
|
||||||
|
|
||||||
|
# Used in the lib/ directory and in building new voices
|
||||||
|
-$(OBJDIR)/%.so: %.shared.a
|
||||||
|
+%.so: %.shared.a
|
||||||
|
@ echo making $@
|
||||||
|
@ rm -rf shared_os && mkdir shared_os
|
||||||
|
- @ rm -f $@ $(LIBDIR)/$@.${PROJECT_VERSION} $(LIBDIR)/$@.${PROJECT_SHLIB_VERSION}
|
||||||
|
+ @ rm -f $@ $@.${PROJECT_VERSION} $@.${PROJECT_SHLIB_VERSION}
|
||||||
|
@ (cd shared_os && ar x ../$<)
|
||||||
|
- @ (cd shared_os && $(CC) -shared -Wl,-soname,$@.${PROJECT_SHLIB_VERSION} -o ../$@.${PROJECT_VERSION} *.os)
|
||||||
|
- @ ln -s $(LIBDIR)/$@.${PROJECT_VERSION} $(LIBDIR)/$@.${PROJECT_SHLIB_VERSION}
|
||||||
|
- @ ln -s $(LIBDIR)/$@.${PROJECT_SHLIB_VERSION} $(LIBDIR)/$@
|
||||||
|
+ @ (cd shared_os && $(CC) -shared -Wl,-soname,$@.${PROJECT_SHLIB_VERSION} -o ../$@.${PROJECT_VERSION} *.os -L../ $($(@:%.so=%_LDLIBS)))
|
||||||
|
+ @ ln -s $@.${PROJECT_VERSION} $@.${PROJECT_SHLIB_VERSION}
|
||||||
|
+ @ ln -s $@.${PROJECT_SHLIB_VERSION} $@
|
||||||
|
@ rm -rf shared_os
|
||||||
|
|
||||||
|
$(OBJDIR)/.make_build_dirs:
|
||||||
|
diff -uNr flite-1.3-release/lib/Makefile flite-1.3-release-mod/lib/Makefile
|
||||||
|
--- flite-1.3-release/lib/Makefile 1970-01-01 02:00:00.000000000 +0200
|
||||||
|
+++ flite-1.3-release-mod/lib/Makefile 2006-11-12 12:17:40.000000000 +0200
|
||||||
|
@@ -0,0 +1,73 @@
|
||||||
|
+###########################################################################
|
||||||
|
+## ##
|
||||||
|
+## Language Technologies Institute ##
|
||||||
|
+## Carnegie Mellon University ##
|
||||||
|
+## Copyright (c) 1999 ##
|
||||||
|
+## All Rights Reserved. ##
|
||||||
|
+## ##
|
||||||
|
+## Permission is hereby granted, free of charge, to use and distribute ##
|
||||||
|
+## this software and its documentation without restriction, including ##
|
||||||
|
+## without limitation the rights to use, copy, modify, merge, publish, ##
|
||||||
|
+## distribute, sublicense, and/or sell copies of this work, and to ##
|
||||||
|
+## permit persons to whom this work is furnished to do so, subject to ##
|
||||||
|
+## the following conditions: ##
|
||||||
|
+## 1. The code must retain the above copyright notice, this list of ##
|
||||||
|
+## conditions and the following disclaimer. ##
|
||||||
|
+## 2. Any modifications must be clearly marked as such. ##
|
||||||
|
+## 3. Original authors' names are not deleted. ##
|
||||||
|
+## 4. The authors' names are not used to endorse or promote products ##
|
||||||
|
+## derived from this software without specific prior written ##
|
||||||
|
+## permission. ##
|
||||||
|
+## ##
|
||||||
|
+## CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK ##
|
||||||
|
+## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ##
|
||||||
|
+## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ##
|
||||||
|
+## SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE ##
|
||||||
|
+## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ##
|
||||||
|
+## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ##
|
||||||
|
+## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ##
|
||||||
|
+## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ##
|
||||||
|
+## THIS SOFTWARE. ##
|
||||||
|
+## ##
|
||||||
|
+###########################################################################
|
||||||
|
+## ##
|
||||||
|
+## FLITE libraries ##
|
||||||
|
+## ##
|
||||||
|
+###########################################################################
|
||||||
|
+TOP=..
|
||||||
|
+DIRNAME=lib
|
||||||
|
+BUILD_DIRS =
|
||||||
|
+ALL_DIRS=
|
||||||
|
+FILES = Makefile
|
||||||
|
+LIBNAMES = flite flite_cmulex flite_usenglish \
|
||||||
|
+ flite_cmu_us_kal flite_cmu_us_kal16 flite_cmu_time_awb
|
||||||
|
+
|
||||||
|
+STATICLIBS= $(LIBNAMES:%=lib%.a)
|
||||||
|
+SHAREDARLIBS= $(LIBNAMES:%=lib%.shared.a)
|
||||||
|
+#SHAREDLIBS = $(LIBNAMES:%=lib%.so)
|
||||||
|
+SHAREDLIBS = $(SHAREDARLIBS:%.shared.a=%.so)
|
||||||
|
+VERSIONSHAREDLIBS = $(SHAREDLIBS:%=%.${PROJECT_VERSION}) \
|
||||||
|
+ $(SHAREDLIBS:%=%.${PROJECT_SHLIB_VERSION})
|
||||||
|
+ALL_LIBS = $(SHAREDLIBS) $(VERSIONSHAREDLIBS)
|
||||||
|
+
|
||||||
|
+ALL = shared_libs
|
||||||
|
+
|
||||||
|
+LOCAL_CLEAN=*.a *.so *.so.${PROJECT_VERSION} *.so.${PROJECT_SHLIB_VERSION}
|
||||||
|
+
|
||||||
|
+include $(TOP)/config/common_make_rules
|
||||||
|
+
|
||||||
|
+ifdef SHFLAGS
|
||||||
|
+shared_libs: $(SHAREDLIBS)
|
||||||
|
+libflite_LDLIBS = -lm $(AUDIOLIBS)
|
||||||
|
+libflite_cmulex_LDLIBS = -lflite
|
||||||
|
+libflite_usenglish_LDLIBS = -lflite
|
||||||
|
+libflite_cmu_us_kal_LDLIBS = -lflite_cmulex -lflite_usenglish
|
||||||
|
+libflite_cmu_us_kal16_LDLIBS = -lflite_cmulex -lflite_usenglish
|
||||||
|
+libflite_cmu_time_awb_LDLIBS = -lflite -lflite_cmulex -lflite_usenglish
|
||||||
|
+else
|
||||||
|
+shared_libs: nothing
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+install:
|
||||||
|
+ @ tar cvf - $(ALL_LIBS) | ( cd $(INSTALLLIBDIR) && tar xf -)
|
||||||
|
+
|
||||||
|
diff -uNr flite-1.3-release/main/Makefile flite-1.3-release-mod/main/Makefile
|
||||||
|
--- flite-1.3-release/main/Makefile 2005-08-08 00:38:42.000000000 +0200
|
||||||
|
+++ flite-1.3-release-mod/main/Makefile 2006-11-12 11:44:46.000000000 +0200
|
||||||
|
@@ -50,11 +50,11 @@
|
||||||
|
|
||||||
|
flite_LIBS = flite_$(FL_VOX) flite_$(FL_LANG) flite_$(FL_LEX)
|
||||||
|
flite_LIBS_flags = -L$(LIBDIR) $(flite_LIBS:%=-l%)
|
||||||
|
-flite_LIBS_deps = $(flite_LIBS:%=$(LIBDIR)/lib%.a)
|
||||||
|
+flite_LIBS_deps = $(flite_LIBS:%=$(LIBDIR)/lib%.so)
|
||||||
|
|
||||||
|
flite_time_LIBS = flite_cmu_time_awb flite_$(FL_LANG) flite_$(FL_LEX)
|
||||||
|
flite_time_LIBS_flags = -L$(LIBDIR) $(flite_time_LIBS:%=-l%)
|
||||||
|
-flite_time_LIBS_deps = $(flite_time_LIBS:%=$(LIBDIR)/lib%.a)
|
||||||
|
+flite_time_LIBS_deps = $(flite_time_LIBS:%=$(LIBDIR)/lib%.so)
|
||||||
|
|
||||||
|
include $(TOP)/config/common_make_rules
|
||||||
|
|
||||||
|
diff -uNr flite-1.3-release/Makefile flite-1.3-release-mod/Makefile
|
||||||
|
--- flite-1.3-release/Makefile 2005-11-01 15:40:45.000000000 +0200
|
||||||
|
+++ flite-1.3-release-mod/Makefile 2006-11-12 11:44:46.000000000 +0200
|
||||||
|
@@ -41,7 +41,7 @@
|
||||||
|
###########################################################################
|
||||||
|
TOP=.
|
||||||
|
DIRNAME=
|
||||||
|
-BUILD_DIRS = include src lang doc
|
||||||
|
+BUILD_DIRS = include src lang lib doc
|
||||||
|
ALL_DIRS=config $(BUILD_DIRS) testsuite sapi palm tools main
|
||||||
|
CONFIG=configure configure.in config.sub config.guess \
|
||||||
|
missing install-sh mkinstalldirs
|
||||||
59
flite.spec
Normal file
59
flite.spec
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
Name: flite
|
||||||
|
Version: 1.3
|
||||||
|
Release: 33
|
||||||
|
Summary: A small, fast run time synthesis engine
|
||||||
|
License: MIT
|
||||||
|
URL: http://www.speech.cs.cmu.edu/flite/
|
||||||
|
Source0: http://www.speech.cs.cmu.edu/flite/packed/flite-%{version}/flite-%{version}-release.tar.gz
|
||||||
|
Source1: README-ALSA.txt
|
||||||
|
BuildRequires: texi2html autoconf automake libtool ed alsa-lib-devel
|
||||||
|
|
||||||
|
Patch0000: flite-1.3-sharedlibs.patch
|
||||||
|
Patch0001: flite-1.3-doc_texinfo.patch
|
||||||
|
Patch0002: flite-1.3-alsa_support.patch
|
||||||
|
Patch0003: flite-1.3-implicit_dso_linking.patch
|
||||||
|
Patch0004: 0001-auserver.c-Only-write-audio-data-to-a-file-in-debug-.patch
|
||||||
|
Patch0005: flite-0001-Fixed-texi2html-ambiguity.patch
|
||||||
|
|
||||||
|
%description
|
||||||
|
Flite was primarily developed to address one of the most common complaints
|
||||||
|
about the Festival Speech Synthesis System. Festival is large and slow, even
|
||||||
|
with the software bloat common amongst most products and that that bloat has
|
||||||
|
helped machines get faster, have more memory and large disks, still Festival
|
||||||
|
is criticized for its size.
|
||||||
|
|
||||||
|
%package devel
|
||||||
|
Summary: Development files for flite
|
||||||
|
Requires: flite = %{version}-%{release}
|
||||||
|
|
||||||
|
%description devel
|
||||||
|
Development files for Flite, a small, fast speech synthesis engine.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%autosetup -n flite-%{version}-release -p1
|
||||||
|
install -p %{SOURCE1} .
|
||||||
|
%build
|
||||||
|
autoreconf -vif
|
||||||
|
%configure --enable-shared --with-audio=alsa
|
||||||
|
make
|
||||||
|
cd doc
|
||||||
|
%make_build flite.html
|
||||||
|
%install
|
||||||
|
%make_install INSTALLBINDIR=%{buildroot}%{_bindir} INSTALLLIBDIR=%{buildroot}%{_libdir} INSTALLINCDIR=%{buildroot}%{_includedir}/flite
|
||||||
|
%post
|
||||||
|
/sbin/ldconfig
|
||||||
|
%postun
|
||||||
|
/sbin/ldconfig
|
||||||
|
|
||||||
|
%files
|
||||||
|
%doc COPYING ACKNOWLEDGEMENTS README doc/html README-ALSA.txt
|
||||||
|
%{_libdir}/*.so.*
|
||||||
|
%{_bindir}/*
|
||||||
|
|
||||||
|
%files devel
|
||||||
|
%{_libdir}/*.so
|
||||||
|
%{_includedir}/flite
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Thu Dec 12 2019 Ling Yang <lingyang2@huawei.com> - 1.3-33
|
||||||
|
- Package init
|
||||||
Loading…
x
Reference in New Issue
Block a user