Player...como fazer?

5 respostas
L

estou com um exemplo de um player q peguei do livro do deitel....esse exemplo usa o botão abrir para poder, claro, executar....

será q tem como eu executar o mp3 sem precisar clicar em abrir? apenas apertando a tecla enter? (meu programa seria para um deficiente visual....) o que devo substituir?

código

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.media.*;

public class soaudio extends JFrame 
{
	private Player player;
	private Component visualMedia;
	private Component mediaControl;
	private Container container;
	private File mediaFile;
	private URL fileURL;
	private JPanel p1, p2, p3;
	
	public soaudio()
	{
 		super( "Player" );

 		container = getContentPane();
		
	 	p3 = new JPanel();
		container.add( p3, BorderLayout.CENTER );
		
		JButton openFile = new JButton( "Abrir Arquivo" );
		p3.add( openFile );
		
		openFile.addActionListener(new ActionListener() 
		{
				public void actionPerformed( ActionEvent event )
				{
				
				mediaFile = getFile();
				
					if ( mediaFile != null ) 
					{
						try 
						{
							fileURL = mediaFile.toURL();
						}
						catch ( MalformedURLException badURL ) 
						{
							badURL.printStackTrace();
							showErrorMessage( "Bad URL" );
						}
					
					makePlayer( fileURL.toString() );
					}
				}
		}
	);
	
	
		Manager.setHint( Manager.LIGHTWEIGHT_RENDERER, Boolean.TRUE );
	} 

		

	public void showErrorMessage( String error )
	{
		JOptionPane.showMessageDialog( this, error, "Error",
		JOptionPane.ERROR_MESSAGE );
	}

	public File getFile()
 	{
 		JFileChooser fileChooser = new JFileChooser();
 	
 		fileChooser.setFileSelectionMode( 
 		JFileChooser.FILES_ONLY );
 	
 		int result = fileChooser.showOpenDialog( this );
 	
 		if ( result == JFileChooser.CANCEL_OPTION )
 			return null;
 			else
 				return fileChooser.getSelectedFile();
 	}

 
 	public void makePlayer( String mediaLocation )
 	{

 		if ( player != null )
 			removePlayerComponents();
 
 		MediaLocator mediaLocator = new MediaLocator( mediaLocation );

	 	if ( mediaLocator == null ) 
	 	{
 			showErrorMessage( "Error opening file" );
 				return;
 	 	}
 	 	try 
 		{
 			player = Manager.createPlayer( mediaLocator );

		 	player.addControllerListener(new PlayerEventHandler() );
			player.realize();
 		}

		catch ( NoPlayerException noPlayerException ) 
		{
 			noPlayerException.printStackTrace();
 		}
 	
 		catch ( IOException ioException ) 
 		{
 			ioException.printStackTrace();
		}
 	} 


 	public void removePlayerComponents()
 	{

 		if ( visualMedia != null )
 			container.remove( visualMedia );
 			if ( mediaControl != null )
 				container.remove( mediaControl );

	 		 	player.close();
 	}

 
 	public void getMediaComponents()
 	{
 		visualMedia = player.getVisualComponent();
 	
 			if ( visualMedia != null )
 				container.add( visualMedia, BorderLayout.CENTER );
			
				mediaControl = player.getControlPanelComponent();
				if ( mediaControl != null )
 					container.add( mediaControl, BorderLayout.SOUTH );

 	} 

 	private class PlayerEventHandler extends ControllerAdapter 
 	{
 		public void realizeComplete(RealizeCompleteEvent realizeDoneEvent )
 		{
 			player.prefetch();
 		}
 	
 		public void prefetchComplete(PrefetchCompleteEvent prefetchDoneEvent )
 		{
 			getMediaComponents();
 			validate();
 			player.start();

 		} 
 
 		public void endOfMedia( EndOfMediaEvent mediaEndEvent )
 		{
 			player.setMediaTime( new Time( 0 ) );
 			player.stop();
 		}
 	} 


 	public static void main( String args[] )
 	{
 		soaudio testPlayer = new soaudio();

 		testPlayer.setSize( 300, 400 );
 		testPlayer.setLocation( 300, 300 );
 		testPlayer.setDefaultCloseOperation( EXIT_ON_CLOSE );
 		testPlayer.setVisible( true );
 	}

}

5 Respostas

J

“LuanaKelly”:
será q tem como eu executar o mp3 sem precisar clicar em abrir? apenas apertando a tecla enter? (meu programa seria para um deficiente visual…) o que devo substituir?

não entendi bem sua pergunta, você quer que, apertando enter, o mp3 toque direto? nesse caso o file (o arquivo de audio mp3) já estaria definido não é isso?

nesse caso acho q basta adicionar um key listener para todos os componentes da janela, e no keyPressed você colocaria um if pra ver se a tecla pressionada é o enter e rodaria a rotina para tocar o som…

procura um metodo melhor com alguem, porque adicionar um listener pra todos os componentes não deve ser a melhor solução.

L

exatamente… eu fiz isso…tem 5 histórias…ao digitar 1…inicia a historia 1…2 inicia a historia 2…e assim sucessivamente…mais uso o comando para abrir o media player…
Mais gostaria q executasse em um player feito em java… como esse exemplo acima…(só q esse exemplo tem o botão abrir arquivo…localizar o arquivo na máquina e depois play)…
Minha dúvida é…se consigo fazer com q esse programa(ou similar) rode minhas histórias sem clicar no botão…somente digitando o numero referente a cada uma…

ihh acho q confundi mais…

J

oi,
nao li a classe do Deitel que você mostrou acima, mas se eu estiver certo ela roda a midia (no caso o mp3) a partir de um File. se for isso voce poderia ter um array de File, cada um com uma mídia já definida, e teria um File extra, que seria a opcao atual. quando a pessoa apertasse em 4 por exemplo, o programa carregaria o que esta na quarta posição do array no File extra.
daí, onde a pessoa apertasse Enter, o programa rodaria aquilo que está no File extra, pelo código que você deu.

espero ter entendido certo…

L

isso…exatamente…
mais o meu problema é como fazer isso…hehehe

qual o comando q uso…?

por exemplo…

if (keyCode == KeyEvent.VK_1) { //Aqui chamo a história 1.... }

eu sou meia “leiga” nesse negócio…

C

Olá pessoal,

estou precisando de um ajuda,

como se faz um player em Java, para tocar minha WebRádio, q será acessado pelo celular, com os botões Pause e Play,

qualquer ajuda é be vinda,
Obrigado.

Criado 6 de abril de 2005
Ultima resposta 29 de abr. de 2006
Respostas 5
Participantes 3