1.可执行cc main.c cJSON.c -o <指定输出文件名> -lcurl编译文件,编译时需添加所有的c程序文件;
2.若编译提示段错误,是因为fp打开之后未关闭,需添加fclose(fp);  free(response);这两句;
3.代码中包含中文时,需要以UTF-8格式保存代码文件;

#include <stdio.h>
#include <stdlib.h> //malloc使用的头文件
#include <curl/curl.h> //libcurl的头文件
#include "cJSON.h" //cJSON的头文件int main(void)
{FILE* fp;//以只写方式打开文件//fp = fopen("hello.txt", "w");//响应消息的地址char* response = NULL;//响应消息的长度size_t resplen = 0;//创建内存文件,当通过文件句柄写入数据时,会自动分配内存fp = open_memstream(&response, &resplen);if (fp == NULL) //打开文件失败,打印错误信息并退出{perror("open_memstream() failed");return EXIT_FAILURE;}//初始化HTTP客户端CURL* curl = curl_easy_init();if (curl == NULL){perror("curl_easy_init() failed");return EXIT_FAILURE;}//准备HTTP请求消息,设置API地址(URI)curl_easy_setopt(curl, CURLOPT_URL, "https://coronavirus-tracker-api.herokuapp.com/v2/latest");//如果不指定写入的文件,libcurl会把服务器响应消息中的内容打印到屏幕上//如果指定了文件句柄,libcurl会把服务器响应消息中的内容写入文件curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);//打印HTTP请求和响应消息头curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);//发送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);return EXIT_FAILURE;}//释放HTTP客户端申请的资源curl_easy_cleanup(curl);//关闭内存文件fclose(fp);puts(response);//解析JSON字符串cJSON* json = cJSON_Parse(response);if (json == NULL){const char* error_pos = cJSON_GetErrorPtr();if (error_pos != NULL){fprintf(stderr, "Error before: %s\n", error_pos);}return EXIT_FAILURE;}cJSON* latest = cJSON_GetObjectItemCaseSensitive(json, "latest");cJSON* comfirmed = cJSON_GetObjectItemCaseSensitive(latest, "confirmed");cJSON* deaths = cJSON_GetObjectItemCaseSensitive(latest, "deaths");printf("确诊人数: %d\n", comfirmed->valueint);printf("死亡人数: %d\n", deaths->valueint);//释放json数据结构占用的内存cJSON_free(json);free(response);return EXIT_SUCCESS;
}

编程规范

如何取名字

1.一致性原则(遵从现有的代码风格,组内统一风格,且尽量不要使用拼音);
2.标识符命名原则(名字的作用域越大,所携带的信息就应该越多);
3.文件命名(建议全部小写,扩展名h/c/cpp);

标识符命名

1.数据类型:
(1)如果类型在使用时不需要访问内部结构,可以使用typedef定义成别名;
(2)函数指针一般使用typedef定义别名,方便使用;
2.宏:头文件中的宏,建议全部大写并使用下划线连接;
3.函数:
(1)采用动作性名字:getTime()get_time();
(2)返回布尔类型的函数,应该反映其返回值情况,如:isdigit();
4.常数:除0和1以外的数,都应该命名。

注释

1.代码本身已经讲明的事情不需要注释;
2.注释要与代码保持一致;

注释文档

可以使用Doxygen生成代码文档或API文档。

排版

不需要太过关注,可以在提交代码前使用clang-formatindent等格式化工具自动修改。

习惯用法

1.头文件Guard Macro;
2.计算数组中的元素个数;
3.优先处理异常情况;
4.遍历数组:从前往后遍历;
5.条件表达式中交换常量和变量的位置(Yoda conditions);
6.使用等宽字体。

智能音箱

工作流程

Mic –> AP(音频处理) –> KWS(关键词检测) –> VAD(语音活动检测) –> ASR(语音识别) –> NLU(自然语言处理) –> NLG(自然语言生成) –> TTS(语音合成) –> Spesker
其中,KWS VAD ASR NLU NLG TTS六个模块在线上完成。

音频处理(Audio Processing),包括回声消除(AEC),波束成形(Beamforming),降噪(NS)等,现在主流采用麦克风阵列实现远场语音交互。
关键词检测(Key Word Spotting, KWS)用于检测”小度小度”、"Hey Siri"之类的关键词,然后唤醒设备并开始对话。
语音活动检测(Voice Activity Detection, VAD)用于识别语音是否结束。KWS和VAD都需要离线检测,避免语音一直上传到云端。
语音识别(Automatic Speech Recognition, ASR) 用来将语音转为文字,目前主流处理方式是使用神经网络。
语音合成(Text To Speech, TTS) 与语音识别相反,用来将文字转为语音。
自然语言处理(Natural Language Understanding, NLU)用于理解人类的自然语言,包括分词、词性标注、句法分析等。
自然语言生成(Natural Language Generation, NLG)用于理解文本后生成自然语言文本,包括自动摘要、机器翻译、问答系统、对话机器人等。

