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と小節は事前に投稿して確認しています。私は期間を投稿します、すべてが正しいようです。レンダリングが終了し、ファイルの持続時間が正しくありません。

  • バーが 4 のファイル BPM=70 _13.71 秒のはずですが、11.71 秒の長さです。
  • バーが 8 のファイル BPM=70 _本来は 27.42 秒ですが、長さは 23.43 秒です。
  • バーが 4 のファイル BPM=140 は 06.85 秒のはずですが、長さは 02.94 秒です。
  • バーが 8 のファイル BPM=140 は 13.71 秒のはずですが、長さは 05.87 秒です。

  • バーが 4 のファイル BPM=120 は 08.00 秒のはずですが、長さは 04.00 秒です。

  • バーが 8 のファイル BPM=120 は 16.00 秒のはずですが、長さは 08.00 秒です。
  • バーが 4 のファイル BPM=150 は 06.40 秒のはずですが、長さは 02.56 秒です。
  • バーが 8 のファイル BPM=150 は 12.80 秒のはずですが、長さは 05.12 秒です。
4

1 に答える 1