Přehrávání zvuků (soubory wav) v Javě

Java Práce se soubory Přehrávání zvuků (soubory wav) v Javě

V dnešním tutoriálu si ukážeme, jak jednoduše přehrát zvukový soubor wav v jazyce Java. Je to velmi jednoduchá věc a proto si nakonec ukážeme i jak si udělat takový jednoduchý wav přehrávač.

Vše co budeme potřebovat je třída "Music", do které si importujeme potřebné knihovny a nastavíme konstruktor s jedním parametrem. Parametr bude String a bude označovat cestu k našemu souboru. Také použijeme třídu "MyJFrame", která vše spustí přes metodu main.

Nejprve si ukážeme třídu Music:

import java.net.MalformedURLException;
import java.net.URL;
import java.applet.*;

public class Music {

    private URL soubor;

    public Music(String cesta){
       try {
            soubor = new URL("file:"+cesta);
        } catch (MalformedURLException vyjimka) {
            System.err.println(vyjimka);
        }
        Applet.newAudioClip(soubor).play();
    }

}

A co vlastně tyto knihovny dělají? No první z nich slouží k odchycení MalformedURLEx­ception. Ve druhé se importuje zadání cesty k souboru a ve třetím balíčku importujeme třídu applet a její metody.

Dále jsme si vytvořili privátní atribut URL, do kterého přiřadíme cestu k souboru, kterou získáme z parametru v konstruktoru. Samozřejmě že vše musí být uvnitř bloku Try a vše bude střežit MalformedURLEx­ception. Vidíte, je to celkem jednoduché. Teď už jen stačí vytvořit si hlavní třídu s názvem MyJFrame, ve které se vše spustí přes metodu main:

public class MyJFrame
{
   public static void main(String args[]){
       Music music = new Music("song.wav");
   }
}

Ve třídě MyJFrame jsem použil soubor song.wav, který najdete v příloze zdrojového kódu s dalšími soubory wav.

Wav přehrávač

Tak a teď jak sem slíbil, si uděláme jednoduchý program, který bude přehrávat soubory wav dle určení. Tak zaprvé si kompletně předěláme třídu MyJFrame. Vše co v ní máte si vymažte a napíšeme si základní rozložení třídy MyJFrame.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class MyJFrame extends JFrame
{
   public JButton spust, vyber;
   private String file;
   public static MyJFrame instance;

    public MyJFrame()
    {
      this.setSize(400,400);
      this.setTitle("Přehrávač zvukových souborů");
      this.setComponents();
      this.setListeners();
    }

    public void setComponents(){

    }

    public void setListeners(){

    }

    public static Frame nastav(){
      MyJFrame okno = new MyJFrame();
      okno.setVisible(true);
      okno.setLocationRelativeTo(null);
      return okno;
    }

    public static void main(String args[]){
      MyJFrame.nastav();
    }

}

Nejprve jsme si importovali potřebné knihovny. Poté jsme si v konstruktoru nastavili velikost a titulek a zavolali si potřebné metody. Nakonec jsme vytvořili statickou metodu Frame, ve které jsou nastavené základní vlastnosti okna. Nakonec metoda main, která vše spustí.

Tak a teď si nastavíme metodu setComponents();

Container pane = this.getContentPane();
pane.setLayout(new FlowLayout());
pane.setBackground(Color.PINK);
this.vyber = new JButton("vyber");
this.spust = new JButton("spust");
pane.add(vyber);
pane.add(spust);

Metoda nedělá nic výjimečného. Do kontejneru si uložíme panel, nastavíme mu FlowLayout a přidáme dvě tlačítka. Formulář by měl vypadat následovně:

prehravac

Teď je na řadě metoda setListeners(), která je o něco zajímavější.

this.vyber.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
   FileDialog fd = new FileDialog(instance);
   fd.setMode(FileDialog.LOAD);
   fd.setVisible(true); //zviditelní okno
   String soubor = fd.getDirectory() + fd.getFile(); // vrátí cestu ke složce + cestu k souboru.
       if(soubor != null){
       file = soubor;
       }
     }
  }
);

   this.spust.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
       Music m = new Music(file);  // file = absolutní cesta k souboru získaná z proměnné soubor
       }
  }
);

V metodě si nastavíme tlačítku vyber a start aktivní naslouchávače. Po stisknutí tlačítka vyber se vytvoří FileDialog a na obrazovce vyskočí dialogové okno,

okno

ve kterém si můžeme vybrat soubor díky vlastnosi fd.setMode(Fi­leDialog.LOAD). Poté si uložíme cestu souboru do proměnné soubor. Naši proměnnou file necháme odkázat na proměnnou soubor.

