- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 espeak 实现一些功能,但缺少一些参数(我不知道)并在 Linux 上处理代码块下一个代码运行良好并读取阿拉伯文本
`#include<string.h>
#include<malloc.h>
#include</usr/local/include/espeak/speak_lib.h>
int main(int argc, char* argv[] )
{
char text[] = {"الله لطيف "};
espeak_Initialize(AUDIO_OUTPUT_PLAYBACK, 0, NULL, 0 );
espeak_SetVoiceByName("ar");
unsigned int size = 0;
while(text[size]!='\0') size++;
unsigned int flags=espeakCHARS_AUTO | espeakENDPAUSE;
espeak_Synth( text, size+1, 0,POS_CHARACTER,0, flags, NULL, NULL );
espeak_Synchronize( );
return 0;
}`
现在你能帮我们从 Espeak 中找到这些参数吗
1.返回生成的波并将其存储在变量中的函数
2.频率
3. channel 数量
4.样本大小
5.我们存储样本的缓冲区
6.样本数量
最佳答案
如果你找不到合适的例子,你将不得不阅读头文件中的文档。没用过,但看起来很容易理解:
http://espeak.sourceforge.net/speak_lib.h
当您调用 espeak_Initialize
时,您传入了 AUDIO_OUTPUT_PLAYBACK。您将需要改为传入 AUDIO_OUTPUT_RETRIEVAL,然后看起来您必须使用您自己创建的函数调用 espeak_SetSynthCallback
以接受样本。
您修改后的代码看起来像这样(未测试):
#include <string.h>
#include <vector>
#include </usr/local/include/espeak/speak_lib.h>
int samplerate; // determined by espeak, will be in Hertz (Hz)
const int buflength = 200; // passed to espeak, in milliseconds (ms)
std::vector<short> sounddata;
int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) {
if (wav == NULL)
return 1; // NULL means done.
/* process your samples here, let's just gather them */
sounddata.insert(sounddata.end(), wav, wav + numsamples);
return 0; // 0 continues synthesis, 1 aborts
}
int main(int argc, char* argv[] ) {
char text[] = {"الله لطيف "};
samplerate = espeak_Initialize(AUDIO_OUTPUT_RETRIEVAL, buflength, NULL, 0);
espeak_SetSynthCallback(&SynthCallback);
espeak_SetVoiceByName("ar");
unsigned int flags=espeakCHARS_AUTO | espeakENDPAUSE;
size_t size = strlen(text);
espeak_Synth(text, size + 1, 0, POS_CHARACTER, 0, flags, NULL, NULL);
espeak_Synchronize();
/* in theory sounddata holds your samples now... */
return 0;
}
所以对于你的问题:
返回生成的 wave 以将其存储在变量中的函数 - 您编写了一个回调函数,并且该函数获得了很少的 buflength
-long 位wav 进行处理。如果您要将数据累积到更大的缓冲区中,我已经展示了您如何自己完成。
Frequency - 通过此 API,它看起来不像是您选择的,espeak 确实如此。它以赫兹为单位,并作为上面的 samplerate
返回。
channel 数 - 没有提及,人们会认为语音合成通常是单声道的。 (在大多数立体声混音中,人声默认混合在中心...因此您可以获取返回的单声道数据并在左右声道上播放相同的合成数据。)
样本大小 - 您得到空头
。这些是带符号的整数,2 个字节,范围为 -32,768 到 32,767。可能它使用整个范围,似乎不可配置,但您可以测试并查看您得到的结果。
我们存储样本的缓冲区 - 合成缓冲区似乎属于 espeak,它处理它的分配和释放。我展示了一个使用 std::vector 从多个调用中收集数据 block 的示例。
样本数 - 每次调用您的 SynthCallback
都会获得可能不同数量的样本。您可能会得到该数字的 0,这可能并不意味着它在末尾。
关于c++ - Espeak 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37250305/
我第一次尝试在下面的代码中使用谷歌默认的TTS引擎,但是我发现,不支持波斯语! 因此,我在手机上下载并安装了 espeak RedZoc TTS 引擎,并将默认的 TTS 语言更改为波斯语。当我在手机
我正在尝试使用 espeak 实现一些功能,但缺少一些参数(我不知道)并在 Linux 上处理代码块下一个代码运行良好并读取阿拉伯文本 `#include #include #incl
我正在使用一个现有程序,该程序从套接字读取 xml,将文本转换为 wav 文件,然后通过音频输出设备播放。 我想将其剥离,以便它直接播放文本到音频。 现在我很难弄清楚我是否有正确的代码并理解它是否真的
我想知道是否有一种方法可以像在命令行中那样访问 espeak: laptop:~$espeak say this line first say this line second ... 现在,我在 p
是否可以控制 eSpeak 文本到语音的速度?如果可能的话 - 怎么做? 最佳答案 您可以使用 -s 指定每分钟的字数。选项,默认为 160 wpm。 espeak "hello world" -s
我一直在尝试使用 espeak 为 cmusphinx 创建一个字素到音素字典,但是当我从菜单中选择编译并选择编译字典时,它说编译成功,但我在任何地方都找不到 .dic 文件。 请告知在哪里可以找到我
我的应用程序中有这段文本到语音的代码。 public void onInit(int status) { // TODO Auto-generated method stub if
我正在使用 espeak来自 C++ 的 API 从我的嵌入式应用程序中进行一些简单的文本到语音合成。目前,我已经从关于如何开始的基本示例中复制了这一行: espeak_SetVoiceByName(
是否可以在 system(""); 函数中使用 espeak,例如 system("aplay 1.wav") ? 我喜欢在 Ubuntu 操作系统内的 C/C++ 代码中使用 espeak。 最佳答
我想在 windows7 中使用 espeak( http://espeak.sourceforge.net ) 和 python2.7.0-32 位。 另外,我还想保存espeak生成的音频文件。
我想将一个字符串传递给 espeak-ng,它通过声音读取我的字符串! 我搜索并找到了这个程序并做了一点修改以将其从意大利语更改为英语(在注释行下),但没有用: #include #include
这可能是个愚蠢的问题。 Firefox 相当严格,因为众所周知,Internet Explorer 可以毫无问题地激活病毒。但是对于我的英语课,我需要没有命令屏幕的 eSpeak。该程序在本地运行,但
我正在使用 espeak 库进行文本到语音的转换。我能够从字符串生成动态声音来执行此操作。 os.system('espeak "hello"') 这行得通。但我需要的是从字符串中生成声音。这是我做的
我正在创建一个基于 ruby 的应用程序,我希望它能读出一些文本。到目前为止,我正在使用 espeak: fork{exec ("espeak 'New file located #{timelo
我需要帮助。我使用 Raspberry pi 构建了一个机器人,然后用相机和扬声器对其进行了扩展。我安装了一个 lighthttpd 服务器,我可以使用一个简单的网站来控制它。 工作正常,网络服务器显
我在网上找到这段代码: #include #include #include espeak_POSITION_TYPE position_type; espeak_AUDIO_OUTPUT ou
问题:我正在尝试使用 espeak 文本转语音引擎。所以我让它在 linux 上运行得很好(下面的代码)。现在我也想将这个基本程序移植到 Windows,但这几乎是不可能的... 部分问题是 Wind
我在终端中从 Linux 运行 espeak,它工作得很好。我的问题是我想从 php(在 xampp 中)运行 espeak。 但是那是行不通的。并且没有发出任何声音 在 windows 中,当 p
这是我的代码。我想从用户那里得到 5 个字符串,当用户插入它时,espeak 会读取它们中的每一个。但是我收到了 segmentation fault(core dumped) 消息。 #includ
如何在声卡每次采集一个数字时听到口头的 DTMD 数字? 目标是 radio 控制我的电脑和接口(interface)事件,通过手持收发器调用 dtmf 音调。 我用 multimon 听 DTMF
我是一名优秀的程序员,十分优秀!