login as: yiyi
yiyi@192.168.51.8's password:
Linux debian 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) x86_64The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Jul  2 18:33:20 2020
yiyi@debian:~$ git clone https://gitee.com/liuyixiao_xpu/XPU-SmartSpeaker-TX3.git
正克隆到 'XPU-SmartSpeaker-TX3'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
展开对象中: 100% (3/3), 完成.
yiyi@debian:~$ cd XPU-SmartSpeaker-
-bash: cd: XPU-SmartSpeaker-: 没有那个文件或目录
yiyi@debian:~$ cd XPU-SmartSpeaker-TX3/
yiyi@debian:~/XPU-SmartSpeaker-TX3$ git init
重新初始化已存在的 Git 仓库于 /home/yiyi/XPU-SmartSpeaker-TX3/.git/
yiyi@debian:~/XPU-SmartSpeaker-TX3$ mkdir 41703030304
yiyi@debian:~/XPU-SmartSpeaker-TX3$ git add 41703030304/
yiyi@debian:~/XPU-SmartSpeaker-TX3$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。无文件要提交,干净的工作区
yiyi@debian:~/XPU-SmartSpeaker-TX3$ GIT ADD 41703030304/
-bash: GIT:未找到命令
yiyi@debian:~/XPU-SmartSpeaker-TX3$ git add 41703030304/
yiyi@debian:~/XPU-SmartSpeaker-TX3$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。无文件要提交,干净的工作区
yiyi@debian:~/XPU-SmartSpeaker-TX3$ ls
41703030304  readme.md
yiyi@debian:~/XPU-SmartSpeaker-TX3$ git commit -m "创建文件夹"
位于分支 master
您的分支与上游分支 'origin/master' 一致。无文件要提交,干净的工作区
yiyi@debian:~/XPU-SmartSpeaker-TX3$ git push
Username for 'https://gitee.com': liuyixiao_xpu
Password for 'https://liuyixiao_xpu@gitee.com':
Everything up-to-date
yiyi@debian:~/XPU-SmartSpeaker-TX3$ sudo apt install alsa-utils
[sudo] yiyi 的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:libasound2 libasound2-data libfftw3-single3 libsamplerate0
建议安装:libasound2-plugins libfftw3-bin libfftw3-dev
下列【新】软件包将被安装:alsa-utils libasound2 libasound2-data libfftw3-single3 libsamplerate0
升级了 0 个软件包,新安装了 5 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 3,175 kB 的归档。
解压缩后会消耗 7,907 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.ustc.edu.cn/debian buster/main amd64 libasound2-data all 1.1.8-1 [59.6 kB]
获取:2 http://mirrors.ustc.edu.cn/debian buster/main amd64 libasound2 amd64 1.1.8-1 [361 kB]
获取:3 http://mirrors.ustc.edu.cn/debian buster/main amd64 libfftw3-single3 amd64 3.3.8-2 [762 kB]
获取:4 http://mirrors.ustc.edu.cn/debian buster/main amd64 libsamplerate0 amd64 0.1.9-2 [949 kB]
获取:5 http://mirrors.ustc.edu.cn/debian buster/main amd64 alsa-utils amd64 1.1.8-2 [1,043 kB]
已下载 3,175 kB,耗时 1秒 (3,590 kB/s)
正在选中未选择的软件包 libasound2-data。
(正在读取数据库 ... 系统当前共安装有 34484 个文件和目录。)
准备解压 .../libasound2-data_1.1.8-1_all.deb  ...
正在解压 libasound2-data (1.1.8-1) ...
正在选中未选择的软件包 libasound2:amd64。
准备解压 .../libasound2_1.1.8-1_amd64.deb  ...
正在解压 libasound2:amd64 (1.1.8-1) ...
正在选中未选择的软件包 libfftw3-single3:amd64。
准备解压 .../libfftw3-single3_3.3.8-2_amd64.deb  ...
正在解压 libfftw3-single3:amd64 (3.3.8-2) ...
正在选中未选择的软件包 libsamplerate0:amd64。
准备解压 .../libsamplerate0_0.1.9-2_amd64.deb  ...
正在解压 libsamplerate0:amd64 (0.1.9-2) ...
正在选中未选择的软件包 alsa-utils。
准备解压 .../alsa-utils_1.1.8-2_amd64.deb  ...
正在解压 alsa-utils (1.1.8-2) ...
正在设置 libfftw3-single3:amd64 (3.3.8-2) ...
正在设置 libasound2-data (1.1.8-1) ...
正在设置 libasound2:amd64 (1.1.8-1) ...
正在设置 libsamplerate0:amd64 (0.1.9-2) ...
正在设置 alsa-utils (1.1.8-2) ...
alsa-restore.service is a disabled or a static unit, not starting it.
alsa-state.service is a disabled or a static unit, not starting it.
正在处理用于 systemd (241-7~deb10u4) 的触发器 ...
正在处理用于 man-db (2.8.5-2) 的触发器 ...
正在处理用于 libc-bin (2.28-10) 的触发器 ...
yiyi@debian:~/XPU-SmartSpeaker-TX3$
yiyi@debian:~/XPU-SmartSpeaker-TX3$ alsamixer
yiyi@debian:~/XPU-SmartSpeaker-TX3$ arecord test.wav
Recording WAVE 'test.wav' : Unsigned 8 bit, Rate 8000 Hz, Mono
^CAborted by signal 中断...
arecord: pcm_read:2145: read error: 被中断的系统调用
yiyi@debian:~/XPU-SmartSpeaker-TX3$ test.wav
-bash: test.wav:未找到命令
yiyi@debian:~/XPU-SmartSpeaker-TX3$ aplay test.wav
Playing WAVE 'test.wav' : Unsigned 8 bit, Rate 8000 Hz, Mono
yiyi@debian:~/XPU-SmartSpeaker-TX3$

