Dzwięk w komponencie

0

Witam. Oto kod

import sun.audio.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;

import javax.imageio.ImageIO;


public class Audio
{
	public static void main(String[] args) 
	{
		EventQueue.invokeLater(new Runnable()
		{
			public void run()
			{
				AudioFrame frame=new AudioFrame();
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.setVisible(true);
			}
		});
		
	}
}

class AudioFrame extends JFrame
{
	public AudioFrame()
	{
		//Ustalenie rozmiaru okna
		
		Toolkit kit=Toolkit.getDefaultToolkit();
		Dimension dim=kit.getScreenSize();
		
		WIDTH=dim.width/2;
		HEIGHT=dim.height/2;
		
		this.setSize(WIDTH,HEIGHT);
		this.setLocationByPlatform(true);
		
		this.setTitle("Jaba-Audio");
		
		AudioComponent component=new AudioComponent();
		this.add(component);
		
	}
	
	public static int getW()
	{
		return WIDTH;		
	}
	
	public static int getH()
	{
		return HEIGHT;		
	}
	
	private static int WIDTH;
	private static int HEIGHT;
	
}

class AudioComponent extends JComponent
{
	public AudioComponent()
	{
		try
		{
			this.IMG=ImageIO.read(new File("jaba.jpg"));
		}
		catch(IOException e)
		{
			e.printStackTrace();
		}
	}
	
	@Override public void paintComponent(Graphics g) 
	{
		try
		{
			//Narysowanie Jaby
			g.drawImage(this.IMG,0,0,AudioFrame.getW(),AudioFrame.getH(),null);
			
			
			//Odtworzenie dzwieku
			//Plik z dzwiekiem
			File sound=new File("laught.wav");
			
			if(!sound.exists())
			{
				System.out.println("Brak pliku");
				System.exit(0);
			}
			
			InputStream stream=new FileInputStream(sound);
			AudioStream audio=new AudioStream(stream);
			
			AudioData data=audio.getData();
			
			ContinuousAudioDataStream caudio=new ContinuousAudioDataStream(data);
			
			AudioPlayer.player.start(caudio);
			}
			catch(IOException e)
			{
				e.printStackTrace();
			}
	}
	
	private Image IMG;
}
















Mam pytanie. Odtwarzam dzwiek w funkcji paintComponent bo nie mam pojecia jak to inaczej zrobic. Jak łatwo sie domyślić nie jest to idealne rozwiązanie. Możecie dać mi jakieś wskazówki? Dziękuje.

0

Dobrze byłoby jeszcze wiedzieć kiedy chcesz odtworzyć dźwięk...

0

Na starcie

0
                        public void run()
                        {
                                AudioFrame frame=new AudioFrame();
                                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                frame.setVisible(true);
                                //tu?
                        }
0

Probowałem i niestety bo zminimalizowaniu i ponownym zmaksymalizowaniu odtwarza się nowa ścieżka co powoduje efekt nakładania się dźwięku. Tego chcę uniknąć.

@Edit Ok wszystko działa. Dziękuje

1 użytkowników online, w tym zalogowanych: 0, gości: 1