Audio 如何在超级对撞机中向音频文件发送缓冲区?

Audio 如何在超级对撞机中向音频文件发送缓冲区?,audio,supercollider,Audio,Supercollider,我正在开发一个简单的超级准直器补丁(我的第一个补丁),设计用于交换文件中的样本,以获得口吃、颗粒合成的声音 我要做的是制作一个新的音频文件,它的长度等于输入文件的长度。它应该运行一个循环,将样本在文件中的位置与样本在加扰索引处交换 我还没有找到一种方法让它编译和编写音频文件 var indexa, indexb, frames, count, j, aa, ab; j = 0; s.boot; b = Buffer.read(s, "/Users/admin/Desktop/10counte

我正在开发一个简单的超级准直器补丁(我的第一个补丁),设计用于交换文件中的样本,以获得口吃、颗粒合成的声音

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

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

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;
var indexa,indexb,frames,count,j,aa,ab;
j=0;
s、 靴子;
b=Buffer.read,“/Users/admin/Desktop/10counter.aiff”)//我的测试文件
“帧:”+b.numFrames.postln;
“频道:+b.numChannels.postln;
计数=b.numFrames*b.numChannels;
“Count:”+Count.postln;
b、 写(“/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(帧,{arg i;i});
ab=a1.5,加扰;
})
//交换
{j
你真的只需要这个方法。按照你的建议,把它放在代码的底部。我不确定现有的
b.write
应该做什么-您可能从某个地方复制了它,但它不是必需的,您不希望在修改文件之前编写该文件,也不希望
leaveOpen
参数为
true
(因为您正在进行单次写入,而不是连续流式传输到磁盘)。

我在插入缓冲区时收到此消息。写入(///):
错误:命令行解析失败无错误:语法错误,意外的类名,在文件“选定文本”第44行字符6:Buffer.write(“/Users/admin/Desktop/rbs.aiff”,“aiff”,“int16”中应为$end,-1,0,false);^^^^^
当我使用声明的缓冲区时,此消息,b:
错误:命令行解析失败,无错误:语法错误,意外名称,在文件“所选文本”第44行字符1:b.write(“/Users/admin/Desktop/rbs.aiff”,“aiff”,“int16”,“1,0,false);^
(1)实际上,您确实需要执行
b.write(…)
其中
b
是您先前创建的
缓冲区。
出现语法错误,可能是因为您在尝试行之前忘记了一个分号。如果您看到短语“syntax error”然后出现语法错误,也就是说,您犯了一个打字错误,导致代码无法运行