”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何用Java播放WAV文件?

如何用Java播放WAV文件?

发布于2024-11-19
浏览:825

How to Play WAV Files in Java?

使用Java播放WAV文件

开发Java应用程序时,播放音频文件是一个常见的需求。本教程提供了播放 *.wav 文件的全面解决方案,使您能够将音效和音频合并到 Java 程序中。

首先,创建一个类来处理音频播放。在下面的示例中,我们创建一个 MakeSound 类,其中包含播放音频文件的方法:

public class MakeSound {

    // Buffer size for reading audio data
    private final int BUFFER_SIZE = 128000;

    // Initialize audio variables
    private File soundFile;
    private AudioInputStream audioStream;
    private AudioFormat audioFormat;
    private SourceDataLine sourceLine;

    public void playSound(String filename) {
        // Open the audio file
        soundFile = new File(filename);
        audioStream = AudioSystem.getAudioInputStream(soundFile);
        
        // Get audio format
        audioFormat = audioStream.getFormat();
        
        // Open the audio output line
        DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
        sourceLine = (SourceDataLine) AudioSystem.getLine(info);
        sourceLine.open(audioFormat);
        
        // Start the audio line
        sourceLine.start();
        
        // Read and write the audio data
        int nBytesRead;
        byte[] abData = new byte[BUFFER_SIZE];
        while ((nBytesRead = audioStream.read(abData, 0, abData.length)) != -1) {
            sourceLine.write(abData, 0, nBytesRead);
        }
        
        // Stop and close the audio line
        sourceLine.drain();
        sourceLine.close();
    }
}

在主应用程序中,您可以使用 MakeSound 类来播放音频文件,方法是调用 playSound() 方法,传入要播放的 WAV 文件的文件名。

For例如,要在按下按钮时发出短促的嘟嘟声,可以添加以下代码:

MakeSound sound = new MakeSound();
sound.playSound("beep.wav");

此解决方案提供了一种在 Java 应用程序中播放 *.wav 文件的可靠且简单的方法,允许您向程序添加音频以增强功能和用户体验。

最新教程 更多>
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-19
  • 如何使用正则表达式提取 JavaScript 中标签之间的多行文本?
    如何使用正则表达式提取 JavaScript 中标签之间的多行文本?
    用于在 JavaScript 中提取两个标签之间的多行文本的正则表达式您在使用正则表达式模式从 HTML 字符串中提取文本时面临挑战。具体来说,当 HTML 中存在换行符时,多行标志 (/m) 似乎不起作用。要解决此问题,您需要使用“/.../s”修饰符,通常称为“dotall”修饰符。然而,需要注...
    编程 发布于2024-11-19
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-11-19
  • 快速使用 Redis Crud 示例
    快速使用 Redis Crud 示例
    安装依赖和环境变量 将数据库连接中的值替换为您的值。 #env file REDIS_ADDRESS=localhost REDIS_PORT=6379 REDIS_PASSWORD=123456 REDIS_DB=0 #install on go go get github.co...
    编程 发布于2024-11-19
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-19
  • React.js 简介:优点和安装指南
    React.js 简介:优点和安装指南
    React.js是什么? React.js 是一个强大的 JavaScript 库,用于构建交互式和响应式用户界面 (UI)。 React 由 Facebook 开发,使开发人员能够以更高效、更结构化的方式创建 Web 应用程序。在这篇文章中,我们将探讨 React.js 的几个优点,并提供有关如何...
    编程 发布于2024-11-19
  • 如何通过唯一键约束消除MySQL数据库中的重复记录?
    如何通过唯一键约束消除MySQL数据库中的重复记录?
    从 MySQL 数据库中清除重复记录:独特的关键解决方案维护数据完整性对于任何数据库的高效运行至关重要。在本例中,您会遇到一个包含“id”和“title”列的表,其中“title”应该不同。然而,超过 600,000 条记录的存在(包括大量重复记录)对实现唯一性构成了挑战。我们的目标是在不影响任何唯...
    编程 发布于2024-11-19
  • 为什么我找不到“vendor/autoload.php”:解决 Composer 自动加载错误的指南
    为什么我找不到“vendor/autoload.php”:解决 Composer 自动加载错误的指南
    解决“require(vendor/autoload.php): 无法打开流”错误问题描述:在PHP脚本开头遇到以下错误:Warning: require(vendor/autoload.php): failed to open stream: No such file or directory F...
    编程 发布于2024-11-19
  • 如何模拟 Python 的请求模块以实现真实的 API 交互?
    如何模拟 Python 的请求模块以实现真实的 API 交互?
    模拟 API 交互的模拟 Python 请求模块在我们全面测试与 API 交互的 Python 代码的过程中,有效地模拟 requests 模块至关重要。以下是使用自定义响应模拟 requests.get() 调用的分步方法:第 1 步:模拟 Requests 模块利用 Python 的模拟包,我们...
    编程 发布于2024-11-19
  • ## 淘汰视图模型:对象文字或函数 - 哪一个适合您?
    ## 淘汰视图模型:对象文字或函数 - 哪一个适合您?
    KO 视图模型:对象文字与函数在 Knockout JS 中,可以使用对象文字或函数来声明视图模型。虽然两者的主要目的都是定义可观察的属性和计算函数,但它们之间的关键区别会影响封装、灵活性和代码组织。对象文字:var viewModel = { firstname: ko.observabl...
    编程 发布于2024-11-19
  • 为什么我们应该避免在 MySQL 脚本中使用“SET NAMES”?
    为什么我们应该避免在 MySQL 脚本中使用“SET NAMES”?
    使用“SET NAMES”的注意事项在MySQL数据库处理的上下文中,“SET NAMES”的正确使用一直是一个讨论的话题。正如 O'Reilly 的《高性能 MySQL》中所述,在脚本开头使用“SET NAMES UTF8”的做法因其效率低下而受到质疑。Unicode 感知数据库的最佳实践...
    编程 发布于2024-11-19
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为的主要场景bool:语句:if、whi...
    编程 发布于2024-11-19
  • 如何确保 MySQL 表是使用 Hibernate 使用 InnoDB 引擎创建的?
    如何确保 MySQL 表是使用 Hibernate 使用 InnoDB 引擎创建的?
    如何使用 Hibernate 创建 MySQL InnoDB 表当使用 Hibernate 和 JPA 时,用户在使用 InnoDB 创建 MySQL 表时经常遇到挑战引擎而不是 MyISAM。为了解决这个问题,一个广泛推荐的解决方案是通过设置 hibernate.dialect 属性来配置 Hib...
    编程 发布于2024-11-19
  • 使用子类对象的超类引用
    使用子类对象的超类引用
    考虑一个场景,我们创建一个名为 User 的类,然后创建一个扩展 User 的子类,名为 Employee。 通常,我们使用以下内容创建 User 的实例: User user = new User(); 这里User是变量user的类型,user是保存类实例的变量,new User()创建了一个新...
    编程 发布于2024-11-19
  • 如何在 Go 中不阻塞地检查 Stdin 中的数据?
    如何在 Go 中不阻塞地检查 Stdin 中的数据?
    使用 Go 检查 Stdin 中的数据在 Go 中,在使用命令和管道时,与标准输入 (stdin) 交互通常是一项关键任务。然而,在不阻塞程序执行的情况下确定 stdin 是否有数据可能具有挑战性。os.Stdin 文件对象代表 stdin,它拥有与 Go 中其他文件对象类似的功能。这使我们能够利用...
    编程 发布于2024-11-19

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3