Could not create AudioData object?

2019-08-03 15:52发布

I have a problem with my code where each time I run the project, this is thrown. Now I have narrowed it down to that the sound does play when I call the play() method but does not when I call the playL() method.

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);
}
}

Why? I pass sound/gsong1b.wav to it which has a size of 6.2MB, is 2 minutes long and has a bit rate of 16000Hz. I have heard that sounds have to be less that 4mb big but it plays, and only errors when I loop.... Any Help would be greatly appreciated.

标签: java audio wav
3条回答
【Aperson】
2楼-- · 2019-08-03 16:18

Those classes you use (AudioPlayer, AudioStream), even though they are from the official Java JDK, are in fact reserved classes, meaning that Oracle (and Sun before them) reserves the right to change them without notice. You should use the official sound API instead:

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(); 
    }
查看更多
Luminary・发光体
3楼-- · 2019-08-03 16:18

Using an IDE goto Action performed metthod of your sound button. For continuous playing of .wav files. I have use the following code and it works fine using thread. Make sure you import thev following. import sun.audio.; and import 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();        
查看更多
劳资没心,怎么记你
4楼-- · 2019-08-03 16:19

Have a try with HeadspaceMixer instead. javax.sound is not a completed implementation.

查看更多
登录 后发表回答