Neu

Supercollider und die anderen…

  • #121
keine bestehende verbindung kappt
Ich hatte die SC IDE erst nach dem Start der Firewall wieder gestartet. Aber wer weiß. Vielleicht hatte ich die Prozesse nicht richtig beendet. Momentan lichtet sich der Nebel etwas, aber durchdrungen habe ich das noch nicht.
 
  • #122
Der Shield wäre noch eine Möglichkeit. Danke für den Tipp. Hatte ich ganz vergessen. 👍

Der TechnoBear (Bekannter Organelle-User und Audio-Hacker) hat sich tatsächlich die Mühe gemacht und die gesamte Organelle Hardware integriert. Aber wie das so ist mit solchen Projekten: die werden nicht gepflegt und sind outdated...

Vielleicht mache ich mich in der Weihnachtszeit mal dran.

Wie bekommt man in diesem Editor eigentlich den Cursor an das Ende einer Grafik wenn man dort weitertippen möchte?

1725352374215.webp

Ahh. Grafik markieren und dann Cursor-unten...
 
  • #123
Benutzt hier jemand SuperCollider?

Hab letztes Wochenende mal damit angefangen und bin total geflasht. Über SynthDef und Patterns kam ich noch nicht, aber es macht tierisch Spass.
Wollte zuerst die Sounds / Sequencen exportieren und dann in Renoise reinladen, aber irgendwie hab ich mich jetzt total in der SCIDE festgefressen...

Werde mal die Tutorials weitermachen und langfristig einen Track damit machen.

Erster Versuche klingt gar nicht sooo übel:







