( 本文地址: https://wysaid.org/435.html )
(Only for freshman)
blog.wysaid.org/BK_MUSIC/blog435.mp3 (点击左边的播放按钮,播放销魂的女音)
还在为暴走漫画里面销魂的女声鸡冻不已吗?
还在为程序缺少配音而焦虑吗?
还在为SAPI之类的声音包臃肿不堪而烦恼吗?
还是说你根本没有找到好的解决办法呢?
谷歌娘来帮你!
不要臃肿的语音包,不要讨厌的的语音SDK。不用打开网页刷新。本屌丝帮你拉近与谷歌娘之间的距离。
下面的C++代码可以让谷歌娘读出你输入的中文,同时保存到本地磁盘哦。来一发吧。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
/* * author: wysaid * blog: https://wysaid.org/ * 注意事项: 谷歌娘的地址可能更新, * 所以链接(下方定义的GOOGLE_URL)如果失效了本程序就无法正确工作。 * 如果链接失效,并且感兴趣不妨自行摸索修改URL或者通知我 * 说明: 这是很简单的小程序,并没有多少技术含量,希望可以对你有一点点帮助。 */ #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <wininet.h> #pragma comment(lib, "wininet.lib") #pragma comment(lib, "winmm.lib") // 定义10M 的内存缓存。 #define CACHE_SIZE (10*1024*1024) #define BUFFER_SIZE 10000 #ifndef MAX_PATH #define MAX_PATH 260 #endif #define GOOGLE_URL "http://translate.google.cn/translate_tts?ie=UTF-8&q=%s&tl=zh-CN&total=1&idx=0&textlen=3&prev=input" char g_cache[CACHE_SIZE]; bool getGoogleMp3FileByURL(LPCSTR url, LPCSTR filename, LPSTR cache) { HINTERNET hSession = InternetOpen("blog.wysaid.org", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if(hSession == NULL) return false; HINTERNET hHttp = InternetOpenUrl(hSession, url, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0); if(hHttp == NULL) return false; printf("正在请求 %s, 视网络状况不同可能会有一些等待...\n", filename); unsigned long buffersize = 0; InternetReadFile(hHttp, cache, CACHE_SIZE - 1, &buffersize); cache[buffersize] = 0; puts("文件获取成功,正在保存..."); FILE *fp = fopen(filename, "wb"); fwrite(cache, buffersize, 1, fp); fclose(fp); printf("文件 %s 保存成功!\n", filename); InternetCloseHandle(hHttp); InternetCloseHandle(hSession); return true; } void char2Hex(LPSTR srcStr, LPSTR dstStr, int n) { while(n--) { unsigned char c = *srcStr++; *dstStr++ = '%'; *dstStr = c / 16 + '0'; if(*dstStr > '9') *dstStr = *dstStr - '0' - 10 + 'A'; ++dstStr; *dstStr = c % 16 + '0'; if(*dstStr > '9') *dstStr = *dstStr - '0' - 10 + 'A'; ++dstStr; } *dstStr = 0; } int GBK2Utf8(char* gbk, char* utf8) { wchar_t uni[BUFFER_SIZE]; MultiByteToWideChar(CP_ACP, 0, gbk, -1, uni, BUFFER_SIZE); return WideCharToMultiByte(CP_UTF8, 0, uni, -1, utf8, BUFFER_SIZE, NULL, NULL); } void play(LPSTR filename) { char buffer[1024]; sprintf(buffer, "open \"%s\" alias googlesnd", filename); mciSendStringA(buffer, NULL, 0, NULL); mciSendStringA("play googlesnd", NULL, 0, NULL); } int main() { char hexStr[BUFFER_SIZE], buffer[BUFFER_SIZE]; char filename[MAX_PATH]; puts("请输入一句话(中文哦),本程序将把你写在下面的话使用谷歌娘读出并保存为mp3文件哦!"); gets(hexStr); memset(filename, 0, MAX_PATH); strncpy(filename, hexStr, 10); strcat(filename, ".mp3"); char2Hex(buffer, hexStr, GBK2Utf8(hexStr, buffer)); sprintf(buffer, GOOGLE_URL, hexStr); if(!getGoogleMp3FileByURL(buffer, filename, g_cache)) puts("网络发生错误,无法读取。请确定你的机器可以联网!"); else { puts("正在播放声音..."); Sleep(100); // 别急,稍等一下。 play(filename); puts("播放成功, 按任意键结束."); fflush(stdin); getchar(); } mciSendStringA("close all", NULL, 0, NULL); return 0; } |
嗯,代码今天无聊写的,本来想弄个实时读出博文的,但对js的操作不熟,做起来麻烦。
大概就这样吧。希望对你有所帮助。
如果你不会编程,那么这里提供源代码和可执行文件的下载,请点击:
https://wysaid.googlecode.com/files/Get%20Google%20Speaker%20Voice.zip
友情提示,如果一段话过长,请分成多次保存,然后自己使用工具合并。
裤子都脱了你就让我听这个?
……
消灭零回复