1、wav音频文件的格式

wav文件由文件头采样数据2部分组成。

文件头又分为RIFF(Resource Interchange File Format)、WAVE文件标识段 和 声音数据格式说明段组成。

各段的起始地址分别由RIFF标识符、WAVE标识符、以及波形格式标识符(FMT)标定。

(1)文件头格式

注意:下面的地址是连续的

虽然上图给出的数据标识符起始地址刚好是文件头的末地址+1,但并不代表总是这样。

因此,我们在读取数据时最好是找到数据标识符,该标识符的4个字节刚好是'd'、‘a’、‘t’、‘a’。

(2)数据格式

wav结构体定义:

typedef struct _wave_pcm_hdr
{char    riff[4]; //资源交换文件标志int     size_8;  //从下个地址开始到文件结尾的字节数  char    wave[4]; //wave文件标识  char    fmt[4];  //波形格式标识  int     fmt_size;//过滤字节(一般为00000010H)  short int formate_tag;      //格式种类,值为1时,表示PCM线性编码  short int channels;         //通道数,单声道为1,双声道为2  int       samples_per_sec;  //采样频率  int       avg_bytes_per_sec;//数据传输率 (每秒字节=采样频率×每个样本字节数)  short int block_align;      //块对齐字节数 = channles * bit_samp / 8  short int bits_per_sample;  //bits per sample (又称量化位数) char  data[4];int   data_size;
}_wave_pcm_hdr;
_wave_pcm_hdr default_wave_hdr=
{{ 'R', 'I', 'F', 'F' },0,{ 'W', 'A', 'V', 'E' },{ 'f', 'm', 't', ' ' },16,1,1,16000,32000,2,16,{ 'd', 'a', 't', 'a' },0};

代码:

#include "stdafx.h"
#include "msp_cmn.h"
#include "msp_errors.h"
#include "qtts.h"
#include <string>
#include <Windows.h>
#ifdef _WIN64
#pragma comment (lib,"msc_x64.lib")
#else
#pragma comment (lib,"msc.lib")
#endif // _WIN64#pragma comment(lib,"WinMM.lib")
typedef struct _wave_pcm_hdr
{char    riff[4]; //资源交换文件标志int     size_8;  //从下个地址开始到文件结尾的字节数  char    wave[4]; //wave文件标识  char    fmt[4];  //波形格式标识  int     fmt_size;//过滤字节(一般为00000010H)  short int formate_tag;      //格式种类,值为1时,表示PCM线性编码  short int channels;         //通道数,单声道为1,双声道为2  int       samples_per_sec;  //采样频率  int       avg_bytes_per_sec;//数据传输率 (每秒字节=采样频率×每个样本字节数)  short int block_align;      //块对齐字节数 = channles * bit_samp / 8  short int bits_per_sample;  //bits per sample (又称量化位数) char  data[4];int   data_size;
}_wave_pcm_hdr;
_wave_pcm_hdr default_wave_hdr=
{{ 'R', 'I', 'F', 'F' },0,{ 'W', 'A', 'V', 'E' },{ 'f', 'm', 't', ' ' },16,1,1,16000,32000,2,16,{ 'd', 'a', 't', 'a' },0};int _tmain(int argc, _TCHAR* argv[])
{const char* usr = NULL;const char* pwd = NULL;const char* lgi_param = "appid = 58610d7f";int ret = MSPLogin(usr, pwd, lgi_param);if (MSP_SUCCESS != ret){printf("MSPLogin failed, error code is: %d", ret);}const char * ssb_param = "voice_name = xiaoyan, aue = speex-wb;7, sample_rate = 16000, speed = 50, volume = 50, pitch = 50, rdn = 2";ret = -1;const char * sessionID = QTTSSessionBegin(ssb_param, &ret);if (MSP_SUCCESS != ret){printf("QTTSSessionBegin failed, error code is : %d", ret);}const char* src_text;char ch[1000];src_text=gets(ch);unsigned int text_len = strlen(src_text); //textLen参数为合成文本所占字节数ret = QTTSTextPut(sessionID, src_text, text_len, NULL);if (MSP_SUCCESS != ret){printf("QTTSTextPut failed, error code is : %d", ret);}FILE* fp = fopen("112.wav", "wb");fwrite(&default_wave_hdr, sizeof(default_wave_hdr),1,fp);unsigned int audio_len = 0;int synth_status = 0;while (1){const void * data = QTTSAudioGet(sessionID, &audio_len, &synth_status, &ret);if (NULL != data){fwrite(data, audio_len, 1, fp);default_wave_hdr.data_size += audio_len;}if (MSP_TTS_FLAG_DATA_END == synth_status || MSP_SUCCESS != ret){break;}}fclose(fp);default_wave_hdr.size_8 += default_wave_hdr.data_size + (sizeof(default_wave_hdr) - 8);fseek(fp, 4, 0);fwrite(&default_wave_hdr.size_8, sizeof(default_wave_hdr.size_8), 1, fp);fseek(fp, 40, 0);fwrite(&default_wave_hdr.data_size, sizeof(default_wave_hdr.data_size), 1, fp);fclose(fp);ret = QTTSSessionEnd(sessionID, "normal end");if (MSP_SUCCESS != ret){printf("QTTSSessionEnd failed, error code is : %d", ret);}PlaySoundA("qweqwr.wav", NULL, SND_ALIAS);ret = MSPLogout();if (MSP_SUCCESS != ret){printf("MSPLogout failed, error code is: %d", ret);}system("pause");return 0;
}

