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.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
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
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. nový
Wikan 22.10.2016 17:35
Wikan
poznas to uz zo vzhladu programu. java sa vzdy lisi od klasickeho default windows vzhladu inych appi… nový
shiro 23.10.2016 09:15
shiro
Blbost, dá se to napsat tak, že poznáš leda hovno. Vypadá to jak nativní appka... nový
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… nový
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ž… nový
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… nový
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… nový
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… nový
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

Co vim, tak pro javu jen jenom stará knihovna JMF. Do toho bych uz dneska nešel, pač jsem si s tím kdysi užil svoje, když jsem programoval SIP klienta (a míchání RTP streamů).

Nemá něco na video/hudbu JavaFx?

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)

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