Yksinkertainen mp3-soitin

datahanska 23.05.06 10:57

Erittäin yksinkertainen esimerkki, kuinka soittaa mp3-tiedostoja JMF:llä.

 Tekstiversio  Arvo: 5 (5 ääntä)  Äänestä: +  -
import javax.media.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;

public class Mp3Soitin extends JFrame implements ControllerListener {
        private Vector kappaleet = new Vector();
        private String[] kappaleidenNimet;
       
        private JList kappaleLista;
        private JScrollPane rulla;
        private JPanel pohjapaneeli = new JPanel(new BorderLayout());
       
        private Component ohjauspaneeliKomponentti;
        private Player soitin;
        private URL url;
       
        private int index = 0;
         private Random r = new Random();
       
        public Mp3Soitin() {
                // Hakee kansion sekä alikansioiden kaikki mp3-tiedostot
                selaaKansio(new File
("C:\\Documents and Settings\\datahanska\\Omat tiedostot\\Omat musiikkitiedostot"));
                kappaleidenNimet = new String[kappaleet.size()];
                for(int i=0; i<kappaleet.size(); i++) {
                        kappaleidenNimet[i] = ((File)kappaleet.elementAt(i)).getName();
                }
                // Alustetaan JList
                kappaleLista = new JList(kappaleidenNimet);
                kappaleLista.setFont(new Font("Verdana", Font.PLAIN, 11));
        kappaleLista.setForeground(Color.white);
                kappaleLista.setBackground(new Color(11,22,100));
                kappaleLista.setSelectionBackground(Color.black);
                kappaleLista.setSelectionForeground(new Color(180,180,240));
                rulla = new JScrollPane(kappaleLista);
               
                // Alustetaan soitin
                try {
                        // Asetetaan oletustiedostoksi listan ensimmäinen tiedosto
                        this.url = ((File) kappaleet.elementAt(index)).toURL();
                        // Luodaan uusi soitin
                        soitin = Manager.createRealizedPlayer(this.url);
                        // Haetaan soittimen ohjauskomponentti
                        ohjauspaneeliKomponentti = soitin.getControlPanelComponent();
                        // Lisätään soittimeen "kontrolli"-kuuntelija
                        soitin.addControllerListener(this);
                }
                catch(Exception e) {
                        JOptionPane.showMessageDialog(null, e, "Virhe!", JOptionPane.ERROR_MESSAGE);
                }
               
                // Hoidetaan ikkuna kuntoon
                pohjapaneeli.add(rulla, BorderLayout.CENTER);
                pohjapaneeli.add(ohjauspaneeliKomponentti, BorderLayout.NORTH);
                this.add(pohjapaneeli);
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                this.setTitle("MTPlayer");
                this.setLocation(150,150);
                this.setSize(400, 200);
                this.setVisible(true);
               
                // Asetetaan kappalelistaan kuuntelija
                kappaleLista.addListSelectionListener(new ListSelectionListener() {
                        public void valueChanged(ListSelectionEvent lse) {
                                // Laitetaan soimaan listalta valittu kappale
                                soitaKappale(kappaleLista.getSelectedIndex());
                        }
                });
       
        } // Konstruktori loppuu
       
        private void selaaKansio(File kansio) {
                if(kansio.isDirectory()) {
                        File[] tiedostot = kansio.listFiles();
                        for(int i=0; i < tiedostot.length; i++) {
                                if(tiedostot[i].isDirectory()) {
                                        selaaKansio(tiedostot[i]);
                                }
                                else if(tiedostot[i].isFile()) {
                                        if(tiedostot[i].getName().endsWith(".mp3")) {
                                                kappaleet.add(tiedostot[i]);
                                        }
                                }
                        }
                }
                else {
                        JOptionPane.showMessageDialog
                          (null, "Virheellinen kansio!", "Virhe!", JOptionPane.ERROR_MESSAGE);
                }
        }
       
        private void soitaKappale(int i) {
                try {
                        this.index = i;
                        this.url = ((File) kappaleet.elementAt(i)).toURL();
                        soitin.stop();
                        soitin.deallocate();
                        soitin = Manager.createRealizedPlayer(this.url);
                        soitin.addControllerListener(this);
                        // Soittimen ohjauskomponentti pitää lisätä aina uuteen soittimeen
                        int leveys = ohjauspaneeliKomponentti.getWidth();
                        int korkeus = ohjauspaneeliKomponentti.getHeight();
                        pohjapaneeli.remove(ohjauspaneeliKomponentti);
                        ohjauspaneeliKomponentti = soitin.getControlPanelComponent();
                        ohjauspaneeliKomponentti.setBounds(0, 0, leveys, korkeus);
                        pohjapaneeli.add(ohjauspaneeliKomponentti, BorderLayout.NORTH);
                        soitin.start();
                }
                catch(Exception e) {
                        JOptionPane.showMessageDialog(null, e, "Virhe!", JOptionPane.ERROR_MESSAGE);
                }
        }
       
        public synchronized void controllerUpdate(ControllerEvent ce) {
                // Kun kappale loppuu
                if(ce instanceof EndOfMediaEvent) {
                        kappaleLista.setSelectedIndex(r.nextInt(kappaleet.size()));
                }
        }
       
        public static void main(String[] args) {
                new Mp3Soitin();
        }
}

Entropia 14:08 23.5.06 
Tämä on siis koodipätkä UI:n tekemiseen, joka soittaa ämppäreitä. Koodaa seuraavaksi ne oikeat MP3 dekoodausrutiinit. :)
editoitu: 16:17 23.5.06
Jaenis 16:16 23.5.06 
Entropia kirjoitti:
Tämä on siis koodipätkä UI:n tekemiseen, joka soittaa ämppäreitä. Koodaa seuraavaksi ne oikeat MP3 dekoodausrutiinit. :)

Tulipahan tästä vain mieleen että pyörää ei aina kannata keksiä uudestaan - vaikka siitä jotkut tykkääkin ;)
Edit: Tämä oli siis kommentti kommenttiin, ei koodinpätkään
Entropia 09:45 30.5.06 
Jaenis kirjoitti:
Entropia kirjoitti:
Tämä on siis koodipätkä UI:n tekemiseen, joka soittaa ämppäreitä. Koodaa seuraavaksi ne oikeat MP3 dekoodausrutiinit. :)

Tulipahan tästä vain mieleen että pyörää ei aina kannata keksiä uudestaan - vaikka siitä jotkut tykkääkin ;)
Edit: Tämä oli siis kommentti kommenttiin, ei koodinpätkään

Tietysti. Mutta onhan tämäkin jo pyörän uudelleen keksimistä, jos oikein viilataan pilkkua.