当前位置: 首页 > ds >正文

【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.xdnf.cn/news/17700.html

相关文章:

  • 零 shot 语义+在线闭环:深度学习让机器人学会“主动”
  • MySQL 数据操作全流程:创建、读取、更新与删除实战
  • 对比FRI 与 Ligero 证明大小
  • 怎么实现表征工程并强化模型的“事实性”“诚信性”
  • 深入解析大模型落地的四大核心技术:微调、提示词工程、多模态应用 及 企业级解决方案,结合代码示例、流程图、Prompt案例及技术图表,提供可落地的实践指南。
  • FreeRTOS学习:资源管理:互斥操作的本质
  • 腾讯云EdgeOne Pages深度使用指南
  • GPU指令集入门教程
  • 《 C Primer Plus》
  • 常用hook钩子函数
  • 快速了解DBSCAN算法
  • Vue.js设计于实现 - 响应式(三)
  • 音视频学习(五十二):ADTS
  • Graham 算法求二维凸包
  • Python 2025:最新技术趋势与展望
  • 每日五个pyecharts可视化图表-line:从入门到精通 (2)
  • lesson34:深入理解Python线程:从基础到实战优化
  • jupyter notebook如何打开其他盘目录
  • MCP学习与实践
  • [激光原理与应用-222]:机械 - 3D设计与2D设计的异同比较
  • Linux 虚拟机磁盘空间占满-全面清理方案
  • Cesium1.95中如何高效管理 1500 个高频实体
  • 赋值运算符指南
  • 代码可读性与维护性的实践与原则
  • word中,添加新的参考文献后,其他参考文献的交叉引用不能及时更新的解决办法
  • 《Webpack与Vite热模块替换机制深度剖析与策略抉择》
  • 二维前缀和问题
  • 如何在 Ubuntu 24.04 LTS Linux 上安装 MySQL 服务器
  • 电脑本地摄像头做成rtsp流调用测试windows系统中
  • 【大智慧数据】心智开花的时候