#sndkit — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #sndkit, aggregated by home.social.
-
CW: Euclidean Rhythm Generator Proof of Concepts
Many hours later, and now I have a Euclidean Rhythm Generator sequencing blips. It's quite underwhelming, but the implementation is fully documented using #literateprogramming. It should end up in #sndkit in the next few days.
This sound patch converts a metro signal into a euclidean rhythm which drives an envelope generator. It randomizes the pulse variable at every bar to regenerate the pattern:
metro 8
hold zz
regset zz 0regget 0
dup
tdiv zz 8 0
trand zz 2 8
param 8
euclid zz zz zz
env zz 0.001 0.01 0.01
sine 1000 0.5
mul zz zz
wavout zz "euclid.wav"
computes 10
unhold [regget 0] -
CW: Euclidean Rhythm Generator Proof of Concepts
Many hours later, and now I have a Euclidean Rhythm Generator sequencing blips. It's quite underwhelming, but the implementation is fully documented using #literateprogramming. It should end up in #sndkit in the next few days.
This sound patch converts a metro signal into a euclidean rhythm which drives an envelope generator. It randomizes the pulse variable at every bar to regenerate the pattern:
metro 8
hold zz
regset zz 0regget 0
dup
tdiv zz 8 0
trand zz 2 8
param 8
euclid zz zz zz
env zz 0.001 0.01 0.01
sine 1000 0.5
mul zz zz
wavout zz "euclid.wav"
computes 10
unhold [regget 0] -
CW: Euclidean Rhythm Generator Proof of Concepts
Many hours later, and now I have a Euclidean Rhythm Generator sequencing blips. It's quite underwhelming, but the implementation is fully documented using #literateprogramming. It should end up in #sndkit in the next few days.
This sound patch converts a metro signal into a euclidean rhythm which drives an envelope generator. It randomizes the pulse variable at every bar to regenerate the pattern:
metro 8
hold zz
regset zz 0regget 0
dup
tdiv zz 8 0
trand zz 2 8
param 8
euclid zz zz zz
env zz 0.001 0.01 0.01
sine 1000 0.5
mul zz zz
wavout zz "euclid.wav"
computes 10
unhold [regget 0] -
CW: Euclidean Rhythm Generator Proof of Concepts
Many hours later, and now I have a Euclidean Rhythm Generator sequencing blips. It's quite underwhelming, but the implementation is fully documented using #literateprogramming. It should end up in #sndkit in the next few days.
This sound patch converts a metro signal into a euclidean rhythm which drives an envelope generator. It randomizes the pulse variable at every bar to regenerate the pattern:
metro 8
hold zz
regset zz 0regget 0
dup
tdiv zz 8 0
trand zz 2 8
param 8
euclid zz zz zz
env zz 0.001 0.01 0.01
sine 1000 0.5
mul zz zz
wavout zz "euclid.wav"
computes 10
unhold [regget 0] -
CW: Euclidean Rhythm Generator Proof of Concepts
Many hours later, and now I have a Euclidean Rhythm Generator sequencing blips. It's quite underwhelming, but the implementation is fully documented using #literateprogramming. It should end up in #sndkit in the next few days.
This sound patch converts a metro signal into a euclidean rhythm which drives an envelope generator. It randomizes the pulse variable at every bar to regenerate the pattern:
metro 8
hold zz
regset zz 0regget 0
dup
tdiv zz 8 0
trand zz 2 8
param 8
euclid zz zz zz
env zz 0.001 0.01 0.01
sine 1000 0.5
mul zz zz
wavout zz "euclid.wav"
computes 10
unhold [regget 0] -
Some words on signal routing with #sndkit
-
Some words on signal routing with #sndkit
-
I finally got around to making a clock-synced delay line that works with #sndkit.
Code for the sound can be found here:
https://paste.sr.ht/~pbatch/3867c56d0099b21b43c21a1228d166139a7ca124
-
I finally got around to making a clock-synced delay line that works with #sndkit.
Code for the sound can be found here:
https://paste.sr.ht/~pbatch/3867c56d0099b21b43c21a1228d166139a7ca124
-
More experiments using #uxn to sequence Gesture in #sndkit!
This one implements a concept I am calling "temporal skewing", which is the ability to locally warp tempo in a region without gaining or losing time overall. The neat thing about this is that it's all done using audio DSP!
The melodic sequence below would have otherwise been playing linear eighth note rhythms, but was subjected to a exponential temporal skewing curve lasting 9 beats, causing an accelerando to happen. While the beats do get faster, the overall time is still 9 beats.
Code found here:
https://paste.sr.ht/~pbatch/0616f870f506ee24365205acd677edef28c696d6
-
More experiments using #uxn to sequence Gesture in #sndkit!
This one implements a concept I am calling "temporal skewing", which is the ability to locally warp tempo in a region without gaining or losing time overall. The neat thing about this is that it's all done using audio DSP!
The melodic sequence below would have otherwise been playing linear eighth note rhythms, but was subjected to a exponential temporal skewing curve lasting 9 beats, causing an accelerando to happen. While the beats do get faster, the overall time is still 9 beats.
Code found here:
https://paste.sr.ht/~pbatch/0616f870f506ee24365205acd677edef28c696d6
-
Some initial experiments getting #uxn to sequence #gestures.
The featured gesture here is controlling the pitch of an oscillator with a small bit of glissando. Every time the gesture loops back, the speed changes: eighths (2), triplets (3), sixteenths (4), quintuplets (5), etc. until it reaches a really high value and then it goes backwards and slows down.
I also programmed a secondary gesture that is controlling filter cuttoff. This is a line that rises up and down every 4 beats.
Uxn program (tal) and #sndkit patch (LIL) can be found here.
https://paste.sr.ht/~pbatch/62a21dc28095031690ecca0cafd08679716c67ec
-
Some initial experiments getting #uxn to sequence #gestures.
The featured gesture here is controlling the pitch of an oscillator with a small bit of glissando. Every time the gesture loops back, the speed changes: eighths (2), triplets (3), sixteenths (4), quintuplets (5), etc. until it reaches a really high value and then it goes backwards and slows down.
I also programmed a secondary gesture that is controlling filter cuttoff. This is a line that rises up and down every 4 beats.
Uxn program (tal) and #sndkit patch (LIL) can be found here.
https://paste.sr.ht/~pbatch/62a21dc28095031690ecca0cafd08679716c67ec
-
Messing around with my new qgliss algorithm in #sndkit
A randomly generated line is used to produce a quantized melody via qgliss. this line also maps to other parameters in the patch as an expression curve.
sndkit patch:
https://paste.sr.ht/~pbatch/560654ba675a0557ea408aaf9afec85f55e6b781
qgliss:
https://pbat.ch/sndkit/qgliss/
https://git.sr.ht/~pbatch/sndkit/tree/9e8a7d543fe28813742acd06b6883e012764504a/item/dsp/qgliss.org -
Messing around with my new qgliss algorithm in #sndkit
A randomly generated line is used to produce a quantized melody via qgliss. this line also maps to other parameters in the patch as an expression curve.
sndkit patch:
https://paste.sr.ht/~pbatch/560654ba675a0557ea408aaf9afec85f55e6b781
qgliss:
https://pbat.ch/sndkit/qgliss/
https://git.sr.ht/~pbatch/sndkit/tree/9e8a7d543fe28813742acd06b6883e012764504a/item/dsp/qgliss.org -
Yet another experiment using #uxn as a sequencer with #sndkit (#uxnseq).
This time, the goal was to build coordinated sequences. In other words, be able to have a sequence that has an awareness of another sequence, and reacts and behaves accordingly.
The uxn program controls two sequences simultaneously. The first sequence controls a 7/8 bass line groove, and at each bar randomly chooses a new measure. The second sequence controls a sparse melody on top. It picks one of 2 pre-composed sequences based on what the first sequence chose.
code (uxntal for sequence, LIL for sounds) can be found here:
https://paste.sr.ht/~pbatch/c0a4ca5ab1b3788017cfa551a722322432fc59a9
-
Yet another experiment using #uxn as a sequencer with #sndkit (#uxnseq).
This time, the goal was to build coordinated sequences. In other words, be able to have a sequence that has an awareness of another sequence, and reacts and behaves accordingly.
The uxn program controls two sequences simultaneously. The first sequence controls a 7/8 bass line groove, and at each bar randomly chooses a new measure. The second sequence controls a sparse melody on top. It picks one of 2 pre-composed sequences based on what the first sequence chose.
code (uxntal for sequence, LIL for sounds) can be found here:
https://paste.sr.ht/~pbatch/c0a4ca5ab1b3788017cfa551a722322432fc59a9
-
More sequencing tests with #uxn and #sndkit (aka #uxnseq).
The Uxn program here is randomly selecting from a set a pre-made musical sequences that control the pitch of the subtactive saw oscillator patch in sndkit.
synth patch and uxn code here:
https://paste.sr.ht/~pbatch/85e9cee9b1d0826c24b549e2b97f16a80fe71351
-
More sequencing tests with #uxn and #sndkit (aka #uxnseq).
The Uxn program here is randomly selecting from a set a pre-made musical sequences that control the pitch of the subtactive saw oscillator patch in sndkit.
synth patch and uxn code here:
https://paste.sr.ht/~pbatch/85e9cee9b1d0826c24b549e2b97f16a80fe71351
-
CW: uxn, music
Music sequencing test with #uxn, #uxntal, and #sndkit
This is my first attempt at uxn. Not sure if I'm doing it right?
|0100
BRK%NOTE { #37 ADD #20 DEO }
%DUR { #21 DEO }&top
#00 NOTE #02 DUR BRK
#02 NOTE #01 DUR BRK
#0b NOTE #02 DUR BRK
#09 NOTE #01 DUR BRK
#00 #01 SUB NOTE #02 DUR BRK
#02 NOTE #01 DUR BRK
#09 NOTE #02 DUR BRK
#07 NOTE #01 DUR BRK
,&top JMP -
CW: uxn, music
Music sequencing test with #uxn, #uxntal, and #sndkit
This is my first attempt at uxn. Not sure if I'm doing it right?
|0100
BRK%NOTE { #37 ADD #20 DEO }
%DUR { #21 DEO }&top
#00 NOTE #02 DUR BRK
#02 NOTE #01 DUR BRK
#0b NOTE #02 DUR BRK
#09 NOTE #01 DUR BRK
#00 #01 SUB NOTE #02 DUR BRK
#02 NOTE #01 DUR BRK
#09 NOTE #02 DUR BRK
#07 NOTE #01 DUR BRK
,&top JMP -
Added a "mix" node in #sndkit today, which allows for things like sends, throws, and signal bussing.
-
Added a "mix" node in #sndkit today, which allows for things like sends, throws, and signal bussing.
-
Tomorrow is the deadline for the #libremusicchallenge, and I think my #synthwavefromscratch track is in a good enough place for it.
For those of you just joining in, for the past month, I've been making a synthwave track from scratch: no DAW, no plugins. Just C code and some scripting languages on top of that. In other words, I'm using my #sndkit and #gest projects.
The code for the song can be found here:
https://git.sr.ht/~pbatch/gest/tree/master/item/examples/synthwave.lil
...if you don't believe me, compile and render it yourself ;)
-
Tomorrow is the deadline for the #libremusicchallenge, and I think my #synthwavefromscratch track is in a good enough place for it.
For those of you just joining in, for the past month, I've been making a synthwave track from scratch: no DAW, no plugins. Just C code and some scripting languages on top of that. In other words, I'm using my #sndkit and #gest projects.
The code for the song can be found here:
https://git.sr.ht/~pbatch/gest/tree/master/item/examples/synthwave.lil
...if you don't believe me, compile and render it yourself ;)
-
Here's a classic subtractive 3osc synth bass sound. #synthwavefromscratch #sndkit
set key 36;env [metro [expr (4 * 96) / 60]] 0.001 0.01 0.12;blsaw [mtof $key];blsaw [mtof [expr $key - 11.8]];add zz zz;blsaw [mtof [expr $key + 11.9]];add zz zz;mul zz 0.2;chorus zz 1.0 0.5 0.02 0.1;dcblocker zz;butlp zz 1000;butlp zz 1000;mul zz zz;wavout zz "synthbass.wav";computes 10;
-
Here's a classic subtractive 3osc synth bass sound. #synthwavefromscratch #sndkit
set key 36;env [metro [expr (4 * 96) / 60]] 0.001 0.01 0.12;blsaw [mtof $key];blsaw [mtof [expr $key - 11.8]];add zz zz;blsaw [mtof [expr $key + 11.9]];add zz zz;mul zz 0.2;chorus zz 1.0 0.5 0.02 0.1;dcblocker zz;butlp zz 1000;butlp zz 1000;mul zz zz;wavout zz "synthbass.wav";computes 10;
-
synthesized kick drum sound using #sndkit and #LIL. This will be used #synthwavefromscratch track.
metro 2;hold zz;regset zz 0;gensine [tabnew 8192];regget 0;dup;expon zz 1 0.1 0.001;scale zz 60 500;tphasor zz zz 0;phasewarp zz 0.2;oscfext zz zz;mul zz 0.5;regget 0;env zz 0.001 0.1 0.1;mul zz zz;regget 0;modalres zz 3000 3;add zz zz;wavout zz "kik.wav";computes 10;regget 0;unhold zz;
-
synthesized kick drum sound using #sndkit and #LIL. This will be used #synthwavefromscratch track.
metro 2;hold zz;regset zz 0;gensine [tabnew 8192];regget 0;dup;expon zz 1 0.1 0.001;scale zz 60 500;tphasor zz zz 0;phasewarp zz 0.2;oscfext zz zz;mul zz 0.5;regget 0;env zz 0.001 0.1 0.1;mul zz zz;regget 0;modalres zz 3000 3;add zz zz;wavout zz "kik.wav";computes 10;regget 0;unhold zz;
-
-
-
Just published some BLEP oscillators to #sndkit:
-
Just published some BLEP oscillators to #sndkit:
-
Patch in #sndkit via #LIL:
https://git.sr.ht/~pbatch/sndkit/tree/master/item/nodes/vardelay/test.lilMore info on vardelay, the feedback delay line algorithm:
-
Patch in #sndkit via #LIL:
https://git.sr.ht/~pbatch/sndkit/tree/master/item/nodes/vardelay/test.lilMore info on vardelay, the feedback delay line algorithm:
-
CW: sines, sndkit, LIL
LIL is such a cute little language. I introduced it into #sndkit last week as a way to build up patches.
Here's some code used to generate a few sine waves:
# mainly testing out hold/unhold functionality
# one LFO controls the frequency of 4 oscillators# function to create a voice
func voice {min max} {
osc [regget 0] \
[biscale [regget 1] $min $max] \
[param 0.1] [param 0]
}# generate sine table in register 0
regset [gensine [tabnew 8192]] 0# generate held LFO signal in register 1
regset [hold [osc [regget 0] 0.1 1 0]] 1# create 4 voices and add them together
voice 400 500
voice 400 600
add zz zz
voice 400 300
add zz zz
voice 400 200
add zz zz# write output to wav file
wavout zz "sines.wav"# release LFO signal
unhold [regget 1]# compute ~30 seconds of sound
computes 30 -
CW: sines, sndkit, LIL
LIL is such a cute little language. I introduced it into #sndkit last week as a way to build up patches.
Here's some code used to generate a few sine waves:
# mainly testing out hold/unhold functionality
# one LFO controls the frequency of 4 oscillators# function to create a voice
func voice {min max} {
osc [regget 0] \
[biscale [regget 1] $min $max] \
[param 0.1] [param 0]
}# generate sine table in register 0
regset [gensine [tabnew 8192]] 0# generate held LFO signal in register 1
regset [hold [osc [regget 0] 0.1 1 0]] 1# create 4 voices and add them together
voice 400 500
voice 400 600
add zz zz
voice 400 300
add zz zz
voice 400 200
add zz zz# write output to wav file
wavout zz "sines.wav"# release LFO signal
unhold [regget 1]# compute ~30 seconds of sound
computes 30 -
Playing around with phase distortion synthesis + hard sync in #monolith and #runt, using my new oscillator in #sndkit:
patchwerk nodes
10 metro bhold 0 cabset
0 cabget
0
1 ftnew "0 4 7 11 12 11 7 4" gen_vals
tseq
37 add 0.001 port mtof
0 phasor
0.2 1 sine 0.1 0.9 biscale
pdhalf
0 cabget 1 10.5 trand 0.001 0.01 1 randh port mul
4000 ftnew gen_sine oscfext
0.5 mul0 cabget bunhold
"oscfext_test.wav" wavout bdrop
sr 20 * _compute rep
-
Playing around with phase distortion synthesis + hard sync in #monolith and #runt, using my new oscillator in #sndkit:
patchwerk nodes
10 metro bhold 0 cabset
0 cabget
0
1 ftnew "0 4 7 11 12 11 7 4" gen_vals
tseq
37 add 0.001 port mtof
0 phasor
0.2 1 sine 0.1 0.9 biscale
pdhalf
0 cabget 1 10.5 trand 0.001 0.01 1 randh port mul
4000 ftnew gen_sine oscfext
0.5 mul0 cabget bunhold
"oscfext_test.wav" wavout bdrop
sr 20 * _compute rep
-
CW: FM synthesis noodling
Added feedback to my FM operator pair in #sndkit, and added a new "fmpair" word in #monolith to mark the occasion.
Here's a quick patch written in #runt:
patchwerk nodes
4096 ftnew gen_sine 0 regset
36 mtof 1 1.01
3
0.1 1 0 0 regget osc 0 0.9 biscale
0 regget fmpair36 12 - mtof 1 0.997
3
0 0.9 0.4 randi
0 regget fmpairadd
0.4 mul
"fmpair_test.wav" wavout bdrop
sr 20 * _compute rep
-
CW: FM synthesis noodling
Added feedback to my FM operator pair in #sndkit, and added a new "fmpair" word in #monolith to mark the occasion.
Here's a quick patch written in #runt:
patchwerk nodes
4096 ftnew gen_sine 0 regset
36 mtof 1 1.01
3
0.1 1 0 0 regget osc 0 0.9 biscale
0 regget fmpair36 12 - mtof 1 0.997
3
0 0.9 0.4 randi
0 regget fmpairadd
0.4 mul
"fmpair_test.wav" wavout bdrop
sr 20 * _compute rep