updating examples with new features

This commit is contained in:
2023-09-18 18:55:14 +02:00
parent fa0f786252
commit 04d8d7fe6d
2 changed files with 198 additions and 189 deletions

View File

@ -18,7 +18,7 @@ ${makeExample(
beat(.5) && snd(['sine', 'triangle', 'sawtooth', 'square'].beat()).freq(100).out() beat(.5) && snd(['sine', 'triangle', 'sawtooth', 'square'].beat()).freq(100).out()
`, `,
true true
)} )}
Two functions are primarily used to control the frequency of the synthesizer: Two functions are primarily used to control the frequency of the synthesizer:
- <ic>freq(hz: number)</ic>: sets the frequency of the oscillator. - <ic>freq(hz: number)</ic>: sets the frequency of the oscillator.
@ -30,7 +30,7 @@ ${makeExample(
beat(.5) && snd('triangle').freq([100,200,400].beat(2)).out() beat(.5) && snd('triangle').freq([100,200,400].beat(2)).out()
`, `,
true true
)} )}
## Vibrato ## Vibrato
@ -46,7 +46,7 @@ beat(1) :: sound('triangle')
.vibmod([1,2,4,8].beat(2)) .vibmod([1,2,4,8].beat(2))
.out()`, .out()`,
true true
)} )}
## Controlling the amplitude ## Controlling the amplitude
@ -58,13 +58,13 @@ ${makeExample(
"Setting the gain", "Setting the gain",
`beat(0.25) :: sound('sawtooth').gain([0.0, 1/8, 1/4, 1/2, 1].beat(0.5)).out()`, `beat(0.25) :: sound('sawtooth').gain([0.0, 1/8, 1/4, 1/2, 1].beat(0.5)).out()`,
true true
)} )}
${makeExample( ${makeExample(
"Setting the velocity", "Setting the velocity",
`beat(0.25) :: sound('sawtooth').velocity([0.0, 1/8, 1/4, 1/2, 1].beat(0.5)).out()`, `beat(0.25) :: sound('sawtooth').velocity([0.0, 1/8, 1/4, 1/2, 1].beat(0.5)).out()`,
true true
)} )}
<div class="mt-4 mb-4 lg:grid lg:grid-cols-4 lg:gap-4"> <div class="mt-4 mb-4 lg:grid lg:grid-cols-4 lg:gap-4">
<img class="col-span-1 lg:ml-12 bg-gray-100 rounded-lg px-2 py-2", src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/ef/ADSR_Envelope_Graph.svg/1280px-ADSR_Envelope_Graph.svg.png" width="400" /> <img class="col-span-1 lg:ml-12 bg-gray-100 rounded-lg px-2 py-2", src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/ef/ADSR_Envelope_Graph.svg/1280px-ADSR_Envelope_Graph.svg.png" width="400" />
@ -85,7 +85,7 @@ beat(0.5) :: sound('wt_piano')
.sustain([0.1,0.5].beat(4)) .sustain([0.1,0.5].beat(4))
.out()`, .out()`,
true true
)} )}
This ADSR envelope design is important to know because it is used for other aspects of the synthesis engine such as the filters that we are now going to talk about. But wait, I've kept the best for the end. The <ic>adsr()</ic> combines all the parameters together. It is a shortcut for setting the ADSR envelope: This ADSR envelope design is important to know because it is used for other aspects of the synthesis engine such as the filters that we are now going to talk about. But wait, I've kept the best for the end. The <ic>adsr()</ic> combines all the parameters together. It is a shortcut for setting the ADSR envelope:
@ -101,7 +101,7 @@ beat(0.5) :: sound('wt_piano')
.out() .out()
`, `,
true true
)} )}
## Substractive synthesis using filters ## Substractive synthesis using filters
@ -116,7 +116,7 @@ ${makeExample(
"Filtering the high frequencies of an oscillator", "Filtering the high frequencies of an oscillator",
`beat(.5) :: sound('sawtooth').cutoff(50 + usine(1/8) * 2000).out()`, `beat(.5) :: sound('sawtooth').cutoff(50 + usine(1/8) * 2000).out()`,
true true
)} )}
These filters all come with their own set of parameters. Note that we are describing the parameters of the three different filter types here. Choose the right parameters depending on the filter type you are using: These filters all come with their own set of parameters. Note that we are describing the parameters of the three different filter types here. Choose the right parameters depending on the filter type you are using:
@ -132,7 +132,7 @@ ${makeExample(
"Filtering a bass", "Filtering a bass",
`beat(.5) :: sound('jvbass').lpf([250,1000,8000].beat()).out()`, `beat(.5) :: sound('jvbass').lpf([250,1000,8000].beat()).out()`,
true true
)} )}
### Highpass filter ### Highpass filter
@ -145,7 +145,7 @@ ${makeExample(
"Filtering a noise source", "Filtering a noise source",
`beat(.5) :: sound('gtr').hpf([250,1000, 2000, 3000, 4000].beat()).end(0.5).out()`, `beat(.5) :: sound('gtr').hpf([250,1000, 2000, 3000, 4000].beat()).end(0.5).out()`,
true true
)} )}
### Bandpass filter ### Bandpass filter
@ -158,7 +158,7 @@ ${makeExample(
"Sweeping the filter on the same guitar sample", "Sweeping the filter on the same guitar sample",
`beat(.5) :: sound('gtr').bandf(100 + usine(1/8) * 4000).end(0.5).out()`, `beat(.5) :: sound('gtr').bandf(100 + usine(1/8) * 4000).end(0.5).out()`,
true true
)} )}
## Filter order (type) ## Filter order (type)
@ -170,7 +170,7 @@ ${makeExample(
"Filtering a bass", "Filtering a bass",
`beat(.5) :: sound('jvbass').ftype(['12db', '24db'].beat(4)).lpf([250,1000,8000].beat()).out()`, `beat(.5) :: sound('jvbass').ftype(['12db', '24db'].beat(4)).lpf([250,1000,8000].beat()).out()`,
true true
)} )}
I also encourage you to study these simple examples to get more familiar with the construction of basic substractive synthesizers: I also encourage you to study these simple examples to get more familiar with the construction of basic substractive synthesizers:
@ -183,7 +183,7 @@ beat(.5) && snd('sawtooth')
.out() .out()
`, `,
true true
)} )}
${makeExample( ${makeExample(
"Blessed by the square wave", "Blessed by the square wave",
@ -194,7 +194,7 @@ beat([.5, .75, 2].beat()) :: [100,101].forEach((freq) => sound('square')
.freq(freq*4 + usquare(2) * 200).sustain(0.125).out()) .freq(freq*4 + usquare(2) * 200).sustain(0.125).out())
beat(.25) :: sound('square').freq(100*[1,2,4,8].beat()).sustain(0.1).out()`, beat(.25) :: sound('square').freq(100*[1,2,4,8].beat()).sustain(0.1).out()`,
false false
)} )}
${makeExample( ${makeExample(
"Ghost carillon (move your mouse!)", "Ghost carillon (move your mouse!)",
@ -208,7 +208,7 @@ beat(1/8)::sound('sine')
.gain(0.25) .gain(0.25)
.out()`, .out()`,
false false
)} )}
## Filter envelopes ## Filter envelopes
@ -223,6 +223,8 @@ The examples we have studied so far are static. They filter the sound around a f
| lpdecay | lpd | decay of the lowpass filter | | lpdecay | lpd | decay of the lowpass filter |
| lpsustain | lps | sustain of the lowpass filter | | lpsustain | lps | sustain of the lowpass filter |
| lprelease | lpr | release of the lowpass filter | | lprelease | lpr | release of the lowpass filter |
| lpadsr | | (**takes five arguments**) set all the parameters |
${makeExample( ${makeExample(
"Filtering a sawtooth wave dynamically", "Filtering a sawtooth wave dynamically",
@ -230,7 +232,7 @@ ${makeExample(
.cutoff(5000).lpa([0.05, 0.25, 0.5].beat(2)) .cutoff(5000).lpa([0.05, 0.25, 0.5].beat(2))
.lpenv(-8).lpq(10).out()`, .lpenv(-8).lpq(10).out()`,
true true
)} )}
### Highpass envelope ### Highpass envelope
@ -241,6 +243,8 @@ ${makeExample(
| hpdecay | hpd | decay of the highpass filter | | hpdecay | hpd | decay of the highpass filter |
| hpsustain | hps | sustain of the highpass filter | | hpsustain | hps | sustain of the highpass filter |
| hprelease | hpr | release of the highpass filter | | hprelease | hpr | release of the highpass filter |
| hpadsr | | (**takes five arguments**) set all the parameters |
${makeExample( ${makeExample(
"Let's use another filter using the same example", "Let's use another filter using the same example",
@ -248,7 +252,7 @@ ${makeExample(
.hcutoff(1000).hpa([0.05, 0.25, 0.5].beat(2)) .hcutoff(1000).hpa([0.05, 0.25, 0.5].beat(2))
.hpenv(8).hpq(10).out()`, .hpenv(8).hpq(10).out()`,
true true
)} )}
### Bandpass envelope ### Bandpass envelope
@ -259,6 +263,8 @@ ${makeExample(
| bpdecay | bpd | decay of the bandpass filter | | bpdecay | bpd | decay of the bandpass filter |
| bpsustain | bps | sustain of the bandpass filter | | bpsustain | bps | sustain of the bandpass filter |
| bprelease | bpr | release of the bandpass filter | | bprelease | bpr | release of the bandpass filter |
| bpadsr | | (**takes five arguments**) set all the parameters |
${makeExample( ${makeExample(
"And the bandpass filter, just for fun", "And the bandpass filter, just for fun",
@ -268,7 +274,7 @@ ${makeExample(
.bpenv(-4).release(2).out() .bpenv(-4).release(2).out()
`, `,
true true
)} )}
## Wavetable synthesis ## Wavetable synthesis
@ -286,7 +292,7 @@ beat(1) :: sound('kick').n(4).out()
beat(2) :: sound('snare').out() beat(2) :: sound('snare').out()
beat(.5) :: sound('hh').out()`, beat(.5) :: sound('hh').out()`,
true true
)} )}
Let's explore the galaxy of possible waveforms. It can be hard to explore them all, there is a **lot** of them: Let's explore the galaxy of possible waveforms. It can be hard to explore them all, there is a **lot** of them:
@ -304,7 +310,7 @@ beat(2) :: v('swave', collection.pick())
beat(0.5) :: sound(v('swave')).n(v('selec')).out() beat(0.5) :: sound(v('swave')).n(v('selec')).out()
`, `,
true true
)} )}
You can work with them just like with any other waveform. Having so many of them makes them also very useful for generating sound effects, percussive, sounds, etc... You can work with them just like with any other waveform. Having so many of them makes them also very useful for generating sound effects, percussive, sounds, etc...
@ -330,7 +336,7 @@ beat(.25) && snd('triangle').adsr(0.02, 0.1, 0.1, 0.1)
beat(2) :: sound('cp').room(1).sz(1).out() beat(2) :: sound('cp').room(1).sz(1).out()
`, `,
true true
)} )}
${makeExample( ${makeExample(
"Giving some love to ugly inharmonic sounds", "Giving some love to ugly inharmonic sounds",
@ -341,7 +347,7 @@ beat(.5) :: sound('sine')
.fmh([1, 1.75].beat()) .fmh([1, 1.75].beat())
.fmi($(1) % 30).orbit(2).room(0.5).out()`, .fmi($(1) % 30).orbit(2).room(0.5).out()`,
true true
)} )}
${makeExample( ${makeExample(
"Peace and serenity through FM synthesis", "Peace and serenity through FM synthesis",
@ -355,7 +361,7 @@ beat(0.25) :: sound('sine')
.delayfb(0.8).fmh(Math.floor(usine(.5) * 4)) .delayfb(0.8).fmh(Math.floor(usine(.5) * 4))
.out()`, .out()`,
true true
)} )}
**Note:** you can also set the _modulation index_ and the _harmonic ratio_ with the <ic>fm</ic> argument. You will have to feed both as a string: <ic>fm('2:4')</ic>. If you only feed one number, only the _modulation index_ will be updated. **Note:** you can also set the _modulation index_ and the _harmonic ratio_ with the <ic>fm</ic> argument. You will have to feed both as a string: <ic>fm('2:4')</ic>. If you only feed one number, only the _modulation index_ will be updated.
@ -376,7 +382,7 @@ beat(.5) :: sound('sine')
.fmsus(0).fmdec(0.2).out() .fmsus(0).fmdec(0.2).out()
`, `,
true true
)} )}
## ZzFX ## ZzFX
@ -390,7 +396,7 @@ ${makeExample(
beat(.5) :: sound(['z_sine', 'z_triangle', 'z_sawtooth', 'z_tan', 'z_noise'].beat()).out() beat(.5) :: sound(['z_sine', 'z_triangle', 'z_sawtooth', 'z_tan', 'z_noise'].beat()).out()
`, `,
true true
)} )}
${makeExample( ${makeExample(
"Minimalist chiptune", "Minimalist chiptune",
` `
@ -404,7 +410,7 @@ beat(.5) :: sound('z_triangle')
.pitchJumpTime(0.01).out() .pitchJumpTime(0.01).out()
`, `,
true true
)} )}
It comes with a set of parameters that can be used to tweak the sound. Don't underestimate this synth! It is very powerful for generating anything ranging from chaotic noise sources to lush pads: It comes with a set of parameters that can be used to tweak the sound. Don't underestimate this synth! It is very powerful for generating anything ranging from chaotic noise sources to lush pads:
@ -442,7 +448,7 @@ beat(.25) :: sound('z_tan')
.out() .out()
`, `,
true true
)} )}
${makeExample( ${makeExample(
"What is happening to me?", "What is happening to me?",
` `
@ -452,7 +458,7 @@ beat(1) :: snd('zzfx').zzfx([
].beat()).out() ].beat()).out()
`, `,
false false
)} )}
${makeExample( ${makeExample(
"Les voitures dans le futur", "Les voitures dans le futur",
` `
@ -464,7 +470,7 @@ beat(1) :: sound(['z_triangle', 'z_sine'].pick())
.delayt(0.75).delayfb(0.5).out() .delayt(0.75).delayfb(0.5).out()
`, `,
false false
)} )}
Note that you can also design sounds [on this website](https://killedbyapixel.github.io/ZzFX/) and copy the generated code in Topos. To do so, please use the <ic>zzfx</ic> method with the generated array: Note that you can also design sounds [on this website](https://killedbyapixel.github.io/ZzFX/) and copy the generated code in Topos. To do so, please use the <ic>zzfx</ic> method with the generated array:
${makeExample( ${makeExample(
@ -474,7 +480,7 @@ ${makeExample(
beat(2) :: sound('zzfx').zzfx([3.62,,452,.16,.1,.21,,2.5,,,403,.05,.29,,,,.17,.34,.22,.68]).out() beat(2) :: sound('zzfx').zzfx([3.62,,452,.16,.1,.21,,2.5,,,403,.05,.29,,,,.17,.34,.22,.68]).out()
`, `,
true true
)} )}
# Speech synthesis # Speech synthesis
@ -494,7 +500,7 @@ ${makeExample(
beat(4) :: speak("Hello world!") beat(4) :: speak("Hello world!")
`, `,
true true
)} )}
${makeExample( ${makeExample(
"Let's hear people talking about Topos", "Let's hear people talking about Topos",
@ -502,7 +508,7 @@ ${makeExample(
beat(2) :: speak("Topos!","fr",irand(0,5)) beat(2) :: speak("Topos!","fr",irand(0,5))
`, `,
true true
)} )}
You can also use speech by chaining methods to a string: You can also use speech by chaining methods to a string:
@ -513,7 +519,7 @@ ${makeExample(
onbeat(4) :: "Foobaba".voice(irand(0,10)).speak() onbeat(4) :: "Foobaba".voice(irand(0,10)).speak()
`, `,
true true
)} )}
${makeExample( ${makeExample(
"Building string and chaining", "Building string and chaining",
@ -526,7 +532,7 @@ ${makeExample(
beat(6) :: sentence.pitch(0).rate(0).voice([0,2].pick()).speak() beat(6) :: sentence.pitch(0).rate(0).voice([0,2].pick()).speak()
`, `,
true true
)} )}
${makeExample( ${makeExample(
"Live coded poetry with array and string chaining", "Live coded poetry with array and string chaining",
@ -546,6 +552,6 @@ ${makeExample(
.speak(); .speak();
`, `,
true true
)} )}
`; `;
}; };

View File

@ -13,24 +13,26 @@ beat(.5) :: sound('hh').out()`,
`// Entering the secret room - Bubobubobubo `// Entering the secret room - Bubobubobubo
let frequencies = [200,400,600,800,1000,2000].beat(2); let frequencies = [200,400,600,800,1000,2000].beat(2);
beat(2) :: sound('sine').freq(frequencies) beat(2) :: sound('sine').freq(frequencies)
.delay(0.5).delayt(usine(.5)).delayfb(0.8).size(0.9).room(0.9).out() .delay(0.25).delayt(usine(.25)).delayfb(0.25).size(0.9).room(0.9).out()
beat(2) :: app.hydra.osc(frequencies/100, 0.25, 0.5) beat(2) :: app.hydra.osc(frequencies/100, 0.25, 0.5)
.posterize([32,4,8,16].beat(2)).rotate(cpulse()) .posterize([32,4,8,16].beat(2)).rotate(cpulse())
.kaleid([1,2,3].beat()).out()`, .kaleid([1,2,3].beat()).out()`,
`// The real internet of things - Bubobubobubo `// The real internet of things - Bubobubobubo
beat(.5) :: sound('STA6').cut(1).vel(0.4) beat(.5) :: sound('STA6').cut(1).vel(0.4)
.orbit(2).room(0.5).size(0.5).n(irand(1,4)) .orbit(2).room(0.5).size(0.5).n(irand(1,4))
.speed([0.15, 0.30].beat()).out() .speed([0.15, 0.30].beat() * 1.5).loop([1,0]
.beat(.125)).loopEnd([1,0.5].beat(2)).out()
binrhythm(.5, 50) :: sound('shaker').out() binrhythm(.5, 50) :: sound('shaker').out()
binrhythm(.5, 52) :: sound('808bd').n(3).out() binrhythm(.5, 52) :: sound('808bd').n(3).out()
rhythm(.25, 6, 8) :: sound('808sd').out()`, rhythm(.25, 6, 8) :: sound('808sd').out()`,
`// Numerology - Bubobubobubo `// Numerology - Bubobubobubo
bpm(130);
let mel = [ let mel = [
"0.125 _ (0 3 7 0 3 5 0 3 9)+(0 2)", "0.125 (0 7 0 10 0 5)+(0 3)", "0.125 _ (0 3 7 0 3 5 0 3 9)+(0 2)", "0.125 (0 7 0 10 0 5)+(0 3)",
"0.125 (0 3 7 0 3 5 0 3 9)+(0 2)", "0.125 (0 2 4 5 9 10)+(0 2)", "0.125 (0 3 7 0 3 5 0 3 9)+(0 2)", "0.125 (0 2 4 5 9 10)+(0 2)",
].beat(4); ].beat(4);
z0(mel) z0(mel)
.scale('minor').sound('square').cutoff(800 + usine(.5) * 5000) .scale('minor').sound('wt_piano').cutoff(800 + usine(.5) * 5000)
.fmi([2, 4, 8].beat(2)).fmh(flip(2) ? 2 : 4) .fmi([2, 4, 8].beat(2)).fmh(flip(2) ? 2 : 4)
.delay(bpm() / 60 / 9).delayt(0.25).delayfb(0.5) .delay(bpm() / 60 / 9).delayt(0.25).delayfb(0.5)
.fmsus(0.3).fmrel(0.3).rel(rand(0.5,0.8)) .fmsus(0.3).fmrel(0.3).rel(rand(0.5,0.8))
@ -42,34 +44,35 @@ beat([.25, .5].beat(4)) :: flip(6) && sound('dr')
`// Harmonic Leaps and Gaps -- Bubobubobubo `// Harmonic Leaps and Gaps -- Bubobubobubo
let oscillation = quant(usine(.25) * 20, [35, 40, 38, 50, 55]); let oscillation = quant(usine(.25) * 20, [35, 40, 38, 50, 55]);
let tonal = [0, 5, 0, 0, 7].palindrome().bar() + 40 - 24; let tonal = [0, 5, 0, 0, 7].palindrome().bar() + 40 - 24;
[tonal, tonal + 7, tonal + [12,3].bar()].forEach((e) => { [tonal, tonal + 7, tonal + [12, 3, 24].bar()].forEach((e) => {
flip(2) :: beat(.5) :: sound('square').fmi(2) flip(2) :: beat(.5) :: sound('square').fmi(1.5).fmh(0.99)
.cutoff(500 + usine(1/2)).n(irand(1,10)) .cutoff(500 + usine(1/2)).n($(1) % 20).cut(.1)
.note(e + oscillation + [0, 5].beat(.5)).out() .note(e + oscillation + [0, 5].beat(.5)).out()
!flip(2) :: beat(.5) :: sound('sawtooth').fmi(2) !flip(2) :: beat(.5) :: sound('sawtooth').fmi(1.49).fmh(1.01)
.cutoff(500 + usine(1/2) * 5000).n(irand(1,10)) .cutoff(500 + usine(1/2) * 5000).n(irand(1,10)).cut(.1)
.note(e + oscillation + [0, 5].beat(.5)).out() .note(e + oscillation + [0, 5].beat(.5)).out()
}); });
oncount([2, 3.5, [5,0].pick()], 6) :: sound('snare').out() oncount([2, 4, 4.5], 6) :: sound('snare').n(4).out()
`, rhythm(.25, 6, 8) :: sound('shaker').end(0.25).out()
rhythm(.5,4,8) :: sound('bd').out()`,
`// Computer Music Classroom, Monday (8AM) -- Bubobubobubo `// Computer Music Classroom, Monday (8AM) -- Bubobubobubo
let ur = [0, 12, 7].beat(24), let ur = [0, 5, 12, 7, 5].beat(24),
fundamental = [0, 5, 10, 8, 6].repeatAll(4).bar(); fundamental = [0, 5, 10, 8, 6].repeatAll(4).bar();
beat(.25) :: sound('square') beat(.25) :: sound('triangle')
.note(ur + fundamental + 40).n(1 + $(1) % 8) .note(ur + fundamental + 40).n(1 + $(1) % 16)
.atk(0.05).sustain(0.1).release(0.1) .atk(0.05).sustain(0.1).release(0.1)
.room(0.9).size(0.9) .room(0.9).size(0.9).vib(2).vibmod(0.125)
.out() .out()
beat(.25) :: sound('sawtooth') beat(.25) :: sound('triangle')
.note(ur + fundamental + 47).n(1 + $(2) % 8) .note(ur + fundamental + 47).n(1 + $(2) % 16)
.atk(0.05).sustain(0.1).release(0.1) .atk(0.05).sustain(0.1).release(0.1)
.room(0.9).size(0.9) .room(0.9).size(0.9).vib(4).vibmod(0.125)
.out() .out()
beat(.25) :: sound(['sawtooth', 'square'].bar()) beat(.25) :: sound(['sawtooth', 'square'].bar())
.note(ur + fundamental + 40+[10,12].bar()).n(1 + $(3) % 8) .note(ur + fundamental + 40+[10,12].bar()).n(1 + $(3) % 16)
.atk(0.05).sustain(0.1).release(0.1) .atk(0.05).sustain(0.1).release(0.1).vib([0, 0, 0, 0.5])
.room(0.9).size(0.9).out() .vibmod(often() ? 1 : [16,8,4].pick())
`, .room(0.9).size(0.9).out()`,
`// Lamento for Digital Harpists -- Bubobubobubo `// Lamento for Digital Harpists -- Bubobubobubo
beat(4) :: sound('triangle') beat(4) :: sound('triangle')
.note(60).fmwave('triangle').fmi(3.95) .note(60).fmwave('triangle').fmi(3.95)
@ -92,21 +95,18 @@ beat([4, 2, 8].pick() / [2,1].bar()) :: sound('triangle')
let melody = [30,30,34,35,37].palindrome() let melody = [30,30,34,35,37].palindrome()
.beat() + [0, -12].repeatAll(2).beat(2) .beat() + [0, -12].repeatAll(2).beat(2)
if (flip(8, 75)) { if (flip(8, 75)) {
log('first section') rhythm(.5, 4, 8) :: sound('ST12').n([0,1,2].beat(0.5)).speed(0.5).gain(0.4).out()
rhythm(.5, 4, 8) :: sound('ST12').n([0,1,2].beat(0.5)).speed(0.5).out() rhythm(.5, 6, 8) :: sound('ST20').n([0,1,2].beat(0.5) + 20).gain(0.4)
rhythm(.5, 6, 8) :: sound('ST20').n([0,1,2].beat(0.5) + 20)
.speed(0.25).end(0.1).orbit(2).room(0.5).size(0.5).out() .speed(0.25).end(0.1).orbit(2).room(0.5).size(0.5).out()
beat(.5) :: sound('ST01').note(melody) beat(.5) :: sound('ST01').note(melody).gain(0.4)
.n($(1)).speed(0.5).room(0.5).size(0.5).out() .n($(1)).speed(0.5).room(0.5).size(0.5).out()
} else { } else {
log('second section')
rhythm(.5, 2, 8) :: sound('ST20') rhythm(.5, 2, 8) :: sound('ST20')
.n([0,1,2].beat(0.5)).speed(0.5) .n([0,1,2].beat(0.5)).speed(0.5).gain(0.4)
.end(0.1).out() .end(0.1).out()
beat(.5) :: sound('ST01').note(melody).n($(1)).speed(0.5).end(0.1).out() beat(.5) :: sound('ST01').note(melody).n($(1)).speed(0.5).gain(0.4).end(0.1).out()
beat(1) :: sound('ST02').note(melody).n($(1)).speed(0.5).end(0.1).out() beat(1) :: sound('ST02').note(melody).n($(1)).speed(0.5).gain(0.4).end(0.1).out()
} }`,
`,
`// Race day - Bubobubobubo `// Race day - Bubobubobubo
bpm(125); bpm(125);
beat(.5) :: sound('STB6') beat(.5) :: sound('STB6')
@ -173,6 +173,7 @@ beat(0.25) :: snd('hh').out();
beat(2) :: snd('square') beat(2) :: snd('square')
.cutoff(500).note(50-12).resonance(20).sustain(0.2).out() .cutoff(500).note(50-12).resonance(20).sustain(0.2).out()
beat(1/4)::snd(['sawtooth', 'triangle', 'square'].beat(1)) beat(1/4)::snd(['sawtooth', 'triangle', 'square'].beat(1))
.vib(2).vibmod(0.5)
.note([50, 53, 55, 50, 50, 52, 58, 50+12, 50+15].beat(4) + [0, 12, 24].beat(0.5)) .note([50, 53, 55, 50, 50, 52, 58, 50+12, 50+15].beat(4) + [0, 12, 24].beat(0.5))
.cutoff(usine(.5)*10000).resonance([10,20].beat(2)) .cutoff(usine(.5)*10000).resonance([10,20].beat(2))
.fmi($(1) % 10).fmh($(2) % 5) .fmi($(1) % 10).fmh($(2) % 5)
@ -183,17 +184,20 @@ beat(1/4)::snd(['sawtooth', 'triangle', 'square'].beat(1))
beat(4)::snd('amencutup').n($(19)).cut(1).orbit(2).pan(rand(0.0,1.0)).out()`, beat(4)::snd('amencutup').n($(19)).cut(1).orbit(2).pan(rand(0.0,1.0)).out()`,
`// Crazy arpeggios - Bubobubobubo `// Crazy arpeggios - Bubobubobubo
bpm(110) bpm(110)
beat(0.125) && sound('sawtooth') beat([0.25, 0.5].beat(4)) && sound('sawtooth')
.note([60, 62, 63, 67, 70].beat(.125) + .note([60, 62, 63, 67, 70].beat(.125) +
[-12,0,12].beat() + [0, 0, 5, 7].bar()) [-12,0,12].beat() + [0, 0, 5, 7].bar())
.sustain(0.1).fmi(0.25).fmh(2).room(0.9) .sustain(0.1).fmi(0.25).fmh(2).room(0.9)
.gain(0.75).cutoff(500 + usine(8) * [500, 1000, 2000].bar()) .gain(0.75).cutoff([500,1000].beat(2))
.delay(0.5).delayt(0.25).delayfb(0.25) .lpadsr([6,8].beat(), 1/16, .125, 0, 0)
.delay(0.5).delayt(0.25)
.delayfb(0.25)
.out(); .out();
beat(1) && snd('kick').out(); binrhythm([.25, .5].beat(), 11) :: often() :: sound('dr')
beat(2) && snd('snare').out(); .n([0, 1].beat()).gain(0.4).out()
beat(.5) && snd('hat').out(); binrhythm([.5, .25, .5, .5, .25].beat(), 122) :: often() :: sound('dr')
`, .n([9, 24].beat()).gain(0.4).out()
rhythm([.5, .25, 1].beat(2), 4, 8) :: sound('kick').gain(0.6).out()`,
`// Obscure Shenanigans - Bubobubobubo `// Obscure Shenanigans - Bubobubobubo
beat([1/4,1/8,1/16].beat(8)):: sound('sine') beat([1/4,1/8,1/16].beat(8)):: sound('sine')
.freq([100,50].beat(16) + 50 * ($(1)%10)) .freq([100,50].beat(16) + 50 * ($(1)%10))
@ -205,15 +209,14 @@ flip(3) :: beat([.25,.5].beat(.5)) :: sound('dr')
.n([8,9].pick()).gain([.8,.5,.25,.1,.0].beat(.25)).out() .n([8,9].pick()).gain([.8,.5,.25,.1,.0].beat(.25)).out()
`, `,
`// Resonance bliss - Bubobubobubo `// Resonance bliss - Bubobubobubo
beat(.25)::snd('arpy') beat([.25,.125].beat(4))::snd('arpy:4')
.note(30 + [0,3,7,10].beat()) .note(30 + [0,3,7,10, 12, 5, 7].beat()).speed(0.999).pan(0)
.cutoff(usine(.5) * 5000).resonance(10).gain(0.3) .cutoff(1000 + usine(1/8) * 400).lpadsr(8, 1/8, 1/16, 0, 0)
.end(0.8).room(0.9).size(0.9).n(0).out(); .resonance(1).gain(0.4).end(0.8).room(0.9).size(0.9).n(0).out();
beat([.25,.125].beat(2))::snd('arpy') beat([.25,.125, .5].beat(4))::snd('arpy:4')
.note(30 + [0,3,7,10].beat()) .note(30 + [0,3,7,10, 12, 5, 7].beat()).speed(1.001).pan(1)
.cutoff(usine(.5) * 5000).resonance(20).gain(0.3) .cutoff(100 + usine(1/8) * 800).lpadsr(5, 0, [1/8, 1.16].beat(), 0, 0)
.end(0.8).room(0.9).size(0.9).n(3).out(); .resonance(5).gain(0.4).end(0.8).room(0.9).size(0.9).n(3).out();
beat(.5) :: snd('arpy').note( beat(.5) :: snd('arpy').note([30, 33, 35].repeatAll(4).beat(1) - [24,12].beat(0.5))
[30, 33, 35].repeatAll(4).beat(1) - [12,0].beat(0.5)).out() .cutoff(500).lpadsr(8, 0.05, .125, 0, 0).out()`,
`,
]; ];