Home Foros Foro dudas Foro de Java Reproductor MP3 Java

Reproductor MP3 Java

Etiquetado: 

Viendo 6 entradas - de la 1 a la 6 (de un total de 6)
  • Autor
    Entradas
  • #20577

    Daniel
    Participante

    Buenos días compañeros, necesito vuestra ayuda –  me estoy enloquecido -.

    Os contextualizo. Estoy intentando implementar un método que avance una canción cuando presiono el botón propio.

    Alguien sabe cómo hacer para que avance una posición más una ObservableList ??

    Gracias y un saludo.

    #20578

    FrankMegia
    Participante

    Hola Daniel:

    No si entiendo bien la pregunta. Si te refieres a adelantar la misma canción en el tiempo, tendrías que mirar el método seek() de la clase MediaPlayer. Teniendo en cuenta el tiempo transcurrido y el tiempo de duración de la canción, podrías implementar el avance de un tiempo determinado en un botón (igualmente para echar la canción atrás).

    Ahora si es pasar de una canción a otra , pues solo es recorrer un array.

    Espero que te sirva.

    Un saludo.

    #20580

    Daniel
    Participante

    En concreto es recorrer el arrayList donde tengo las canciones que vienen de un directorio.

    En mi lógica, añadido los elementos del arrayList a una ListView . Posteriormente, los muestro al usuario con  una ObservableList .

    Por último comparo los que selecciona el usuario con el ArrayList y mando el nombre de la canción por parámetro a una función que también tiene por parámetro la ruta.

    Luego simplemente sigue el curso de la función para miPlayer.Play().

    ————————————————————————————————————————————————————————————————————————————————

    CÓDIGO:package application;

     

    import java.awt.event.MouseAdapter;

    import java.awt.event.MouseEvent;

    import java.awt.event.MouseListener;

    import java.awt.event.MouseMotionListener;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.IOException;

    import java.io.InputStream;

    import java.net.URL;

    import java.util.ArrayList;

    import java.util.Iterator;

     

    import javafx.application.Application;

    import javafx.beans.InvalidationListener;

    import javafx.beans.Observable;

    import javafx.beans.value.ChangeListener;

    import javafx.beans.value.ObservableValue;

    import javafx.collections.ObservableList;

    import javafx.event.ActionEvent;

    import javafx.event.EventHandler;

    import javafx.stage.FileChooser;

    import javafx.stage.Stage;

    import m.menu;

    import javafx.scene.Node;

    import javafx.scene.Scene;

    import javafx.scene.control.*;

    import javafx.scene.image.Image;

    import javafx.scene.image.ImageView;

    import javafx.scene.input.KeyCode;

    import javafx.scene.input.KeyEvent;

    import javafx.scene.media.Media;

    import javafx.scene.media.MediaPlayer;

    import javafx.scene.shape.Circle;

    import javafx.scene.text.Font;

    import javafx.scene.layout.*;

    import javafx.fxml.FXMLLoader;

    import javafx.geometry.Insets;

    import javafx.geometry.Pos;

     

    public class Main extends Application {

    @Override

    public void start(Stage primaryStage) {

    try {

    // ABRE DIRECTORIO PARA ESCOGER TODAS LAS CANCIONES

    File file = new File(Ruta);

    File[] mis_archivos = file.listFiles();

    for (File f : mis_archivos) {

    // System.out.println(f);

    miAudio = new File(f.getAbsolutePath());

    // System.out.println(miAudio.getName());

    miMedia = new Media(miAudio.toURI().toString());

     

    array_Ruta.add(miAudio);

    array_Nombre_Musica.add(miAudio.getName().toString());

    miPlayer = new MediaPlayer(miMedia);

    miPlayer.setAutoPlay(false);

     

    }

    //——————————————————————————————————————————————-

    //——————————————————————————————————————————————-

    // TITULO DE LA CANCIÓN

     

    nombre_cancion = new Label();

     

    nombre_cancion.getStyleClass().add(“Label_Titulo”);

    //——————————————————————————————————————————————-

    //——————————————————————————————————————————————-

    /*

    * CREACIÓN DE LABEL DEL TEXTAREA , LIST VIEW Y OBSERVABLELIST

    */

    LTextArea = new Label(“CANCIONES”);

    LTextArea.getStyleClass().add(“Label”);

     

    Lista_Vi = new ListView<String>();

    Lista_Vi.getStyleClass().add(“Lista”);

    for (String t : array_Nombre_Musica) {

    // System.out.println( t);

    Lista_Vi.getItems().add(t);

     

    }

     

    Lista_Vi.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);

     

    // Tamaño de la lista en la app

    Lista_Vi.setPrefHeight(100);

    Lista_Vi.setPrefWidth(20);

    Lista_Vi.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {

    @Override

    public void changed(ObservableValue observable, Object oldValue, Object newValue) {

    menssage = “”;

    list_Obser = Lista_Vi.getSelectionModel().getSelectedItems();

     

    for (String i : list_Obser) {

    menssage += i;

    nombre_cancion.setText(i);

     

     

    }

     

     

     

     

     

     

    }

    });

     

     

     

    //——————————————————————————————————————————————-

    //——————————————————————————————————————————————-

    // MENU

    menuBar = new MenuBar();

    Abrir_Archivo = new Menu(“Archivo”);

     

     

    // Menu menuEdiccion = new Menu(“Edicion”);

    menuItemNuevo = new MenuItem(“Nuevo”);

     

    Abrir_Archivo.getItems().addAll(menuItemNuevo);

    menuItemNuevo.setOnAction(e -> respuesta(e, miPlayer));

    menuBar.getMenus().addAll(Abrir_Archivo);

     

    // IMAGEN

    p = new Image(“file:/Volumes/NO NAME/JSP/FX_AUDIO_EJERCICIO/src/img/Logo_limpio.png”);

    pho = new ImageView(p);

    pho.setFitWidth(280);

    pho.setPreserveRatio(true);

     

     

     

    // BOTONES

    adelantar= botones(adelantar, “/Volumes/NO NAME/JSP/FX_AUDIO_EJERCICIO/src/img/adelante.png”, miPlayer);

    atrasar = botones(atrasar, “/Volumes/NO NAME/JSP/FX_AUDIO_EJERCICIO/src/img/atrasar.png”, miPlayer);

    play = botones(play, “/Volumes/NO NAME/JSP/FX_AUDIO_EJERCICIO/src/img/Play.png”, miPlayer);

    pause = botones(pause, “/Volumes/NO NAME/JSP/FX_AUDIO_EJERCICIO/src/img/pausa.png”, miPlayer);

    stop = botones(stop, “/Volumes/NO NAME/JSP/FX_AUDIO_EJERCICIO/src/img/stop.png”, miPlayer);

    apagar = botones(apagar, “/Volumes/NO NAME/JSP/FX_AUDIO_EJERCICIO/src/img/apgar.png”, miPlayer);

    //——————————————————————————————————————————————-

    //——————————————————————————————————————————————-

    /*

    * BARRA DE VOLUME.

    * Se crean los componentes necesarios para crear im Slider que será el

    * encargado de modificar el volumen.

    *

    * Posteriormente se debe de evaluar la propiedad y quedar a la escucha. Con el

    * método que nos brinda ChangeListener – como su nombre indica, se puede

    * cambiar el actor de escucha-. Usaremos el método de la clase MediaPlayer para

    * implementar el volumen que nos llega de evaluar las 3 posibilidades que le

    * hemos dado.

    */

     

    Label Volumen = new Label(“VOLUMEN”);

    Volumen.getStyleClass().add(“Label”);

    Slider vol = new Slider(0, 50, 100);

    vol.getStyleClass().add(“Slider”);

    vol.setValue(50);

    vol.valueProperty().addListener(new ChangeListener<>() {

     

    @Override

    public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number arg2) {

    // TODO Auto-generated method stub

    miPlayer.setVolume(vol.getValue() * 0.01);

    }

    });

     

    //——————————————————————————————————————————————-

    //——————————————————————————————————————————————-

    // ARQUITECTURA DEL SISTEMA

     

    HBox vertical_1 = new HBox(20, pho);

    vertical_1.setAlignment(Pos.CENTER);

     

    HBox horrizontal_0 = new HBox(20, nombre_cancion);

    horrizontal_0.setAlignment(Pos.CENTER);

     

    HBox vertical_2 = new HBox(20, atrasar,play,adelantar, pause, stop, apagar);

    vertical_2.setAlignment(Pos.CENTER);

     

    HBox HORIZONTAL_VOLUMEN = new HBox(20, Volumen, vol);

    HORIZONTAL_VOLUMEN.setAlignment(Pos.CENTER);

     

    VBox vertical_Area = new VBox(20, LTextArea, Lista_Vi);

    vertical_Area.setAlignment(Pos.CENTER);

     

    VBox vertical = new VBox(20, menuBar, vertical_1, horrizontal_0, vertical_2, HORIZONTAL_VOLUMEN,

    vertical_Area);

    scene = new Scene(vertical, 550, 800);

     

    scene.getStylesheets().add(getClass().getResource(“application.css”).toExternalForm());

    primaryStage.setScene(scene);

    primaryStage.setTitle(“REPRODUCTOR AUDIO”);

    primaryStage.show();

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

     

    public static void main(String[] args) {

    launch(args);

    }

    //——————————————————————————————————————————————-

    //——————————————————————————————————————————————-

    //——————————————————————————————————————————————-

    //——————————————————————————————————————————————-

    // MÉTODOS

    private Button botones(Button Accion, String ruta_archivo, MediaPlayer miPlayer) {

    String mensaje = “File:” + ruta_archivo;

    Image img = new Image(mensaje);

    ImageView view = new ImageView(img);

    view.setFitHeight(25);

    view.setPreserveRatio(true);

    Accion = new Button();

    Accion.setPrefSize(70, 50);

    Accion.setGraphic(view);

    if (ruta_archivo.equals(“/Volumes/NO NAME/JSP/FX_AUDIO_EJERCICIO/src/img/Play.png”))

    Accion.setOnAction(e -> acciones(menssage,Ruta));

    if (ruta_archivo.equals(“/Volumes/NO NAME/JSP/FX_AUDIO_EJERCICIO/src/img/stop.png”))

    Accion.setOnAction(e ->  detener());

    if (ruta_archivo.equals(“/Volumes/NO NAME/JSP/FX_AUDIO_EJERCICIO/src/img/pausa.png”))

    Accion.setOnAction(e -> pause());

    if (ruta_archivo.equals(“/Volumes/NO NAME/JSP/FX_AUDIO_EJERCICIO/src/img/apgar.png”))

    Accion.setOnAction(e -> apagar());

    if(ruta_archivo.equals(“/Volumes/NO NAME/JSP/FX_AUDIO_EJERCICIO/src/img/adelante.png”))

    Accion.setOnAction(e -> prueba(menssage,Ruta));

     

    miPlayer.setVolume(0.80);

     

    return Accion;

     

    }

     

    private void respuesta(ActionEvent e, MediaPlayer miPlayer) {

    MenuItem item = (MenuItem) e.getSource();

    System.out.println(“Has pulsado el botón” + ” ” + item.getText());

     

    if (item.getText().equals(“Nuevo”)) {

    System.out.println();

     

    System.exit(0);

    }

     

    }

    private void acciones(String menssage,String Ruta) {

     

    ruta_completa = Ruta+”/”+menssage;

    //System.out.println(ruta_completa);

    miAudio = new File(ruta_completa);

    // System.out.println(miAudio.getName());

    miMedia = new Media(miAudio.toURI().toString());

     

    array_Ruta.add(miAudio);

    array_Nombre_Musica.add(miAudio.getName().toString());

    miPlayer = new MediaPlayer(miMedia);

    miPlayer.play();

    }

    private void detener() {

    miPlayer.stop();

    }

    private void pause() {

    miPlayer.pause();

    }

     

    private void apagar() {

    System.exit(0);

    }

     

    private void adelante(String menssage, String Ruta) {

    posicion = 0;

    control =0;

    if (prox == false) {

    // acciones(mensaje,Ruta);

    for (String r : array_Nombre_Musica) {

    if (r.contains(menssage)) {

    posicion = array_Nombre_Musica.indexOf(r);

    System.out.println(“La pocision del la cancion  ” + r + ” es ” + array_Nombre_Musica.indexOf(r));

    control ++;

    System.out.println(“Punto de control ” + control);

    if (array_Nombre_Musica.indexOf(r) == posicion) {

    posicion++;

    System.out.println(“La pocision del la cancion nueva  es ” + posicion + ” ”

    + array_Nombre_Musica.get(posicion));

    mensaje = array_Nombre_Musica.get(posicion);

    nombre_cancion.setText(array_Nombre_Musica.get(posicion));

    prox = true;

    control ++;

    System.out.println(“Punto de control ” + control);

    //posicion = posicion +posicion;

     

    if(prox == true) {

    posicion = posicion +posicion;

     

    System.out.println(“La pocision del la cancion nueva  es ” + posicion + ” ”

    + array_Nombre_Musica.get(posicion));

    nombre_cancion.setText(array_Nombre_Musica.get(posicion));

     

    }

     

    }

    }

    acciones(mensaje, Ruta);

    }

    }

     

     

     

     

     

    }

    private void prueba(String menssage,String Ruta) {

    miPlayer.stop();

    adelante(menssage,Ruta);

     

     

     

    }

     

     

     

    private Image v;

    private ImageView pho, pho2, I_play, I_pause, I_stop;

    private Image p, p2;

    private Button play, stop, pause,adelantar,atrasar,apagar;

    private File miAudio, miAudio_2;

    private Media miMedia, miMedia_2;

    private MediaPlayer miPlayer, miPlayer_2, miPlayer_3, twis;

    private ProgressBar Linea_cancion;

    private InputStream stream;

    private Image img;

    private ImageView iv;

    private String nom_cancion, menssage,ruta_completa,mensaje;

    private Label nombre_cancion, LTextArea;

    private MenuBar menuBar;

    private Menu Abrir_Archivo, Cerrar;

    private menu nuevo;

    private MenuItem menuItemNuevo;

    private Stage primaryStage;

    private FileChooser archivo, archivo_2;

    private File fila, fila_2, audio;

    private int control,posicion,contador;

    private Scene scene;

    private TextArea Area;

    private ListView<String> Lista_Vi;

    private ObservableList<String> list_Obser;

    private Logica uno;

    private ArrayList array_formato = new ArrayList();

    private ArrayList<String> array_Nombre_Musica = new ArrayList();

    private ArrayList<File> array_Ruta = new ArrayList();

    private final String Ruta = “/Volumes/NO NAME/JSP/FX_AUDIO_EJERCICIO/src/audio”;

    private boolean prox = false;

     

    }

    #20581

    FrankMegia
    Participante

    Hola Daniel:

    Le he echado un ojo a tu código (ha sido complicado meterlo en Eclipse) y tu “lógica” me ha resultado muy liosa. En mi opinión creo que deberías darle otra vueltecita a la lógica del programa. Si cuando el usuario marca una canción de la lista y pulsa Play, guardas el índice de esa canción, cuando le de a “adelantar” sólo tendrías que tomar el índice+1 y pegarle la ruta, previa comprobación que no sea el último de la lista o si lo es, que tome el índice cero.

    Siento no poder ser de más ayuda.

    Por cierto, cuando pongas un código, quítale todo aquello que sea innecesario: hay muchas variables e imports que has dejado de muchas pruebas . Sólo es un consejo.

    Un saludo 😉

    #20585

    Daniel
    Participante

    Buenas.. Tomo nota de tus consejos. He seguido la lógica inicial, y he podido hacer que cada vez que se presione el botón salte la canción.

    Ahora me encuentro en la acción contraria. Que salga la canción anterior. Sin embargo la lógica vuelve a liarse, porque al intentar hacer el método al revés, sale un error.

    PD: Cuando comentas  añadir Id, supongo que refieres a implementar setters y getters, verdad?

    #20586

    FrankMegia
    Participante

    Buenas. En mi comentario no mencionaba nada de un “Id”, sólo mencione el índice (index) del listview. Cuando seleccionas un item del listview puedes obtener tanto el objeto seleccionado como el índice que ocupa. Si pulsas siguiente, solo tienes que recuperar el indice+1 y guardar ese índice como el actual. Eso te serviría tanto para ir hacia adelante como retroceder en la lista.

    Si has conseguido que tu lógica funcione, perfecto. No hay una única manera de hacer las cosas. Las habrá más correctas o menos pero mientras funcione.. genial.

    Un saludo.

Viendo 6 entradas - de la 1 a la 6 (de un total de 6)
  • Debes estar registrado para responder a este debate.