当前位置: 首页 > 知识库问答 >
问题:

在java中嵌入wav?

辛承
2023-03-14

我正在编写一个小闹钟程序,当闹钟时间到了时,它会播放一个音频文件几次。

程序的报警部分已经完成。现在我开始播放文件。我使用jFileChooser来选择文件。javax . sound . sampled . audio inputstream、javax . sound . sampled . audio system和javax.sound.sampled.Clip来播放我的wav文件。也在工作。

但是我真的只想播放一个wav文件,我也希望能够在多个系统上移动这个闹钟,所以我想避免使用jFileChooser来选择我的闹钟音。我不想每次运行程序时都要浏览和选择文件。

给文件指定一个相对路径(例如,在与jar相同的文件夹中),然后修复路径字符串会更容易吗?或者,以某种方式使wav成为jar文件的一部分会更容易吗(这是我更喜欢的,因为这样我就不必担心wav文件了。它只是一个jar文件,可以独立用作闹钟。也许是一个字节数组?)

提前感谢!抱歉,如果这太蠢了。我是新手!

这是我的AudioInputStream代码。

 public void getaudPath() {
try {
    JFileChooser chooser;
   String choosertitle=null;
    chooser = new JFileChooser();
      FileNameExtensionFilter filter = new FileNameExtensionFilter(
        "WAV only", "wav");
    chooser.setFileFilter(filter);
    chooser.setCurrentDirectory(new java.io.File("."));
    chooser.setDialogTitle(choosertitle);
        chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
        apath = (chooser.getSelectedFile()).toString();
      File soundFile = new File(apath);
AudioInputStream audioIn = AudioSystem.getAudioInputStream(soundFile);
     URL url = this.getClass().getClassLoader().getResource(apath);
         clip = AudioSystem.getClip();
         clip.open(audioIn);
         JOptionPane.showMessageDialog(this,"Got file, A-okay!");
}  else {
          apath = null;
      }} catch (Exception e) {JOptionPane.showMessageDialog(this,"Error in getting sound file:=> "+e); }

}

共有1个答案

太叔永新
2023-03-14
  • 将音频剪辑添加到Jar中
  • 将Jar添加到应用程序的运行时类路径。(如果剪辑和类位于同一个Jar中,则不需要)
  • 使用Class.getResource(“/path/to/the.wav)获取剪辑的URL。
  • 使用基于Java Sound信息中显示的代码播放片段。第页

AudioInputStream需要文件对象。

不,他们不是!这是我在Java Sound信息中提到的源代码的副本/粘贴。页

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!");
            }
        });
    }
}

它使用URL来获取AudioInputStream,而不是File

对< code > audio system . getaudioinputstream 的调用被重载以接受5种不同的参数类型。最重要/最普通的3个是。

  • 文件
  • 输入流
 类似资料:
  • 问题内容: 我有一个自定义字体,我想在Java程序中炫耀它,用户无需安装就可以查看它。有谁知道这是怎么做到的吗? 工作解决方案 我已经实现了以下内容: 问题答案: 我从未做过,但似乎您想要的方法是 导入字体 或者 该参数是或,而或参数包含字体的二进制数据。 导入后使用字体: 要使Font对Font构造函数可用,必须通过调用在中注册返回的Font 。

  • 问题内容: 我有一个使用Apache FOP生成PDF文件的应用程序。一切正常,除了生成的PDF中的西里尔字母。据我了解,我应该将包含西里尔字母的字体与应用程序捆绑在一起。 因此,我将应用程序设置如下:我在../src/main/resources/conf/fop.xml(PDF渲染器的默认默认设置)中有一个配置文件,并像这样初始化FOP: fileLoader是我自己的用于读取文件的实用程序,

  • 我有一个使用Apache FOP生成PDF文件的应用程序。一切都很好,除了生成的PDF中的西里尔字母。据我所知,我应该捆绑应用程序的西里尔字母的字体。 因此,我将应用程序设置如下:我在../src/main/resources/conf/fop . XML(PDF渲染器的默认设置)并像这样初始化FOP: fileLoader是我自己的读取文件的实用程序,XSLT由它加载,一切都很好。我尝试了另一种

  • 在输出中它只给了令牌,空间令牌有人能帮我解决问题吗?

  • 除了通过JSP表达式在JSP页面中嵌入Java代码外,还可以通过<% ... %>在JSP页面中直接嵌入Java代码。所有写在<% ... %>之间的内容JSP编译器都会将其认为是Java代码,并直接将其插入由JSP页面生成的Servlet类的_jspService方法中,如下面的JSP代码: <% int n = (3 + 4) * 5; %> 上面的代码在JSP页面中嵌入了一行非常简单

  • 做这件事最轻的方法是什么。使用像反应艺术这样的东西对我试图做的事情来说是过度的。