实习流程

KWS和VAD

nowboy主页:https://snowboy.kitt.ai/

下载snowboy库

https://github.com/kitt-ai/snowboy

ASR和TTS

https://cloud.baidu.com/

NLU

使用图灵机器人:http://www.turingapi.com/
使用HTTP协议调用机器人对话API。
创建机器人。

安装录音放音程序

sudo apt install alsa-utils
yiyi@debian:~/XPU-SmartSpeaker-TX3$ sudo apt install alsa-utils
[sudo] yiyi 的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:libasound2 libasound2-data libfftw3-single3 libsamplerate0
建议安装:libasound2-plugins libfftw3-bin libfftw3-dev
下列【新】软件包将被安装:alsa-utils libasound2 libasound2-data libfftw3-single3 libsamplerate0
升级了 0 个软件包,新安装了 5 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 3,175 kB 的归档。
解压缩后会消耗 7,907 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.ustc.edu.cn/debian buster/main amd64 libasound2-data all 1.1.8-1 [59.6 kB]
获取:2 http://mirrors.ustc.edu.cn/debian buster/main amd64 libasound2 amd64 1.1.8-1 [361 kB]
获取:3 http://mirrors.ustc.edu.cn/debian buster/main amd64 libfftw3-single3 amd64 3.3.8-2 [762 kB]
获取:4 http://mirrors.ustc.edu.cn/debian buster/main amd64 libsamplerate0 amd64 0.1.9-2 [949 kB]
获取:5 http://mirrors.ustc.edu.cn/debian buster/main amd64 alsa-utils amd64 1.1.8-2 [1,043 kB]
已下载 3,175 kB,耗时 1秒 (3,590 kB/s)
正在选中未选择的软件包 libasound2-data。
(正在读取数据库 ... 系统当前共安装有 34484 个文件和目录。)
准备解压 .../libasound2-data_1.1.8-1_all.deb  ...
正在解压 libasound2-data (1.1.8-1) ...
正在选中未选择的软件包 libasound2:amd64。
准备解压 .../libasound2_1.1.8-1_amd64.deb  ...
正在解压 libasound2:amd64 (1.1.8-1) ...
正在选中未选择的软件包 libfftw3-single3:amd64。
准备解压 .../libfftw3-single3_3.3.8-2_amd64.deb  ...
正在解压 libfftw3-single3:amd64 (3.3.8-2) ...
正在选中未选择的软件包 libsamplerate0:amd64。
准备解压 .../libsamplerate0_0.1.9-2_amd64.deb  ...
正在解压 libsamplerate0:amd64 (0.1.9-2) ...
正在选中未选择的软件包 alsa-utils。
准备解压 .../alsa-utils_1.1.8-2_amd64.deb  ...
正在解压 alsa-utils (1.1.8-2) ...
正在设置 libfftw3-single3:amd64 (3.3.8-2) ...
正在设置 libasound2-data (1.1.8-1) ...
正在设置 libasound2:amd64 (1.1.8-1) ...
正在设置 libsamplerate0:amd64 (0.1.9-2) ...
正在设置 alsa-utils (1.1.8-2) ...
alsa-restore.service is a disabled or a static unit, not starting it.
alsa-state.service is a disabled or a static unit, not starting it.
正在处理用于 systemd (241-7~deb10u4) 的触发器 ...
正在处理用于 man-db (2.8.5-2) 的触发器 ...
正在处理用于 libc-bin (2.28-10) 的触发器 ...
yiyi@debian:~/XPU-SmartSpeaker-TX3$