Po stisknutí tlačítka start se vytvoří instance třídy Music a spustí se soubor. Tak a soubor je zcela hotov.

Zde je ještě celá třída MyJFrame, tak jak má celá vypadat.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class MyJFrame extends JFrame
{
  public JButton spust, vyber;
  private String file;
   public static MyJFrame instance;
    public MyJFrame()
    {
      this.setSize(400,400);
      this.setTitle("Přehrávač zvukových souborů");
      this.setComponents();
      this.setListeners();
    }

    public void setComponents(){
      Container pane = this.getContentPane();
      pane.setLayout(new FlowLayout());
      pane.setBackground(Color.PINK);
      this.vyber = new JButton("vyber");
      this.spust = new JButton("spust");
      pane.add(vyber);
      pane.add(spust);
    }

    public void setListeners(){
    this.vyber.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    FileDialog fd = new FileDialog(instance);
    fd.setMode(FileDialog.LOAD);
    fd.setVisible(true);
    String soubor = fd.getDirectory() + fd.getFile();
        if(soubor != null){
        file = soubor;
        }
     }
  }
);

    this.spust.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        Music m = new Music(file);
    }
  }
);
    }

    public static Frame nastav(){
      MyJFrame okno = new MyJFrame();
      okno.setVisible(true);
      okno.setLocationRelativeTo(null);
      return okno;
    }

    public static void main(String args[]){
     MyJFrame.nastav();
    }
}

Kdyby někdo i přesto nechápal nějakou část kódu, tak si stáhněte soubor v příloze tohoto článku, kde najdete i soubory wav pro přehrání.


 

Stáhnout

Staženo 309x (5.62 MB)
Aplikace je včetně zdrojových kódů v jazyce java

 

  Aktivity (1)

Článek pro vás napsal Milan Gallas
Avatar
Autor se věnuje programování, hardwaru a počítačovým sítím.

Jak se ti líbí článek?
Celkem (1 hlasů) :
55555


 



 

 

Komentáře
Zobrazit starší komentáře (7)

Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Co třeba okno, když je to okno? :) Ten kód by si opravdu zasloužil trochu vyčistit.

Odpovědět  +2 10.7.2013 17:58
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Kit:

Pokud to někdo lepí v Notepadu, tak odsazování občas vypadá různě až hrůzně, ale kvalitní IDE se většinou postará o kvalitní zalamování i odsazování.

Odpovědět 10.7.2013 17:59
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Kit:

Vim mi u potomka JFrame vždy nabídne název MyJFrame. Není to sice ideální název, ale pořád se drží toho, že je to "Frame". Někdy mě to i přesvědčí, že v tomhle případě se o potomka nemá jednat a že mám místo dědičnosti raději použít kompozici.

Odpovědět 10.7.2013 18:05
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Milan Gallas
Redaktor
Avatar
Odpovídá na Kit
Milan Gallas:

Název MyJFrame je dobrý. Asi ho budu používat :D

 
Odpovědět 10.7.2013 18:06
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Milan Gallas
David Čápka:

Ideální jméno by bylo třeba PlayerFrame.

Odpovědět  +1 10.7.2013 18:13
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Milan Gallas
Kit:

Když jsem si dělal ten plugin, tak mě nic vhodnějšího nenapadlo, než právě předpona "My".

Další variantou bylo před tím spojením odříznout všechny znaky před posledním velkým písmenem. Tedy MyFrame extends JFrame, MyListener extends KeyListener apod. Jenže posledně jmenované vytvářelo kolizi s MyListener extends MouseListener.

To jsou jen názvy, které mi editor vkládá do pahýlů, aby tam nějaký název byl. Můžu to samozřejmě změnit dle libosti.

Odpovědět 10.7.2013 18:14
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Milan Gallas
Redaktor
Avatar
Odpovídá na David Čápka
Milan Gallas:

zůstanu u MyJFrame ten název se mi prostě zamlouvá :D

 
Odpovědět 10.7.2013 18:15
Avatar
Milan Gallas
Redaktor
Avatar
Milan Gallas:

Článek jsem předělal. Teď by to mělo být správně.

 
Odpovědět 10.7.2013 18:33
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Milan Gallas
David Čápka:

Určitě lepší, ale stále tam máš MyJFrame song, místo song dej alespoň to okno nebo pokud chceš myJFrame.

Odpovědět 10.7.2013 18:37
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

To použití appletu je docela dobré, měl jsem teď problémy se SoundSystem a MidiSystem a třída applet to přehrává skvěle. Není sice možné vzít zvuk ze streamu, ale to se dá přežít.

Odpovědět 16.8.2013 14:59
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 17. Zobrazit vše