Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Java - podpora audio/video souborů

Dobrý den,

Moc rád bych chtěl v javě pouštět hudbu, popřípadě videa. Jenže Java má jen omezené množství podpory audio/video formátů včetně jejich kódování. Proto se chci zeptat, jestli existují nějaké soubory, které můžete importovat do Javy, stejně jako codec do přehrávače. Nebo existuje i jiný způsob?

Mockrát děkuji za radu.

Předmět Autor Datum
Co vim, tak pro javu jen jenom stará knihovna JMF. Do toho bych uz dneska nešel, pač jsem si s tím k…
MaSo 17.10.2016 12:12
MaSo
JavaFx jsem zkoušel, ale nepodařilo se mi to rozjet. Používám clip z knihovny javax.sound.sampled J…
MichalDM 17.10.2016 16:45
MichalDM
Použij třídu MediaPlayer. viz http://stackoverflow.com/questions/6045384/playing -mp3-and-wav-in-jav…
MaSo 18.10.2016 07:02
MaSo
JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileFilter(new FileNameExtensionFilter…
MichalDM 18.10.2016 16:02
MichalDM
Přidej někam na zátek programu řádek: new JFXPanel(); ...je to takový hack, aby se JavaFX iniciali…
MaSo 18.10.2016 16:47
MaSo
Bezva. Díky, už to funguje. Jde přehrát nejen wav, ale i mp3, což clip neuměl. A ten problém s cesto…
MichalDM 18.10.2016 17:06
MichalDM
Ještě se vyskytly dva problémy. 1. Když vyberu soubor, který má pár 10 MB, tak java ho nestihne nač…
MichalDM 19.10.2016 22:27
MichalDM
Je pekné, že si chceš niečo naprogramovať sám, ale pokiaľ si nedokážeš nájsť potrebné info...budeš t…
pme 19.10.2016 22:36
pme
Tak sorry, že jsem tě zklamal. Problém je v tom, že já neumím hledat.
MichalDM 20.10.2016 23:40
MichalDM
tak sa to mrte rychlo nauc. lebo nik nema cas za teba hladat veci. inac robit zrovna mediaplayer v j…
shiro 22.10.2016 17:33
shiro
Ty z mediaplayeru poznáš, v jakém jazyce byl napsaný? Tak to jsi machr.
Wikan 22.10.2016 17:35
Wikan
poznas to uz zo vzhladu programu. java sa vzdy lisi od klasickeho default windows vzhladu inych appi…
shiro 23.10.2016 09:15
shiro
Blbost, dá se to napsat tak, že poznáš leda hovno. Vypadá to jak nativní appka...
MaSo 23.10.2016 09:19
MaSo
da. ale kto to robi? mozno tak 1% java programatorov. zvysku je vzhlad u prdele. este aj tak rozsire…
shiro 23.10.2016 10:22
shiro
Takže program v Javě poznáš tak, že vypadá nenormálně a je v .jar. Pokud to tak není, tak to nepovaž…
Wikan 23.10.2016 10:28
Wikan
este aj samotny instalator javy vyzera nestandartne. ano, tvari sa to ako nativ win appka, no ma nes…
shiro 23.10.2016 11:12
shiro
Co jsem tak zbezne koukal, tak v tom JavaFX se to da psat docela pekne. A ve vysledku mas pak mulitp…
MaSo 22.10.2016 17:41
MaSo
Tak ještě poslední problém. Chci, aby se po skončení skladby opakoval kód výše. Jenže nevím, jak má…
MichalDM 20.10.2016 23:42
MichalDM
Že by pomocí metody getStatus()? https://docs.oracle.com/javase/8/javafx/api/javafx /scene/media/Me…
MaSo 22.10.2016 16:42
MaSo
import java.io.File; import javafx.embed.swing.JFXPanel; import javafx.scene.media.Media; import jav…
MichalDM 20.01.2017 22:58
MichalDM
Už to funguje. import java.io.File; import javafx.embed.swing.JFXPanel; import javafx.scene.media.M… poslední
MichalDM 26.01.2017 18:47
MichalDM

JavaFx jsem zkoušel, ale nepodařilo se mi to rozjet. Používám clip z knihovny javax.sound.sampled

JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Cat", "wav"));
fileChooser.showOpenDialog(null);
File musicFile = fileChooser.getSelectedFile();
AudioInputStream audioIn = AudioSystem.getAudioInputStream(musicFile);
Clip clip = AudioSystem.getClip();
clip.open(audioIn);
clip.start();

Vše funguje v pořádku, ale audio soubor funguje pouze wav.

JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Cat", "mp3"));
fileChooser.showOpenDialog(null);
String musicFile = fileChooser.getSelectedFile().getName();
Media hit = new Media(new File(musicFile).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();

Přesně takhle jsem to předtím napsal, jenže se vyskytly 2 chyby. Jednak jsem musel soubor nelogicky přesunout/zkopírovat do stejné složky, jako je jframe, jinak jej nechtěl zaregistrovat (v příkladu s clip s tím nebyl problém) a v předposledním řádku to hlásí.

Exception in thread "Thread-3" java.lang.IllegalStateException: Toolkit not initialized
at com.sun.javafx.application.PlatformImpl.runLater(P latformImpl.java:273)
at com.sun.javafx.application.PlatformImpl.runLater(P latformImpl.java:268)
at javafx.application.Platform.runLater(Platform.java :83)
at javafx.scene.media.Media$_MetadataListener.onMetad ata(Media.java:543)
at com.sun.media.jfxmediaimpl.MetadataParserImpl.done (MetadataParserImpl.java:120)
at com.sun.media.jfxmediaimpl.platform.java.ID3Metada taParser.parse(ID3MetadataParser.java:237)
at com.sun.media.jfxmediaimpl.MetadataParserImpl.run( MetadataParserImpl.java:103)

Bezva. Díky, už to funguje. Jde přehrát nejen wav, ale i mp3, což clip neuměl. A ten problém s cestou už jsem vyřešil. Takže výsledný kód vypadá.

new JFXPanel();
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Cat", "mp3", "wav"));
fileChooser.showOpenDialog(null);
String musicFile = fileChooser.getSelectedFile().getAbsolutePath();
Media hit = new Media(new File(musicFile).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();

Mockrát díky.

Ještě se vyskytly dva problémy.

1. Když vyberu soubor, který má pár 10 MB, tak java ho nestihne načíst či co a hudba se někdy přehraje, někdy ne. To jsem však obešel tím, že jsem na konec připsal.

Thread.sleep(2000);

Sice je tam 2 sekundová pauza, ale soubor se vždy přehraje.

2. Nepřehraje flac. Chtěl jsem to obejít nějakou knihovnou, ale jedinou rozumnou jsem našel jflac. Jenže jsem k ní nenašel žádný tutorial nebo aspoň příklad.

este aj samotny instalator javy vyzera nestandartne.
ano, tvari sa to ako nativ win appka, no ma nestandardnu farbu vnutra okna a progressbar je na niecom ako vysunuty bevel.
Ukaz mi nejaky rozsireny java soft, ktory vyzera ako nativ win appka. :-)

nepisal som ze java program musi byt nutne v jar. bezne si skompilujes execko, ale v adresari programu isto takmer vzdy najdes aj jar subory.

import java.io.File;
import javafx.embed.swing.JFXPanel;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaPlayer.Status;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Player {

static MyThread thread = new MyThread();

public static void main(String[] args) {
thread.start();
}

public static class MyThread extends Thread {

static MediaPlayer mediaPlayer;

@Override
public void run() {
play();
for (;;) {
if (!MyThread.mediaPlayer.getStatus().equals(Status.P LAYING))
System.out.println(MyThread.mediaPlayer.getStatus( ));
play();
}
}

public void play() {
new JFXPanel();
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Cat", "mp3", "wav"));
fileChooser.showOpenDialog(null);
String musicFile = fileChooser.getSelectedFile().getAbsolutePath();
Media hit = new Media(new File(musicFile).toURI().toString());
MyThread.mediaPlayer = new MediaPlayer(hit);
MyThread.mediaPlayer.play();
}
}
}

Nevím proč to nefunguje. Při každém průchodu je podmínka vždy splněna. A navíc to vyhazuje chybu.

Exception in thread "Thread-0" java.lang.NullPointerException
at archivator.Player$MyThread.play(Player.java:38) - String musicFile = fileChooser.getSelectedFile().getAbsolutePath();
at archivator.Player$MyThread.run(Player.java:29) - play(); v podmínce

Ve vláknech se moc nevyznám, takže prosím o radu.

Děkuji.

PS. A Thread už neobsahuje metodu sleep. Nevím, jak ji nahradit.

Už to funguje.

import java.io.File;
import javafx.embed.swing.JFXPanel;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Player {

public static void main(String[] args) {
play();
}

private static void play() {
new JFXPanel();
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Cat", "mp3", "wav"));
fileChooser.setControlButtonsAreShown(false);
fileChooser.showOpenDialog(null);
String musicFile = fileChooser.getSelectedFile().getAbsolutePath();
Media hit = new Media(new File(musicFile).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.setOnEndOfMedia(() -> play());
mediaPlayer.play();
}
}

Zpět do poradny Odpovědět na původní otázku Nahoru