调节音量

可执行alsamixer进入音量调节界面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3oP3K8lg-1593707630035)(C:\Users\Savio\AppData\Roaming\Typora\typora-user-images\image-20200702223524840.png)]

按M解除静音 上下调整音量、左右调节##master pcm为放音设备设置

sudo reboot  #重启

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sMlwRacx-1593707630036)(C:\Users\Savio\AppData\Roaming\Typora\typora-user-images\image-20200702224738690.png)]

按F4 上下调整音量、左右调节##capture为录音设备设置,越高越清晰

esc退出

可执行aplay <wav格式的音频文件>播放音频;
可执行alsamixer进入音量调节界面,按左右键选中capture,按方向键上下调节音量;
可执行arecord test.wav录制测试音频,按ctrl + c结束录制;

语音合成模块

百度语音合成服务,基于HTTP请求的REST API接口,将文本转换为可以播放的音频文件

合成的文件格式为 mp3,pcm(8k及16k),wav(16k),具体见aue参数。 若您需要其它格式,音频文件的转换方法请参考“语音识别工具”=>“音频文件转码”一节

获取token

// appKey = 4uYEcg1w3BfIx
// appSecret = CoKL5KtB1Hp0https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=4uYEcg1w3BfIx&client_secret=CoKL5KtB1Hp0
{"refresh_token":"4","expires_in":2592000,"session_key":"9mzdWEHgibZFvl9vDkIFuUGa\/FOgKdjNg9U3XH+YWdY5RFmGHr+AdyX9dbl8RcdlVwWQkLcz\/NXa2alp67iKIhivyeG+JA==","access_token":"24.c152fe271687a7f37b6d49b207a181ab.2592000.1596294308.282335-20735574","scope":"audio_voice_assistant_get brain_enhanced_asr audio_tts_post brain_speech_realtime public brain_all_scope picchain_test_picchain_api_scope brain_asr_async wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian ApsMisTest_Test\u6743\u9650 vis-classify_flower lpq_\u5f00\u653e cop_helloScope ApsMis_fangdi_permission smartapp_snsapi_base iop_autocar oauth_tp_app smartapp_smart_game_openapi oauth_sessionkey smartapp_swanid_verify smartapp_opensource_openapi smartapp_opensource_recapi fake_face_detect_\u5f00\u653eScope vis-ocr_\u865a\u62df\u4eba\u7269\u52a9\u7406 idl-video_\u865a\u62df\u4eba\u7269\u52a9\u7406","session_secret":"417cc1924bd3fb7a1ae0c7a0c1dc8395"}

scope中含有audio_tts_post 表示有语音合成能力,没有该audio_tts_post 的token调用接口会返回502错误。 在结果中可以看见 token = 1.a6b7dbd428f731035f771b8d********.86400.1292922000-2346678-124328,在2592000秒(30天)后过期。

"refresh_token":"25.e44cead9cad4a6e7c57b8916f1f46f29.315360000.1909062308.282335-20735574"

鉴权认证机制

获取 Access Token

获取AccessToken 需要您在应用管理界面中新建应用,应用列表中即可查看。

使用语音识别及合成REST API 需要获取 Access Token。Access Token 是用户身份验证和授权的凭证,语音识别采用的是Client Credentials授权方式,即采用应用公钥(Api Key)、密钥获取Access Token,适用于任何带server类型应用,通过此授权方式获取Access Token仅可访问平台授权类的接口,

使用Client Credentials获取Access Token需要应用在其服务端发送请求(推荐用POST方法)到百度OAuth2.0授权服务的“ https://openapi.baidu.com/oauth/2.0/token ”地址上,并带上以下参数:

  • grant_type:必须参数,固定为“client_credentials”;
  • client_id:必须参数,应用的 API Key;
  • client_secret:必须参数,应用的 Secret Key;

例如:

https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHl********LT0vuXV4&client_secret=0rDSjzQ20XUj5i********PQSzr5pVw2

