科大讯飞离线语音合成使用体验


TTS语音合成模型绝大部分在CPU跑,消耗CPU的资源,能用到GPU资源的,还是在一些比方瑞芯微3588等较强大的MCU上。客户需求在1106上跑离线TTS合成功能,确实没有合适的方案,最终试用科大讯飞的离线语音合成SDK,无论在合成声音效果,和合成效率上,都非常出色。40个中文汉字,3s左右就能合成。


问题:

1、鉴权不过,首先是APPID不能填没有申请过的APPID;

第二是APISecret和APIKey参数不能填反了。


2、PCM录音文件,需要添加WAV头才能播放;

        int fd_header = open(file_output.c_str(), O_WRONLY, 0666);
        int sample_frame_size = 320;//32000;
        write_header(fd_header, total_recorded_data_len, total_recorded_data_len + 44, 16000, 1, 
        sample_frame_size);
        close(fd_header);
        
        
        
        
void write_header(int fd, long totalAudioLen,
		long totalDataLen, int longSampleRate, int channels, int byteRate){
	unsigned char header[44];
	header[0] = 'R'; // RIFF/WAVE header
	header[1] = 'I';
	header[2] = 'F';
	header[3] = 'F';
	header[4] = (byte) (totalDataLen & 0xff);
	header[5] = (byte) ((totalDataLen >> 8) & 0xff);
	header[6] = (byte) ((totalDataLen >> 16) & 0xff);
	header[7] = (byte) ((totalDataLen >> 24) & 0xff);
	header[8] = 'W';
	header[9] = 'A';
	header[10] = 'V';
	header[11] = 'E';
	header[12] = 'f'; // 'fmt ' chunk
	header[13] = 'm';
	header[14] = 't';
	header[15] = ' ';
	header[16] = 16; // 4 bytes: size of 'fmt ' chunk
	header[17] = 0;
	header[18] = 0;
	header[19] = 0;
	header[20] = 1; // format = 1
	header[21] = 0;
	header[22] = (byte) channels;
	header[23] = 0;
	header[24] = (byte) (longSampleRate & 0xff);
	header[25] = (byte) ((longSampleRate >> 8) & 0xff);
	header[26] = (byte) ((longSampleRate >> 16) & 0xff);
	header[27] = (byte) ((longSampleRate >> 24) & 0xff);
	header[28] = (byte) (byteRate & 0xff);
	header[29] = (byte) ((byteRate >> 8) & 0xff);
	header[30] = (byte) ((byteRate >> 16) & 0xff);
	header[31] = (byte) ((byteRate >> 24) & 0xff);
	header[32] = (byte) (2 * 16 / 8); // block align
	header[33] = 0;
	header[34] = 16; // bits per sample
	header[35] = 0;
	header[36] = 'd';
	header[37] = 'a';
	header[38] = 't';
	header[39] = 'a';
	header[40] = (byte) (totalAudioLen & 0xff);
	header[41] = (byte) ((totalAudioLen >> 8) & 0xff);
	header[42] = (byte) ((totalAudioLen >> 16) & 0xff);
	header[43] = (byte) ((totalAudioLen >> 24) & 0xff);

    file_write(fd, header, 44);
}




3、中文参数必须是UTF8编码。




-------------------广告线---------------
项目、合作,欢迎勾搭,邮箱:promall@qq.com


本文为呱牛笔记原创文章,转载无需和我联系,但请注明来自呱牛笔记 ,it3q.com

请先登录后发表评论
  • 最新评论
  • 总共0条评论