• 大小: 6KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: 其他
  • 标签: 语音合成  C  C++  

资源简介

代码简介:本代码使用纯C实现语音的合成(女声,话质可以),可以在windwos和linux下直接使用。编译生成可执行程序(修改初始文本位置、生成位置即可)

资源截图

代码片段和文件信息

/*
* 语音合成(Text To Speech,TTS)技术能够自动将任意文字实时转换为连续的
* 自然语音,是一种能够在任何时间、任何地点,向任何人提供语音信息服务的
* 高效便捷手段,非常符合信息时代海量数据、动态更新和个性化查询的需求。
*/

#include 
#include 
#include 
#include 
#include 

#include “qtts.h“
#include “msp_cmn.h“
#include “msp_errors.h“

#ifdef _WIN64
#pragma comment(lib“../../libs/msc_x64.lib“)//x64
#else
#pragma comment(lib“../../libs/msc.lib“)//x86
#endif

/* wav音频头部格式 */
typedef struct _wave_pcm_hdr
{
char            riff[4];                // = “RIFF“
int size_8;                 // = FileSize - 8
char            wave[4];                // = “WAVE“
char            fmt[4];                 // = “fmt “
int fmt_size; // = 下一个结构体的大小 : 16

short int       format_tag;             // = PCM : 1
short int       channels;               // = 通道数 : 1
int samples_per_sec;        // = 采样率 : 8000 | 6000 | 11025 | 16000
int avg_bytes_per_sec;      // = 每秒字节数 : samples_per_sec * bits_per_sample / 8
short int       block_align;            // = 每采样点字节数 : wBitsPerSample / 8
short int       bits_per_sample;        // = 量化比特数: 8 | 16

char            data[4];                // = “data“;
int data_size;              // = 纯数据长度 : FileSize - 44 
} wave_pcm_hdr;

/* 默认wav音频头部数据 */
wave_pcm_hdr default_wav_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 text_to_speech(const char* src_text const char* des_path const char* params)
{
int          ret          = -1;
FILE*        fp           = NULL;
const char*  sessionID    = NULL;
unsigned int audio_len    = 0;
wave_pcm_hdr wav_hdr      = default_wav_hdr;
int          synth_status = MSP_TTS_FLAG_STILL_HAVE_DATA;

if (NULL == src_text || NULL == des_path)
{
printf(“params is error!\n“);
return ret;
}
fp = fopen(des_path “wb“);
if (NULL == fp)
{
printf(“open %s error.\n“ des_path);
return ret;
}
/* 开始合成 */
sessionID = QTTSSessionBegin(params &ret);
if (MSP_SUCCESS != ret)
{
printf(“QTTSSessionBegin failed error code: %d.\n“ ret);
fclose(fp);
return ret;
}
ret = QTTSTextPut(sessionID src_text (unsigned int)strlen(src_text) NULL);
if (MSP_SUCCESS != ret)
{
printf(“QTTSTextPut failed error code: %d.\n“ret);
QTTSSessionEnd(sessionID “TextPutError“);
fclose(fp);
return ret;
}
printf(“正在合成 ...\n“);
fwrite(&wav_hdr sizeof(wav_hdr) 1 fp); //添加wav音频头,使用采样率为16000
while (1) 
{
/* 获取合成音频 */
const void* d

评论

共有 条评论