ChucK

ProgHead

Gepokt en gemazeld
Lid sinds
26 februari 2019
Berichten
5.609
Locatie
Zeist
Inmiddels ben ik al zoekende naar een prettige programmeertaal voor computermuziek bij ChucK aangeland. Mijn computer draait op Linux Mint dus heb ik allereerst ChucK vanuit de repositories geïnstalleerd. Echter staat de IDE (miniAudicle) voor Chuck niet in de repositories, dus moest ik die voor Linux zelf bouwen. Dat gaf de nodige moeilijkheden waardoor uiteindelijk het geluid het ook niet meer deed. Ten einde raad heb ik toen de Chuck installer voor Windows ( chuck-1.3.5.2 ) maar gedownload waar miniAudicle al bij in zit, en die via Wine geïnstalleerd. Dat werkt nu. Verdere belevenissen met Chuck en miniAudicle komen in dit topic.
 
Even geprobeerd, maar dat kan die niet aan. Dat geeft een afgrijselijk bijgeluid uit de speakers. :(
 
haha, is gewoon de eerste regel hé,
je moet nog frequentie, volume, duur bepalen van wat je in de variabele sine steekt :)
& dan nog iets met de tijdséénheid doen, want anders blijf je geluid maken op 1 punt in de tijdsdimensie & ben je letterlijk geChuckt (woordspeling ahw)
of is er maw geen geluid ...
mijn punt was dat ChucK tekst gebaseerde object georienteerde taal is, waar de chuck de kabel is naar een ander object (Ugen)
beetje zoals met PD & Max msp , je doosjes hebt & kabeltjes & Buzz / Audiomulch / Plogue / Reaktor / et cetera :)

de 'now' tijdséénheid = de 'bang' in pd/max msp

Ugen->Ugen->output

samenvattend: het is allemaal een beetje hetzelfde :)
 
Nu ik die serie over ChucK zit te bekijken vraag ik mij af of Sonic Pi daar eigenlijk nog wel iets aan toevoegt als ik toch ook al met ChucK aan de slag ga...? Iemand ervaring met beide programma's?
 
In deze aflevering staat een fraai progje met reverb:



Progje:

SinOsc osc => ADSR env => NRev rev => dac; 880 => osc.freq; 0.25 => osc.gain; (1::ms, 5::ms, 0, 1::ms)=> env.set; 0.2 => rev.mix; 0.5::second => dur beat; 1 => env.keyOn; 4::beat => now;

Dat heb ik exact overgenomen, en dan werkt de reverb in ChucK op mijn computer ook zoals het hoort. :)
 
Leuk. :) Ik krijg de indruk dat Sonic Pi wat eenvoudiger is, ook gericht op een publiek dat een kennismaking zoekt met iets dergelijks. Met ChucK kun je wellicht wat dieper gaan, al lees ik hier en daar ook dat het soms wat instabiel is.
 
ChucK is nog vrij nieuw, en de IDE (miniAudicle) verkeert nog in de experimentele fase. Ik ga nu eerst de video-serie uitkijken, en daarna ga ik zelf proberen een primitieve synthesizer te programmeren. Als dat lukt (in de bescheiden zin dat er de juiste tonen uitkomen :D ) dan ga ik verder met ChucK. Maar ik heb inderdaad ook de indruk dat Sonic Pi een meer volwassen programma is, dus misschien moet ik dat er ook maar bij doen. En dan niet zozeer vanwege eventuele extra mogelijkheden, maar meer vanwege de te verwachten betere ondersteuning.
 
In deze aflevering staat een fraai progje met reverb:



Progje:

SinOsc osc => ADSR env => NRev rev => dac; 880 => osc.freq; 0.25 => osc.gain; (1::ms, 5::ms, 0, 1::ms)=> env.set; 0.2 => rev.mix; 0.5::second => dur beat; 1 => env.keyOn; 4::beat => now;

Dat heb ik exact overgenomen, en dan werkt de reverb in ChucK op mijn computer ook zoals het hoort. :)

