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

使用Java Beads库生成正弦波遇音频格式不支持错误求助

解决Beads库启动音频时的Line Unsupported错误

问题背景

Windows 10系统下使用Eclipse IDE,已安装Beads音频库,编写生成正弦波的代码时,能识别并显示音频设备名称,但启动音频时触发格式不支持的异常。

错误信息

Exception in thread "Thread-0" java.lang.IllegalArgumentException: Line unsupported: interface SourceDataLine supporting     format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, big-endian
at java.desktop/com.sun.media.sound.PortMixer.getLine(PortMixer.java:125)
at net.beadsproject.beads.core.io.JavaSoundAudioIO.create(Unknown Source)
at net.beadsproject.beads.core.io.JavaSoundAudioIO$1.run(Unknown Source)
at java.base/java.lang.Thread.run(Thread.java:1583)

原代码示例

import javax.sound.sampled.AudioFormat;
import net.beadsproject.beads.core.AudioContext;
import net.beadsproject.beads.core.io.JavaSoundAudioIO;
import net.beadsproject.beads.data.Buffer;
import net.beadsproject.beads.ugens.WavePlayer;

public class AudioDevice {

    public static void main(String[] args) {
        // 选择音频设备
        JavaSoundAudioIO jsaio = new JavaSoundAudioIO();
        jsaio.selectMixer(0);
        // 创建音频上下文
        AudioContext ac = new AudioContext(jsaio);
        // 输出格式信息(采样率、编码等)
        ac.postAudioFormatInfo();
        // 创建正弦波生成器
        WavePlayer wp = new WavePlayer(ac, 440.0f, Buffer.SINE);
        // 将正弦波接入输出设备
        ac.out.addInput(wp);
        // 启动音频(此处触发错误)
        ac.start();
    }
}

问题原因

  1. 选中设备类型错误:直接选择索引0的混音器,该设备可能是麦克风等输入设备,不具备输出线路(SourceDataLine)。
  2. 格式不兼容:Beads默认使用大端字节序(big-endian)的音频格式,但Windows绝大多数音频设备仅支持小端字节序(little-endian),导致设备无法识别该格式。

解决方案

1. 确认并选择正确的输出设备

先遍历所有可用混音器,打印设备名称,确认哪个是扬声器、耳机这类输出设备:

// 遍历并打印所有混音器
for (int i = 0; i < jsaio.getNumMixers(); i++) {
    System.out.println("Mixer " + i + ": " + jsaio.getMixerName(i));
}

运行后,将jsaio.selectMixer(0)中的索引替换为实际输出设备的索引(比如1)。

2. 指定设备兼容的音频格式

手动创建小端字节序的音频格式,替换Beads的默认格式:

// 创建小端字节序的PCM格式:44100Hz、16bit、立体声、有符号、小端
AudioFormat format = new AudioFormat(44100, 16, 2, true, false);
AudioContext ac = new AudioContext(jsaio, format);

3. 完整修正代码

import javax.sound.sampled.AudioFormat;
import net.beadsproject.beads.core.AudioContext;
import net.beadsproject.beads.core.io.JavaSoundAudioIO;
import net.beadsproject.beads.data.Buffer;
import net.beadsproject.beads.ugens.WavePlayer;

public class AudioDevice {

    public static void main(String[] args) {
        JavaSoundAudioIO jsaio = new JavaSoundAudioIO();

        // 列出所有混音器,确认输出设备索引
        for (int i = 0; i < jsaio.getNumMixers(); i++) {
            System.out.println("Mixer " + i + ": " + jsaio.getMixerName(i));
        }

        // 替换为实际输出设备的索引
        jsaio.selectMixer(1);

        // 指定小端字节序的兼容格式
        AudioFormat format = new AudioFormat(44100, 16, 2, true, false);
        AudioContext ac = new AudioContext(jsaio, format);

        ac.postAudioFormatInfo();
        WavePlayer wp = new WavePlayer(ac, 440.0f, Buffer.SINE);
        ac.out.addInput(wp);
        ac.start();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:04:56