0
votes

Je veux utiliser le clip pour jouer au fichier WAV avec Java, mais aucun des trois fichiers Java ne fonctionnait

Le premier fichier: aucun son n'a été généré.

import java.io.*;     
import javax.sound.sampled.*;

public class Test13 {
    static String filename = "C:\\audio1.wav";
    public static void main(String[] args) {
        
        try
        {
            Clip clip = AudioSystem.getClip();
            clip.open(AudioSystem.getAudioInputStream(new File(filename)));
            clip.start();
        }
        catch (Exception exc)
        {
            exc.printStackTrace(System.out);
        }
         
    }
}


0 commentaires

3 Réponses :


0
votes

J'ai eu mes meilleurs résultats lors de l'utilisation de l'URL pour obtenir la ressource audio.

Clip clip;

void makeAudio1Cue()
{
    URL url = this.getClass().getResource("audio/" + filename);
    AudioInputStream ais = AudioSystem.getAudioInputStream(url);
    DataLine.Info info = new DataLine.Info(Clip.class, ais.getFormat());
    Clip clip = (Clip) AudioSystem.getLine(info);
    clip.open(ais);
}

void playAudio1Cue()
{
    clip.setFramePosition(0);
    clip.start();
}


16 commentaires

L'URL est un pointeur à une "ressource" sur le World Wide Web. Mon fichier audio est situé sur mon ordinateur Won. Je ne pense pas que je veux utiliser l'URL.


Si vous ne prévoyez pas d'exécuter ce code sur l'ordinateur de quelqu'un d'autre, vous utilisez le fichier ira probablement bien. Il y avait des cas où le fichier échouerait en raison d'erreurs de marquage / de réinitialisation, mais je n'ai pas vu cela dans un long moment. Mais si vous souhaitez emballer le programme dans un fichier JAR ou JVM autonome (JLINK-Construit) pour la distribution, un emplacement de fichier "relatif" et une URL avec la méthode GetResource est la pratique la plus courante. Une URL peut voir dans un pot. Un fichier ne peut pas. L'URL est utilisée pour les fichiers locaux et www. Quoi qu'il en soit, vous avez besoin d'une étape de dataline.info.


Super idéal! Je vais essayer cela plus tard.


Pourriez-vous ajouter quelque chose comme «Inclure», la fonction principale, etc. Pour en faire un fichier de classe Java complet et exécutable? Vous savez que je suis juste un débutant.


Si vous utilisez une IDE (hautement recommandé), cela aidera à combler les importations nécessaires, si c'est ce que vous voulez dire. «Inclure» plus d'une chose javascript? Si vous avez besoin de plus de conseils, puis-je suggérer ce plan: rédiger un programme qui imprime "Hello World" sur la console lorsque vous appuyez sur un bouton. Je vais vous aider à ajouter la petite quantité de code supplémentaire nécessaire pour initialiser le son, ainsi que la petite quantité nécessaire pour lire le fichier son lorsque vous appuyez sur le bouton, si vous ne le comprenez pas d'abord. (Je pense que vous voulez.)


J'utilise Eclipse comme IDE. Oui, je peux trouver des importations à partir de là lorsque je code par moi-même, mais lorsque je copie votre code, il a montré beaucoup d'erreurs. Je prévois d'écrire un programme à deux filetés, un thread pour imprimer un score de musique mobile (graphique animé, c'est fait.), L'autre thread pour la lecture d'un fichier de musique WAV qui est la sortie du score de musique. Oui, je vais essayer d'écrire un programme qui imprime "Hello World" sur la console lorsque j'appuie sur un bouton.


Au plaisir de voir le code de bouton "Hello World" fonctionner, prêt à aider avec la lecture audio une fois que cela est fait. Coordonner un score en mouvement avec la musique n'est pas un exploit méchant cependant. Je vais suggérer d'utiliser une source Sourcedataline qui rapporte ses progrès de synchronisation, où vous pouvez utiliser son compte de trame pour coordonner le taux de la lecture visuelle.


J'ai ajouté importer java.awt.event. *; et bplay.addActionListener (New ActionListener () {@override Public Void ActionperFormé (actionvent e) {System.out.println ("Hello World"); JOPTIONPANE.SHOWMESSAGEDIALOG (NULL, "HELLO WORLD");}}); dans mon code. Ensuite, exécuté, le code du bouton "Hello World" fonctionnait.


Génial! Veuillez poster le nouveau code dans votre message d'origine. Je modifierai ensuite ma réponse pour résoudre le code que vous postez.


Ici, je ne peux poster que la partie pertinente pour imprimer "Hello World" dans le prochain commentaire car quand j'ai essayé de poster mon code entier, je n'ai qu'un gâchis.


BTPLAY.AddActionListener (New ActionListener () {@override Public Void ActionperFormé (actionvent e) {System.out.println ("Hello World");}});


J'ai essayé d'ajouter tout mon code actuel dans mon post original, mais ce que j'ai eu était juste un gâchis. Alors ici, je ne peux poster que la partie que vous voulez que je imprime


BTPLAY.AddActionListener (New ActionListener () {@override Public Void ActionperFormé (actionvent e) {System.out.println ("Hello World");}});


Mon email est Dienfoonwu@gmail.com. J'apprécie votre email!


Je t'ai envoyé un e-mail. Si vous n'obtenez pas d'email, laissez-moi savoir! Je viens d'installer un nouveau serveur de messagerie (ma première configuration de la configuration d'une telle chose!) Et il pourrait y avoir des bugs pour travailler. Si cela ne fonctionne pas, j'écrirai à nouveau d'une autre adresse électronique.


J'ai déjà reçu votre courrier électronique et vous a envoyé mes deux fichiers, test7.java et .wav. J'espère que vous pouvez les recevoir avec succès.



0
votes

Le premier fichier Java semble fonctionner maintenant

import java.io.IOException;
import javax.sound.sampled.*;

 class AudioTest {

    public void AudioPlay() {

        ClassLoader classLoader = 
Thread.currentThread().getContextClassLoader();

        try{
          Clip clip = AudioSystem.getClip();
          AudioInputStream inputStream = AudioSystem.getAudioInputStream(classLoader.getResourceAsStream("audio1.wav"));

          clip.open(inputStream);
          clip.start();
          while (!clip.isRunning())
              Thread.sleep(10);
          while (clip.isRunning())
              Thread.sleep(10);
          clip.close();
        } catch (Exception e)
            {
              e.printStackTrace(); 
              System.out.println(e); 
            }
        System.out.println("done"); //to see if the sound is finished playing
    } 
}
public class Test11 {

    public static void main(String[] args)  throws IOException
    {
    AudioTest au1 = new AudioTest();
    au1.AudioPlay();
    }
}


0 commentaires

0
votes

J'ai trouvé que le code suivant est le meilleur moyen de lire des fichiers .wav: xxx


0 commentaires