Как отправить буфер в аудиофайл в Суперколлайдере?

Я работаю над простым патчем 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;

person TurtleOrRodeo    schedule 02.03.2016    source источник


Ответы (1)


Вам просто нужен метод Buffer.write. Поместите его внизу кода, как вы предлагаете. Я не уверен, что должен делать существующий b.write - вы предположительно скопировали его откуда-то, но он не нужен, вы не хотите записывать файл, прежде чем вы его модифицировали, а также вы не хотите, чтобы аргумент leaveOpen был равен true (потому что вы выполняете одну запись, а не непрерывную потоковую передачу на диск).

person Dan Stowell    schedule 03.03.2016
comment
Я получаю это сообщение, когда вставляю 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); ^ - person TurtleOrRodeo; 03.03.2016
comment
(1) вам действительно нужно выполнить b.write(...), где b — это Buffer, который вы создали ранее. (2) у вас есть синтаксическая ошибка, и это, вероятно, потому, что вы забыли точку с запятой в строке перед строкой, которую вы пробовали. Если вы видите синтаксическую ошибку фразы, значит, у вас есть синтаксическая ошибка, то есть вы допустили опечатку, из-за которой код даже не запускается. - person Dan Stowell; 04.03.2016