响应数据包如下所示,其中 “access_token” 字段即为请求 REST API 所需的鉴权信息。

有效期内的Access Token 可以任意次重复使用。每一次请求申请一个新的token是一种常见的效率低下的使用方式。 可以申请多个Token, 每个Token相互独立。

默认情况下,Access Token 有效期为30天,开发者需要对 Access Token的有效性进行判断,如果Access Token过期可以重新获取。

例如:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store{
"access_token": "1.a6b7dbd428f731035f771b8d********.86400.1292922000-2346678-124328",
"expires_in": 86400,
"refresh_token": "2.385d55f8615fdfd9edb7c4b********.604800.1293440400-2346678-124328",
"scope": "public",
"session_key": "ANXxSNjwQDugf8615Onqeik********CdlLxn",
"session_secret": "248APxvxjCZ0VEC********aK4oZExMB",
}

具体代码示例可以参见:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu 。注意语音服务的调用地址是https://openapi.baidu.com/oauth/2.0/token

请求方式及参数基本说明

更新时间:2019-11-24

请求方式及参数基本说明

语音合成接口支持 POST 和 GET两种方式, 推荐POST方式请求。 正式地址:http://tsn.baidu.com/text2audio 或 https://tsn.baidu.com/text2audio

  • POST 方式(推荐), 文本小于2048个中文字或者英文数字。
  • GET 方式,拼接后的url总长度不多于1000个字符,不推荐长文本合成使用。

请求方式和参数

上传参数

参数 可需 描述
tex 必填 合成的文本,使用UTF-8编码。小于2048个中文字或者英文数字。(文本在百度服务器内转换为GBK后,长度必须小于4096字节)
tok 必填 开放平台获取到的开发者access_token(见上面的“鉴权认证机制”段落)
cuid 必填 用户唯一标识,用来计算UV值。建议填写能区分用户的机器 MAC 地址或 IMEI 码,长度为60字符以内
ctp 必填 客户端类型选择,web端填写固定值1
lan 必填 固定值zh。语言选择,目前只有中英文混合模式,填写固定值zh
spd 选填 语速,取值0-15,默认为5中语速
pit 选填 音调,取值0-15,默认为5中语调
vol 选填 音量,取值0-15,默认为5中音量
per(基础音库) 选填 度小宇=1,度小美=0,度逍遥=3,度丫丫=4
per(精品音库) 选填 度博文=106,度小童=110,度小萌=111,度米朵=103,度小娇=5
aue 选填 3为mp3格式(默认); 4为pcm-16k;5为pcm-8k;6为wav(内容同pcm-16k); 注意aue=4或者6是语音识别要求的格式,但是音频内容不是语音识别要求的自然人发音,所以识别效果会受影响。

tex字段2次urlencode

由于urlencode有两个标准 RFC 1738和RFC 3986. 百度为了更好地兼容,支持1次及2次urlencode, 其中2次urlencode可以覆盖全部的特殊字符。因而推荐传递tex 参数时做2次urlencode编码。

测试用例:“1+1=2”。 一次urlencode时,“+”可能会没有合成。

POST调用方式(推荐)

将文本以及其他参数写入到body里面,利用html表单的方式将参数传递到服务端。 所有的参数都在body中。body里面的数据为:

tex=***&lan=zh&cuid=***&ctp=1&aue=3&tok=***
tex 原始参数是"百度你好“
第一次urlencode后 tex=%e7%99%be%e5%ba%a6%e4%bd%a0%e5%a5%bd
第二次urlencode后 tex=%25e7%2599%25be%25e5%25ba%25a6%25e4%25bd%25a0%25e5%25a5%25bd

GET调用方式

将所有的参数都填写到URL地址中,可以通过浏览器可以播放合成的语音结果。

https://tsn.baidu.com/text2audio?tex=***&lan=zh&cuid=***&ctp=1&tok=***// 注意tex参数需要按照url参数标准使用url_encode UTF8编码,如合成文字为“百度你好”,url为 http://tsn.baidu.com/text2audio?tex=%e7%99%be%e5%ba%a6%e4%bd%a0%e5%a5%bd&lan=zh&cuid=***&ctp=1&tok=***

返回

需要根据 Content-Type的头部来确定是否服务端合成成功。

如果合成成功,返回的Content-Type以“audio”开头

  • aue =3 ,返回为二进制mp3文件,具体header信息 Content-Type: audio/mp3
  • aue =4 ,返回为二进制pcm文件,具体header信息 Content-Type:audio/basic;codec=pcm;rate=16000;channel=1
  • aue =5 ,返回为二进制pcm文件,具体header信息 Content-Type:audio/basic;codec=pcm;rate=8000;channel=1
  • aue =6 ,返回为二进制wav文件,具体header信息 Content-Type: audio/wav

