pcm 格式 转换成 wav

原创 2013年12月05日 15:28:40
package com.mingdao.util;

import java.io.*;

public class Pcm2wav {
	
	
	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);
		}
	}
	
	//直接调用这个方法就行了
	public int 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();
		/**
		 * header.Channels = 1;
		 * header.BitsPerSample = 16;
		 * header.SamplesPerSec = 8000;
		 * 
		 * header.Channels = 1;
		 * header.BitsPerSample = 16;
		 * header.SamplesPerSec = 11025;
		 * 
		 */
		Pcm2wav header = new Pcm2wav();
		header.fileLength = PCMSize + 32;
		header.FmtHdrLeth = 16;
		header.BitsPerSample = 16;
		header.Channels = 1;
//		header.Channels = 2;
		header.FormatTag = 0x0001;
		header.SamplesPerSec = 8000;
		header.BlockAlign = (short)(header.Channels * header.BitsPerSample / 8);
		header.AvgBytesPerSec = header.BlockAlign * header.SamplesPerSec;
//		header.AvgBytesPerSec = 22050;
		header.DataHdrLeth = PCMSize;
		byte[] h = header.getHeader();
		assert h.length == 44;
		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();
		return 1;
	}
	
}

PCM、WAV格式介绍及用C语言实现PCM转WAV

1、PCM格式介绍: PCM(Pulse Code Modulation)也被称为 脉码编码调制。PCM中的声音数据没有被压缩,如果是单声道的文件,采样数据按时间的先后顺序依次存入。(它的基...
  • u010011236
  • u010011236
  • 2016年11月03日 22:01
  • 4237

Raw PCM转换为wav格式

Raw PCM转换为wav格式    这里没有做编码转换, 只是给RAW PCM数据加上了wav文件头。 A law PCM 和unsigned PCM互相转换可以参考G711手册, 或者留言...
  • xuyeyan
  • xuyeyan
  • 2013年02月28日 11:25
  • 8189

利用FFmpeg将pcm文件转成wav文件

现在需要利用cool edit对一批pcm音频文件进行分析。由于没有相关信息指定音频的采样率,信道数和精度,所以cool edit在打开一个pcm的时候需要让我们指定相关参数。当需要分析的pcm非常多...
  • yutianzuijin
  • yutianzuijin
  • 2017年03月12日 14:24
  • 3996

java 微信小程序 语音识别成文字 音频格式转换 silk pcm wav

java 微信小程序 语音识别成文字 音频格式转换 silk pcm wav
  • haiyang4988
  • haiyang4988
  • 2017年07月15日 15:49
  • 3774

通过ffmpeg将aac格式转换成wav格式

这是一个很简单的小程序,但也让我这个初学者折腾了好几天,走算是入门了,总结下学习的过程,希望能够初学者能有所帮助。 看源代码,首先得让让它跑起来。看了ffmpeg提供源码api-example.c,...
  • ajaxhe
  • ajaxhe
  • 2011年09月08日 21:33
  • 5967

通过ffmpeg将aac格式转换成wav格式

http://blog.csdn.net/ajaxhe/article/details/6761678 这是一个很简单的小程序,但也让我这个初学者折腾了好几天,走算是入门了,总结下学习的过程,希...
  • zww_sap111
  • zww_sap111
  • 2013年02月20日 10:47
  • 278

javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)

转自:http://blog.csdn.net/eguid_1/article/details/52982108 前言: 之前几章把javaCV-FFmpeg中的能够实现的...
  • qq_37788558
  • qq_37788558
  • 2017年04月22日 18:58
  • 154

python——pcm音频添加头转成Wav格式文件

python——pcm音频添加头转成Wav格式文件''''' add Head Infomation for pcm file ''' import sys import struct imp...
  • benhuo931115
  • benhuo931115
  • 2016年12月20日 14:26
  • 2219

将WAV格式文件解析成PCM文件

要想解析WAV文件就需要了解WAV文件的结构,我在上一文中简单介绍过这方面的知识点。大家有兴趣可以点击打开链接 实现这个功能也挺简单的,具体的步骤: 1.读取WAV文件的头部,获取一些重要...
  • u012173922
  • u012173922
  • 2017年12月21日 08:09
  • 33

javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)

前言: 之前几章把javaCV-FFmpeg中的能够实现的基本功能大致梳理了一遍,本章在之前几章基础上实现一个通用的音频编码和参数转换器 实现功能: ①音频编码转换②音频格式转换③音频重采样④等等。。...
  • eguid_1
  • eguid_1
  • 2016年10月31日 14:39
  • 3460
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:pcm 格式 转换成 wav
举报原因:
原因补充:

(最多只允许输入30个字)