C#将科大讯飞语音合成文件转换为MULAW音频格式

任务描述:通过科大讯飞语音合成组件在线完成文本转语音的合成,然后再转换为电话系统IVR要求的音频格式: wave mu-law 16位 8kHZ 64kbps。

完成步骤:

首先,我们要先通过科大讯飞语音合成组件实现文本合成,由于科大讯飞提供的接口都是C语言的,如果用C#调用需要做二次封装,为了快速完成任务,我们直接在科大讯飞论坛中找到一个现成组件进行修改,感谢wangkang提供的分享。

1、下载C#代码:http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=10182&highlight=c%23

2、修改iFlyDotNet的界面(根据自己的业务要求修改界面输入方式);

3、修改iFlydll工程中的iFlyTTS.cs文件

找到iFlyMSC.QTTSSessionBegin(str, ref errorCode )方法,修改转换参数str如下:

 string str = "ssm=1," + this._speeker + ",spd=" + this._speed + ",aue=speex-wb;7,vol=" + this._vol + ",auf=audio/L16;rate=8000,ent=sms8k,rdn=3,rcn=0";

通过以上调用接口将输出采样速率8000,量化比特16位,8kHZ的PCM格式音频。

注,音频头部格式设置如下:

                            RIFF_ID = 0x46464952, 
                            File_Size = data_len -8, 
                            RIFF_Type = 0x45564157, 
                            FMT_ID = 0x20746d66, 
                            FMT_Size = 0x10, 
                            FMT_Tag = 1, 
                            FMT_Channel = 1,
                            FMT_SamplesPerSec = 8000, 
                            AvgBytesPerSec = 16000, 
                            BlockAlign = 2, 
                            BitsPerSample = 16, 
                            DATA_ID = 0x61746164, 
                            DATA_Size = data_len- 44

接着我们要转换为wave mu-law 16位 8kHZ 64kbps的音频格式,这里借助了NAudio.dll的开源组件。

1)增加一个新类:

public class RawSourceWaveStream : WaveStream
    {
        private Stream sourceStream;
        private WaveFormat waveFormat;

        public RawSourceWaveStream(Stream sourceStream, WaveFormat waveFormat)
        {
            this.sourceStream = sourceStream;
            this.waveFormat = waveFormat;
        }

        public override WaveFormat WaveFormat
        {
            get { return this.waveFormat; }
        }

        public override long Length
        {
            get { return this.sourceStream.Length; }
        }

        public override long Position
        {
            get
            {
                return this.sourceStream.Position;
            }
            set
            {
                this.sourceStream.Position = value;
            }
        }

        public override int Read(byte[] buffer, int offset, int count)
        {
            return sourceStream.Read(buffer, offset, count);
        }
        public override void Write(byte[] buffer, int offset, int count)
        {
            sourceStream.Write(buffer, offset, count);
        }
    } 2)将PCM音频转换为u-law格式
WaveFormat waveFormat = WaveFormat.CreateMuLawFormat(8000, 1);
RawSourceWaveStream rawStream = new RawSourceWaveStream(stream, new WaveFormat(8000, 16, 1));WaveStream muStream = new WaveFormatConversionStream(WaveFormat.CreateMuLawFormat(8000, 1), rawStream);
WaveFileWriter.CreateWaveFile(outWaveFlie, muStream);
3)转换完成后输出的文件已经是u-law格式的电话音频格式了,我们用goldwave播放器进行播放,结果发现所有转换的结果开始部分会出现短暂的噪音。用UltraEdit工具分析音频文件的头部发现格式后面会出现一些其他数据造成噪音(注:u-law格式头部为58个字节)对输出的文件进一步处理后噪音问题解决:using (FileStream stream2 = new FileStream(outWaveFlie, FileMode.Open))
                        {
                            byte[] blank = new byte[22];
                            for (int i = 0; i < 22; i++)
                            {
                                blank[i] = 0xFF;
                            }
                            stream2.Position = 58;
                            stream2.Write(blank, 0, blank.Length);
                        }
以下是正常u-law格式的电话音频:
时间: 2024-10-06 01:40:37

C#将科大讯飞语音合成文件转换为MULAW音频格式的相关文章

怎样把PPT文件转换为PDF的格式

