Не удалось создать объект AudioData? - PullRequest
1 голос
/ 06 октября 2011

У меня проблема с моим кодом, когда каждый раз, когда я запускаю проект, он выбрасывается. Теперь я ограничил его тем, что звук воспроизводится при вызове метода 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);
}
}

Почему? Я передаю ему файл sound / gsong1b.wav, имеющий размер 6,2 МБ, длину 2 минуты и битовую частоту 16000 Гц. Я слышал, что звуки должны быть меньше 4 МБ, но они воспроизводятся, и только ошибки, когда я зацикливаюсь .... Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

2 голосов
/ 06 октября 2011

Те классы, которые вы используете (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(); 
    }
0 голосов
/ 11 июня 2013

Использование IDE goto Действие, выполненное методом вашей звуковой кнопки.Для непрерывного воспроизведения файлов .wav.Я использую следующий код, и он отлично работает, используя поток.Убедитесь, что вы импортируете следующее.импорт 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();        
0 голосов
/ 06 октября 2011

Попробуйте использовать HeadspaceMixer.javax.sound не является завершенной реализацией.

...