如果合成出现错误,则会返回json文本,具体header信息为:Content-Type: application/json。其中sn字段主要用于DEBUG追查问题,如果出现问题,可以提供sn帮助确认问题。

错误示例:

{"err_no":500,"err_msg":"notsupport.","sn":"abcdefgh","idx":1}

错误码解释

错误码 含义
500 不支持输入
501 输入参数不正确
502 token验证失败
503 合成后端错误

问题反馈说明

  • 您可以反馈至官方论坛。
  • QQ群快速沟通: AI开放平台官网首页底部“QQ支持群”中,查找“百度语音”。
  1. 如果是接口问题,请给出请求的url和返回的json。
  2. 如果是合成的发音错误,可以在 http://ai.baidu.com/tech/speech/tts#tts-demo 上测试。请按照以下格式反馈
【restapi】【发音人】【在线】【错误类型】错误类型 分类:多音字、韵律、儿化音、TN(数字及特殊符号转换错误)、英文badcase、其他

反馈两个badcase示例

【restapi】【标准女声】【在线】【多音字“行”】文本:一行白鹭上青天描述:行念成(xing)期望:一行(hang)白鹭上青天【restapi】【标准女声】【在线】【其他,“人”发音不准确】文本:小主人描述:“人”发音类似“任”期望:小主人(ren2)

中央气象台API:

1.查询省份列表:http://www.nmc.cn/f/rest/province
2.查询城市:http://www.nmc.cn/f/rest/province/+省份id (省份id可以通过查询省份接口查)

http://www.nmc.cn/f/rest/province/ASN

例:http://www.nmc.cn/f/rest/province/ASH 陕西省
3.查询实时天气:http://www.nmc.cn/f/rest/real/+城市ID (城市id通过上个接口查)
例:http://www.nmc.cn/f/rest/real/57036 西安市
4.查询空气质量:http://www.nmc.cn/f/rest/aqi/+城市ID

例:http://www.nmc.cn/f/rest/aqi/57036 西安市

5.查询过去一天天气:http://www.nmc.cn/f/rest/passed/+城市ID

例:http://www.nmc.cn/f/rest/real/57036 西安市

6.查询前后一周天气:http://www.nmc.cn/f/rest/tempchart/+城市ID

例:http://www.nmc.cn/f/rest/real/57036 西安市

作业

调用中央气象台API查询城市空气质量 http://www.nmc.cn/f/rest/aqi

http://www.nmc.cn/f/rest/aqi/53754 绥德县

