代码拉取完成,页面将自动刷新
同步操作将从 华清远见西安中心/智能音箱(C语言) 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include <stdio.h>
#include <stdlib.h> //free
#include <string.h> //strdup
#include <curl/curl.h> //libcurl
#include "auth.h"//get_token
//*注意*:为了保持代码流程清晰方便讲解,本次实训所有代码均没有对内存不足的异常情况进行处理,实际编码时应该处理此类异常。
//将文本转换为语音
void text2speech(const char* token, const char* text)
{
CURL* curl = curl_easy_init();
//发送到百度云的字符串需要进行2次URL编码
char* temp = curl_easy_escape(curl, text, strlen(text));
char* data = curl_easy_escape(curl, temp, strlen(temp));
curl_free(temp);
//拼接POST请求发送的数据
char* postdata;
asprintf(&postdata, "tex=%s&lan=zh&cuid=hqyj&ctp=1&aue=6&tok=%s&per=5", data, token);
curl_free(data);
//启动播放软件,通过管道写入音频数据
FILE* fp = popen("aplay -q -", "w");
if (fp == NULL)
{
perror("fopen() failed");
return;
}
curl_easy_setopt(curl, CURLOPT_URL, "https://tsn.baidu.com/text2audio");
//配置客户端,使用HTTP的POST方法发送请求消息
curl_easy_setopt(curl, CURLOPT_POST, 1);
//配置需要通过POST请求消息发送给服务器的数据
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
//发送HTTP请求消息,等待服务器的响应消息
CURLcode error = curl_easy_perform(curl);
if (error != CURLE_OK)
{
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(error));
curl_easy_cleanup(curl);
free(postdata);
pclose(fp);
return;
}
//释放HTTP客户端申请的资源
curl_easy_cleanup(curl);
free(postdata);
//关闭管道
pclose(fp);
}
//百度语音合成API,一次最多可以转换2048个字符
#define LINE_LEN 2048
//保存输入字符串的缓冲区
char line[LINE_LEN];
int main()
{
//语音合成API的免费配额10QPS,大家尽量使用自己申请的APIKEY和SECRETKEY,同时使用人数太多会出错
char* token = get_token("udYDpg9Qoenrq3kQcgHGG1EL", "PCLjKGxY8REMydCHkqG4crSbbAogXULs");
if (NULL == token)
{
return EXIT_FAILURE;
}
//puts(token);
//从标准输入读取一行字符
while(fgets(line, LINE_LEN, stdin) != NULL)
{
//将读入的文本转换为语音
text2speech(token, line);
}
free(token);
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。