我想写一个C语言小程序(就是黑框框的那种),我想让它把我的句子读出来,比如早上好之类的。
google里面搜索microsoft tts或者text to speach
这里有一个VB程序的,
set objTTS = CreateObject("sapi.spvoice")
objTTS.speak("你好呀。")
用记事本保存,然后把记事本文本文件后缀名改为vbs
用C调用Google 语音的API即可
VS下根据官方示例简单改变做的小例子
#define _ATL_APARTMENT_THREADED
//#include <afx.h>
//extern CComModule _Module;
#include <stdio.h>
#include <atlbase.h>
#include <atlcom.h>
#include <sapi.h>
int main(int argc, char* argv[])
{
ISpVoice * pVoice = NULL;
if (FAILED(::CoInitialize(NULL)))
return FALSE;
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
if (SUCCEEDED(hr))
{
FILE* file;
file = fopen("C:\\Users\\zhouchong\\Desktop\\txt\\auotomedian.txt", "r");
if (file == NULL)
{
return 0;
}
else
{
char buff[1024];
USES_CONVERSION;
while (fgets(buff, 1024, file) != NULL)
{
// hr = pVoice->Speak(L"Hello world", 0, NULL);
wchar_t* test12 = A2W(buff);
hr = pVoice->Speak(test12, 0, NULL);
}
pVoice->Release();
pVoice = NULL;
}
::CoUninitialize();
}
return TRUE;
}
微软MSDN示例链接:Text-to-Speech Tutorial.aspx "")
推荐讯飞的平台做这个,可以做翻译。如果需要从图像抓取还需要OCR
楼上的就可行,或者你找百度的文字转语音接口服务也可以实现
从头写肯定不现实,可以在网上找现成的库,你来调用,也可以找一些免费的服务
http://blog.csdn.net/qqj_1228/article/details/5203982
如果想说文字的话,可能需要调用语音API,但是比较麻烦,就像楼上说的用VBS可能更适合你。ps:如果想用C语言编写一首歌的话不妨尝试Beep函数
虽然艺术性不强,但还是蛮有趣的,贴一段生日歌代码
#include <Windows.h>
#include <stdio.h>
#include <process.h>
VOID Sound(LPVOID lp) {
unsigned FREQUENCY[]= {392,392,440,392,523,494,
392,392,440,392,587,523,
392,392,784,659,523,494,440,
698,698,659,523,587,523,
392,392,440,392,523,494,
392,392,440,392,587,523,
392,392,784,659,523,494,440,
698,698,659,523,587,523
};
unsigned DELAY[]= {375,125,500,500,500,1000,
375,125,500,500,500,1000,
375,125,500,500,500,500,1000,
375,125,500,500,500,1000,
375,125,500,500,500,1000,
375,125,500,500,500,1000,
375,125,500,500,500,500,1000,
375,125,500,500,500,1000
};
int BEATS;
for(BEATS=0; BEATS<50; BEATS++) {
Beep(FREQUENCY[BEATS],DELAY[BEATS]);
}
}
VOID Print(LPVOID lp) {
printf("现在给我的儿子xxx唱上生日歌!");
}
int main() {
_beginthread(Sound, 0, NULL);
_beginthread(Print, 0, NULL);
Sleep(20000);
return 0;
}