yiyi@debian:~/XPU-SmartSpeaker-TX3/41703030304$ cc main.c cJSON.c -o aqi -lcurl
yiyi@debian:~/XPU-SmartSpeaker-TX3/41703030304$ ./aqi
调用中央气象台API查询城市空气质量 http://www.nmc.cn/f/rest/aqi
查询地址:陕西省榆林市绥德县
发布时间: 2020-07-02 23:00
空气质量: 37
空气等级: 1
空气质量: 优
预警信息:
yiyi@debian:~/XPU-SmartSpeaker-TX3/41703030304$ cat main.c
#include <stdio.h>
#include <stdlib.h> //malloc使用的头文件
#include <curl/curl.h> //libcurl的头文件
#include "cJSON.h" //cJSON的头文件int main(void)
{//以只写方式打开文件FILE* fp = fopen("aqi.txt", "w");if (fp == NULL) //打开文件失败,打印错误信息并退出{perror("fopen() failed");return 1;}//初始化libcurlCURL* curl = curl_easy_init();if (curl == NULL){perror("curl_easy_init() failed");return 1;}//准备HTTP请求消息,设置API地址(URI)curl_easy_setopt(curl, CURLOPT_URL, "http://www.nmc.cn/f/rest/aqi/53754");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);return 1;}//释放libcurl申请的资源curl_easy_cleanup(curl);//关闭文件fclose(fp);//以只读方式打开文件fp = fopen("aqi.txt", "r");if (fp == NULL) //打开文件失败,打印错误信息并退出{perror("fopen() failed");return 1;}//将文件指针定位到文件末尾fseek(fp, 0, SEEK_END);//获取文件指针的当前位置,即文件的大小long size = ftell(fp);//将文件指针重新定位到文件头fseek(fp, 0, SEEK_SET);//分配文件大小相同的内存空间char* jsonstr = malloc(size);//将文件中的内容读取到内存中fread(jsonstr, 1, size, fp);fclose(fp);//解析JSON字符串cJSON* json = cJSON_Parse(jsonstr);cJSON* forecasttime = cJSON_GetObjectItemCaseSensitive(json, "forecasttime");cJSON* aqi = cJSON_GetObjectItemCaseSensitive(json, "aqi");cJSON* aq = cJSON_GetObjectItemCaseSensitive(json, "aq");cJSON* text = cJSON_GetObjectItemCaseSensitive(json, "text");cJSON* aqiCode = cJSON_GetObjectItemCaseSensitive(json, "aqiCode");printf("调用中央气象台API查询城市空气质量 http://www.nmc.cn/f/rest/aqi \n");printf("查询地址:陕西省榆林市绥德县 \n");printf("发布时间: %s\n", forecasttime->valuestring);printf("空气质量: %d\n", aqi->valueint);printf("空气等级: %d\n", aq->valueint);printf("空气质量: %s\n", text->valuestring);printf("预警信息: %s\n", aqiCode->valuestring);//释放json数据结构占用的内存cJSON_free(json);return 0;
}
yiyi@debian:~/XPU-SmartSpeaker-TX3/41703030304$ cd ..
yiyi@debian:~/XPU-SmartSpeaker-TX3$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。未跟踪的文件:(使用 "git add <文件>..." 以包含要提交的内容)41703030304/提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
yiyi@debian:~/XPU-SmartSpeaker-TX3$ git add 41703030304/
yiyi@debian:~/XPU-SmartSpeaker-TX3$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。要提交的变更:(使用 "git reset HEAD <文件>..." 以取消暂存)新文件:   41703030304/LICENSE新文件:   41703030304/aqi新文件:   41703030304/aqi.txt新文件:   41703030304/cJSON.c新文件:   41703030304/cJSON.h新文件:   41703030304/main.c新文件:   41703030304/test.wav新文件:   41703030304/test2.wav新文件:   "41703030304/\347\254\224\350\256\260.md"yiyi@debian:~/XPU-SmartSpeaker-TX3$ git commit -m "20200702实习作业提交通信工程1703班41703030304刘懿宵"
[master 49e239e] 20200702实习作业提交通信工程1703班41703030304刘懿宵9 files changed, 4185 insertions(+)create mode 100644 41703030304/LICENSEcreate mode 100755 41703030304/aqicreate mode 100644 41703030304/aqi.txtcreate mode 100644 41703030304/cJSON.ccreate mode 100644 41703030304/cJSON.hcreate mode 100644 41703030304/main.ccreate mode 100644 41703030304/test.wavcreate mode 100644 41703030304/test2.wavcreate mode 100644 "41703030304/\347\254\224\350\256\260.md"
yiyi@debian:~/XPU-SmartSpeaker-TX3$ git status
位于分支 master
您的分支领先 'origin/master' 共 1 个提交。(使用 "git push" 来发布您的本地提交)无文件要提交,干净的工作区
yiyi@debian:~/XPU-SmartSpeaker-TX3$ git push
Username for 'https://gitee.com': liuyixiao_xpu
Password for 'https://liuyixiao_xpu@gitee.com':
枚举对象: 16, 完成.
对象计数中: 100% (16/16), 完成.
压缩对象中: 100% (14/14), 完成.
写入对象中: 100% (14/14), 68.47 KiB | 5.27 MiB/s, 完成.
总共 14 (差异 1),复用 0 (差异 0)
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/liuyixiao_xpu/XPU-SmartSpeaker-TX3.git833ec95..04ea31a  master -> master
yiyi@debian:~/XPU-SmartSpeaker-TX3$

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cWxH6JA6-1593707630039)(C:\Users\Savio\AppData\Roaming\Typora\typora-user-images\image-20200703001134531.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1hXj7vsd-1593707630041)(C:\Users\Savio\AppData\Roaming\Typora\typora-user-images\image-20200703001139088.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4VA5p1DV-1593707630041)(C:\Users\Savio\AppData\Roaming\Typora\typora-user-images\image-20200703001149886.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EeaEsB5G-1593707630042)(C:\Users\Savio\AppData\Roaming\Typora\typora-user-images\image-20200703001228004.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3dcXh3Sz-1593707630043)(C:\Users\Savio\AppData\Roaming\Typora\typora-user-images\image-20200703001239500.png)]

XPU-17通信生产实习-智能音箱项目-DAY3相关推荐

  1. 叮当:一个开源的树莓派中文智能音箱项目

    这个项目其实来源于我生活中的一个需求:我每天晚上都会去厨房做一个面包当明天的早餐,当我把用料按顺序准备好放进面包机时,我需要准确预约到明天早上我吃早餐的时间.然而,几乎每次在这个时候我都没有带手机在身 ...

  2. dingdang robot:一个开源的中文智能音箱项目

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:潘伟洲 免责说明:本文介绍的 dingdang-robot 与公司的叮当助手没有任何关系. 这个项目其实来源于我生活中的一个需求:我每天 ...

  3. dingdang-robot:一个开源的中文智能音箱项目

    2019独角兽企业重金招聘Python工程师标准>>> 欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:潘伟洲  免责说明:本文介绍的 dingdang-robot ...

  4. 转:催熟智能音箱,争夺一个人工智能之梦

    原文:http://36kr.com/p/5079975.html 深圳的硬件方案商吴桥今年很"牛气":接到的合作电话络绎不绝,他拒绝掉的人也数不胜数. 感谢智能音箱.吴桥估摸说, ...

  5. 华为智能音箱真的来了,一大波手机厂商也随后就到

    华为这次终于出手了. 据外媒CNBC报道,华为在2018 IFA柏林消费电子展中公布了一款带路由器的智能音箱AI Cube,并计划今年年底在欧洲出售这款产品,但华为并未透露这款产品是否将在美国或中国推 ...

  6. 阿拉的小闹闹智能闹钟另辟蹊径做智能音箱 但未来或许喜忧参半

    每一个智能音箱的入局者都想打造一款像亚马逊echo这样的爆品,Strategy Analytics显示今年第二季度亚马逊智能音箱出货量达430万台,居全球第一,成为国内外仿效者苦苦追赶的对象. 但是今 ...

  7. 阿拉的小闹闹--智能闹钟另辟蹊径---做智能音箱----- 但未来或许喜忧参半

    阿拉的小闹闹智能闹钟另辟蹊径做智能音箱 但未来或许喜忧参半 每一个智能音箱的入局者都想打造一款像亚马逊echo这样的爆品,Strategy Analytics显示今年第二季度亚马逊智能音箱出货量达43 ...

  8. 竞争激烈的智能音箱市场 华为靠什么杀出重围

    关注网易智能,聚焦AI大事件,读懂下一个大时代! 智能音箱市场的竞争就如同作武侠小说中林立的门派,一直以来都纷争不断. 亚马逊在早期的市场一直处于遥遥领先的地位,在2014年亚马逊Echo已经掀起智能 ...

  9. 京信通信:数据智能为生产调试“增效瘦身”

    摘要: "数据驱动测试优化,突破自动测试边界,赋能智慧测试新模式."--京信智能制造副总经理葛鑫 "进入车间,映入眼帘的是一条长约20 米的 O 型生产线,产线前三名工人 ...

最新文章

  1. 如何在一个表达式中合并两个字典?
  2. Jsoup解析XML
  3. Python之woe:woe库的简介、安装、使用方法之详细攻略
  4. Oracle数据库之多行函数
  5. vue联动切换搜索域
  6. linux gd结构体,U-Boot中gd的定义和使用
  7. php语法基础考试,我的php学习第二十六天——PHP基础语法
  8. jquery学习之事件委派
  9. 【正则】正则表达式基础知识大全
  10. 好用的开源软件_推荐_良心软件
  11. 篮球计时计分器c语言程序,C51的篮球计时计分器程序
  12. Threejs导入OBJ模型出错的一些经验之谈
  13. 5次Shift破解Win7登录密码
  14. 3D动画(CSS3)-animation
  15. 无线路由器信号互相干扰怎么办
  16. 坚定信念,追求自己的理想!让那些坏人去死把!!!
  17. 关于pytorch等环境配置记录
  18. 怎么看电脑是32位还是64位?超级简单的方法!
  19. 建模:蒙特卡洛法求多重积分
  20. 【数据集格式】coco格式转txt格式

热门文章

  1. Linux驱动开发 (面试常见问题整理)
  2. 基于高德地图的行程规划-蚁群算法
  3. 2021/12/9 xss跨站绕过及修复
  4. Linux系统调优——系统整体运行状态排查(七)
  5. 机械制造行业工作流程
  6. android7.隐藏功能,谈谈一加7 Pro的隐藏亮点 这几个功能一定要尝试一下
  7. Postgres -- 如何在 Windows 上安装Postgres数据库 初始化启动数据库
  8. 数据结构之——排序二叉树、平衡二叉树和线索二叉树
  9. 我读《ZOO》、《夏天烟花我的尸体》
  10. JAVA小游戏之扫雷的源代码