package program;
import jaco.mp3.player.MP3Player;
import java.io.File;
public class Tocador {
public void Tocador()throws Exception{
int a = 1;
int b = a + 1;
int c = b + 1;
int d = 1;
String na = Integer.toString(a) + ".mp3";
String nb = Integer.toString(b) + ".mp3";
String nc = Integer.toString(c) + ".mp3";
String nd = Integer.toString(d) + ".mp3";
File f1 = new File(na);
File f2 = new File(nb);
File f3 = new File(nc);
File f4 = new File(nd);
new MP3Player(f1, f2, f3 ,f4).play();
}
}
[RESOLVIDO] lista de reprodução
15 Respostas
mp3.play()
package program;
import jaco.mp3.player.MP3Player;
import java.io.File;
public class Tocador {
public void Tocador()throws Exception{
int a = 1;
int b = a + 1;
int c = b + 1;
int d = 1;
String na = Integer.toString(a) + ".mp3";
String nb = Integer.toString(b) + ".mp3";
String nc = Integer.toString(c) + ".mp3";
String nd = Integer.toString(d) + ".mp3";
final File f1 = new File(na);
final File f2 = new File(nb);
final File f3 = new File(nc);
final File f4 = new File(nd);
Thread playing = new Thread(new Runnable() { //thread controla o MP3Player
@Override
public void run(){
MP3Player mp3 = new MP3Player(f1,f2,f3,f4);
mp3.play();
while(!mp3.isStopped()); //enquanto não parar o MP3Player
}
});
playing.start();
}
}
Não sei se foi exatamente isso o problema, qualquer coisa posta aí de novo
package jaco.mp3.player.examples;
import jaco.mp3.player.MP3Player;
import java.io.File;
public class Tocador {
public Tocador (String[] args) {
new MP3Player(new File("teste.mp3")).play();
}
}
import jaco.mp3.player.MP3Player;
import java.io.File;
public class Tocador {
public Tocador (){
File file1 = new File("1.mp3");
File file2 = new File("2.mp3");
File file3 = new File("3.mp3");
new MP3Player(file1, file2, file3).play();
}
}
Não entendi muito bem a dúvida, nesse caso:
import jaco.mp3.player.MP3Player;
import java.io.File;
public class Tocador {
public Tocador (){
File file1 = new File("1.mp3");
File file2 = new File("2.mp3");
File file3 = new File("3.mp3");
new MP3Player(file1, file2, file3).play();
}
}
pelo o que eu entendi você está passando 2 músicas de uma pasta e 1 de outra pasta, assim o MP3Player vai executar primeiro a “1.mp3” depois “2.mp3” e por último “3.mp3”, e então ele vai parar, pois acabou de tocar toda sua playlist, caso você queira que ele fique tocando a playlist:
mp3.setRepeat(true);
ou caso você queira que ele continue tocando essas músicas mas randômicamente:
mp3.setShuffle(true);
Fora isso não tem como o MP3Player tocar músicas que ele não possui na playlist, caso não tenha sido essa a dúvida posta aí de novo explicando melhor.
import jaco.mp3.player.MP3Player;
import java.io.File;
public class Tocador {
public Tocador (){
while (1< 10){
File file1 = new File("musicas"); //aqui o programa escolhece uma musica qualquer
File file2 = new File("musicas");//aqui escolher outra musica qualquer dentro da pasta musicas
File file3 = new File("comercial");//aqui escolher um comercial
new MP3Player(file1, file2, file3).play();
}
}
}
Vamos ver se eu entendi, vão tocar 2 músicas e após isso uma música de comercial, mas elas são escolhidas aleatoriamente dentro da pasta “Música” e da pasta “Comercial”,
você pode tentar fazer o seguinte:
import jaco.mp3.player.MP3Player;
import java.io.File;
import java.util.Random;
public class Tocador {
private static final File[] listMusic = new File("Pasta das Músicas").listFiles(); //poem a pasta das musicas
private static final File[] listComercial = new File("Pasta dos Comerciais").listFiles(); //poem a pasta dos comerciais
private static Thread control = null;
private static MP3Player mp3;
public Tocador()
{
Random r = new Random();
while(true)
{
if(control == null)
{
final File file1 = listMusic[r.nextInt(listMusic.length)];
final File file2 = listMusic[r.nextInt(listMusic.length)];
final File file3 = listComercial[r.nextInt(listComercial.length)];
control = new Thread(new Runnable() {
@Override
public void run() {
mp3 = new MP3Player(file1,file2,file3);
mp3.play();
mp3IsStillPlaying();
}
});
control.start();
}
else
{
if(!control.isAlive())
{
control.interrupt();
control = null;
}
}
}
}
private static void mp3IsStillPlaying()
{
boolean playing = true;
while(playing)
{
if(mp3.isStopped())
{
try {
Thread.sleep(5000);
if(mp3.isStopped())
{
playing = false;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
Como ta escrito nos 2 comentários das linhas 08 e 09, é só você trocar as pastas das músicas e comerciais pelas suas que vai rodar certinho, provavelmente…
Ficou meio ganbiarra, devido à alguns problemas relacionados à classe MP3Player, mas qualquer dúvida ou problema posta aí de novo.
import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Principal {
public static void main (String [] args) throws Exception {
JFrame janela = new JFrame();
JButton botao = new JButton("Sair");
new Tocador ();
janela.setSize(700, 250);
janela.setLayout(null);
janela.getContentPane().setBackground(Color.black);
janela.add(botao);
botao.setSize(70, 30);
botao.setBackground(Color.GRAY);
botao.setLocation(620, 5);
botao.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
int i = JOptionPane.showConfirmDialog(null ,"Deseja fechar a aplicação?",
"Saída",JOptionPane.YES_NO_OPTION);
if (i == JOptionPane.YES_OPTION ) {
System.exit(0);
}
}
});
janela.setLocationRelativeTo(null);
janela.setUndecorated(true);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
janela.setVisible(true);
}
}
O problema dessa vez é simples, a execução do programa fica presa dentro do:
new Tocador()
então só mudar ele para ser o último comando a ser executado:
import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Principal {
public static void main (String [] args) throws Exception {
JFrame janela = new JFrame();
JButton botao = new JButton("Sair");
janela.setSize(700, 250);
janela.setLayout(null);
janela.getContentPane().setBackground(Color.black);
janela.add(botao);
botao.setSize(70, 30);
botao.setBackground(Color.GRAY);
botao.setLocation(620, 5);
botao.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
int i = JOptionPane.showConfirmDialog(null ,"Deseja fechar a aplicação?",
"Saída",JOptionPane.YES_NO_OPTION);
if (i == JOptionPane.YES_OPTION ) {
System.exit(0);
}
}
});
janela.setLocationRelativeTo(null);
janela.setUndecorated(true);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
janela.setVisible(true);
new Tocador ();
}
}
E vai estar funcionando.
Cara funcionou. Um dia eu vou ser um bom programador assim. kkk valeu.
Só mais uma perguntinha pra finalizar meu programinha. Se eu quiser pegar o nome da musica e passar pra uma variavel tem como?
Tem sim, após serem randomicamente escolhidas as músicas você pode fazer isto:
final File file1 = listMusic[r.nextInt(listMusic.length)];
final File file2 = listMusic[r.nextInt(listMusic.length)];
final File file3 = listComercial[r.nextInt(listComercial.length)];
String titulo1,titulo2,titulo3;
titulo1 = file1.getName();
titulo2 = file2.getName();
titulo3 = file3.getName();
depende do que você quer fazer com as Strings pode ser como variável local ou como atributo.
eu quero exibir o nome da musica que esta tocando e o nome da música que acabou de tocar na tela do meu player.
final File file1 = listMusic[r.nextInt(listMusic.length)];
final File file2 = listMusic[r.nextInt(listMusic.length)];
final File file3 = listComercial[r.nextInt(listComercial.length)];
String titulo1,titulo2,titulo3;
titulo1 = file1.getName();
titulo2 = file2.getName();
titulo3 = file3.getName();
existe algo do tipo?
While(file1.playing()) {
titulo1 = file1.getName();
}
elso{
titulo2 = titulo1;
}
Se existem como fazer isso ia dar certo. tem algum comando que diga quando a musica esta tocando? Esse .playing(); eu imaginei…
E aí companheiro,
Infelizmente não tem como fazer isso que você está pensando:
while(file1.playing()) {
titulo1 = file1.getName();
}
else{
titulo2 = titulo1;
}
Mas, como o código está meio na gambiarra vou te passar a barbada aqui, existem algumas modificações:
Tocador
import jaco.mp3.player.MP3Player;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Tocador extends JPanel{
private static final File[] listMusic = new File("pasta das musicas").listFiles(); //poem a pasta das musicas
private static final File[] listComercial = new File("pasta dos comerciais").listFiles(); //poem a pasta dos comerciais
private Thread control;
private MP3Player mp3;
private String t1,t2,t3;
private JLabel label;
private JButton leave;
private int index;
public Tocador()
{
super(new BorderLayout());
label = new JLabel();
leave = new JButton("Sair");
leave.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
int i = JOptionPane.showConfirmDialog(null ,"Deseja fechar a aplicação?",
"Saída",JOptionPane.YES_NO_OPTION);
if (i == JOptionPane.YES_OPTION ) {
System.exit(0);
}
}
});
this.add(label, BorderLayout.NORTH);
this.add(leave, BorderLayout.CENTER);
}
public void play()
{
Random r = new Random();
while(true)
{
if(control == null)
{
final File file1 = listMusic[r.nextInt(listMusic.length)];
final File file2 = listMusic[r.nextInt(listMusic.length)];
final File file3 = listComercial[r.nextInt(listComercial.length)];
t1 = file1.getName();
t2 = file2.getName();
t3 = file3.getName();
control = new Thread(new Runnable() {
@Override
public void run() {
mp3 = new MP3Player(file1,file2,file3);
mp3.play();
mp3IsStillPlaying();
}
});
control.start();
}
else
{
if(!control.isAlive())
{
control.interrupt();
control = null;
}
}
}
}
private String musicListener(int op)
{
switch(op)
{
case 1:
return t1;
case 2:
return t2;
case 3:
return t3;
default:
return "";
}
}
private void mp3IsStillPlaying()
{
boolean playing = true;
index = 1;
label.setText(musicListener(index));
while(playing)
{
if(mp3.isStopped())
{
//momento em que troca de música
index++;
label.setText(musicListener(index));
try {
Thread.sleep(3000);
if(mp3.isStopped())
{
playing = false;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
Principal
import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Principal {
public static void main (String [] args) throws Exception {
JFrame janela = new JFrame();
janela.setSize(700, 250);
janela.setLocationRelativeTo(null);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
janela.setUndecorated(true);
Tocador player = new Tocador();
janela.setContentPane(player);
janela.setVisible(true);
player.play();
}
}
Existem algumas modificações que tiveram que ser feitas, mas em suma acho que foi mantido o que você estava fazendo e está funcionando, só tem um mas, o modo como está codificado, o player está mostrando apenas a música que está tocando no momento, se você quiser outras funcionalidades, vai ter que correr atrás e codificar, o código está realmente específico, então vai ser difícil.
Qualquer dúvida posta aí de novo.
Obrigado C.Porto Era isso mesmo que eu precisava. está concluído o projeto do player.