2009-04-08 176 views
1

我有一個返回字節數組的Web服務,我的意圖是將所述數組轉換爲客戶端(如Blackberry等手持設備)中的.wav。然而,我真的不知道如何做到這一點,我試圖做一個FileOutputStream,但當然不會玩。所以我再次不知道該怎麼做。有任何想法嗎?將字節數組轉換爲.wav java

+0

有面積數。您可能希望向我們提供有關您正在執行的操作的更多詳細信息,包括設備上運行的代碼。 – 2009-04-08 19:47:57

回答

2

所以,也有.WAV格式的地段,這裏的一些文檔:

這不只是一個流數據字節,但它很接近...只是有點頭,你應該很好。

我想你也可以使用類似的方式爲Web服務和設備上的媒體播放器之間被破壞的數據http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/sampled/spi/AudioFileWriter.html

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

     } 

    } 
}