代码

转载于:https://www.cnblogs.com/ye-ming/p/7851851.html

科大讯飞 文字转语音相关推荐

  1. 【虚幻引擎】UE4/UE5科大讯飞文字合成语音

    一.链接地址 链接:https://pan.baidu.com/s/15Qoc48x3DLpw4eW1qHXInQ  提取码:jqpx  B站视频链接:https://space.bilibili.c ...

  2. 科大讯飞webAPI文字转语音

    可能会遇到的坑 原文链接 自行了解 js webWorker线程 我的目录结构 TTS.js代码 // 科大讯飞 文字->语音 import {downloadPCM, downloadWAV} ...

  3. 基于ROS2和科大讯飞的文字转语音TTS入门教程

    基于ROS2和科大讯飞的语音转文字入门教程 基于ROS2和科大讯飞的文字转语音TTS入门教程 1.环境搭建 2.创建工程 3.编译和执行 基于ROS2和科大讯飞的文字转语音TTS入门教程 本文将展示, ...

  4. python 语音转文字_python使用科大讯飞语音合成文字转语音

    #讯飞文字转语音 import base64 import json import time import hashlib import urllib.request import urllib.pa ...

  5. 科大讯飞免切换语音输入,留住更美乡音!

    原标题:科大讯飞免切换语音输入,留住更美乡音! 随着短视频的火爆,近日, 讯飞输入法解锁高效语音输入,讯飞输入法十周年之际,为回馈广大用户,抖音挑战赛#这个语速太烫嘴 快语速挑战赛即日上线.小伙伴们如 ...

  6. Android百度语音集成——文字转语音

    项目涉及文字转语音的需求,用Android原生提供的TTS生成的语音太单调,机器声音太明显,故寻求第三方更好的支持,用科大讯飞的语音包收费,百度语音免费而且不限制调用次数,主页鲜明说永久免费的智能语音 ...

  7. Android 文字转语音2种方式

    今天在开发中做了一个文字转为语音的功能,入了很多坑. 首先我采用的是科大讯飞的在线语音合成技术.写完之后他可以在低版本的手机上读出来,但是再高版本的7.0以上就读不出来,都听不懂再读什么. 下面贴出我 ...

  8. Android之讯飞语音-文字转语音(不用另外安装语音合成包apk)遇到的问题

    Android之讯飞语音-文字转语音 <!-- 文章内容 --><div data-note-content="" class="show-conten ...

  9. Python实现文字转语音功能

    这是一篇简单的Python文字(汉字)转语音教程,当然对于其他语言工具在实现的方法上也是一样的 . 在自然语言处理上,文字.音频互转是一个很关键的技术点.对于语音转文字,这个个人实现较为困难,我们可以 ...

  10. android 文字转语音(中文) TextSpeech

    1.介绍 TTS是Text To Speech的缩写,即"从文本到语音",是人机对话的一部分,让机器能够说话. 它是同时运用语言学和心理学的杰出之作,在内置芯片的支持之下,通过神经 ...

最新文章

  1. 在一个数组中找出和为目标值的那 两个 整数,并返回他们的数组下标python代码(Leetcode1)
  2. VTK:网格之DeformPointSet
  3. c语言中变量有几种存储方式,C语言变量的存储类别有哪些详细资料介绍
  4. python统计出现的中文标点_Python处理中文标点符号大集合
  5. PAT 1009 说反话
  6. php 日期转毫秒_高性能的PHP日志系统 SeasLog 使用
  7. 2012.4.17内存相关(二)
  8. 学生选课系统的源码---架构图MVC1
  9. iOS进阶面试题----Block部分
  10. java支付管理有源码_一款java版可接入微信、支付宝的三方支付系统项目
  11. 最新喜鹊相亲交友平台微信小程序源码V2.1.2版
  12. 【C语言】飞翔的小鸟游戏
  13. Git问题Everything up-to-date正确解决方法
  14. 手机版kali nethunter刷入
  15. 前端导出pdf以及导出内容截断的解决办法
  16. 【深度学习】语义分割:论文阅读:(CVPR 2022) MPViT(CNN+Transformer):用于密集预测的多路径视觉Transformer
  17. 【SpringBoot2—junit5断言、前置条件】
  18. 微信公众号网页IOS点击无反应的坑
  19. 学渣的刷题之旅 leetcode刷题 66. 加一
  20. 2021记录阿里云虚拟专用服务器的初使用

热门文章

  1. Ansible详解(七)——Ansible palybook简单使用
  2. 怎样快速学习shell语言
  3. 八、JVM视角浅理解并发和锁
  4. linux dhcp的详细配置
  5. 如何用循环语句输出一个三角形
  6. 统一软件开发过程(rup)理解
  7. ubuntu 10.04 源
  8. 【转】Android 基于Socket的聊天室
  9. Transact-SQL编程规范
  10. 看电影的计算机配置,专门看电影的电脑主机需要什么配置?