Direkt von SC aufgenommen. Man kann (wenn man's kann) richtig damit jammen.

Dieses Tutorial ist für den Einstieg sehr gut:

 
Zuletzt bearbeitet von einem Moderator:
  • Daumen hoch
M.i.a.u.: serge und Moogulator
  • #125
Hat jemand schon mal Cables probiert? Sieht auch spannend aus. Wenn ich mehr Zeit hätte ... *seufz*

 
  • #126
Direkt aus SC raus:



Weiß noch nicht ... vermutlich exportiere ich erstmal die einzelnen Spuren und importiere sie in eine DAW. Auf jeden Fall bleib ich da dran.



Code:
TempoClock.default.tempo_(122/60);


(

//Kick

SynthDef(\kick, {

    arg f2 =  200, f1 = 55, decay = 0.3, decayn = 0.02, dist = 7, amp = 1;

    var trig, env, noise, mult, freqenv, ampenv, snd, sig1, freqb, z, del;



    //Amplitude envelope

    decay = Rand(0.5, 0.5);

    ampenv = EnvGen.kr(Env.perc(0, decay), doneAction: 2);

    //Frequency envelope

    freqenv = EnvGen.kr  (Env([f2, f1], [0.05],\exp));


    mult = IRand(1,3) / 1;

    sig1 = SinOsc.ar(freqenv , 0, 1, 0) * ampenv * 0.6;



    snd = sig1;

    //sig = (sig*dist).atan * 0.5;

    snd = Limiter.ar((snd*dist).tanh * 0.5, 0.5);

    snd = snd * amp;

    Out.ar(0, snd!2);

}).add;



//Snare

SynthDef("snare", {

    arg out = 0, amp = 0.3, sinfreq = 220, att = 0.01, rel = 0.3, ffreq = 500, pan = 0;

    var env, snd1, snd2, sum;

    rel = Rand(0.1, 0.2);

    env = Env.perc(att, rel, amp).kr(doneAction: 2);

    snd1 = HPF.ar(

        in: WhiteNoise.ar,

        freq: ffreq,

        mul: env);


    snd1 = LPF.ar(snd1, 9000, 1, 0);

    snd2 = SinOsc.ar(freq: sinfreq, mul: env) * 1;

    sum = snd1 + snd2;

    Out.ar(out, Pan2.ar(sum, pan));

}).add;



SynthDef("hh", {

    arg out = 0, amp = 0.4, att = 0.01, rel = 0.3, ffreq = 6000, panFrac = 0.3;

    var env, snd, pannedPart, dryPart, panPos, comb;


    // Random release time per trigger

    rel = Rand(0.3, 0.5);


    // Envelope

    env = Env.perc(0, rel, amp).kr(doneAction: 2);


    // White noise -> highpass -> envelope

    snd = HPF.ar(WhiteNoise.ar, ffreq) * env;


    // Lowpass

    snd = LPF.ar(snd, 22000);


    // Random pan position between -1 and 1

    panPos = Rand(-1, 1);


    // Split dry and panned parts

    pannedPart = Pan2.ar(snd * panFrac, panPos);

    dryPart = snd * (1 - panFrac);


    comb = pannedPart + [dryPart, dryPart];


    // Combine: dry mono + panned stereo

    Out.ar(out, comb * 0.3);

}).add;




SynthDef(\fm, { arg out=0, amp=0.5, vol = 1, gate=1, pan=0, freq=100;

    var sig, sig1, sig2;

    var env, mult, cutoff;

    var left, right, spread;


    mult = IRand(1, 5);


    cutoff = SinOsc.kr(122/60*1).exprange(200,3000);


    // Envelope

    env = EnvGen.kr(Env.perc(0, 2, amp, -4), gate, doneAction:2);


    // Slightly different frequency modulations for L/R

    sig1 = SinOsc.ar(freq/2 * [0.995, 1.005]); // detune L/R

    sig2 = SinOsc.ar(freq * mult * (sig1 * 2 + 1));


    sig = sig1 +  sig2;


    // Low-pass filter per channel

    sig = LPF.ar(sig * AmpComp.kr(freq), cutoff);


    // Compression

    sig = Compander.ar(sig, sig, 0.6, 1, 0.4, 0.01, 0.1, 1);




    // Final amplitude and stereo spread

    sig = sig * env ;


    // Output as stereo signal

    Out.ar(0, sig);

}).add;




SynthDef("pluck", { |amp = 0.4, amp2 = 3, freq = 440, decay1 = 15, decay2 = 1 |

    var env, snd, v;



    env = EnvGen.kr(Env.perc(0, decay1), doneAction:2);


    snd = Pluck.ar(

        in: WhiteNoise.ar(amp),

        trig: Impulse.kr(1),         // trigger pluck once per second

        maxdelaytime: 1,

        delaytime: 2 / freq, // modulate delaytime slightly around freq

        decaytime:  decay2,

        coef: 0.3);


    snd = snd * amp2;


    Out.ar(0, snd!2 * env);

}).add;



SynthDef(\saw, {

    arg freq = 44, amp = 1, gate = 1, modamp = 1;

    var sig, sin, sigv, saw1,saw2, env1, env2;


    env1 = EnvGen.kr(Env.adsr(6, 3, 0, 2, 1 , -8, 0), gate,  doneAction:2);

    env2 = EnvGen.kr(Env.adsr(4, 3, 0, 2, 1 , -8, 0), gate,  doneAction:2);

    sin  = Saw.ar(freq) * env2;

    saw1 = SinOsc.ar(freq * [0.999, 1.001]) * env1 * 0.5;

    saw2 = SinOsc.ar(freq/2) * env2 * 0.5;


    modamp = LFPulse.kr(3, 0, 0.5,1,0) * 1;




    sig = HPF.ar((sin + saw1 + saw2) * amp, 300);


    sig = sig * modamp * 0.9;


    //mod amplutide



    sigv = FreeVerb.ar(sig, 0.9, 0.8, 0.8, 1, 0);


    Out.ar(0, sigv);



}).add;

)


//pattern

// Kick

(

Pdef(\kickPattern,

    Pbind(

        \instrument, \kick,

        //\dur, Pseq([1/4, Pwrand([1/4, Rest(1/4)], [0.75, 0.25], 1), Rest(2/4), 1/4

        //            Rest(3/4), 1/4, Rest(2/4), 1/4,

        //            Rest(2/4), 1/4, Rest(1/4)], inf)


        \dur, Pseq([1, 0.5, 0.5, 1, 1],  inf),


        \amp, Pxrand([1, 0.5, 1, 0, 1], inf)

    )

).play;


//pattern

// snare




Pdef(\snare,

    Pbind(

        \instrument, \snare,

        //\dur, Pseq([1/4, Pwrand([1/4, Rest(1/4)], [0.75, 0.25], 1), Rest(2/4), 1/4

        //            Rest(3/4), 1/4, Rest(2/4), 1/4,

        //            Rest(2/4), 1/4, Rest(1/4)], inf)


        \dur, Pseq([1, 0.5, 1, 1],  inf),


        \amp, Pseq([0, 0.8, 0, 0, 0.3], inf)

    )

).play;



// hh

Pdef(\hh,

    Pbind(

        \instrument, \hh,

        \dur, Pseq([1/4, 1/4, Rest(1/4)],  inf),

        \amp, Prand([0.3, 0.45], inf)

    )

).play;




// Bass low

Pdef(\fmBassl,

    Pbind(

        \instrument, \fm,

        \root, 9,

        \scale, Scale.phrygian,

        \ctranspose, -24,

        \degree, Pseq([0,1,3] , inf),

        //\midinote, Pseq([64, 68, 71, 64] , inf),

        //

        \dur, Pseq([4],  inf),

        \amp, 0.25

    )

).play;


// Bass high

Pdef(\fmBassh,

    Pbind(

        \instrument, \fm,

        \root, 9,

        \scale, Scale.phrygian,

        \ctranspose, 0,

        \degree, Pseq([0] , inf),

        //\midinote, Pseq([64, 68, 71, 64] , inf),

        \dur, Pseq([4, 3.5, Prand([1, 0.5, 1, 0.5])], inf),

        \amp, Prand([0.1, 0.2, 0.15], inf)

    )

).play;




// FM Pluck

Pdef(\pluck,

    Pbind(

        \instrument, \pluck,

        \root, 9,

        \scale, Scale.phrygian,

        \ctranspose, 0,

        \degree, Pseq([0,1,12,24,5,7] , inf),

        //\midinote, Pseq([64, 68, 71, 64] , inf),

        \dur, Pseq([4, Prand([0.5])], inf)


    )

).play;


// saw

Pdef(\saw,

    Pbind(

        \instrument, \saw,

        \root, 9,

        \scale, Scale.phrygian,

        \ctranspose, 0,

        \degree, Pseq([0, 3, 5, 3], inf),

        //\midinote, Pseq([64, 68, 71, 64] , inf),

        \dur, Pseq([4,6, Rest(2), 8, Rest(2)], inf),

        \amp, 0.5

    )

).play;

)


(

Pdef(\kickPattern).play;


Pdef(\snare).play;

Pdef(\fmBassl).play;

Pdef(\fmBassh).play;

Pdef(\hh).stop

Pdef(\snare).play;


Pdef(\pluck).play;

Pdef(\saw).play;

)


(


Pdef(\fmBassl).stop;

Pdef(\fmBassh).stop;

Pdef(\pluck).stop;

Pdef(\saw).stop;

Pdef(\snare).stop;

Pdef(\kickPattern).stop;

)

 
Zuletzt bearbeitet von einem Moderator:
  • Daumen hoch
M.i.a.u.: Klinke und serge
  • #127
Für das spielen der Supercollider Instrumente empfehle ich Dir auch mal ein Blick auf tidel cycles (https://tidalcycles.org/) zu werfen, falls Du das nicht eh schon gemacht hast. Das benutzt ja Super Collider als Audio Engine, mit einer recht engen Integration des SuperDirt (https://github.com/musikinformatik/SuperDirt/) synth/samplers. Hat halt den Nachteil, dass man nochmal eine weitere Sprache mit einem ganz anderen Syntax lernen zu müssen (und wenn man tiefer einsteigen will, benötigt man irgendwann auch Haskell). Ich habe eine Weile damit rumgespielt und fand es sehr cool, allerdings wollte ich das gerne unter Windows in Reaper integrieren, mit Emacs als Editor, und das habe ich nie so richtig reproduzierbar an den Start bekommen, mal lief mein Setup, mal nicht.
 
  • #128
Für das spielen der Supercollider Instrumente empfehle ich Dir auch mal ein Blick auf tidel cycles (https://tidalcycles.org/) zu werfen, falls Du das nicht eh schon gemacht hast. Das benutzt ja Super Collider als Audio Engine, mit einer recht engen Integration des SuperDirt (https://github.com/musikinformatik/SuperDirt/) synth/samplers. Hat halt den Nachteil, dass man nochmal eine weitere Sprache mit einem ganz anderen Syntax lernen zu müssen (und wenn man tiefer einsteigen will, benötigt man irgendwann auch Haskell). Ich habe eine Weile damit rumgespielt und fand es sehr cool, allerdings wollte ich das gerne unter Windows in Reaper integrieren, mit Emacs als Editor, und das habe ich nie so richtig reproduzierbar an den Start bekommen, mal lief mein Setup, mal nicht.

Ja kenne ich, aber Tidal greift ja "nur" auf Samples zurück. Gerade die Soundsysnthese find ich bei SC spannend.
 
  • #129
Ja kenne ich, aber Tidal greift ja "nur" auf Samples zurück. Gerade die Soundsysnthese find ich bei SC spannend.
Kann man so nicht sagen. Du kannst Dir eigene Synths in Supercollider bauen und von Tidal Cycles ansteuert, SuperDirt ist ja auch in SuperCollider implementiert. Siehe
[/URL]
und
 
  • Daumen hoch
M.i.a.u.: suomynona
  • #130
Da wir gerade dabei sind: Die zweite Auflagen des Supercollider-Buchs ist erschienen, ich hätte daher meine erste Ausgabe sehr günstig abzugeben, bei Interesse bitte PN.
1751911598928.webp
 
  • #139


Also mit Nullen sollte man vorsichtig sein


(
SynthDef(\snd, {
arg ttt, freq = 222, rel = 1;
var snd, env, gate = 1, amp = 1;
snd = SinOsc.ar(freq * [0.5, 0.75, 1.25, 1.5]);
snd = Splay.ar(snd);
amp = SinOsc.ar(100) * SinOsc.ar(Rand(100, 4000));
env = EnvGen.ar(Env.perc(0.01, rel), gate, doneAction:2);
snd = snd * env * amp * -1000.dbamp;
Out.ar(0, snd);
}).add;
)

(
~s1 =
Pbind(\instrument, \snd,
\degree, Pseq([0],inf),
\dur, Pseq([0],inf),
).play
)

Dabei hängt sich SC auf und noch schlimmer ist, dass man den Ton nicht mehr stoppen kann. Bitte nicht nachmachen.

:huebsch:
 
  • #140
Also mit Nullen sollte man vorsichtig sein


(
SynthDef(\snd, {
arg ttt, freq = 222, rel = 1;
var snd, env, gate = 1, amp = 1;
snd = SinOsc.ar(freq * [0.5, 0.75, 1.25, 1.5]);
snd = Splay.ar(snd);
amp = SinOsc.ar(100) * SinOsc.ar(Rand(100, 4000));
env = EnvGen.ar(Env.perc(0.01, rel), gate, doneAction:2);
snd = snd * env * amp * -1000.dbamp;
Out.ar(0, snd);
}).add;
)

(
~s1 =
Pbind(\instrument, \snd,
\degree, Pseq([0],inf),
\dur, Pseq([0],inf),
).play
)

Dabei hängt sich SC auf und noch schlimmer ist, dass man den Ton nicht mehr stoppen kann. Bitte nicht nachmachen.

:huebsch:
Bitte, magst Du den Bug reporten?
 
  • #143
hast du schon 33./0.=NaN bei wolfram gemeldet?

meiner rechnung nach müsste da 3 rauskommen.
Erstens haengt sich Mathematica dabei nicht auf und drittens hinkt der Vergleich oder wo wird im obigen Beispiel durch Null geteilt??

sehr schön:
 
  • Daumen hoch
M.i.a.u.: serge und haebbmaster
  • #144
jaaa, sowas in der Art möchte ich auch gerne machen. Ich hoffe dass ich demnächst mal den Hintern hochkriege, mich ausgiebig damit zu beschäftigen
 
  • #145
Ich habe gerade mal nvim für SuperCollider konfiguriert. Jetzt kann ich vim und SC gleichzeitig lernen :picard:

1755205208352.png

Hier steht wie es geht: https://github.com/davidgranstrom/scnvim

Ich habe vorher noch lazyvim eingerichtet, was hier erklärt wird:



Das config file für nvim heißt init.lua und liegt unter: ~/.config/nvim . Das muss man anlegen und den Ordner ggf. auch.

~/.config/nvim$ tree .
.
├── init.lua
├── lazy-lock.json
└── lua
└── config
├── lazy.lua
└── plugins
├── nightfox.lua
├── scnvim.lua
└── tokyonight.lua

Für jedes pluging kann man ein eigenes lua file im Ordner plugins anlegen.

init.lua schaut so aus und dort wird auch der Ort des plugin-Ordners definiert (wird im Video oben erklärt)

Code:
require("config.lazy")

--Color theme
vim.cmd([[colorscheme nightfox ]])

--Add line numbers
vim.wo.relativenumber = true

und die Datei: scnvim.lua

Code:
return {
  {
    "davidgranstrom/scnvim",
    ft = "supercollider",
    config = function()
      local scnvim = require("scnvim")
      local map = scnvim.map
      local map_expr = scnvim.map_expr

      scnvim.setup({
        keymaps = {
          ["<M-e>"] = map("editor.send_line", { "i", "n" }),
          ["<C-e>"] = {
            map("editor.send_block", { "i", "n" }),
            map("editor.send_selection", "x"),
          },
          ["<CR>"]    = map("postwin.toggle"),
          ["<M-CR>"]  = map("postwin.toggle", "i"),
          ["<M-L>"]   = map("postwin.clear", { "n", "i" }),
          ["<C-k>"]   = map("signature.show", { "n", "i" }),
          ["<F12>"]   = map("sclang.hard_stop", { "n", "x", "i" }),
          ["<leader>st"] = map("sclang.start"),
          ["<leader>sk"] = map("sclang.recompile"),
          ["<F1>"]    = map_expr("s.boot"),
          ["<F2>"]    = map_expr("s.meter"),
        },
        editor = {
          highlight = {
            color = "IncSearch",
          },
        },
        postwin = {
          float = {
            enabled = true,
          },
        },
      })
    end,
  },
}



Bitte, magst Du den Bug reporten?

Ich hab mit Leuten gechattet und es gibt durchaus Szenarien, wo das gewollt ist, z.B. wenn man Noten gleichzeitig spielen will. Insofern kein Bug.

 
Zuletzt bearbeitet von einem Moderator:
  • Daumen hoch
M.i.a.u.: serge

News

Zurück
Oben