web-dev-qa-db-fra.com

Pourquoi ne puis-je pas lire les fichiers MP3 dans java

Je prépare un guide d'étude en Java pour m'aider à apprendre le japonais, mais j'ai eu du mal à le faire parler en japonais. Espeak n'a pas fonctionné, j'ai donc utilisé ce code pour obtenir un fichier .mp3 et installé mpg123 pour lire le fichier. Cela fonctionne très bien sur le terminal, mais il ne peut pas le faire jouer en Java.

Mon code:

String command="mpg123 "+dir+"/Xubuntu\\ Apps/Study\\ guide/Japanese/sounds/あう.mp3";
        System.out.println(command);
        try {Runtime.getRuntime().exec(command);} catch (IOException e) {e.printStackTrace();}

Le résultat

mpg123 /home/myuser/Documents/Xubuntu\ Apps/Study\ guide/Japanese/sounds/あう.mp3

Je n'entends aucun son, mais lorsque je copie/colle la commande dans le terminal, cela fonctionne bien.

Pourquoi ne pas jouer en Java?

3
TAAPSogeking

Si vous souhaitez utiliser un code Embed pour jouer la chanson, vous pouvez utiliser ce code, :)

Source: http://Java-demos.blogspot.hu/2012/11/Java-code-to-play-mp3-file.html

Code de lecture d'une chanson MP3 en Java:

import javax.media.*;
import Java.net.*;
import Java.io.*;
import Java.util.*;

public class AudioPlay {

    public static void main(String args[]) throws Exception {

        // Take the path of the audio file from command line
        File f = new File(args[0]);

        // Create a Player object that realizes the audio
        final Player p = Manager.createRealizedPlayer(f.toURI().toURL());

        // Start the music
        p.start();

        // Create a Scanner object for taking input from cmd
        Scanner s = new Scanner(System.in);

        // Read a line and store it in st
        String st = s.nextLine();

        // If user types 's', stop the audio
        if (st.equals("s")) {
            p.stop();
        }
    }
}

Explication :

Player est une interface du package javax.media . Comme vous ne pouvez pas créer directement un objet pour une interface, une classe l'implémentant est écrite et son objet est utilisé. Manager est une classe qui fait la chose.

Il y a plusieurs états dans lesquels un joueur sera. Elles sont

NON RÉALISÉ: Cela signifie que le joueur ne sait rien de ce qu'il doit faire (à propos du média).

RÉALISER: le joueur est en train de réaliser que c'est le monde (déterminer les ressources) nécessaire pour faire le travail (lire le fichier)

RÉALISÉ: Cela signifie que le lecteur obtient ses ressources pour lire le fichier et qu'il disposera également d'informations sur le type de média, etc.

PREFETCHING: Il se prépare maintenant, il sait comment lire le fichier.

PREFETCHED: Maintenant, il sait lire le média. Il peut tirer maintenant.

START: démarre la musique, lance la lecture du fichier.

Nous avons créé un lecteur réalisé, cela ne signifie pas que les étapes NON RÉALISÉES, RÉALISÉES sont ignorées, elles sont automatiquement effectuées. La méthode createRealizedPlayer(URL url) prend une URL qui pointe vers le fichier multimédia. Pour obtenir l'objet URL à partir d'un objet File, vous pouvez utiliser la méthode toURL() dans la classe Java.io.File, car elle est obsolète, nous avons appelé la méthode toURI() qui renvoie Java.net.URI object. puis la méthode toURL() en elle. L'utilisateur doit également arrêter la musique pour que l'entrée soit prise par l'utilisateur.

La sortie ne peut toutefois pas être affichée. Vous devez l'essayer. N'oubliez pas que, lors de l'exécution du programme, indiquez le chemin complet du fichier audio, sinon ArrayIndexOutOfBoundsException apparaîtra. La commande pourrait ressembler à ceci:

Java AudioPlay "Path/to/file.mp3"

Le crédit va à démo Java

1
rɑːdʒɑ