无法创建AudioData对象?

时间:2011-10-06 15:34:12

标签: java audio wav

我的代码出现问题,每次运行项目时都会抛出此问题。现在我把它缩小到当我调用play()方法时声音确实播放但是当我调用playL()方法时它没有播放。

package net.chrypthic.Ball;
import sun.audio.*;
import java.io.*;

public class SoundManager {

AudioPlayer ap = AudioPlayer.player;
AudioStream as;
ContinuousAudioDataStream loop = null;
public SoundManager(String music)
{
    try
    {
        InputStream input = new FileInputStream("./"+music);
        as = new AudioStream(input);
        AudioData ad = as.getData();
        loop = new ContinuousAudioDataStream(ad);
    }catch(Exception e)
    {
        System.out.println(e.getMessage());
    }
}
public void play()
{
    ap.start(as);
}
public void stop()
{
    ap.start(as);
}
public void playL()
{
    ap.start(loop);
}
public void stopL()
{
    ap.start(loop);
}
}

为什么呢?我将声音/ gsong1b.wav传递给它,它的大小为6.2MB,长2分钟,比特率为16000Hz。 我听说声音必须小于4mb大但它会播放,而且当我循环播放时只会出错... 非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

您使用的那些类(AudioPlayer,AudioStream),即使它们来自官方Java JDK,实际上也是保留类,这意味着Oracle(以及之前的Sun)保留更改它们的权利,恕不另行通知。您应该使用官方声音API:

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

//...

public static void main(String[] args) throws Throwable {
        Clip clip = AudioSystem.getClip();
        AudioInputStream inputStream = AudioSystem.getAudioInputStream(SoundManager.class.getResourceAsStream("C://temp/my.mp3"));
        clip.open(inputStream);
        clip.start(); 
    }

答案 1 :(得分:0)

尝试使用HeadspaceMixer。 javax.sound不是一个完整的实现。

答案 2 :(得分:0)

使用IDE转到Action执行声音按钮的方法。 用于连续播放.wav文件。我使用以下代码,它使用线程工作正常。请确保您导入以下内容。 import sun.audio。;并导入java.io。;

        Thread sound;
        sound = new Thread(){

           public void run(){

             AudioPlayer MGP=AudioPlayer.player;
             AudioStream BGM;
             AudioData MD;
             ContinuousAudioDataStream loop=null;
  for(;;){

        try{ 
         BGM=new AudioStream(new FileInputStream("C:\\Users\\HAMMED\\01FATIHA         (New).wav"));//enter the sound directory and name here
         AudioPlayer.player.start(BGM);

         //MD=BGM.getData();//not necessary
         //loop=new ContinuousAudioDataStream(MD);//not necessarry

        sleep(48000);// enter the elapse time of ur sond to avoid noise
    }catch(Exception e){

       JOptionPane.showMessageDialog(null, e);
    }


    MGP.start(loop);// It does nothing.I was trying to use this but no success.
        }
     }
  };
    sound.start();