package applet.classes;

import java.awt.Graphics;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.ImageIcon;
import javax.swing.JApplet;

public class AudioApplet extends JApplet {

	// carrega o som direto da web! (fluxo de audio)
	private String musica = "http://www.softgraf.com/cursojava/sons/musica.wav";
	private String animacao = "http://www.softgraf.com/cursojava/icones/gato.gif";
	private URL urlMusica, urlAnimacao;
	private AudioInputStream amostra;
	private ImageIcon imagem;
	
	
	public void start(){
		setSize(450, 600);
		
		try {
			urlMusica = new URL(musica);
			urlAnimacao = new URL(animacao);
			imagem = new ImageIcon(urlAnimacao);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		
		try {
			// obtem a entrada de audio
			amostra = AudioSystem.getAudioInputStream(urlMusica);
			// cria um buffer de som
			Clip clip = AudioSystem.getClip();
			// carrega o arquivo de audio
			clip.open(amostra);
			// toca o buffer de som
			clip.start();
			
		} catch(MalformedURLException e){
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (LineUnavailableException e){
			e.printStackTrace();
		} catch (UnsupportedAudioFileException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	

	// o evento paint controla o refresh da tela
	public void paint(Graphics g){
		int y=1;
		g.drawString("Arquivo de amostra: " + musica, 10, 20 * y++);
		g.drawString("Formato: " + amostra.getFormat().toString(), 10, 20 * y++);
		g.drawString("Frequencia: " + (int) amostra.getFormat().getSampleRate() + " Hz", 10, 20 * y++);
		g.drawString("Canais:" + amostra.getFormat().getChannels(), 10, 20 * y++);
		g.drawString("Formato de codificação: " + amostra.getFormat().getEncoding().toString(), 10, 20 * y++);
		g.drawString("Tamanho da amostra: " + amostra.getFormat().getSampleSizeInBits() + "-bit", 10, 20 * y++);
		g.drawString("Tamanho do frame: " + amostra.getFormat().getFrameSize(), 10, 20 * y++);
		
		g.drawImage(imagem.getImage(), 80, 180, imagem.getIconWidth(), imagem.getIconHeight(), this);	
	}
	
}