【JAVA】使用系统音频设置播放音频

代码直接可以运行

import javax.sound.sampled.*;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;public class SystemDefaultAudioPlayer {// 强制使用的通用音频格式private static final AudioFormat FORCE_FORMAT = new AudioFormat(44100.0f,    // 采样率16,          // 位深度2,           // 声道(立体声)true,        // 有符号false        // 小端);public static void main(String[] args) {// 解决控制台输出乱码try {System.setOut(new java.io.PrintStream(System.out, true, StandardCharsets.UTF_8.name()));} catch (UnsupportedEncodingException e) {System.err.println("设置编码失败: " + e.getMessage());}// 请先在系统中将默认音频输出设备设置为CABLE OutputSystem.out.println("注意:请确保已在系统中将默认音频输出设备设置为CABLE Output");// 指定要播放的音频文件路径String audioFilePath = "D:\\download\\语音合成模版.wav"; // 替换为你的音频文件路径// 使用系统默认设备播放音频playAudioWithSystemDefault(audioFilePath);}/*** 使用系统默认音频设备播放音频文件*/private static void playAudioWithSystemDefault(String filePath) {File audioFile = new File(filePath);if (!audioFile.exists()) {System.out.println("音频文件不存在: " + filePath);return;}try {// 获取原始音频输入流和格式AudioInputStream originalAudioStream = AudioSystem.getAudioInputStream(audioFile);AudioFormat originalFormat = originalAudioStream.getFormat();System.out.println("原始音频格式: " + formatToString(originalFormat));// 强制转换为通用格式AudioInputStream convertedStream = AudioSystem.getAudioInputStream(FORCE_FORMAT, originalAudioStream);System.out.println("已强制转换为通用格式: " + formatToString(FORCE_FORMAT));// 获取系统默认的音频输出线路DataLine.Info lineInfo = new DataLine.Info(SourceDataLine.class, FORCE_FORMAT);SourceDataLine line = (SourceDataLine) AudioSystem.getLine(lineInfo);line.open(FORCE_FORMAT);line.start();System.out.println("开始播放音频...");// 播放音频数据byte[] buffer = new byte[4096];int bytesRead;while ((bytesRead = convertedStream.read(buffer)) != -1) {line.write(buffer, 0, bytesRead);}// 完成播放line.drain();line.stop();line.close();convertedStream.close();originalAudioStream.close();System.out.println("音频播放完成");} catch (UnsupportedAudioFileException e) {System.out.println("不支持的音频文件格式: " + e.getMessage());} catch (LineUnavailableException e) {System.out.println("音频线路不可用: " + e.getMessage());System.out.println("请尝试更换为其他音频格式或检查系统音频设备设置");} catch (IOException e) {System.out.println("文件操作错误: " + e.getMessage());}}/*** 将音频格式转换为易读字符串*/private static String formatToString(AudioFormat format) {return String.format("%s, %.0f Hz, %d位, %s, %s",format.getEncoding(),format.getSampleRate(),format.getSampleSizeInBits(),format.getChannels() == 1 ? "单声道" : "立体声",format.isBigEndian() ? "大端" : "小端");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92767.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[CSP-J 2021] 小熊的果篮

题目 12代码 #include <bits/stdc.h> using namespace std; const int N2e55; struct node{int pre,//上一个水果块(对于水果就是上个水果)l,//块开始的序号&#xff0c;左边界 d,//块类型&#xff0c;0/1id,//水果序号 r,//块结束的序号&#xff0c;右边界 next;//下一块…

【C++】STL二叉搜索树——map与set容器的基础结构

目录 前言 1.二叉搜索树的概念 1.1基本结构 1.2性能分析 2.二叉搜索树的实现 2.1创建 2.2插入 2.3查找与遍历 2.4删除 3.二叉搜索树类代码 前言 C中STL的map与set容器广泛应用于实践过程中&#xff0c;本文将详细分析容器最基础的二叉搜索树结构&#xff0c;为后续map…

基于Spring Boot和SSE的实时消息推送系统

一、SSE技术深度解析 1.1 协议工作原理 #mermaid-svg-u7ZBlEsXcn68R5a8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-u7ZBlEsXcn68R5a8 .error-icon{fill:#552222;}#mermaid-svg-u7ZBlEsXcn68R5a8 .error-text{fi…

Day 40 训练和测试的规范写法

知识点回顾&#xff1a; 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中展平操作&#xff1a;除第一个维度batchsize外全部展平dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模式关闭dropout 作业&#xff1a;仔细学习下测试和训练代…

分析代码并回答问题

代码 <template><div>Counter: {{ counter }}</div><div>Double Counter: {{ doubleCounter }}</div> </template><script setup lang"ts"> import { ref, computed } from "vue";const counter ref(0);const …

在macOS上扫描192.168.1.0/24子网的所有IP地址

在macOS上扫描192.168.1.0/24子网的所有IP地址&#xff0c;可以通过终端命令实现。以下是几种常用方法&#xff1a; 使用ping命令循环扫描 打开终端执行以下脚本&#xff0c;会逐个ping测试192.168.1.1到192.168.1.254的地址&#xff0c;并过滤出有响应的IP&#xff1a; for i …

Java基础05——类型转换(本文为个人学习笔记,内容整理自哔哩哔哩UP主【遇见狂神说】的公开课程。 > 所有知识点归属原作者,仅作非商业用途分享)

Java基础05——类型转换 类型转换 由于Java是强类型语言&#xff0c;所以要进行有些运算的时候&#xff0c;需要用到类型转换。 如&#xff1a;byte(占1个字节)&#xff0c;short(占2个字节)&#xff0c;char(占2个字节)→int(4个字节)→long(占8个字节)→float(占4个字节)→do…

mysql基础(二)五分钟掌握全量与增量备份

全量备份 Linux环境 数据备份 数据库的备份与恢复有多中方法&#xff0c;通过mysql自带的mysqldump工具可对数据库进行备份。语法&#xff1a; mysqldump -u username -p password --databases db_name > file_name .sql说明&#xff1a; -u参数指定用户名&#xff0c;usern…

使用Windbg分析多线程死锁项目实战问题分享

目录 1、问题描述 2、使用.effmach x86命令切换到32位上下文 3、切换到UI线程&#xff0c;发现UI线程死锁了 4、使用!locks命令查看临界区锁的详细信息&#xff0c;遇到了问题 5、使用dt命令查看临界区对象信息&#xff0c;找到发生死锁的多个线程 6、用户态锁与内核态锁…

防火墙组网方式总结

一、部署模式&#xff1a;灵活适配多样网络环境下一代防火墙&#xff08;NGAF&#xff09;具备极强的网络适应能力&#xff0c;支持五种核心部署模式&#xff0c;可根据不同网络需求灵活选择。路由模式&#xff1a;防火墙相当于路由器&#xff0c;位于内外网之间负责路由寻址&a…

AI大模型:(二)5.1 文生视频(Text-to-Video)模型发展史

目录 1.介绍 2.发展历史 2.1.早期探索阶段(2015-2019) 2.1.1.技术萌芽期 2.1.2.RNN/LSTM时代 2.2.技术突破期(2020-2021) 2.2.1 Transformer引入视频生成 2.2.2 扩散模型的兴起 2.3.商业化突破期(2022-2023) 2.3.1 产品化里程碑 2.3.2 竞争格局形成 2.4.革命…

14mm寻北仪能否塞进液压支架生死缝隙?

在煤矿井下世界的方寸之间&#xff0c;液压支架的每个关键节点都承载着千钧重压。顶梁铰接点、立柱顶端、掩护梁角落&#xff0c;恰恰是空间最为局促的“禁区”。ER-MNS-10A MEMS寻北仪应运而生&#xff01;它采用了先进的MEMS陀螺技术&#xff0c;以14mm至薄高度、40g极致轻盈…

python之浅拷贝深拷贝

文章目录潜拷贝(shallow copy)深拷贝(deep copy)总结一下python的浅拷贝和深拷贝.潜拷贝(shallow copy) python中潜拷贝指的是:构造一个新的复合对象&#xff0c;然后将原对象中的对象引用插入其中 平常开发过程中潜拷贝是比深拷贝更常见的场景. 比如编程中使用到的一些基本的…

普通大学本科生如何入门强化学习?

问题:你平时是如何紧跟大型语言模型和智能体技术前沿的&#xff1f;有哪些具体的学习和跟踪方式&#xff1f;回答:我会通过“输入-内化-实践”结合的方式跟踪前沿。首先&#xff0c;学术动态方面&#xff0c;每天花10分钟浏览arXiv的http://cs.CL和http://cs.AI板块&#xff0c…

新手向:Python实现数据可视化图表生成

Python数据可视化入门&#xff1a;从零开始生成图表数据可视化是数据分析过程中不可或缺的关键环节&#xff0c;它通过将抽象的数字信息转化为直观的图形展示&#xff0c;帮助分析师和决策者更快速、更准确地发现数据中隐藏的模式、规律和发展趋势。在当今大数据时代&#xff0…

VBA即用型代码手册:计算选择的单词数Count Words in Selection

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建及…

DNS(域名系统)

分层结构根域名&#xff08;ipv4&#xff0c;13台&#xff09;&#xff0c;二级域名&#xff0c;三级域名……相关记录A将域名解析为ipv4地址AAAA将域名解析为ipv6地址MX指名该区域为邮件服务区PTR反向查询将主机名解析为域名NS记录服务器的名字CNAME别名查询方式递归查询迭代查…

【大模型】强化学习算法总结

角色和术语定义 State&#xff1a;状态Action&#xff1a;动作Policy/actor model&#xff1a;策略模型&#xff0c;用于决策行动的主要模型Critic/value model&#xff1a;价值模型&#xff0c;用于评判某个行动的价值大小Reward model&#xff1a;奖励模型&#xff0c;用于给…

基于梅特卡夫定律的开源链动2+1模式AI智能名片S2B2C商城小程序价值重构研究

摘要&#xff1a;梅特卡夫定律揭示了网络价值与用户数量的平方关系&#xff0c;在互联网经济中&#xff0c;连接的深度与形式正因人的参与发生质变。本文以开源链动21模式、AI智能名片与S2B2C商城小程序的协同应用为研究对象&#xff0c;通过实证分析其在社群团购、下沉市场等场…

Ubuntu22.04安装CH340驱动及串口

一、CH340驱动安装 1.1 查看USB设备能否被识别 CtrlAltT打开终端&#xff1a; lsusb 插入设备前&#xff1a; 插入设备后&#xff1a; 输出中包含ID 1a86:7523 QinHeng Electronics CH340 serial converter的信息&#xff0c;这表明CH340设备已经被系统识别。 1.2 查看USB转串…