我是靠谱客的博主 大方小刺猬,最近开发中收集的这篇文章主要介绍java 修改wav文件头_使用Java聲音API從WAV文件中修剪開頭和結尾,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我有製作的基礎知識。但是,輸出文件一遍又一遍地重複WAV標頭字節。生成的文件大小合適,但是它與垃圾一起提交。使用Java聲音API從WAV文件中修剪開頭和結尾

我想使用一個擴展AudioInputStream的類,以便我可以與其他代碼無縫地使用它,將其與另一個AudioInputStream(它工作得很漂亮)混合使用。

import java.io.ByteArrayInputStream;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import javax.sound.sampled.AudioFileFormat;

import javax.sound.sampled.AudioFormat;

import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.UnsupportedAudioFileException;

public class TrimmerAIS extends AudioInputStream{

private final AudioInputStream stream;

private final long startByte,endByte;

private long t_bytesRead=0;

public TrimmerAIS(AudioFormat audioFormat,AudioInputStream audioInputStream,long startMilli,long endMilli){

super(new ByteArrayInputStream(new byte[0]),audioFormat,AudioSystem.NOT_SPECIFIED);

stream=audioInputStream;

//startByte=(long)((startMilli/1000f)*stream.getFormat().getSampleRate()*stream.getFormat().getSampleSizeInBits()*stream.getFormat().getChannels())/8;

//endByte=(long)((endMilli/1000f)*stream.getFormat().getSampleRate()*stream.getFormat().getSampleSizeInBits()*stream.getFormat().getChannels())/8;

startByte=(long)((startMilli/1000)*stream.getFormat().getFrameRate()*stream.getFormat().getFrameSize());

endByte=(long)((endMilli/1000)*stream.getFormat().getFrameRate()*stream.getFormat().getFrameSize());

}

private byte[] tempBuffer;

@Override

public int available() throws IOException{

return (int)(endByte-startByte-t_bytesRead);

}

public int read(byte[] abData,int nOffset,int nLength) throws IOException{

// set up the temporary byte buffer

if(tempBuffer==null||tempBuffer.length

tempBuffer=new byte[nLength];

}

int bytesRead=0;

if(t_bytesRead

do{//skip to starting byte

bytesRead=(int)skip(startByte-t_bytesRead);

t_bytesRead+=bytesRead;

}while(t_bytesRead

}

if(t_bytesRead>=endByte){

return -1;

}

bytesRead=stream.read(tempBuffer,0,nLength);

if(bytesRead==-1){//premature EOF

return -1;

}else if(bytesRead==0){

return 0;

}

t_bytesRead+=bytesRead;

if(t_bytesRead>=endByte){//correct bytes read to exclude any bytes over the limit

bytesRead=(int)(bytesRead-(t_bytesRead-endByte));

}

return bytesRead;

}

public static void main(String[] args) throws UnsupportedAudioFileException, IOException{

AudioInputStream music=null;

music = AudioSystem.getAudioInputStream(new File("music/0.wav"));

music=new TrimmerAIS(music.getFormat(),music,0,15000);

AudioSystem.write(music,AudioFileFormat.Type.WAVE,new File("out.wav"));

}

}

我根本找不到任何問題。 我在這裏找到了一個類似的帖子,鏈接到https://forums.oracle.com/forums/thread.jspa?threadID=2136229&tstart=0。除了你以毫秒爲單位給它開始和結束的位置,它可以傳遞到/包裝在另一個AIS或輸出中,而不需要讀入想要寫入數組的段,然後寫入它。過去3個小時一直試圖弄清楚,我的想法有點油炸。所以如果某件事情沒有意義,請隨時要求澄清。我寧願不解析文件,但如果我必須,我必須。

2012-03-16

Knyri

最后

以上就是大方小刺猬为你收集整理的java 修改wav文件头_使用Java聲音API從WAV文件中修剪開頭和結尾的全部内容,希望文章能够帮你解决java 修改wav文件头_使用Java聲音API從WAV文件中修剪開頭和結尾所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部