java版讯飞语音合成,目前只能生成pcm格式文件,在项目中需求pcm转wav
工具类
public class Pcm2Wave { public static void convertAudioFiles(String src, String target) throws Exception { FileInputStream fis = new FileInputStream(src); FileOutputStream fos = new FileOutputStream(target); //计算长度 byte[] buf = new byte[1024 * 4]; int size = fis.read(buf); int PCMSize = 0; while (size != -1) { PCMSize += size; size = fis.read(buf); } fis.close(); //填入参数,比特率等等。这里用的是16位单声道 8000 hz WaveHeader header = new WaveHeader(); //长度字段 = 内容的大小(PCMSize) + 头部字段的大小(不包括前面4字节的标识符RIFF以及fileLength本身的4字节) header.fileLength = PCMSize + (44 - 8); header.FmtHdrLeth = 16; header.BitsPerSample = 16; header.Channels = 1; header.FormatTag = 0x0001; header.SamplesPerSec = 16000;//8000; header.BlockAlign = (short)(header.Channels * header.BitsPerSample / 8); header.AvgBytesPerSec = header.BlockAlign * header.SamplesPerSec; header.DataHdrLeth = PCMSize; byte[] h = header.getHeader(); assert h.length == 44; //WAV标准,头部应该是44字节 //write header fos.write(h, 0, h.length); //write data stream fis = new FileInputStream(src); size = fis.read(buf); while (size != -1) { fos.write(buf, 0, size); size = fis.read(buf); } fis.close(); fos.close(); System.out.println("Convert OK!"); } }
public class WaveHeader { public final char fileID[] = {'R', 'I', 'F', 'F'}; public int fileLength; public char wavTag[] = {'W', 'A', 'V', 'E'};; public char FmtHdrID[] = {'f', 'm', 't', ' '}; public int FmtHdrLeth; public short FormatTag; public short Channels; public int SamplesPerSec; public int AvgBytesPerSec; public short BlockAlign; public short BitsPerSample; public char DataHdrID[] = {'d','a','t','a'}; public int DataHdrLeth; public byte[] getHeader() throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); WriteChar(bos, fileID); WriteInt(bos, fileLength); WriteChar(bos, wavTag); WriteChar(bos, FmtHdrID); WriteInt(bos,FmtHdrLeth); WriteShort(bos,FormatTag); WriteShort(bos,Channels); WriteInt(bos,SamplesPerSec); WriteInt(bos,AvgBytesPerSec); WriteShort(bos,BlockAlign); WriteShort(bos,BitsPerSample); WriteChar(bos,DataHdrID); WriteInt(bos,DataHdrLeth); bos.flush(); byte[] r = bos.toByteArray(); bos.close(); return r; } private void WriteShort(ByteArrayOutputStream bos, int s) throws IOException { byte[] mybyte = new byte[2]; mybyte[1] =(byte)( (s << 16) >> 24 ); mybyte[0] =(byte)( (s << 24) >> 24 ); bos.write(mybyte); } private void WriteInt(ByteArrayOutputStream bos, int n) throws IOException { byte[] buf = new byte[4]; buf[3] =(byte)( n >> 24 ); buf[2] =(byte)( (n << 8) >> 24 ); buf[1] =(byte)( (n << 16) >> 24 ); buf[0] =(byte)( (n << 24) >> 24 ); bos.write(buf); } private void WriteChar(ByteArrayOutputStream bos, char[] id) { for (int i=0; i<id.length; i++) { char c = id[i]; bos.write(c); } } }
相关推荐
标题 "TTS.zip 讯飞语音合成 pcm 自动转换成 wav 格式" 提到的是一个使用讯飞语音合成功能,并将PCM音频文件转换为WAV格式的项目。这个项目可能是一个基于Java的Maven工程,因为描述中有提到 "讯飞语音合成demo ...
5. **讯飞语音合成API**: - 讯飞的API通常包括初始化、设置参数、合成和释放资源等方法。开发者需要熟悉这些接口的使用方式,以及如何正确管理资源以避免内存泄漏。 6. **音频处理**: - 虽然主要由讯飞SDK处理...
《C#实现讯飞语音识别技术详解》 在IT领域,语音识别技术是人工智能的一个重要分支,它使得计算机能够理解并处理人类的自然语言。本文将深入探讨如何使用C#编程语言结合讯飞的API来实现语音转文字的功能,同时也会...
4. **文本转语音**: 创建合成任务,将待转化的文本输入,调用SDK的接口进行语音合成。合成的语音数据可以以PCM、MP3、WAV等格式返回。 5. **播放语音**: 合成的音频文件可以直接播放,也可以存储到服务器供后续使用...
通过学习和使用讯飞语音云TTS合成C#接口DLL,开发者可以轻松地在自己的C#项目中集成语音合成功能,提升产品的用户体验,特别是在移动应用、智能硬件和教育软件等领域,TTS技术有着广泛的应用前景。同时,这也需要...
在本文中,我们将深入探讨如何使用C# 2010来实现麦克风声音的录制、存储,并同时进行讯飞语音和百度语音识别。这两个知名的语音识别服务提供商提供了API和SDK,使得开发者能够轻松地集成语音识别功能到自己的应用...
本文将详细讲解如何利用科大讯飞的开放接口实现语音合成、识别、录音及语音朗读功能,并在Windows环境下创建一个具有用户界面的应用程序。首先,我们要了解讯飞(iFlytek)作为中国领先的智能语音技术提供商,其提供...
此外,科大讯飞还提供了其他高级功能,如自定义词汇、语音合成等。这些功能可以通过调整SDK参数或调用特定接口实现。如果你的应用有特定需求,可以进一步研究科大讯飞的API文档以充分利用其功能。 总之,通过.NET和...
科大讯飞是全球领先的语音技术提供商,其Web API提供了丰富的语音处理服务,包括语音识别、语音合成等。在这个例子中,我们将关注的是语音识别API。该API通常采用HTTP POST请求方式,将录制的音频数据发送到服务器,...
科大讯飞作为国内领先的语音技术提供商,其SDK(Software Development Kit)提供了丰富的功能,包括语音转文本、语音合成等,广泛应用于各种语音交互场景。 首先,要理解C#调用讯飞SDK的基本步骤。开发者需要先在...
一,注册讯飞账号,并实名制。 二、找到音频合成,按页面提示申请...六、官方demo的代码,默认生成的音频是.pcm格式,如果需要转为wav格式 七、如果你需要将音频转为mp3格式,请使用项目中的工具类将wav格式转为mp3格式