`
喧嚣求静
  • 浏览: 572263 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

讯飞语音合成pcm转wav

    博客分类:
  • java
 
阅读更多

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格式

    标题 "TTS.zip 讯飞语音合成 pcm 自动转换成 wav 格式" 提到的是一个使用讯飞语音合成功能,并将PCM音频文件转换为WAV格式的项目。这个项目可能是一个基于Java的Maven工程,因为描述中有提到 "讯飞语音合成demo ...

    java讯飞语音合成代码java工程

    5. **讯飞语音合成API**: - 讯飞的API通常包括初始化、设置参数、合成和释放资源等方法。开发者需要熟悉这些接口的使用方式,以及如何正确管理资源以避免内存泄漏。 6. **音频处理**: - 虽然主要由讯飞SDK处理...

    C#讯飞语音识别代码.rar_C# 讯飞_C++语音转文字_c 语音识别_讯飞_语音识别C#

    《C#实现讯飞语音识别技术详解》 在IT领域,语音识别技术是人工智能的一个重要分支,它使得计算机能够理解并处理人类的自然语言。本文将深入探讨如何使用C#编程语言结合讯飞的API来实现语音转文字的功能,同时也会...

    讯飞语音JavaWeb语音合成解决方案

    4. **文本转语音**: 创建合成任务,将待转化的文本输入,调用SDK的接口进行语音合成。合成的语音数据可以以PCM、MP3、WAV等格式返回。 5. **播放语音**: 合成的音频文件可以直接播放,也可以存储到服务器供后续使用...

    讯飞语音云 tts合成 C# 接口 DLL

    通过学习和使用讯飞语音云TTS合成C#接口DLL,开发者可以轻松地在自己的C#项目中集成语音合成功能,提升产品的用户体验,特别是在移动应用、智能硬件和教育软件等领域,TTS技术有着广泛的应用前景。同时,这也需要...

    c# 2010保存麦克风声音信息并同时进行讯飞语音和百度语音识别

    在本文中,我们将深入探讨如何使用C# 2010来实现麦克风声音的录制、存储,并同时进行讯飞语音和百度语音识别。这两个知名的语音识别服务提供商提供了API和SDK,使得开发者能够轻松地集成语音识别功能到自己的应用...

    讯飞开放接口实现了语音合成,识别,录音,以及语音朗读功能的源码

    本文将详细讲解如何利用科大讯飞的开放接口实现语音合成、识别、录音及语音朗读功能,并在Windows环境下创建一个具有用户界面的应用程序。首先,我们要了解讯飞(iFlytek)作为中国领先的智能语音技术提供商,其提供...

    .NET开发 iat/语音听写/语音转文本 科大讯飞

    此外,科大讯飞还提供了其他高级功能,如自定义词汇、语音合成等。这些功能可以通过调整SDK参数或调用特定接口实现。如果你的应用有特定需求,可以进一步研究科大讯飞的API文档以充分利用其功能。 总之,通过.NET和...

    易语言-讯飞语音webapi易语言调用例子

    科大讯飞是全球领先的语音技术提供商,其Web API提供了丰富的语音处理服务,包括语音识别、语音合成等。在这个例子中,我们将关注的是语音识别API。该API通常采用HTTP POST请求方式,将录制的音频数据发送到服务器,...

    讯飞的库c#调用Demo

    科大讯飞作为国内领先的语音技术提供商,其SDK(Software Development Kit)提供了丰富的功能,包括语音转文本、语音合成等,广泛应用于各种语音交互场景。 首先,要理解C#调用讯飞SDK的基本步骤。开发者需要先在...

    Python调用科大讯飞在线语音合成API -完整代码

    一,注册讯飞账号,并实名制。 二、找到音频合成,按页面提示申请...六、官方demo的代码,默认生成的音频是.pcm格式,如果需要转为wav格式 七、如果你需要将音频转为mp3格式,请使用项目中的工具类将wav格式转为mp3格式

Global site tag (gtag.js) - Google Analytics