{{scripts / firmware for instruments will periodically change and be updated with language/date/time stamps}};
{Fractional Derivative Phase Modulation using the Riemann-Liouville fractional derivative }
\\python
august 2023
-----------------------------------------------
import numpy as np
import simpleaudio as sa
import matplotlib.pyplot as plt
SAMPLE_RATE = 44100
DURATION = 5.0
def riemann_liouville(input_signal, alpha):
N = len(input_signal)
n = int(np.ceil(alpha))
derivative = np.zeros(N)
for i in range(N):
integral = 0.0
for j in range(i + 1):
term1 = (i - j) if (i - j) != 0 else 1.0
term2 = (i - j + 1) if (i - j + 1) != 0 else 1.0
integral += (term1 ** (n - alpha - 1)) * input_signal[j]
if j > 0:
integral += (term2 ** (n - alpha - 1)) * input_signal[j - 1]
integral *= 0.5
derivative[i] = (-1)**n * integral
for k in range(1, n + 1):
temp_derivative = np.diff(derivative, n=1)
derivative[:-k] = temp_derivative
return derivative
t = np.arange(0, DURATION, 1/SAMPLE_RATE)
modulating_signal = np.sin(2 * np.pi * 5 * t)
alpha = 0.5
fractional_derivative = riemann_liouville(modulating_signal, alpha)
output_signal = np.sin(2 * np.pi * 440 * t + fractional_derivative)
# Normalize for playback
output_signal = (output_signal / np.max(np.abs(output_signal)) * 32767).astype(np.int16)
# Play audio
play_obj = sa.play_buffer(output_signal, 1, 2, SAMPLE_RATE)
play_obj.wait_done()
# Plot waveforms for visualization
plt.figure(figsize=(10, 6))
plt.subplot(3, 1, 1)
plt.title("Original Signal")
plt.plot(t, modulating_signal)
plt.subplot(3, 1, 2)
plt.title(f"Fractional Derivative (alpha = {alpha})")
plt.plot(t, fractional_derivative)
plt.subplot(3, 1, 3)
plt.title("Fractional Derivative Phase Modulation")
plt.plot(t, output_signal)
plt.tight_layout()
plt.show()
-----------------------------------
{supercollider/june 2023};
----------------------
{|j|play{RLPF.ar(Pulse.ar(f=32**sum({|i|1/4**i*abs(LFNoise0.kr(0.25**j/8)>0-LFPulse.ar(2**i/8))}!10)*30,0.3),f.sqrt.lag(2)*30,0.5)!2/5}}!4
----------------------------------
play{Splay.ar({Pluck.ar(BPF.ar(f=product({|i|product({LFPulse.ar(2**rrand(-9,1),2.rand/2)}!(i+2))/(1+i)+1}!8)*86,f).sin,Saw.ar,1,1/f,9)}!9)}
------------------------------------------------------------------------
play{x=Saw.ar(0.7**lag(kr(n=LFNoise0,1/5),2)*[601,500,749]);Splay.ar({|i|x=x+BAllPass.ar(x,9**n.kr(a=1b**i)*2e3)+CombL.ar(x,1,a,8)/2s}!9@8)}
------------------------------------------------------------------------
x=(1..8);y=scramble(8/x);z=y/.x y;d={|d,a|Duty.ar(d,0,Dseq(a,inf))};play{d.(d.(0.16,z*.x z)/4e3,z)/5-d.(d.(0.04,x*2)/8e2,[0,1])/3!2}//
-------------------------------------------------------------------------
Pbind(\dur,1/6,\note,Pseq(stutter(x=[0,7,12,7,-2,5,10,5,-7,0,5,7,8,7,5];x=x++7++x++3!4;y=0!8++[5,3,2,0,3,2,0,-2]+5!4;flat(x++y)-8),4)).play
-----------------------------------------------------------------------
t={|u,d,a|u.ar(Duty.ar(d/5,0,Dseq(a++0))*300)};play{t.(Saw,1,x=[6,5,9,8];flat(y=allTuples(x/.t x)[(127..0)+[0,127]]%1))+t.(LFTri,4,y*2)!2/6}
------------------------------------------------------------------
play{Splay.ar({|i|f=1.9**i/128;BPF.ar(PinkNoise.ar(1!2),4**LFNoise2.kr(1.2**i/16)*300,0.15)*(5**LFNoise2.ar(f)/(i+8)*20)}!15)}
-------------------------------------------------------------------
Ndef(\,{x=DelayN.ar(LeakDC.ar(Ndef(\).ar),1,z=1e-2);LPF.ar(Trig1.ar(Amplitude.kr(x,5,120)*1.5+x+z-Dust.ar(2),4e-3)*0.1+x*0.99,1200)}).play
{supercollider/april 2023};
----------------------
d={|l,h,f,p,n|sum({Ringz.ar(LFPulse.ar(f,p,0.01),exprand(l,h).round(n),0.5)}!20)};{d.(50,150,[2,1,1],[0,1/4,3/4],[1,40,50])*3e-4!2}.play
--------------------------------------------
x=0;Pbind(*[type:\set,id:{|freq=10|f=freq;LPF.ar(Saw.ar(f),f.lag(1)*3)!2}.play.nodeID,freq:Pfunc{x=x+32%35;x%12+1*40},dur:1/6]).play
----------------------------------
Ndef('x',{Normalizer.ar(FreqShift.ar(Rotate2.ar(*Ndef('x').ar++1/8).tanh,20*[-3,0.995])+Dust.ar(1!2,0.005),1,0.5)}).play//
-------------------------------------------
f=g=0;Routine({loop{g=g+1e-3;f=f+g%1;play{l=Line.kr(1,0,3,doneAction:2);h=2**f*100;e=Pluck.ar(CuspL.ar,1,i=1/h,i,2,0.3)!2};0.15.wait}}).play
-------------------------------------------
p=SCImage(n=300);n.do{|i|n.do{|j|z=c=Complex(i-240,j-150)/n*2.5;{(r=rho(z=z*z+c)/8)>1&&{z=0}}!200;p.setColor(Color.hsv(r,1,1),i,j)}};p.plot
{supercollider/dec 2022};
-------------------
Ndef(\,{LPF.ar(x=DelayN.ar(LeakDC.ar(Ndef(\).ar,1-2e-7)*0.99,1,0.1)+Dust.ar(0.5!2);x+(Trig1.ar(x<(x.mean.lag(30)),4e-3)*0.05),800)}).play
-------------------------------------------
Ndef(\,{Limiter.ar(x=LeakDC.ar(Ndef(\).ar)+Impulse.ar(0);x-DelayC.ar(x=x.sum/8,1,1/Tartini.kr(x)[0].lag(1.5)),0.5,0.02*[1,1.1])}).play
-------------------------------------------
Ndef('x',{x=(Ndef('x').ar*1.8).tanh;BPF.ar(x+[0.01,0.1],12**Latch.ar(x.mean,Impulse.ar(3)).lag(0.1)*200)}).play//
-------------------------------------------
a=1@2;f=1;w=Window().front.drawHook_({900.do{Pen.line(a*200,(a=(a*(f=f+2e-6)).y.cos+1@a.x)*200)};Pen.stroke});AppClock.play{w.refresh;0.01}
-------------------------------------------
{a=LFTri.ar(1);20.do{a=BAllPass.ar(a,80,1);a=((a+0.02)*LFNoise0.kr(1/2)*8).tanh;a=LeakDC.ar(a,0.995)};a*0.1!2}.play//
-------------------------------------------
n={|r,f,n=0,d=1|round(r**LFNoise0.ar([4,1,8,2]!d)*f,n)};play{Splay.ar(d=n.(3,0.6);Ringz.ar(d*0.01,n.(2,n.(20,400),40,20),d).mean.tanh)}
-------------------------------------------
t=LFTri;play{RLPFD.ar(Trig1.ar(SinOsc.ar(1/8)+1*1.5*t.ar([800,801])+t.ar(1e3),t.ar(1/2).range(1e-4,1/180))*2,2**t.ar(1/[3,4])*1200,0.3,0.6)}
-------------------------------------------
p={|f,a=5|GVerb.ar(LFPulse.ar(f)*a)+f};play{tanh(HPF.ar(p.(99-p.(1/2,20)*(1+p.(2,1/5))+p.(4+p.(1/2)),0.5),80,XLine.kr(4e-4,1/8,61,1,0,2)))}
------------------------------------------