yes volgens mij was je de .mix method vergeten te integreren in je code no ?

0.1 => NRev.mix
wellicht dat die op 1 of maximum staat als je het niet vermeldt
 
Het kan ook zijn dat ik te weinig RAM in mijn computer heb zitten. Ik hoor wel meer storing als er veel tegelijk draait....
 
// the LiSa Ugen

SinOsc sine => ADSR env => NRev r => dac;
r => LiSa lisa => dac;
lisa => Delay delay[2] => Echo echo => dac;




0.511 => sine.gain;

(0.20::ms, 2.5::ms, 0, 1.2::ms) => env.set;

0.133 => r.mix;
0.3::second => echo.delay;
1.4::second => echo.max;
0 => echo.mix;

0.199::second => dur beat;

beat => delay[0].max => delay[1].max;
30::ms => delay[0].delay;
124::ms => delay[0].delay;
160::ms => delay[0].delay;
199::ms => delay[0].delay;
130::ms => delay[0].delay;
160::ms => delay[0].delay;
65::ms => delay[1].delay;
165::ms => delay[1].delay;
35::ms => delay[1].delay;


5::beat => lisa.duration;
// while (true) {

// -2.335 => lisa.rate;
1 => lisa.play;
// 4::beat => now;

//}*/

while (true){

Math.random2f(0.001, 0.999) => echo.mix;
Math.random2f(0.001, 0.5)::second => echo.delay;
Math.random2f(0.001, 0.3) => r.mix;
Math.random2(80,4340) => sine.freq;
1 => lisa.record;
1 => env.keyOn;
2::beat => now;
0.1::second => now;
1 => env.keyOn;
2::beat => now;
1 => env.keyOn;
1::beat => now;
0 => lisa.record;


0::beat => lisa.playPos;
[0.3, -0.4, 3.0, 1.6, 2, 0.444, -1.5] @=> float rates[];
rates[Math.random2(0, 6)] => lisa.rate;
0.24444::beat => now;


}
 
Goed - ik heb nu die hele serie tutorials over ChucK gekeken, en ben aardig gaar. :P

Dus even wat anders nu, en later vanavond of anders morgen zelf met ChucK aan de slag.
 
Ik ga de "synthesizer" stap voor stap opbouwen. We beginnen met een toongenerator met instelbare frequentie f, gain g en duur d. Zie:

// frequentie f, gain g en duur d kiezen 100.0 => float f; 0.5 => float g; 1::second => dur d; // oscillator afpelen SawOsc s => dac; f => s.freq; g => s.gain; d => now;
 
Via de command line vind ik dit:

Code:
chuck --probe
[chuck]: found 0 device(s) ...
[chuck]:
[chuck]: ------( chuck -- 2 MIDI inputs )------
[chuck]:     [0] : "Midi Through Port-0"
[chuck]:     [1] : "Q25 MIDI 1"
[chuck]:
[chuck]: ------( chuck -- 2 MIDI outputs )-----
[chuck]:     [0] : "Midi Through Port-0"
[chuck]:     [1] : "Q25 MIDI 1"
[chuck]:

Q25 is mijn MIDI keyboard. Nu nog uitzoeken hoe ik de info van dat keyboard in ChucK binnenhaal.
 
Na het nodige zoekwerk vond ik onderstaande:
Code:
MidiIn min;
MidiMsg msg;
// open midi receiver, exit on fail
if ( !min.open(0) ) me.exit();
while( true )
{
// wait on midi event
min => now;
    // receive midimsg(s)
while( min.recv( msg ) )
{
// print content
<<< msg.data1, msg.data2, msg.data3 >>>;
}
}

Bron: https://chuck.cs.princeton.edu/release/files/chuck_manual.pdf

Daarin hoefde ik enkel het MIDI kanaal van 0 in 1 te veranderen en toen kreeg ik de MIDI info van mijn keyboard in ChucK binnen. Nu kan ik weer verder.
 
Back
Top