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

使用Processing Sound库时遇音频线路不可用等错误的解决咨询

问题与解决方案

错误信息

Jun 06, 2023 5:43:01 PM com.jsyn.devices.javasound.JavaSoundAudioDevice <init>
INFO: JSyn: default output latency set to 80 msec for Windows 11
javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian not supported.
    at java.desktop/com.sun.media.sound.DirectAudioDevice$DirectDL.implOpen(DirectAudioDevice.java:484)
    at java.desktop/com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:115)
    at com.jsyn.devices.javasound.JavaSoundAudioDevice$JavaSoundInputStream.start(Unknown Source)
    at com.jsyn.engine.SynthesisEngine$EngineThread.run(Unknown Source)
java.lang.NullPointerException: Cannot invoke "javax.sound.sampled.TargetDataLine.read(byte[], int, int)" because "this.line" is null
    at com.jsyn.devices.javasound.JavaSoundAudioDevice$JavaSoundInputStream.read(Unknown Source)
    at com.jsyn.devices.javasound.JavaSoundAudioDevice$JavaSoundInputStream.read(Unknown Source)
    at com.jsyn.engine.SynthesisEngine$EngineThread.run(Unknown Source)
java.lang.RuntimeException: AudioInput stop attempted when no line created.
    at com.jsyn.devices.javasound.JavaSoundAudioDevice$JavaSoundInputStream.stop(Unknown Source)
    at com.jsyn.engine.SynthesisEngine$EngineThread.run(Unknown Source)

原代码

import processing.sound.*;

SoundFile test;

void setup(){
  test = new SoundFile(this, "yikes.wav");
}

void draw(){
  test.play();
}

核心问题分析

  1. 重复播放导致资源冲突:draw()方法每秒执行约60次,每次调用test.play()会反复请求音频设备,造成资源占用混乱,触发LineUnavailableException。
  2. 音频格式不兼容:系统不支持Sound库默认的PCM_SIGNED 44100.0 Hz, 16 bit, stereo格式,导致无法打开音频线路。

修复步骤

1. 修正代码逻辑,避免重复触发播放

将播放逻辑移出draw()循环,只执行一次或通过交互触发:

单次播放示例:

import processing.sound.*;

SoundFile test;
boolean hasPlayed = false;

void setup(){
  test = new SoundFile(this, "yikes.wav");
}

void draw(){
  if(!hasPlayed){
    test.play();
    hasPlayed = true;
  }
}

按键触发播放示例(更灵活):

import processing.sound.*;

SoundFile test;

void setup(){
  test = new SoundFile(this, "yikes.wav");
}

void keyPressed(){
  if(key == ' '){ // 按空格键播放
    test.play();
  }
}

void draw(){
  // 保持空循环即可
}

2. 转换音频文件为系统兼容格式

使用Audacity等工具将音频转换为以下参数:

  • 采样率:48000Hz(Windows 11部分设备默认支持)
  • 声道:单声道(若立体声格式报错)
  • 位深:16位

3. 释放音频设备资源

关闭所有正在使用音频的程序(浏览器、音乐播放器、视频软件等),确保Processing能获取音频设备的独占权限。

4. 更新Processing Sound库

打开Processing的「库管理器」,找到Sound库并更新到最新版本,修复已知的兼容性问题。

5. 调整JSyn音频延迟(高级)

在setup()开头添加代码手动设置音频延迟,尝试解决设备兼容性问题:

import com.jsyn.engine.SynthesisEngine;

void setup(){
  SynthesisEngine.setDefaultOutputLatency(100); // 设置延迟为100ms,可根据情况调整
  test = new SoundFile(this, "yikes.wav");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:54:53