Skip to content

Instantly share code, notes, and snippets.

@spencersalazar
Last active September 23, 2024 13:42
Show Gist options
  • Save spencersalazar/9ca24355fcdda5fc582162684f94fb45 to your computer and use it in GitHub Desktop.
Save spencersalazar/9ca24355fcdda5fc582162684f94fb45 to your computer and use it in GitHub Desktop.
Final Fantasy prelude
164 => float bpm;
(60/bpm)::second => dur quarter;
quarter/2 => dur eighth;
[0.0, 2, 4, 7] @=> float maj[];
[0.0, 3, 8, 10] @=> float majInv[];
[0.0, 2, 3, 7] @=> float min[];
[0.0, 4, 7, 11] @=> float mod[];
cat([inc(maj,48), inc(maj,60), inc(maj,72), inc(maj,84), [96.0],
rev(inc(maj,84)), rev(inc(maj,72)), rev(inc(maj,60)), hold(rev(inc(maj,48)))])
@=> float arp1[];
cat([inc(min,45), inc(min,57), inc(min,69), inc(min,81), [93.0],
rev(inc(min,81)), rev(inc(min,69)), rev(inc(min,57)), hold(rev(inc(min,45)))])
@=> float arp2[];
cat([inc(majInv,45), inc(majInv,57), inc(majInv,69), inc(majInv,81), [93.0],
rev(inc(majInv,81)), rev(inc(majInv,69)), rev(inc(majInv,57)), hold(rev(inc(majInv,45)))])
@=> float arp3[];
cat([inc(majInv,47), inc(majInv,59), inc(majInv,71), inc(majInv,83), [95.0],
rev(inc(majInv,83)), rev(inc(majInv,71)), rev(inc(majInv,59)), hold(rev(inc(majInv,47)))])
@=> float arp4[];
cat([inc(mod,44), inc(mod,56), inc(mod,68), inc(mod,80), [92.0],
rev(inc(mod,80)), rev(inc(mod,68)), rev(inc(mod,56)), hold(rev(inc(mod,44)))])
@=> float arp5[];
cat([inc(mod,46), inc(mod,58), inc(mod,70), inc(mod,82), [94.0],
rev(inc(mod,82)), rev(inc(mod,70)), rev(inc(mod,58)), hold(rev(inc(mod,46)))])
@=> float arp6[];
Gain fb => NRev reberb => dac;
fb => Delay delay => fb;
0.35 => delay.gain;
eighth*1.15 => delay.max => delay.delay;
0.03 => reberb.mix;
fun void playNote(float pitch, dur duration)
{
BlitSquare sqr => LPF filter => ADSR env => fb;
BlitSaw saw => filter;
0.3 => sqr.gain;
//0.5 => sqr.width;
0.7 => saw.gain;
0.25 => filter.Q;
env.set(25::ms, 25::ms, 0.4, 250::ms);
pitch => Std.mtof => sqr.freq;
sqr.freq() => saw.freq;
700+sqr.freq()*2 => filter.freq;
1 => env.keyOn;
duration => now;
1 => env.keyOff;
env.releaseTime()*1.1 => now;
}
fun void seq(float chord[])
{
0::second => dur makeup;
for(0 => int i; i < chord.size(); i++)
{
spork ~ playNote(chord[i], eighth);
eighth => now;
}
}
while(true)
{
seq(arp1);
seq(arp2);
seq(arp1);
seq(arp2);
seq(arp3);
seq(arp4);
seq(arp5);
seq(arp6);
}
fun float[] rev(float f[])
{
float f2[f.size()];
for(0 => int i; i < f.size(); i++)
f[i] => f2[f.size()-1-i];
return f2;
}
fun float[] cat(float f[][])
{
0 => int size;
for(0 => int i; i < f.size(); i++)
f[i].size() +=> size;
float fx[size];
int offset;
for(0 => int i; i < f.size(); i++)
{
for(0 => int j; j < f[i].size(); j++)
f[i][j] => fx[offset+j];
f[i].size() +=> offset;
}
return fx;
}
fun float[] cat(float f1[], float f2[])
{
return cat([f1, f2]);
}
fun float[] inc(float f[], float s)
{
float f2[f.size()];
for(0 => int i; i < f.size(); i++)
f[i]+s => f2[i];
return f2;
}
fun float[] hold(float f[])
{
float f2[f.size()-1];
for(0 => int i; i < f.size()-1; i++)
f[i] => f2[i];
return f2;
}
@markcerqueira
Copy link

We need to make a service that lets you code in ChucK on a webpage and it outputs audio.

@spencersalazar
Copy link
Author

That would be awesome!

@spencersalazar
Copy link
Author

ChucK as a Service (CKaaS)

@alltom
Copy link

alltom commented May 5, 2016

What if that service... were GitHub

@roblogic
Copy link

It's alive... WebChucK

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment