我正在尝试使用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;
}
因此,对于您的问题:
buflength
-long位。如果您打算将数据累积到更大的缓冲区中,那么我已经展示了如何自己做到这一点。 samplerate
返回。 short
。这些是带符号的整数(2个字节),范围为-32,768至32,767。可能它使用了整个范围,似乎不是可配置的,但是您可以测试一下,看看得出什么。 SynthCallback
都会获得不同数量的样本。您可能会为该数字获得0,但这并不意味着它在末尾。 关于c++ - 讲功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37250305/