如何在Supercollider中将缓冲区发送到音频文件?

时间:2016-03-02 23:19:27

标签: audio supercollider

我正在制作一个简单的Supercollider补丁(我的第一个),旨在交换文件中的样本以获得口吃,粒度合成的声音。

我要做的是制作一个新的音频文件,它是输入文件的长度。它应该运行一个循环,它将文件中样本的位置与加扰索引处的样本交换。

我还没有找到一种方法来编译和编写音频文件。

var indexa, indexb, frames, count, j, aa, ab;
j = 0;

s.boot;

b = Buffer.read(s, "/Users/admin/Desktop/10counter.aiff"); //my test file

"Frames: " + b.numFrames.postln;
"Channels: " + b.numChannels.postln;

count = b.numFrames * b.numChannels;

"Count: " + count.postln;

b.write("/Users/admin/Desktop/rbs.aiff", "aiff", "int16", 0, 0, true);

opCount.do ({

    temp1 = Buffer.alloc(s, 1, 2);
    temp2 = Buffer.alloc(s, 1, 2);

    aa = Array.fill(frames, {arg i; i});
    ab = a1.scramble;
})

//do the swaps
{j < count}.while ({

    indexa = aa[j];
    indexb = ab[j];

    temp1 = b.get(indexa);
    temp2 = b.get(indexb);

    b.set(indexb, temp1);
    b.set(indexa, temp2);

    j.increment;
})

//write to file here?

b.close;

1 个答案:

答案 0 :(得分:1)

你真的只需要Buffer.write方法。像你建议的那样把它放在代码的底部。我不确定现有的b.write应该做什么 - 你可能从某个地方复制它但不需要它,你不想在你修改之前编写文件,还要您不希望leaveOpen参数为true(因为您正在进行单次写入,而不是连续地流式传输到磁盘)。