2012-01-22 7 views
2

javaで.AMR/.AAC音楽ファイルを再生するプログラムをビルドする必要があります。 私はAudioSystemクラスで同じものを作りましたが、それはあまりにも重いためにEARファイルで出荷されないウェーブファイルしかサポートしていません。 助けてください!ここJavaで.AMR/.AACファイルを再生する

は私が使用したものである:

package testSite; 

import java.io.File; 
import java.io.IOException; 
import javax.sound.sampled.AudioFormat; 
import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.DataLine; 
import javax.sound.sampled.FloatControl; 
import javax.sound.sampled.LineUnavailableException; 
import javax.sound.sampled.SourceDataLine; 
import javax.sound.sampled.UnsupportedAudioFileException; 

public class AePlayWave extends Thread { 

    private String filename; 
    private Position curPosition; 
    private final int EXTERNAL_BUFFER_SIZE = 524288; // 128Kb 
    public static AePlayWave ob = null; 

    enum Position { 
     LEFT, RIGHT, NORMAL 
    }; 

    public static AePlayWave getInstance(String wavfile) { 
     if (ob == null) { 
      ob = new AePlayWave(wavfile); 
     } 
     return ob; 
    } 

    private AePlayWave(String wavfile) { 
     filename = wavfile; 
     curPosition = Position.NORMAL; 
    } 

    public void run() { 

     File soundFile = new File(filename); 
     if (!soundFile.exists()) { 
      System.err.println("Wave file not found: " + filename); 
      return; 
     } 

     AudioInputStream audioInputStream = null; 
     try { 
      audioInputStream = AudioSystem.getAudioInputStream(soundFile); 
     } catch (UnsupportedAudioFileException e1) { 
      e1.printStackTrace(); 
      return; 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
      return; 
     } 

     AudioFormat format = audioInputStream.getFormat(); 
     SourceDataLine auline = null; 
     DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); 

     try { 
      auline = (SourceDataLine) AudioSystem.getLine(info); 
      auline.open(format); 
     } catch (LineUnavailableException e) { 
      e.printStackTrace(); 
      return; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return; 
     } 

     if (auline.isControlSupported(FloatControl.Type.PAN)) { 
      FloatControl pan = (FloatControl) auline 
        .getControl(FloatControl.Type.PAN); 
      if (curPosition == Position.RIGHT) 
       pan.setValue(1.0f); 
      else if (curPosition == Position.LEFT) 
       pan.setValue(-1.0f); 
     } 

     auline.start(); 
     int nBytesRead = 0; 
     byte[] abData = new byte[EXTERNAL_BUFFER_SIZE]; 

     try { 
      while (nBytesRead != -1) { 
       nBytesRead = audioInputStream.read(abData, 0, abData.length); 
       if (nBytesRead >= 0) 
        auline.write(abData, 0, nBytesRead); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return; 
     } finally { 
      auline.drain(); 
      auline.close(); 
     } 

    } 
} 
+0

こんにちは - "の.ear" ファイル "J2EE" と "Webアプリケーション" を意味します。 Q:これはWebアプリケーションですか? Q:もしそうなら、どうしてJavaコードを書いて「再生」する必要がありますか? * SERVER *から.mp3ファイル(または.amrなど)を提供するJSP(または何でも)を書いて、* BROWSER *にオーディオクリップを再生させてみませんか? – paulsm4

+0

申し訳ありません..私はEARによって私は自己実行可能なjavaファイルを意味します。私はSwingアプリケーションに少し慣れています...私はバックグラウンドで音楽を演奏する必要があり、サウンドファイルは1つの実行可能ファイルの一部にする必要があります。 –

答えて

0

は今しばらくして、しかし/ヘルプ助けを持っているということ?
最後にWAVを使用しましたが、これは私が作業していたものですが、jaadデコーダを使用する方法を理解した後、aacの再生はうまくいきます。

Java play AAC encoded audio