Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Java - playing flac with jflac library

Dobrý den,

Stáhl jsem knihovnu jflac jflac-1.3

Importoval ji do projektu, jenže nevím, jak ji přesně použít.

Potřeboval bych, prosím vás, poradit, jak dopsat kód na převod flac to wav

Decoder.java

do své třídy v příloze.

Předem děkuji za odpověď.

PS. Popis třídy player_label - Z hlavní třídy zavolám metoda choose_song(), která zobrazí filechooser okno, ve kterém vyberu všechny soubory, které chci přehrát. Ty následně nahraje do arraylistu a zavolá metodu play(), která postupně soubory přehrává. Po přehrání poslední skladby se opět zavolá metoda choose_song(). (SNAD JSEM TO SROZUMITELNĚ VYSVĚTLIL)

Předmět Autor Datum
Tak jsem asi nepochopil, na co se vlastně ptáš. Nejdřív píšeš o převodu flacu na wav a o něco níže o…
Wikan 15.08.2017 08:17
Wikan
Poslední odstavec je pouze popis moji třídy k přehrávání hudby. Třída Decoder.java umí překódovat f…
MichalDM 15.08.2017 17:22
MichalDM
Na to ti snad stačí jenom metoda decode.
Wikan 15.08.2017 17:24
Wikan
Upravil jsem metodu choose_song() public void choose_song() { number = -1; new javafx.embed.swing.…
MichalDM 16.08.2017 13:57
MichalDM
Tak nic, už to funguje, problém nebyl v kódu, ale v souboru, zkusil jsem jiný flac a ten šel bez pro… poslední
MichalDM 16.08.2017 14:52
MichalDM

Poslední odstavec je pouze popis moji třídy k přehrávání hudby.

Třída Decoder.java umí překódovat flac do wav, který moje třída bez problému přehraje. (Což přesně potřebuji).

Jenže nevím, jak přesně třídu Decoder.java dopsat do moji třídy a k čemu vlastně slouží ty dvě metody - processPCM() a processStreamInfo().

Prostě jsem nepochopil, jak přesně třída Decoder.java funguje. Takže prosím o radu.

Díky.

Upravil jsem metodu choose_song()

 public void choose_song() {
        number = -1;
        new javafx.embed.swing.JFXPanel();
        JFileChooser file_chooser = new JFileChooser("C:\\");
        file_chooser.setFileFilter(new javax.swing.filechooser.FileNameExtensionFilter("Music", "mp3", "wav", "flac"));
        file_chooser.setMultiSelectionEnabled(true);
        file_chooser.setControlButtonsAreShown(false);
        file_chooser.setCurrentDirectory(new File("C:\\"));
        file_chooser.showOpenDialog(null);
        LIST_FILES.addAll(java.util.Arrays.asList(file_chooser.getSelectedFiles()));
        int count = LIST_FILES.size();
        Decoder decoder = new Decoder();
        String new_file_path;
        for (int i = 0; i < count; i++) {            
            try {
                if (LIST_FILES.get(i).getName().endsWith("flac")) {
                    new_file_path = LIST_FILES.get(i).getAbsolutePath().replace("flac","wav");
                    decoder.decode(LIST_FILES.get(i).getAbsolutePath(), new_file_path);
                    LIST_FILES.set(i, new File(new_file_path));
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            
        }
        if (LIST_FILES.size() > 0) {
            java.util.Collections.reverse(LIST_FILES);
            play();
        }
    }

Jenže vždycky to vyhodí chybu java.io.IOException: STREAM_DECODER_UNPARSEABLE_STREAM...

Poněvadž soubor wav se sice vytvoří, ale nejde přehrát a má velikost pár KB. (původní soubor má pár desítek MB)

PS. Soubor Decoder.java jsem nijak neměnil, pouze jsem smazal metodu main().

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