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

【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.lryc.cn/news/617691.html

相关文章:

  • 在线代码比对工具
  • Selenium元素定位不到原因以及怎么办?
  • 机器学习 TF-IDF提取关键词,从原理到实践的文本特征提取利器​
  • Effective C++ 条款36: 绝不重新定义继承而来的非虚函数
  • Excel 连接阿里云 RDS MySQL
  • 开闭原则代码示例
  • Pytest项目_day11(fixture、conftest)
  • js数组reduce高阶应用
  • B 树与 B + 树解析与实现
  • 可商用的 AI 图片生成工具推荐(2025 最新整理)
  • Kubernetes部署apisix的理论与最佳实践(一)
  • 专题:2025人形机器人与服务机器人技术及市场报告|附130+份报告PDF汇总下载
  • docker安装Engine stopped
  • 内置redis使用方法
  • Python 高阶函数:filter、map、reduce 详解
  • 【软考架构】主流数据持久化技术框架
  • Spring Boot Excel数据导入数据库实现详解
  • 6s081实验1
  • 机器翻译:一文掌握序列到序列(Seq2Seq)模型(包括手写Seq2Seq模型)
  • 机器学习TF-IDF算法详解
  • GPT-oss:OpenAI再次开源新模型,技术报告解读
  • 视频播放器哪个好用?视频播放器PotPlayer,KMP Player
  • FPGA学习笔记——DS18B20(数字温度传感器)
  • Mysql系列--6、内置函数
  • C++的结构体传参
  • 深度学习与遥感入门(五)|GAT 构图消融 + 分块全图预测:更稳更快的高光谱图分类(PyTorch Geometric 实战)
  • rust编译过程的中间表现形式如何查看,ast,hir,mir
  • Rust 实战五 | 配置 Tauri 应用图标及解决 exe 被识别为威胁的问题
  • istio如何采集method、url指标
  • Rust:anyhow 高效错误处理库核心用法详解