我们在上课的时候都熟悉老师的PPT,PPT演示文档因为查阅和播放的方便,经常被用来作为展示品.工作后我们又看到ppt的产品展示或者计划书,PPT一页一页的文档模式可以转换成PDF的格式吗?以前没有找到合适的方法,常常为如何转换而发愁,现在,自从有了迅捷PDF软件,我就再也不用担心文件转换的问题了. 迅捷PDF文件转换器,它是一款功能很强大的转换软件.其整体界面很简洁,操作也很简单.只要设置好识别文件所要转换的格式,打开文件,然后按下开始转换按键,PDF软件就会自动完成后续工作.PDF格式转换器的

python之模块py_compile用法(将py文件转换为pyc文件)

# -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块py_compile用法(将py文件转换为pyc文件) #二进制文件,是由py文件经过编译后,生成的文件. ''' import py_compile #不带转义r py_compile.compile('D:\test.py') Traceback (most recent call last): File "<pyshell#1>", line 1, in &l

【使用Itext处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)】

iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转化为PDF文件. iText的安装非常方便,下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了. 1.包的引用 1 import java.io.FileNotFoundException; 2 import java.i

使用POI将doc文件转换为html

需要的jar包有:有一些是依赖包,可以使用maven下载 doc文件转换为html文件 package com.gsww.sxzz.controller.service; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.converter.PicturesManager; import org.apache.poi.hwpf.converter.WordToHtmlConverter; import org.

SharePoint 2013 中将 HTML文件转换为母版页

原文:SharePoint 2013 中将 HTML文件转换为母版页 SharePoint 2013提供了很多新功能,下面我们看看将Html页面,转换为母版页的功能.这个功能更加方便设计人员设计母版页,并实施到sharepoint中去,是一个非常不错的功能.来来来,进入正题!~ 1. 首先,新建一个Html页面,效果如下图: 预览效果: 2. 将这个html页面上传到sharepoint,我选择上传到“母版页样式库”: 3. 我选择作为“设计文件”上传,当然你也可以选择其他的文件类型: 4. 上

ubuntu下用java代码调用命令将java格式文件转换为html格式文件

首先我们应该在电脑上装上GNU Source-highlight 3.1.7,给个链接参考: http://www.gnu.org/software/src-highlite/#mozTocId120994 下面代码实现了 将java类型的代码转换为html文件类型的代码,如果java代码的文件名为 helloword.java,则转换为html格式的文件名为helloword.java.html,将java代码在浏览器上显示出来.其次我还将html文件中的内容提取出来,便于在html文件里编写

swftools工具将pdf文件转换为swf文件

开发客户网站时遇到了一个需求,客户要求后台上传pdf文件,前台能以翻书的形式直接访问. 首先想到的是使用js解决,用户访问前端页面时,php将文件路径发送给js,让js呈现出来翻书的效果.在网上百度了一圈也没有找到现成的插件. 于是由某人提供的flash完成,这时就需要将客户在后台上传的pdf文件转换为swf文件才能通过某人提供的flash呈现出来,而且需要pdf的每一页生成一个swf文件,才能出现翻书的效果.这时又由某人提供说,swftools可以完成这个需求,于是迅速百度. swftools

怎么把pdf文件转换为word

今日有许多朋友提问怎么把PDF电子文件转换为Word格式再进行编辑,PDF转换成Word软件在哪下载?等问题,我们知道,一般网上下载的PDF转换成Word需要注册或购买的,对于临时处理文件的用户而言是没有必要的,这里将为大家分享一个免费将PDF转换为Word的工具. 将PDF文件转换为Word我们需要专门的转换软件,但如果你问哪种最方便最安全,这里笔者推荐使用迅捷PDF转换成Word转换器这款软件很强大,可有将将纯文字的或者图文并茂的PDF文件转换成可以编辑的Word,转换之后也是和PDF一样,

bin文件转换为hex文件C语言实现

对于嵌入式而言,hex文件可能大家再熟悉不过了,对,我们大学时学习的51单片机编写的代码在keil上编译后就生成了hex文件.那bin文件又是什么意思呢,它又和hex文件的区别在哪?这也不是本文的重点,下面简单的描述下: 最通俗的来讲,hex是带地址的,用下载器下载时,不需要设置偏移地址,它是文件流格式的,都是标准的ASCII码.而bin文件是不带地址的,全部是二进制数据流,打住一下,其实就是我们所谓的机器代码.有兴趣的同学,可以尝试着用反汇编,得到的就是汇编代码了.我所用的开发板S3C2440