有没有利用Delphi开发过,离线将文本文字转换成语音合成wav或者mp3文件的,比如调用科大讯飞window的SDK,来实现语音合成这类的Demo

dai2000 2019-08-30 10:39:34
有没有谁利用Delphi开发过,离线将文本文字转换成语音合成wav或者mp3文件的,比如调用科大讯飞window的SDK,来实现语音合成这类的Demo。如果能提供Demo那就最好了100分感谢!我的邮箱:Daisw2000@163.com
...全文
1112 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sczyq 2019-09-06
  • 打赏
  • 举报
回复
TextToWaveFiles(Text.c_str(), OutFile.c_str(), 4, 100, SPF_DEFAULT, (SPSTREAMFORMAT)WavFormat); 把第3个参数加大就是语速加快,取值(-10 -> +10) 0 是中速,所以会有停顿感 另外,Win7 系统 Speech SDK 是已经就绪了,直接用就可以了 如果非要 科大讯飞 什么的,就无能为力了
dai2000 2019-09-05
  • 打赏
  • 举报
回复

//采用微软的Windows Speech SDK的TSpVoice是将文本直接转成的语音内容存在内存中,不生成wave文件,
//然后直接从内存中读取合成的语音数据,利用UDP将数据一帧的发送到客户端进行播放。
//我看到TTS SDK的类库里有个SpMemoryStream类,但不知道怎么样使用,请高手们赐教!

procedure TForm1.Button1Click(Sender: TObject);
var
Music:OleVariant;
aBuff:array [1..60000] of Byte; //想把合成后的数据装载到这个数组中
begin
SpMemoryStream.Format.type_:=SAFT48kHz16BitMono;
SpMemoryStream.SetData(Music); //是否这样创建一个OleVariant变量可以将获取到的语音合成的数据输出到Music中?

SpVoice.AudioOutputStream:=SpMemoryStream.DefaultInterface;
SpVoice.Voice := SpVoice.getvoices('', '').Item(0);
SpVoice.Rate := tbRate.position; //速度
SpVoice.Volume := tbVolume.position; //音量
SpVoice.Speak(MemoInfo.Text,1);
SpVoice.WaitUntilDone(-1);

Music:=SpMemoryStream.GetData;
//如何将合成的语音数据装载到aBuff数组中???前面是不是那里写错了?

end;
dai2000 2019-09-04
  • 打赏
  • 举报
回复
非常感谢楼上的几位老兄。我试过安装你们的方法用Windows Speech SDK的TSpVoice是可以将文本进行转换播放和生产Wav文件,但是总感觉读起来的效果不是很好,音调和停顿有点怪怪的,不知道科大讯飞的文本语音合成效果会不会好一些。另外我真正想要的是将文本直接转成的语音内容存在内存中,不生成wave文件,然后直接从内存中读取合成的语音数据,利用UDP将数据一帧的发送到客户端进行播放。我看到TTS SDK的类库里有个SpMemoryStream类,但不知道怎么样,请高手们赐教!
ooolinux 2019-09-03
  • 打赏
  • 举报
回复
https://bbs.csdn.net/topics/392875881 txt2wav(TTS 文本朗读保存为WAVE文件的示例) delphi下使用TTS 保存为 WAVE文件的示例程序。
sczyq 2019-08-30
  • 打赏
  • 举报
回复
String Text = "要合成语音的文本文字"; String OutFile = "D:\\test.wav"; HINSTANCE LoadExDll = LoadLibrary("TTS.Chinese.dll"); if (LoadExDll) { DWORD (__cdecl *TextToWaveFiles)(WCHAR *, LPCSTR, int, int, SPEAKFLAGS, SPSTREAMFORMAT) = NULL; DWORD WavFormat = 4; // 音频采样 = 8 // WavFormat += 音频采样索引号 * 4; // 8 = 0,11 = 1,12 = 2,16 = 3,22 = 4,24 = 5,32 = 6,44 = 7,48 = 9 // WavFormat += 2 // 16赫兹 // 8赫兹不用加 // WavFormat += 1; // 双声道 // 单声道不用加 (FARPROC) TextToWaveFiles = GetProcAddress(LoadExDll, "TextToWaveFiles"); TextToWaveFiles(Text.c_str(), OutFile.c_str(), 0, 100, SPF_DEFAULT, (SPSTREAMFORMAT)WavFormat); FreeLibrary(LoadExDll); }
  • 打赏
  • 举报
回复
你这个例子基于老的Speech SDK,需要单独安装,高版本windows(大约win7+,我忘记vista能否支持了)直接从SAPI.DLL导入类型库就可以了,会生成一系列组件,其中一个TSpVoice就支持朗读文本。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