Unity 科大讯飞离线语音合成

本文介绍了一种使用C#实现的离线语音合成方法,并对比了在线语音合成方式。通过引入特定SDK及参数配置,实现了流畅自然的语音输出。文中详细记录了从SDK下载到代码实现的全过程。
该文章已生成可运行项目,

好久没有更新文章了,今天我们继续更新科大讯飞的语音的文章。
之前在语音合成部分由于在线语音合成的处理时间太长,所以使用了C#自带的语音合成,处理是快了,但是合成的声音特别难听。
所以今天更新一个离先语音合成的文章。
废话不多说,直接进入正题。

1.下载语音合成SDK,需要选择离线的,否者无法使用离线的。在这里插入图片描述

2.解压SDK,这里我们需要用到common.jet;xiaofeng.jet;xiaoyan.jet这三个.jet文件必须要,缺一不可,否则会报错误代码:文件缺失。然后就是msc_x64.dll库。在这里插入图片描述

3.代码部分

using UnityEngine;
using msc;
using System;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using UnityEngine.Networking;
using System.Collections;

public class Main : MonoBehaviour
{
    private const string speekText = "北京市今天全天晴,气温7℃ ~ 19℃,空气质量优,有北风4-5级,挺凉快的。";
    private const string session_begin_params = "voice_name = xiaoyan, text_encoding = utf8, sample_rate = 16000, speed = 50, volume = 50, pitch = 50, rdn = 0";
    private string offline_session_begin_params;
    private IntPtr session_id;
    private int err_code;

    private byte[] bytes;

    private void Awake()
    {
        string xiaoyan_path = (Application.dataPath + "/TTS/xiaoyan.jet").Replace("/", "\\");
        string common_path = (Application.dataPath + "/TTS/common.jet").Replace("/", "\\");
        offline_session_begin_params = "engine_type = local, voice_name = xiaoyan, text_encoding = utf8, tts_res_path = fo|" + xiaoyan_path + ";fo|" + common_path + ", sample_rate = 16000, speed = 50, volume = 50, pitch = 50, rdn = 0";
    }

    private void Start()
    {
        int message = MSCDLL.MSPLogin("", "", "appid=5f80198b,word_dir= . ");
        if (message != (int)Errors.MSP_SUCCESS)
        {
            Debug.LogError("登录失败!错误信息:" + message);
        }
        Debug.Log("登录成功");
    }

    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            //Online_TTS(speekText);
            Offline_TTS(speekText);
        }
    }

    private void Online_TTS(string speekText)
    {
        //语音合成开始
        session_id = MSCDLL.QTTSSessionBegin(session_begin_params, ref err_code);

        if (err_code != (int)Errors.MSP_SUCCESS)
        {
            Debug.LogError("初始化语音合成失败,错误信息:" + err_code);
            return;
        }
        //语音合成设置文本
        err_code = MSCDLL.QTTSTextPut(session_id, speekText, (uint)Encoding.Default.GetByteCount(speekText), string.Empty);
        if (err_code != (int)Errors.MSP_SUCCESS)
        {
            Debug.LogError("向服务器发送数据失败,错误信息:" + err_code);
            return;
        }

        uint audio_len = 0;
        SynthStatus synth_status = SynthStatus.MSP_TTS_FLAG_STILL_HAVE_DATA;
        MemoryStream memoryStream = new MemoryStream()
本文章已经生成可运行项目
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VAIN_K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值