【问题标题】:Audio playback in java not working correctlyjava中的音频播放无法正常工作
【发布时间】:2013-04-29 22:54:07
【问题描述】:

我试图模仿这里找到的代码https://stackoverflow.com/tags/javasound/info,但我无法通过 loop() 或 start() 让它播放。我一直在寻找答案,但似乎我的只是侥幸或愚蠢的错误,其他人都足以识别。

import javax.sound.sampled.*;
import java.net.URL;

public class AudioTest
{
    public static void main(String[] args) throws Exception
    {
        URL url = new URL("http://www.public.asu.edu/~wnjones1/leftright.wav");
        Clip clip = AudioSystem.getClip();
        AudioInputStream audioIn = AudioSystem.getAudioInputStream(url);
        clip.open(audioIn);
        clip.start();
    }
}

它具有示例中缺少 GUI 的所有内容,但这不重要,不是吗?至少应该还能玩一次吧?

任何帮助将不胜感激。谢谢!

--编辑-- 这是我从我的网站上提取的一个简单的两秒 .wav 文件。我正在使用 Java7u21。

--编辑 v2.0-- 所以基本上我学到的是......保留GUI。或者使用 Applet,这样您就不必担心 main() 的结尾。

import javax.swing.*;

public class Assignment6me extends JApplet
{
    private int APPLET_WIDTH = 400, APPLET_HEIGHT = 160;

    private AudioPanel ap;

    //The method init initializes the Applet with a Pane with two tabs
    public void init()
    {
        try
        {
            ap = new AudioPanel();
        }
        catch(Exception e)
        {}
        getContentPane().add(ap);
        setSize (APPLET_WIDTH, APPLET_HEIGHT); //set Applet size
    }
}



import java.net.URL;
import javax.swing.*;
import javax.sound.sampled.*;
import java.io.File;


public class AudioPanel extends JPanel
{
    public AudioPanel() throws Exception
    {
        File file = new File("Don't Stop Believin'.wav");
        Clip clip = AudioSystem.getClip();
         // getAudioInputStream() also accepts a File or InputStream
        AudioInputStream ais = AudioSystem.getAudioInputStream( file );
        clip.open(ais);
        clip.start();
    }
}

【问题讨论】:

标签: java audio javasound


【解决方案1】:

在 Java 声音信息中看到的(工作)源。页面是准确的。

import java.net.URL;
import javax.swing.*;
import javax.sound.sampled.*;

public class LoopSound {

    public static void main(String[] args) throws Exception {
        URL url = new URL(
            "http://pscode.org/media/leftright.wav");
        Clip clip = AudioSystem.getClip();
        // getAudioInputStream() also accepts a File or InputStream
        AudioInputStream ais = AudioSystem.
            getAudioInputStream( url );
        clip.open(ais);
        clip.loop(Clip.LOOP_CONTINUOUSLY);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                // A GUI element to prevent the Clip's daemon Thread
                // from terminating at the end of the main()
                JOptionPane.showMessageDialog(null, "Close to exit!");
            }
        });
    }
}

我提请您注意:

                // A GUI element to prevent the Clip's daemon Thread
                // from terminating at the end of the main()
                JOptionPane.showMessageDialog(null, "Close to exit!");

添加那部分应该没问题。


所以我不能在没有 GUI 的情况下播放任何文件?

我不记得基于命令行的应用程序。确实会播放声音,但有可能。

import java.net.URL;
import javax.swing.*;
import javax.sound.sampled.*;
import java.util.Scanner;

public class LoopSound {

    public static void main(String[] args) throws Exception {
        URL url = new URL(
            "http://pscode.org/media/leftright.wav");
        Clip clip = AudioSystem.getClip();
        // getAudioInputStream() also accepts a File or InputStream
        AudioInputStream ais = AudioSystem.
            getAudioInputStream( url );
        clip.open(ais);
        clip.loop(Clip.LOOP_CONTINUOUSLY);
        Scanner scanner = new Scanner (System.in);
        scanner.nextInt();
    }
}

【讨论】:

  • 我故意省略了 GUI。我以为没有人我也能做到。所以我不能在没有 GUI 的情况下播放任何文件?
  • 不,我没有这么说。见编辑。所需要的只是阻止main(String) 结束。如果你返回 “所以我不能在没有Scanner 的情况下播放歌曲?”请注意,我将不得不打你的头(这是规则)。
  • “所以...没有扫描仪我就无法播放音乐?”我小子。不过谢谢。为什么有 GUI 确实更有意义。
猜你喜欢
  • 2017-12-28
  • 2021-09-23
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多