将字节数组转换为 .wav java
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/731120/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Convert byte array to .wav java
提问by Tsundoku
I have a web service that returns an array of bytes and my intention is to convert said array to a .wav in the client (a handheld such as Blackberry). However I really have no idea of how to do that, I tried just making an FileOutputStream but of course that wouldn't play. So I am once again without knowing what to do. Any ideas?
我有一个返回字节数组的 Web 服务,我的目的是在客户端(例如 Blackberry 等手持设备)中将所述数组转换为 .wav。但是我真的不知道该怎么做,我尝试只制作一个 FileOutputStream 但当然不会播放。于是我又一次不知所措。有任何想法吗?
回答by billjamesdev
So, there are LOTS of .WAV formats, here's some documentation:
所以,有很多 .WAV 格式,这里有一些文档:
- http://en.wikipedia.org/wiki/WAV
- http://ccrma.stanford.edu/courses/422/projects/WaveFormat/(note endian changes)
- http://www.lightlink.com/tjweber/StripWav/WAVE.html
- http://en.wikipedia.org/wiki/WAV
- http://ccrma.stanford.edu/courses/422/projects/WaveFormat/(注意字节序变化)
- http://www.lightlink.com/tjweber/StripWav/WAVE.html
It's not just a stream of data bytes, but it's close... Just a bit of header and you should be good.
它不仅仅是一个数据字节流,而且很接近......只是一点头,你应该很好。
I suppose you could also use something like http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/sampled/spi/AudioFileWriter.html
我想你也可以使用类似http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/sampled/spi/AudioFileWriter.html
回答by olyanren
*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package bemukan.voiceRecognition.speechToText;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
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.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
/**
*
* @author MuhammedYC
*/
public class SplitAudio {
private int BUFFER_LENGTH=1024;
private double startTime;
private double endTime;
private File sourceFile;
public SplitAudio(File sourceFile,int startTime,int endTime){
this.startTime=startTime;
this.endTime=endTime;
this.sourceFile = sourceFile;
AudioInputStream inputAIS = null;
try {
inputAIS = AudioSystem.getAudioInputStream(sourceFile);
Clip clip = AudioSystem.getClip();
clip.open(inputAIS);
long totalMicroSecond = clip.getMicrosecondLength();
} catch (UnsupportedAudioFileException e) {
} catch (IOException e) {
} catch (LineUnavailableException e) {
}
}
public void splitAudio(){
File outputFile = new File("a.wav");
AudioFileFormat fileFormat = null;
try {
fileFormat = AudioSystem.getAudioFileFormat(sourceFile);
AudioFileFormat.Type targetFileType = fileFormat.getType();
AudioFormat audioFormat = fileFormat.getFormat();
AudioInputStream inputAIS = AudioSystem.getAudioInputStream(sourceFile);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int nBufferSize = BUFFER_LENGTH * audioFormat.getFrameSize();
byte[] abBuffer = new byte[nBufferSize];
while (true) {
int nBytesRead = inputAIS.read(abBuffer);
if (nBytesRead == -1) {
break;
}
baos.write(abBuffer, 0, nBytesRead);
}
/* Here's the byte array everybody wants.
*/
byte[] abAudioData = baos.toByteArray();
// double baslangic = abBuffer.length * oranBaslangic;
// double bitis = abBuffer.length * oranSon;
byte[] splittedAudio = new byte[(int) (endTime - startTime)];
for (int i = 0; i < (int) (endTime- startTime); i++) {
splittedAudio[i] = abAudioData[i + (int) startTime];
}
ByteArrayInputStream bais = new ByteArrayInputStream(splittedAudio);
AudioInputStream outputAIS = new AudioInputStream(bais, audioFormat,
splittedAudio.length / audioFormat.getFrameSize());
AudioSystem.write(outputAIS, targetFileType, outputFile);
} catch (UnsupportedAudioFileException e) {
} catch (IOException e) {
}
}
}

