久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
stm32單片機(jī)裸機(jī)調(diào)用百度語(yǔ)音識(shí)別接口和合成接口的部分代碼實(shí)現(xiàn)
[打印本頁(yè)]
作者:
net2uizoo
時(shí)間:
2018-11-8 19:52
標(biāo)題:
stm32單片機(jī)裸機(jī)調(diào)用百度語(yǔ)音識(shí)別接口和合成接口的部分代碼實(shí)現(xiàn)
stm32單片機(jī)裸機(jī)調(diào)用百度語(yǔ)音識(shí)別接口和合成接口的部分代碼實(shí)現(xiàn)
int8_t WebClient(const char *url, const char *post, uint8_t **pageBuf,uint8_t is_upload_wav,uint32_t wav_len1)
{
uint32_t i;
uint8_t server_addr[200];//這2個(gè)放在局部變量里,防止多線程沖突:
uint8_t web_addr[1200];//有的tts的二次url編碼后的請(qǐng)求長(zhǎng)度很長(zhǎng),所以這個(gè)大點(diǎn)
ip_addr_t server_ip;
uint8_t ishttps;
uint16_t start_char_i;
uint16_t start_len1;
uint32_t ret_lens;
err_t err ;
uint32_t j, k;
uint32_t head_and_wav_len1;
struct netconn *conn = NULL;
struct netbuf *inBuf = NULL;
struct pbuf *q;
char *request = NULL;
uint32_t recvPos = 0;
uint8_t *recvBuf;
err_t err_msg;
while(wifi_88w8801_sta.ip_addr.addr == 0x00)
{
return HTTP_ROUTE_NOT_FOUND;
}
if(strncasecmp((const char *)url, "http://", 7) == 0||strncasecmp((const char *)url, "https://", 8) == 0) /* 只處理http協(xié)議 */
{
if(strncasecmp((const char *)url, "http://", 7) == 0){
ishttps=0;
start_char_i=4;
start_len1=7;
}
if(strncasecmp((const char *)url, "https://", 8) == 0){
ishttps=1;
start_char_i=5;
start_len1=8;
}
if(ishttps==0){
////改為全局變量式,可以防止內(nèi)存泄露:
//server_addr = pvPortMalloc2 strlen(url) - 7);
}else{
////改為全局變量式,可以防止內(nèi)存泄露:
//server_addr = pvPortMalloc2 strlen(url) - 8);
}
////改為全局變量式,可以防止內(nèi)存泄露:
// if(server_addr == NULL) {
//
// printf("HTTP_OUT_OF_RAM in malloc server_addr");
//
// return HTTP_OUT_OF_RAM;
//
//
// }
printf("proceess 1\r\n");
/* 1)提取服務(wù)器部分 */
for(i = start_char_i; url[i]; ++i)
{
if (url[i] == ':' && url[i + 1] == '/' && url[i + 2] == '/')
{
for (i = i + 3, j = 0; url[i] > 32 && url[i] < 127 && url[i] != '/'; //32-127間的ascII碼的字符
++i, ++j)
{
server_addr[j] = url[i];
if (url[i] == '@') /* 服務(wù)器基礎(chǔ)認(rèn)證符號(hào),我們做不了,遇到就錯(cuò)誤. */
{
return HTTP_AUTH_NOT_SUPPORT;
}
}
server_addr[j] = '\0';
////改為全局變量式,可以防止內(nèi)存泄露:
//web_addr = pvPortMalloc2 strlen(url) - start_len1 - strlen((const char *)server_addr));
//if(web_addr == NULL) return HTTP_OUT_OF_RAM;
for (k = start_len1 + j; k < (strlen(url)); k++) /* 后半部分提取 */
{
web_addr[k - start_len1 - j] = url[k];
}
web_addr[k - start_len1 - j] = '\0';
while (--j)
{
if (server_addr[j] == ':')//??過濾端口號(hào)?
{
server_addr[j] = '\0';
}
}
}
}
if(strlen((const char *)server_addr) < 2) /* 最短網(wǎng)址3.cn */
{
printf("HTTP_SERVER_ADDR_ERROR\r\n");
printf(server_addr);
////改為全局變量式,可以防止內(nèi)存泄露:
//vPortFree2 server_addr);
////改為全局變量式,可以防止內(nèi)存泄露:
// if(web_addr == NULL) {vPortFree2 web_addr); }
/* 這么短,還不一定提取到了這個(gè). */
return HTTP_SERVER_ADDR_ERROR;
}
printf("\r\nweb host:");
printf(server_addr);
/* 2)查詢IP */
netconn_gethostbyname((const char *)server_addr, &server_ip);
//
// server_ip.addr=0;
// err = dns_gethostbyname((const char *)server_addr, &server_ip,dns_foundB , NULL);//dns_foundB
// if (err == ERR_OK)
// {
// printf("In cache! IP: %s\n", ipaddr_ntoa(&server_ip));
// }
//
//
// while(server_ip.addr==0){
//
//
// }
//
printf("get a IP: %s\n", ipaddr_ntoa(&server_ip));
if(is_upload_wav==1){
/* 3)構(gòu)造訪問頭 */
request = pvPortMalloc2( strlen(url) + wav_len1+1024); /* 頭所需內(nèi)存大小. */
}else if(is_upload_wav==0){
request = pvPortMalloc2( strlen(url) + 1024); /* 頭所需內(nèi)存大小. */
}else if(is_upload_wav==2){
request = pvPortMalloc2( strlen(url) + 1024); /* 頭所需內(nèi)存大小. */
}
if(request == NULL)
{
printf("HTTP_OUT_OF_RAM in request Malloc.");
return HTTP_OUT_OF_RAM;
}
if(is_upload_wav==1){
#if upload_Wav0_or_pcm1 ==0
sprintf(request, "POST %s HTTP/1.0\r\nHost: %s\r\nUser-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50\r\nContent-Length: %d\r\nContent-Type: audio/wav;rate=8000\r\n\r\n", web_addr, server_addr, wav_len1);
#endif
#if upload_Wav0_or_pcm1 ==1
sprintf(request, "POST %s HTTP/1.0\r\nHost: %s\r\nUser-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50\r\nContent-Length: %d\r\nContent-Type: audio/pcm;rate=8000\r\n\r\n", web_addr, server_addr, wav_len1);
#endif
head_and_wav_len1=strlen(request)+wav_len1;
memcpy( &request[strlen(request)],post,wav_len1);
}else if(is_upload_wav==0){
if(post != NULL){
sprintf(request, "POST %s HTTP/1.0\r\nHost: %s\r\nUser-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50\r\nContent-Length: %d\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n%s", web_addr, server_addr, strlen(post), post);
// printf( "POST %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: Mozilla/5.0 (lwip;STM32) TaterLi\r\nContent-Length: %d\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n%s", web_addr, server_addr, strlen(post), post);
}else{
sprintf(request, "GET %s HTTP/1.0\r\nHost: %s\r\nUser-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50\r\n\r\n", web_addr, server_addr);
}
}else if(is_upload_wav==2){
sprintf(request, "GET %s HTTP/1.0\r\nHost: %s\r\nUser-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50\r\n\r\n", web_addr, server_addr);
MP3_return_data_len=0;
}
//vPortFree2 (server_addr);
if(web_addr != NULL)
{
/* 萬(wàn)一沒提取到,就是NULL,如果是NULL,那么也不用繼續(xù)了. */
////改為全局變量式,可以防止內(nèi)存泄露:
//vPortFree2 web_addr);
}
else
{
vPortFree2 (request);
printf("HTTP_NOT_VALID_ADDR");
return HTTP_NOT_VALID_ADDR;
}
/* 4)開始訪問 */
conn = netconn_new(NETCONN_TCP);
err_msg = netconn_connect(conn, &server_ip, 80); /* 目前也只能支持80端口,比較常用,不考慮特殊情況. */
if (err_msg == ERR_OK)
{
// struct netbuf *inBuf_g = NULL;
if(is_upload_wav==1){
netconn_write(conn, request, head_and_wav_len1, NETCONN_COPY);
}else if(is_upload_wav==0){
netconn_write(conn, request, strlen((char *)request), NETCONN_COPY);
}else if(is_upload_wav==2){
netconn_write(conn, request, strlen((char *)request), NETCONN_COPY);
}
vPortFree2 (request);
conn->recv_timeout = 15000;//15s
recvPos = 0;
if(is_upload_wav==2){
u32 offsetptr;
void *data;
u16_t len;
recvPos = 0;
ret_lens=0;
offsetptr=0;
while(1)
{
err=netconn_recv(conn, &inBuf);
if(inBuf==NULL){
break;
}
do
{
netbuf_data(inBuf, &data, &len);
memcpy(MP3_return_data+ret_lens,data,len);
ret_lens+=len;
}
while (netbuf_next(inBuf) >= 0);
printf("ret_lens=%d\r\n",ret_lens);
netbuf_delete(inBuf);
}
// printf (MP3_return_data);
netconn_close(conn);
netconn_delete(conn);
// netbuf_delete(inBuf);
/* 5)分析數(shù)據(jù)(分析HTTP頭,暫時(shí)不打算支持301之類的) */
for(i = 0; MP3_return_data[i]; ++i)
{
if (MP3_return_data[i] == '2' && MP3_return_data[i + 1] == '0' && MP3_return_data[i + 2] == '0')
{
/* 證明200 OK */
for(; MP3_return_data[i]!='\0'; ++i)
{
/* 響應(yīng)頭的結(jié)束也是兩個(gè)回車 */
if(MP3_return_data[i] == '\r' && MP3_return_data[i + 1] == '\n' && MP3_return_data[i + 2] == '\r' && MP3_return_data[i + 3] == '\n')
{
/* 6)復(fù)制正文內(nèi)容 */
i += 4;
k = ret_lens - i;
if(k == 0) return HTTP_NO_CONTENT;
MP3_return_data_len=k;
MP3_return_data_start_offset=i;
printf("MP3_return_data_len=%d\r\n",MP3_return_data_len);
//printf(MP3_return_data);
return HTTP_OK;
}
}
}
}
}else{
void *data;
u16_t len;
u32 offsetptr;
recvBuf = pvPortMalloc2( 1024*1024);
recvPos = 0;
ret_lens=0;
offsetptr=0;
while(1)
{
netconn_recv(conn, &inBuf);
if(inBuf==NULL){
break;
}
do
{
netbuf_data(inBuf, &data, &len);
memcpy(recvBuf+ret_lens,data,len);
ret_lens+=len;
}
while (netbuf_next(inBuf) >= 0);
recvBuf[ret_lens]='\0';
netbuf_delete(inBuf);
}
netconn_close(conn);
netconn_delete(conn);
// if(err_msg != ERR_OK) {
//
// printf("HTTP_OUT_OF_RAM in err_msg != ERR_OK");
//
// return HTTP_OUT_OF_RAM;
//
//
//
// }
/* 5)分析數(shù)據(jù)(分析HTTP頭,暫時(shí)不打算支持301之類的) */
for(i = 0; recvBuf[i]; ++i)
{
if (recvBuf[i] == '2' && recvBuf[i + 1] == '0' && recvBuf[i + 2] == '0')
{
/* 證明200 OK */
for(; recvBuf[i]!='\0'; ++i)
{
/* 響應(yīng)頭的結(jié)束也是兩個(gè)回車 */
if(recvBuf[i] == '\r' && recvBuf[i + 1] == '\n' && recvBuf[i + 2] == '\r' && recvBuf[i + 3] == '\n')
{
/* 6)復(fù)制正文內(nèi)容 */
i += 4;
k = ret_lens - i;
if(k == 0) return HTTP_NO_CONTENT;
*pageBuf = pvPortMalloc2 (k);
if(*pageBuf == NULL)
{
vPortFree2 (recvBuf);
printf("HTTP_OUT_OF_RAM in malloc pageBuf");
return HTTP_OUT_OF_RAM;
}
memset((char *)*pageBuf,0,k);
memcpy((char *)*pageBuf, (const char *)recvBuf + i, k); /* 用HTTP1.0是沒http chunked response的.方便處理,否則還要分段接收網(wǎng)頁(yè),大的網(wǎng)頁(yè)反正MCU也接不下. */
vPortFree2 (recvBuf);
((char *)*pageBuf)[k]='\0';
return HTTP_OK;
}
}
}
}
printf("NOY_HTTP_OK:");
printf(recvBuf);
if(recvBuf != NULL) {vPortFree2 (recvBuf);}
}
return HTTP_NOT_200OK;
}
else
{
vPortFree2 (request);
printf("HTTP_SERVER_REFUSE");
return HTTP_SERVER_REFUSE;
}
}
else
{
printf("HTTPS_NOT_SUPPORT");
return HTTPS_NOT_SUPPORT;
}
}
復(fù)制代碼
上面這個(gè)實(shí)現(xiàn)了單片機(jī)調(diào)用網(wǎng)站地址并返回網(wǎng)頁(yè)內(nèi)容,下面就用這個(gè)函數(shù)具體調(diào)用百度
http://vop.baidu.com/server_api?dev_pid=1536&cuid=%s&token=%s
接口,
哈,只能展示這么多,更詳細(xì)支持請(qǐng)聯(lián)系我 qq790861133 ,或進(jìn)入 我網(wǎng)店 dianzi001購(gòu)買我的百度語(yǔ)音識(shí)別模塊
void process_asr(){
int err = HTTP_OK;
uint16_t ret_code1;
// printf("start ASR...");
//------------------------------------------------------------------------------------
reflsh_token(0);
memset(urlgg,'\0',urlchar_maxlen);
//dev_pid=1536是普通話,1537 =普通話(純中文識(shí)別),dev_pid=1936是遠(yuǎn)場(chǎng)普通話
sprintf(urlgg,"http://vop.baidu.com/server_api?dev_pid=1536&cuid=%s&token=%s",cuid,g_access_token);
err = WebClient(urlgg, reco_temp_ram, &abuf,1,reco_temp_ram_len);
if(abuf != NULL && err == HTTP_OK)
{
作者:
net2uizoo
時(shí)間:
2019-5-4 21:59
可以淘寶搜索 開開語(yǔ)音識(shí)別 即可找到我們
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲综合国产
|
日韩欧美一区在线
|
亚洲成人精品久久久
|
国产中文一区二区三区
|
九九热这里只有精品6
|
欧美激情精品久久久久久变态
|
欧美日韩淫片
|
日本精品久久久久久久
|
夜夜夜夜夜夜曰天天天
|
成人精品一区二区三区中文字幕
|
国产精品一区二
|
精品欧美一区免费观看α√
|
欧美一级淫片007
|
成人在线一区二区
|
综合色在线
|
国产亚洲精品91
|
国产精久久久久久
|
久久青视频
|
亚洲精品久久久久久一区二区
|
91免费看片
|
黄色骚片
|
黄色免费在线观看网站
|
99reav
|
av在线天堂
|
黄色网址在线免费观看
|
国产精品久久久久久婷婷天堂
|
久久99这里只有精品
|
欧美在线观看一区
|
久久性
|
影视一区
|
a级大片免费观看
|
欧美无乱码久久久免费午夜一区
|
亚洲在线观看视频
|
久久精品国产久精国产
|
中文字幕99
|
男女污网站
|
免费a大片
|
аⅴ资源新版在线天堂
|
成人午夜免费在线视频
|
久久大陆
|
水蜜桃亚洲一二三四在线
|