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

JSyn循环工作站:如何将所有采样输出连接至WaveRecorder录制混音?

JSyn中录制多采样叠加混音的最优方案

嘿,我刚好对JSyn的音频路由这块比较熟悉,给你梳理下怎么搞定这个录制问题~

你之前直接把每个采样播放器连到LineOut能听到叠加声音,是因为LineOut内部其实帮你做了混音,但如果要录制最终的混合音频,咱们得自己搭建一个专门的混音单元,也就是你看到文档里的finalMix,这样既能让用户听到声音,又能把混合后的信号传给WaveRecorder。

具体实现步骤:

  • 创建混音器单元:
    JSyn提供了Mix2(固定2路输入)和MixN(可自定义输入数量)两种混音器,如果你不确定未来会有多少个采样需要叠加,优先用MixN更灵活。
  • 路由所有采样到混音器:
    把每个采样播放器的输出端口(比如单声道的output,或者立体声的left/right)分别连接到混音器的不同输入通道。
  • 同时连接混音器到LineOut和WaveRecorder:
    混音器的输出要分两路:一路连LineOut保证用户能实时听到声音,另一路连WaveRecorder的输入端口,这样录制的就是最终的混合音频了。

代码示例(Java版):

// 初始化JSyn合成器
Synth synth = JSyn.createSynth();
synth.start();

// 创建LineOut用于监听
LineOut lineOut = new LineOut();
synth.add(lineOut);
lineOut.start();

// 创建finalMix:这里设为4路输入,可根据你的采样数量调整
MixN finalMix = new MixN(synth, 4);
synth.add(finalMix);

// 假设你已经有几个采样播放器:drumSampler, melodySampler, bassSampler
// 把每个采样的输出连到finalMix的不同输入通道
drumSampler.output.connect(0, finalMix.input, 0);
melodySampler.output.connect(0, finalMix.input, 1);
bassSampler.output.connect(0, finalMix.input, 2);

// 把混音后的信号连到LineOut(立体声左右声道)
finalMix.output.connect(0, lineOut.input, 0);
finalMix.output.connect(0, lineOut.input, 1);

// 创建WaveRecorder准备录制
WaveRecorder recorder = new WaveRecorder(synth, new File("my_recording.wav"));
synth.add(recorder);

// 把混音输出连到Recorder的输入(同样立体声)
finalMix.output.connect(0, recorder.input, 0);
finalMix.output.connect(0, recorder.input, 1);

// 开始录制
recorder.start();

// 当需要停止录制时
// recorder.stop();
// recorder.close();
// synth.stop();

额外小提示:

  • 如果你的采样是立体声的,记得把采样播放器的left和right分别连接到混音器对应的左右输入通道,再把混音器的左右输出分别连到LineOut和WaveRecorder的左右输入。
  • MixN的输入数量可以通过setNumInputs(int num)动态调整,不用一开始就固定死。
  • 录制完成后一定要调用stop()和close(),否则WAV文件可能损坏无法正常播放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:34:30