将字节数组转换为.wav java

问题描述:

我有一个返回字节数组的Web服务,我的意图是将所述数组转换为客户端(如Blackberry等手持设备)中的.wav。然而,我真的不知道如何做到这一点,我试图做一个FileOutputStream,但当然不会玩。所以我再次不知道该怎么做。有任何想法吗?将字节数组转换为.wav java

+0

有面积数。您可能希望向我们提供有关您正在执行的操作的更多详细信息,包括设备上运行的代码。 – 2009-04-08 19:47:57

所以,也有.WAV格式的地段,这里的一些文档:

这不只是一个流数据字节,但它很接近...只是有点头,你应该很好。

我想你也可以使用类似的方式为Web服务和设备上的媒体播放器之间被破坏的数据http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/sampled/spi/AudioFileWriter.html

* 
* 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) { 

     } 

    } 
}