You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bmSClib/DSP
Arseniusz 8d2c2e887a
правильная обработка входа
20 hours ago
..
algs initial commit 1 year ago
analyzers initial commit 1 year ago
examples WIP: Добавил синты и обновил документацию 4 weeks ago
samplers initial commit 1 year ago
spectral правильная обработка входа 20 hours ago
synths initial commit 1 year ago
BmDspAlgs.sc Add automatic Quarks installation and Quark initialization 1 year ago
README.org WIP: Добавил синты и обновил документацию 4 weeks ago

README.org

Bjornmossa DSP algorythms library

This repo contains SC code for synthesis, processing and analysys algorythms.

Usage

(
var sin_dict = BmDspAlgs.getDict("synths/distorted_sin.scd");
sin_dict[\postAmp] = true;
sin_dict.makeSourceSynthDef.add();

~synth = ();
~synth[\name] = \synth;

Ndef(~synth[\name]).clear;
Ndef(~synth[\name]).ar(2);
Ndef(~synth[\name]).prime(sin_dict[\name]);

Ndef(~synth[\name]).play;
)

Словари-обработки (Fx-словари) через makeBufferProcessingNdef

(
// Загрузка словаря как buffer-processing Fx.
~dict = BmDspAlgs.getDict("spectral/fft_freeze.scd");

// Вход через Bus — стандартный паттерн: makeBufferProcessingNdef
// передаёт \buf как OSC-параметр (control-rate число = номер bus),
// func получает его первым аргументом.
~inBus = Bus.audio(s, 2);
{ Out.ar(~inBus, SoundIn.ar([0, 1])) }.play;

// Создаём Ndef: name = имя нового Ndef, buf = audio-сигнал.
~dict.makeBufferProcessingNdef(\freezeOnly, ~inBus);

// Параметры func (fftBufnum, freezeGate, phaseJitter) теперь —
// control-параметры SynthDef, доступные через .set / .map.
Ndef(\freezeOnly).set(\fftBufnum, someBuffer);
Ndef(\freezeOnly).set(\freezeGate, 1);
Ndef(\freezeOnly).play;
)

Контракт func для Fx-словарей

Func в Fx-словаре объявляется с одним обязательным первым аргументом — buf:

func: {
  | buf |
  // buf — это audio-сигнал, пришедший через OSC-параметр \buf.
  // В скетче он = номер Bus.audio, из которого читает Ndef.
  // Остальные параметры объявляются через \name.kr(...) /
  // \name.tr(...) и становятся control-параметрами SynthDef.
  var sig = ...;
  sig;
}

Имя первого аргумента (=buf) — это convention, не контракт. Важно, что func принимает ровно один positional аргумент первым; обёртка makeBufferProcessingNdef делает SynthDef.wrap(func, prependArgs: [buf]).

Цепочки Fx-словарей

Чтобы пропустить выход одного Ndef через другой Fx-словарь, используется промежуточный Bus:

~midBus = Bus.audio(s, 2);
Ndef(\first)[0] = { Out.ar(~midBus, Ndef(\first).bus.asMap) };

~dict2.makeBufferProcessingNdef(\second, ~midBus);
Ndef(\second).play;

Это даёт последовательную обработку: first → midBus → second.

Отличия от нотных словарей

Нотные словари (makeSourceSynthDef / makeSourceNdef) оборачивают func с prependArgs [freq, gate] и добавляют ADSR-огибающую, panning, amp. Func должна быть вида | freq, gate |.

Fx-словари (makeBufferProcessingSynthDef / makeBufferProcessingNdef) оборачивают func с prependArgs [buf] и добавляют Pan2 + amp. Func должна быть вида | buf |. Дополнительные обёртки (DetectSilence, limitDuration через Line) включаются ключами detectSilence: true и limitDuration: true в словаре.