【问题标题】:How to send buffer to audio file in Supercollider?如何在 Supercollider 中将缓冲区发送到音频文件?
【发布时间】:2016-06-16 01:42:26
【问题描述】:

我正在开发一个简单的 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;

【问题讨论】:

    标签: audio supercollider


    【解决方案1】:

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

    【讨论】:

    • 我在插入 Buffer.write(////) 时收到此消息:ERROR: Command line parse failed nil ERROR: syntax error, unexpected CLASSNAME, expecting $end in file 'selected text' line 44 char 6: Buffer.write("/Users/admin/Desktop/rbs.aiff", "aiff", "int16", -1, 0, false); ^^^^^^ 当我使用声明的缓冲区时收到此消息,b:ERROR: Command line parse failed nil ERROR: syntax error, unexpected NAME, expecting $end in file 'selected text' line 44 char 1: b.write("/Users/admin/Desktop/rbs.aiff", "aiff", "int16", -1, 0, false); ^
    • (1) 您确实需要执行b.write(...),其中b 是您之前创建的Buffer。 (2) 你有一个语法错误,这可能是因为你在尝试的行之前忘记了分号。如果您看到短语“语法错误”,则说明您有语法错误,即您输入错误,导致代码无法运行
    猜你喜欢
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2018-09-20
    • 1970-01-01
    • 2014-04-28
    相关资源
    最近更新 更多