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

代码直接可以运行

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 Output
        System.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() ? "大端" : "小端");
    }
}
相关推荐
木井巳1 分钟前
【BFS 解决拓扑排序】火星词典
java·算法·leetcode·广度优先·宽度优先·图搜索算法
霸道流氓气质2 分钟前
Java调用StableDiffusion/ComfyUI图像生成:DAG工作流编排、WebSocket实时进度与Flux模型集成的生产级实战
java·websocket·stable diffusion
北风toto12 分钟前
KMP 算法详解:从暴力匹配到 O(n+m) 的字符串搜索
java·开发语言·算法
weixin1997010801613 分钟前
《京东JOS API:落地方案、接口边界与业务踩坑 —— 联盟免费 vs 商家按量的双轨制》(附python源码)
java·网络·python
外收内放15 分钟前
数据分析(数据查询与选择)
python·学习·数据分析
衡石科技16 分钟前
从语义准备到模型验收:HENGSHI SENSE Data Agent 的 RAG 与部署工程实践
java·大数据·人工智能·数据分析·rag
G018_star sky♬17 分钟前
java学习日记-多态与好玩的写法
java
林澈在路上19 分钟前
哪个写歌软件可以用自己声音?MELO音乐详解
人工智能·python·算法
撸串-研究生19 分钟前
面向景区的综合服务管理平台设计——以稻城亚丁景区为例【附源码】
java·开发语言·vue.js·前后端分离·稻城亚丁景区
揽秀亭长19 分钟前
视频总结是怎么实现的?4种AI工具的内容解析能力与技术方案分析
人工智能·音视频