You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java播放WAV音频:AudioSystem.getMixerInfo()返回空数组求助

问题解答

核心结论

使用Java Sound API不需要JavaFX,它是JDK核心类库的一部分,纯控制台应用完全可以正常使用。

WSL下getMixerInfo()返回空数组的原因

  1. WSL音频转发未配置:WSL本身无法直接访问主机音频硬件,依赖PulseAudio等工具实现音频转发。如果WSL内没有正确配置音频转发,JVM无法识别到可用的音频设备。
  2. 缺少系统音频后端支持:Java Sound API需要系统级的音频后端(如ALSA、PulseAudio),即使存在libjsound.so,如果WSL内没有安装或正确配置这些后端,JVM找不到可用混音器。

解决建议

  • 配置WSL音频转发:
    • 在WSL内安装pulseaudio包(比如Ubuntu下执行sudo apt install pulseaudio)。
    • 确保环境变量PULSE_SERVER指向主机的PulseAudio服务(通常设置为PULSE_SERVER=tcp:localhost:4713,需主机开启PulseAudio的网络访问权限)。
  • 验证系统音频设备:
    • 安装alsa-utils,运行aplay -l查看是否能列出音频设备。如果无输出,说明音频转发未生效,需检查WSL和主机的音频配置。
  • 强制指定音频后端(可选):
    • 启动Java程序时添加JVM参数,示例:
      java -Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider YourMainClass
      
  • 替代方案:
    • 既然ffplay能正常工作,可直接在Java中调用系统命令播放音频,示例代码:
      new ProcessBuilder("ffplay", "-autoexit", "your-audio-file.wav").start();
      

内容的提问来源于stack exchange,提问作者morpheus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:15:58