0

我想使用 RecordNRT 渲染声音序列。它已经工作了,但是渲染文件的持续时间太短了。

    var p;

    [\BPM, MasterSequencer.instance.globalBPM].postln;
    [\BARS, this.bars].postln;

    this.sequenceDuration = ((60 / MasterSequencer.instance.globalBPM) * 4) * this.bars;
    [\duration, this.sequenceDuration].postln;

    SynthDef(\sampler, { |out, buffer, rate=1, amp|
        var snd = PlayBuf.ar(2, buffer, BufRateScale.kr(buffer)*rate, doneAction:2);
        Out.ar(0, snd * amp)
    }).store;

    p = Pbind(
        \instrument,\sampler,
        \rate, this.slider2.value,
        \buffer, this.id,
        \dur, (1 / this.steps) * 4,
        \amp, Pseq(binarySequence) * this.slider1.value,
    ).asScore(this.sequenceDuration);

    p = p.score.insert(1, [0, ["/b_allocRead", this.id, this.samplePath, 0, -1]]);
    p.postln;
    Dialog.savePanel({ |path,score|
        var header = path.basename.split($.);
        if(header.size == 1){
            header = "WAV";
            path = path ++ ".wav";
        }{
            header = header.last;
        };
        if(header == "aif"){ header = "AIFF" };
        if(header == "aiff"){ header = "AIFF" };
        if(header == "wav"){ header = "WAV" };

        Score.recordNRT(
            p,
            path.dirname +/+ path.basename ++ ".osc", path,
            headerFormat:header,
            duration: this.sequenceDuration
        );

this.sequenceDuration=(60/BPM)*4*bars我猜 这个计算是对的,我this.sequenceDuration=(4*bars)/(BPM/60)也会这样做。因此输入this.sequenceDuration与输出文件的持续时间不匹配。

我不知道可能是什么问题。我通过之前发布它们来检查持续时间和 BPM 和条形图。我发布了持续时间,一切似乎都正确。渲染完成和文件,它没有正确的持续时间。

  • bar=4 BPM=70 的文件应该为 13.71 秒,但长度为 11.71 秒。
  • bar=8 BPM=70 的文件应该是 27.42 秒,但长度是 23.43 秒。
  • bar=4 BPM=140 的文件应为 06.85 秒,但长度为 02.94 秒。
  • bar=8 BPM=140 的文件应为 13.71 秒,但长度为 05.87 秒。

  • bar=4 BPM=120 的文件应为 08.00 秒,但长度为 04.00 秒。

  • bar=8 BPM=120 的文件应为 16.00 秒,但长度为 08.00 秒。
  • bar=4 BPM=150 的文件应为 06.40 秒,但长度为 02.56 秒。
  • bar=8 BPM=150 的文件应为 12.80 秒,但长度为 05.12 秒。
4

1 回答 1

0

您可能会看到在即将发布的 3.7 版本中修复的错误,其中最后一块音频样本未能写入磁盘。修复时间为 2015 年 3 月 28 日:

https://github.com/supercollider/supercollider/commit/73f779e

3.7 尚未发布,但您可以从源代码构建或等待预发布。

一个明显的解决方法是使用比需要更长的文件,然后截断它们。

于 2015-06-19T13:28:50.670 回答