java如何处理wave格式文件?

来源:互联网 发布:通达oa精灵mac版 编辑:程序博客网 时间:2024/06/09 19:14

该代码是对wave头文件的解析
package com.zhukovasky.audio;public class WaveHeader {private byte[] ChunkID; //4private byte[] ChunkSize; //4private byte[] Format;//4private byte[] SubChunk1ID;//格式说明块,本字段一般就是"fmt private byte[] subChunk1Size;//本数据块的大小,不包括ID和Size字段本身private byte[] AudioFormat;//音频的格式说明private byte[] NumChannels;//声道数private byte[] SampleRate;private byte[] ByteRate;private byte[] BlockAlign;private byte[] BistPerSample;private byte[] SubChunk2ID;private byte[] SubChunk2Size;public byte[] getChunkID() {return ChunkID;}public void setChunkID(byte[] chunkID) {ChunkID = chunkID;}public byte[] getChunkSize() {return ChunkSize;}public void setChunkSize(byte[] chunkSize) {ChunkSize = chunkSize;}public byte[] getFormat() {return Format;}public void setFormat(byte[] format) {Format = format;}public byte[] getSubChunk1ID() {return SubChunk1ID;}public void setSubChunk1ID(byte[] subChunk1ID) {SubChunk1ID = subChunk1ID;}public byte[] getSubChunk1Size() {return subChunk1Size;}public void setSubChunk1Size(byte[] subChunk1Size) {this.subChunk1Size = subChunk1Size;}public byte[] getAudioFormat() {return AudioFormat;}public void setAudioFormat(byte[] audioFormat) {AudioFormat = audioFormat;}public byte[] getNumChannels() {return NumChannels;}public void setNumChannels(byte[] numChannels) {NumChannels = numChannels;}public byte[] getSampleRate() {return SampleRate;}public void setSampleRate(byte[] sampleRate) {SampleRate = sampleRate;}public byte[] getByteRate() {return ByteRate;}public void setByteRate(byte[] byteRate) {ByteRate = byteRate;}public byte[] getBlockAlign() {return BlockAlign;}public void setBlockAlign(byte[] blockAlign) {BlockAlign = blockAlign;}public byte[] getBistPerSample() {return BistPerSample;}public void setBistPerSample(byte[] bistPerSample) {BistPerSample = bistPerSample;}public byte[] getSubChunk2ID() {return SubChunk2ID;}public void setSubChunk2ID(byte[] subChunk2ID) {SubChunk2ID = subChunk2ID;}public byte[] getSubChunk2Size() {return SubChunk2Size;}public void setSubChunk2Size(byte[] subChunk2Size) {SubChunk2Size = subChunk2Size;}public int Size(){return 43;}}

废话不多说,贴上部分源代码。


import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Arrays;import com.zhukovasky.tools.ArraysUtils;public class Audio {private String filePath;private byte[] toBt;private byte[] HeadBt;private WaveHeader Head;private byte[] Context;private int Length;public Audio(String filePath){this.filePath=filePath;init();getHead();getHeader();}private void getHeader(){Head=new WaveHeader();Head.setChunkID(ArraysUtils.getPartsOfArrays(toBt, 0, 4));Head.setChunkSize(ArraysUtils.getPartsOfArrays(HeadBt, 4, 8));Head.setFormat(ArraysUtils.getPartsOfArrays(HeadBt, 8, 12));Head.setSubChunk1ID(ArraysUtils.getPartsOfArrays(HeadBt, 12, 16));Head.setSubChunk1Size(ArraysUtils.getPartsOfArrays(HeadBt, 16, 20));Head.setAudioFormat(ArraysUtils.getPartsOfArrays(HeadBt, 20, 21));Head.setNumChannels(ArraysUtils.getPartsOfArrays(HeadBt, 22, 24));Head.setSampleRate(ArraysUtils.getPartsOfArrays(HeadBt, 24, 28));Head.setByteRate(ArraysUtils.getPartsOfArrays(HeadBt, 28, 32));Head.setBlockAlign(ArraysUtils.getPartsOfArrays(HeadBt, 32, 34));Head.setBistPerSample(ArraysUtils.getPartsOfArrays(HeadBt, 34, 36));Head.setSubChunk2ID(ArraysUtils.getPartsOfArrays(HeadBt, 36, 40));Head.setSubChunk2Size(ArraysUtils.getPartsOfArrays(HeadBt, 40, 44));}public String getChunkID(){byte[] bt=Head.getChunkID();return ArraysUtils.ByteToString(bt, "gbk");}public int getChunkSize(){byte[] bt=Head.getChunkSize();return ArraysUtils.ByteToInt(bt);}public String getFormat(){return ArraysUtils.ByteToString(Head.getFormat(), "gbk");}public String getSubChunk1ID(){return ArraysUtils.ByteToString(Head.getSubChunk1ID(), "gbk");}public int getSubChunk1Size(){return ArraysUtils.ByteToInt(Head.getSubChunk1Size());}public int getAudioFormat(){return HeadBt[20];}public int getNumChannels(){return HeadBt[22];}public int getSampleRate(){return ArraysUtils.ByteToInt(Head.getSampleRate());}public int getByteRate(){return ArraysUtils.ByteToInt(Head.getByteRate());}public int getBlockAlign(){return HeadBt[32];}public int getBistPerSample(){return HeadBt[34];}public String getSubChunk2ID(){return ArraysUtils.ByteToString(Head.getSubChunk2ID(), "gbk");}public int getSubChunk2Size(){return ArraysUtils.ByteToInt(Head.getSubChunk2Size());}public byte[] getHead(){this.HeadBt= ArraysUtils.getPartsOfArrays(toBt, 0, 44);return this.HeadBt;}public byte[] getContext(int Begins,int Ends){this.Context=ArraysUtils.getPartsOfArrays(toBt, Begins, Ends);return this.Context;}private byte[] getPart(int Begins,int Ends){return ArraysUtils.getPartsOfArrays(toBt, Begins, Ends);}public void CreateNewWave(String filepath,int Begins,int Ends){File o=new File(filepath);OutputStream os=null;try {os=new FileOutputStream(o);byte[] parts=getPart(Begins,Ends);System.out.println(Ends-Begins);int length=Ends-Begins;int newChunkSize=length+36;byte[] newChunkSizeArrays=ArraysUtils.intToByteArray(newChunkSize);byte[] newChunkByteArray=ArraysUtils.modifyByteArrays(HeadBt, 4, 8,newChunkSizeArrays);byte[] newLast=ArraysUtils.intToByteArray(length);byte[] newHead=ArraysUtils.modifyByteArrays(newChunkByteArray, 40, 44, newLast);byte[] merges=ArraysUtils.MergeWave(newHead, parts);os.write(merges);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{try {os.close();} catch (IOException e) {e.printStackTrace();}}}private void init(){File f=new File(filePath);InputStream is=null;this.toBt=new byte[(int)f.length()];this.Length=(int) f.length();try {is=new FileInputStream(f);is.read(this.toBt);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{try {is.close();} catch (IOException e) {e.printStackTrace();}}}public int getSize(){return this.Length;}public String toString(){return Arrays.toString(this.toBt);}}



0 0
原创粉丝点击