mirror of
https://github.com/Molive-0/Modulin.git
synced 2026-10-05 00:01:44 +00:00
Upload a heap of files
they were on the pi so here you go lol
This commit is contained in:
+146
@@ -0,0 +1,146 @@
|
||||
#!/usr/bin/env python
|
||||
from pyo import *
|
||||
import math, time
|
||||
|
||||
pa_list_devices()
|
||||
pm_list_devices()
|
||||
#print pm_get_default_input()
|
||||
|
||||
#--Server setup
|
||||
s = Server()
|
||||
s.setMidiInputDevice(1)
|
||||
#print pm_get_default_input()
|
||||
#print s.getMidiActive()
|
||||
s.setBufferSize(1024)
|
||||
s.setDuplex(0)
|
||||
s.setOutputDevice(0)
|
||||
s.setNchnls(1)
|
||||
s.setSamplingRate(32000)
|
||||
s.boot()
|
||||
#print s.getMidiActive()
|
||||
print 'Server booted!'
|
||||
#s.amp = 0.5
|
||||
|
||||
#--TriTable import from examples (Not in normal libs?)
|
||||
class TriTable(PyoTableObject):
|
||||
def __init__(self, order=10, size=8192):
|
||||
PyoTableObject.__init__(self, size)
|
||||
self._order = order
|
||||
self._tri_table = HarmTable(self._create_list(order), size)
|
||||
self._base_objs = self._tri_table.getBaseObjects()
|
||||
self.normalize()
|
||||
|
||||
def _create_list(self, order):
|
||||
l = []
|
||||
ph = 1.0
|
||||
for i in range(1,order*2):
|
||||
if i % 2 == 0:
|
||||
l.append(0)
|
||||
else:
|
||||
l.append(ph / (i*i))
|
||||
ph *= -1
|
||||
return l
|
||||
|
||||
def setOrder(self, x):
|
||||
self._order = x
|
||||
self._tri_table.replace(self._create_list(x))
|
||||
self.normalize()
|
||||
self.refreshView()
|
||||
|
||||
@property
|
||||
def order(self):
|
||||
return self._order
|
||||
@order.setter
|
||||
def order(self, x): self.setOrder(x)
|
||||
|
||||
#--Startup noise
|
||||
sn = Sine(440).out()
|
||||
def call():
|
||||
sn.stop()
|
||||
cafter = CallAfter(call, 1)
|
||||
|
||||
#--Entire synth
|
||||
note = Notein(scale=1,poly=10)
|
||||
#note = Choice([440,220,880],4)
|
||||
#dis=note
|
||||
dis=note['pitch']
|
||||
mod = Sig(0.5)
|
||||
mod.ctrl(title='Modulation')
|
||||
#mod.setValue(0.5)
|
||||
prt = Sig(0.5)
|
||||
prt.ctrl(title="Portamento")
|
||||
porta = SigTo(value=dis,time=prt/5)
|
||||
mod5 = mod-0.5
|
||||
trmod = mod5*100
|
||||
pitch = porta - trmod
|
||||
#out = Sine(freq=pitch)
|
||||
vibin = Sig(0.0)
|
||||
vibin.ctrl(title='Vibrato')
|
||||
#vibin.setValue(0.5)
|
||||
volin = Sig(0.5)
|
||||
volin.ctrl(title='Volume')
|
||||
trvib = vibin*Sine(5)*5
|
||||
wave = pitch + trvib
|
||||
#out = Sine(wave).out()
|
||||
tri = TriTable()
|
||||
saw = SawTable()
|
||||
squ = SquareTable()
|
||||
wavetypenum = Sig(1)
|
||||
wtslmap = SLMap(1,4,'lin','value',1,'int')
|
||||
wavetypenum.ctrl([wtslmap],"Wave Type")
|
||||
type1 = Sine(wave)
|
||||
type2 = Osc(saw,wave)
|
||||
type3 = Osc(squ,wave)
|
||||
type4 = Osc(tri,wave)
|
||||
audio1 = type1 + type2 + type3 + type4
|
||||
def wavetype():
|
||||
if wavetypenum.value.value == 1:
|
||||
type1.mul = 1.0
|
||||
type2.mul = 0.0
|
||||
type3.mul = 0.0
|
||||
type4.mul = 0.0
|
||||
elif wavetypenum.value.value == 2:
|
||||
type1.mul = 0.0
|
||||
type2.mul = 1.0
|
||||
type3.mul = 0.0
|
||||
type4.mul = 0.0
|
||||
elif wavetypenum.value.value == 3:
|
||||
type1.mul = 0.0
|
||||
type2.mul = 0.0
|
||||
type3.mul = 1.0
|
||||
type4.mul = 0.0
|
||||
elif wavetypenum.value.value == 4:
|
||||
type1.mul = 0.0
|
||||
type2.mul = 0.0
|
||||
type3.mul = 0.0
|
||||
type4.mul = 1.0
|
||||
else:
|
||||
type1.mul = 1.0
|
||||
type2.mul = 0.0
|
||||
type3.mul = 0.0
|
||||
type4.mul = 0.0
|
||||
p = Pattern(wavetype, 0.4).play()
|
||||
def pstart():
|
||||
p.play()
|
||||
#CallAfter(pstart,1)
|
||||
#audio1.out()
|
||||
sabs = Abs(vibin)
|
||||
fv = sabs + volin
|
||||
cutoff = Sig(1.0)
|
||||
cutoff.ctrl(title='LPF Cutoff')
|
||||
fv5 = fv*cutoff*1000
|
||||
LPF = Tone(audio1,fv5)
|
||||
#LPF.ctrl()
|
||||
src = LPF
|
||||
#env = MidiAdsr(note['velocity'],attack=0.01,decay=0.5,sustain=0.7,release=0.25)
|
||||
#env.ctrl()
|
||||
#env.play()
|
||||
src.mul = volin*2
|
||||
src.out()
|
||||
#-- End of synth
|
||||
|
||||
print 'Devices loaded'
|
||||
print 'Starting server...'
|
||||
#scope = Scope(src)
|
||||
s.start()
|
||||
s.gui(locals())
|
||||
@@ -0,0 +1,370 @@
|
||||
#!/usr/bin/env python
|
||||
import multiprocessing
|
||||
from pyo import *
|
||||
import math
|
||||
|
||||
import Adafruit_ADS1x15
|
||||
adc = Adafruit_ADS1x15.ADS1115()
|
||||
|
||||
import Adafruit_MCP3008
|
||||
import RPi.GPIO as GPIO
|
||||
CLK = 27
|
||||
MISO = 22
|
||||
MOSI = 17
|
||||
CS1 = 8
|
||||
CS2 = 9
|
||||
mcp1 = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS1, miso=MISO, mosi=MOSI)
|
||||
mcp2 = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS2, miso=MISO, mosi=MOSI)
|
||||
|
||||
MAXADC = 26300.0
|
||||
|
||||
GPIO.setup(CS1,GPIO.OUT)
|
||||
GPIO.setup(CS2,GPIO.OUT)
|
||||
|
||||
pa_list_devices()
|
||||
#print pm_get_default_input()
|
||||
|
||||
# --TriTable import from examples-- (Not in normal libs?)
|
||||
class TriTable(PyoTableObject):
|
||||
def __init__(self, order=10, size=8192):
|
||||
PyoTableObject.__init__(self, size)
|
||||
self._order = order
|
||||
self._tri_table = HarmTable(self._create_list(order), size)
|
||||
self._base_objs = self._tri_table.getBaseObjects()
|
||||
self.normalize()
|
||||
|
||||
def _create_list(self, order):
|
||||
l = []
|
||||
ph = 1.0
|
||||
for i in range(1, order*2):
|
||||
if i % 2 == 0:
|
||||
l.append(0)
|
||||
else:
|
||||
l.append(ph / (i*i))
|
||||
ph *= -1
|
||||
return l
|
||||
|
||||
def set_order(self, x):
|
||||
self._order = x
|
||||
self._tri_table.replace(self._create_list(x))
|
||||
self.normalize()
|
||||
self.refreshView()
|
||||
|
||||
@property
|
||||
def order(self):
|
||||
return self._order
|
||||
|
||||
@order.setter
|
||||
def order(self, x): self.set_order(x)
|
||||
|
||||
# --Notes--
|
||||
notes = [65.41,
|
||||
73.42,
|
||||
82.41,
|
||||
87.31,
|
||||
98,
|
||||
110,
|
||||
123.47,
|
||||
130.81,
|
||||
146.83,
|
||||
164.81,
|
||||
174.61,
|
||||
196,
|
||||
220,
|
||||
246.94,
|
||||
261.63,
|
||||
293.66,
|
||||
329.63,
|
||||
349.23,
|
||||
392,
|
||||
440,
|
||||
493.88,
|
||||
523.25,
|
||||
587.33,
|
||||
659.25,
|
||||
698.46,
|
||||
783.99,
|
||||
880,
|
||||
987.77,
|
||||
1046.5]
|
||||
|
||||
notesFM = [87.31,
|
||||
98,
|
||||
103.83,
|
||||
116.54,
|
||||
130.81,
|
||||
138.59,
|
||||
155.56,
|
||||
174.61,
|
||||
196,
|
||||
207.65,
|
||||
233.08,
|
||||
261.63,
|
||||
277.18,
|
||||
311.13,
|
||||
349.23,
|
||||
392,
|
||||
415.3,
|
||||
466.16,
|
||||
523.25,
|
||||
554.37,
|
||||
622.25,
|
||||
698.46]
|
||||
|
||||
inputs = [
|
||||
'/m_prt',
|
||||
'/m_vibIn2',
|
||||
'/m_vibSep',
|
||||
'/m_pcSep',
|
||||
'/m_cutoff',
|
||||
'/m_res',
|
||||
'/m_distortion',
|
||||
'/m_volAffect',
|
||||
'/m_chanPan',
|
||||
'/m_dValue',
|
||||
'/m_dFeedB',
|
||||
'/m_attack',
|
||||
'/m_decay',
|
||||
'/m_sustain',
|
||||
'/m_release',
|
||||
'/m_wavetypenum',
|
||||
'/m_note',
|
||||
'/m_mod',
|
||||
'/m_vibIn',
|
||||
'/m_volIn',
|
||||
'/m_adsr',
|
||||
]
|
||||
|
||||
class Proc(multiprocessing.Process):
|
||||
def __init__(self, create):
|
||||
super(Proc, self).__init__()
|
||||
self.daemon = True
|
||||
self.create = create
|
||||
|
||||
def ribbon_sense(self):
|
||||
|
||||
self.ribbon = adc.read_adc(0, gain=1)
|
||||
self.dis.value = notesFM[int((self.ribbon/MAXADC)*len(notesFM))] # 25200
|
||||
|
||||
self.vibratoribbon = adc.read_adc(1, gain=1)
|
||||
if self.vibratoribbon < 20000.0:
|
||||
self.vibIn.value = 0.0
|
||||
else:
|
||||
self.vibIn.value = (self.vibratoribbon - 20000.0) / 1000.0
|
||||
|
||||
if self.vibratoribbon > 18000:
|
||||
self.adsr.value = 1.0
|
||||
else:
|
||||
self.adsr.value = 0.0
|
||||
|
||||
self.wheel1 = adc.read_adc(2, gain=1)
|
||||
self.volIn.value = self.wheel1/MAXADC * 2.0 - 0.5
|
||||
|
||||
self.wheel2 = adc.read_adc(3, gain=1)
|
||||
if self.wheel2 < 13380.0:
|
||||
self.mod.value = 1.0
|
||||
else:
|
||||
self.mod.value = 1.0 - ((self.wheel2-13380.0)/8720.0)
|
||||
|
||||
#GPIO.output(CS2,1)
|
||||
#GPIO.output(CS1,0)
|
||||
|
||||
#self.prt.value = mcp1.read_adc(4)/1024.0
|
||||
self.vibIn2.value = mcp1.read_adc(1)/1024.0
|
||||
self.vibSep.value = mcp1.read_adc(2)/1024.0
|
||||
self.ptSep.value = mcp1.read_adc(3)/1024.0
|
||||
self.dFeedB.value = mcp1.read_adc(0)/102.4
|
||||
self.dValue.value = mcp1.read_adc(4)/102.4
|
||||
self.chanPan.value = mcp1.read_adc(6)/1024.0
|
||||
self.distortion.value = mcp1.read_adc(7)/1024.0
|
||||
|
||||
#GPIO.output(CS1,1)
|
||||
#GPIO.output(CS2,0)
|
||||
|
||||
self.cutoff.value = mcp2.read_adc(0)/1024.0
|
||||
self.res.value = mcp2.read_adc(1)/1024.0
|
||||
self.volAffect.value = mcp2.read_adc(2)/1024.0
|
||||
self.attack.value = mcp2.read_adc(3)/1024.0
|
||||
self.decay.value = mcp2.read_adc(4)/1024.0
|
||||
self.sustain.value = mcp2.read_adc(5)/1024.0
|
||||
self.release.value = mcp2.read_adc(6)/1024.0
|
||||
self.prt.value = mcp2.read_adc(7)/1024.0
|
||||
|
||||
def multifunctions(self):
|
||||
self.type2L.mul = self.waveTypeNum
|
||||
self.type1L.mul = 0.0
|
||||
self.type3L.mul = 0.0
|
||||
self.type4L.mul = 0.0
|
||||
self.type2R.mul = self.waveTypeNum
|
||||
self.type1R.mul = 0.0
|
||||
self.type3R.mul = 0.0
|
||||
self.type4R.mul = 0.0
|
||||
|
||||
|
||||
def run(self):
|
||||
# --Server setup--
|
||||
self.server = Server(audio='jack')
|
||||
self.server.deactivateMidi()
|
||||
#self.server.setMidiInputDevice(3)
|
||||
#print pm_get_default_input()
|
||||
#print s.getMidiActive()
|
||||
self.server.setBufferSize(32)
|
||||
self.server.setDuplex(0)
|
||||
self.server.setOutputDevice(0)
|
||||
self.server.setNchnls(2)
|
||||
if self.create:
|
||||
self.server.setSamplingRate(16000)
|
||||
else:
|
||||
self.server.setSamplingRate(32000)
|
||||
self.server.boot()
|
||||
#print s.getMidiActive()
|
||||
print('Server booted!')
|
||||
self.server.amp = 0.25
|
||||
bufsize = self.server.getBufferSize()
|
||||
|
||||
if self.create: # input handling
|
||||
self.dis = SigTo(440.0, time=0.1)
|
||||
self.mod = SigTo(0.5)
|
||||
self.prt = SigTo(0.5)
|
||||
self.vibIn = SigTo(0.0)
|
||||
self.vibIn2 = SigTo(0.2)
|
||||
self.vibSep = SigTo(0.5)
|
||||
self.ptSep = SigTo(0.0)
|
||||
self.volIn = SigTo(0.8)
|
||||
self.cutoff = SigTo(1.0)
|
||||
self.res = SigTo(0.0)
|
||||
self.distortion = SigTo(0.0)
|
||||
self.volAffect = SigTo(0.0)
|
||||
self.chanPan = SigTo(0.5)
|
||||
self.dValue = SigTo(0.0)
|
||||
self.dFeedB = SigTo(2.0)
|
||||
self.attack = SigTo(0.01)
|
||||
self.decay = SigTo(0.5)
|
||||
self.sustain = SigTo(0.7)
|
||||
self.release = SigTo(0.25)
|
||||
self.waveTypeNum = SigTo(1)
|
||||
self.adsr = Sig(0.0)
|
||||
#wtSlMap = SLMap(1, 4, 'lin', 'value', 1, 'int')
|
||||
#waveTypeNum.ctrl([wtSlMap], "Wave Type")
|
||||
|
||||
self.inputlist = [
|
||||
self.dis,
|
||||
self.mod,
|
||||
self.prt,
|
||||
self.vibIn,
|
||||
self.vibIn2,
|
||||
self.vibSep,
|
||||
self.ptSep,
|
||||
self.volIn,
|
||||
self.cutoff,
|
||||
self.res,
|
||||
self.distortion,
|
||||
self.volAffect,
|
||||
self.chanPan,
|
||||
self.dValue,
|
||||
self.dFeedB,
|
||||
self.attack,
|
||||
self.decay,
|
||||
self.sustain,
|
||||
self.release,
|
||||
self.waveTypeNum,
|
||||
self.adsr,
|
||||
]
|
||||
|
||||
self.table = SharedTable(inputs, create=True, size=bufsize)
|
||||
self.recrd = TableFill(self.inputlist, self.table)
|
||||
|
||||
ribP = Pattern(self.ribbon_sense, 0.1).play()
|
||||
|
||||
else: # synth
|
||||
self.dis = TableScan(SharedTable(inputs[0], create=False, size=bufsize))
|
||||
self.mod = TableScan(SharedTable(inputs[1], create=False, size=bufsize))
|
||||
prt = TableScan(SharedTable(inputs[2], create=False, size=bufsize))
|
||||
self.vibIn = TableScan(SharedTable(inputs[3], create=False, size=bufsize))
|
||||
vibIn2 = TableScan(SharedTable(inputs[4], create=False, size=bufsize))
|
||||
vibSep = TableScan(SharedTable(inputs[5], create=False, size=bufsize))
|
||||
ptSep = TableScan(SharedTable(inputs[6], create=False, size=bufsize))
|
||||
self.volIn = TableScan(SharedTable(inputs[7], create=False, size=bufsize))
|
||||
cutoff = TableScan(SharedTable(inputs[8], create=False, size=bufsize))
|
||||
res = TableScan(SharedTable(inputs[9], create=False, size=bufsize))
|
||||
distortion = TableScan(SharedTable(inputs[10], create=False, size=bufsize))
|
||||
volAffect = TableScan(SharedTable(inputs[11], create=False, size=bufsize))
|
||||
chanPan = TableScan(SharedTable(inputs[12], create=False, size=bufsize))
|
||||
dValue = TableScan(SharedTable(inputs[13], create=False, size=bufsize))
|
||||
dFeedB = TableScan(SharedTable(inputs[14], create=False, size=bufsize))
|
||||
attack = TableScan(SharedTable(inputs[15], create=False, size=bufsize))
|
||||
decay = TableScan(SharedTable(inputs[16], create=False, size=bufsize))
|
||||
sustain = TableScan(SharedTable(inputs[17], create=False, size=bufsize))
|
||||
release = TableScan(SharedTable(inputs[18], create=False, size=bufsize))
|
||||
self.waveTypeNum = TableScan(SharedTable(inputs[19], create=False, size=bufsize))
|
||||
self.adsr = TableScan(SharedTable(inputs[20], create=False, size=bufsize))
|
||||
|
||||
# --Startup noise--
|
||||
sn = Pan(Sine(440)).out()
|
||||
Clean_objects(1, sn).start()
|
||||
functions = Pattern(self.multifunctions, 0.1).play()
|
||||
|
||||
# --Entire synth--
|
||||
porta = SigTo(value=self.dis, time=prt/5)
|
||||
pitch = porta - (self.mod-0.5)*100
|
||||
trVibL = self.vibIn*Sine((5-vibSep)*(vibIn2*5))*5
|
||||
trVibR = self.vibIn*Sine((5+vibSep)*(vibIn2*5))*5
|
||||
waveL = pitch + trVibL + (ptSep*5)
|
||||
waveR = pitch + trVibR - (ptSep*5)
|
||||
tri = TriTable()
|
||||
saw = SawTable()
|
||||
squ = SquareTable()
|
||||
self.type1L = Sine(waveL)
|
||||
self.type2L = Osc(saw, waveL)
|
||||
self.type3L = Osc(squ, waveL)
|
||||
self.type4L = Osc(tri, waveL)
|
||||
self.type1R = Sine(waveR)
|
||||
self.type2R = Osc(saw, waveR)
|
||||
self.type3R = Osc(squ, waveR)
|
||||
self.type4R = Osc(tri, waveR)
|
||||
audio1L = self.type1L + self.type2L + self.type3L + self.type4L
|
||||
audio1R = self.type1R + self.type2R + self.type3R + self.type4R
|
||||
|
||||
#waveP = Pattern(self.wave_type, 0.5).play()
|
||||
self.type1L.mul = 0.0
|
||||
self.type2L.mul = 1.0
|
||||
self.type3L.mul = 0.0
|
||||
self.type4L.mul = 0.0
|
||||
self.type1R.mul = 0.0
|
||||
self.type2R.mul = 1.0
|
||||
self.type3R.mul = 0.0
|
||||
self.type4R.mul = 0.0
|
||||
|
||||
fv = (Abs(self.vibIn) + self.volIn)*cutoff*1000
|
||||
LPF_L = MoogLP(audio1L, fv, res*2.0)
|
||||
LPF_R = MoogLP(audio1R, fv, res*2.0)
|
||||
srcL = Disto(LPF_L, distortion)
|
||||
srcR = Disto(LPF_R, distortion)
|
||||
self.env = MidiAdsr(self.adsr)#, attack=1.0)
|
||||
#env.ctrl()
|
||||
srcL.mul = (self.volIn+(trVibL*volAffect))
|
||||
srcR.mul = (self.volIn+(trVibR*volAffect))
|
||||
#mm = Mixer()
|
||||
#mm.addInput(0, srcL)
|
||||
#mm.addInput(1, srcR)
|
||||
#mm.setAmp(0, 0, 0.5)
|
||||
#mm.setAmp(1, 1, 0.5)
|
||||
LP = Pan(srcL, pan=chanPan).out()
|
||||
RP = Pan(srcR, pan=(1.0-chanPan)).out()
|
||||
LP.mul *= self.env
|
||||
RP.mul *= self.env
|
||||
srcDL = Delay(LP, dValue, dFeedB).out()
|
||||
srcDR = Delay(RP, dValue, dFeedB).out()
|
||||
#scope = Scope(LP+RP)
|
||||
# --End of synth--
|
||||
|
||||
self.server.start()
|
||||
self.server.gui(locals())
|
||||
|
||||
if __name__ == '__main__':
|
||||
analysis = Proc(create=True)
|
||||
synthesis = Proc(create=False)
|
||||
print('Devices loaded')
|
||||
print('Starting servers...')
|
||||
analysis.start()
|
||||
synthesis.start()
|
||||
@@ -0,0 +1,214 @@
|
||||
#!/usr/bin/env python
|
||||
from pyo import *
|
||||
import math, time
|
||||
import Adafruit_ADS1x15
|
||||
|
||||
adc = Adafruit_ADS1x15.ADS1115()
|
||||
|
||||
#pa_list_devices()
|
||||
#pm_list_devices()
|
||||
#print pm_get_default_input()
|
||||
|
||||
#--Server setup
|
||||
s = Server()
|
||||
s.setMidiInputDevice(3)
|
||||
#print pm_get_default_input()
|
||||
#print s.getMidiActive()
|
||||
s.setBufferSize(1024)
|
||||
s.setDuplex(0)
|
||||
s.setOutputDevice(3)
|
||||
s.setNchnls(2)
|
||||
s.setSamplingRate(32000)
|
||||
s.boot()
|
||||
#print s.getMidiActive()
|
||||
print 'Server booted!'
|
||||
s.amp = 0.25
|
||||
|
||||
#--TriTable import from examples (Not in normal libs?)
|
||||
class TriTable(PyoTableObject):
|
||||
def __init__(self, order=10, size=8192):
|
||||
PyoTableObject.__init__(self, size)
|
||||
self._order = order
|
||||
self._tri_table = HarmTable(self._create_list(order), size)
|
||||
self._base_objs = self._tri_table.getBaseObjects()
|
||||
self.normalize()
|
||||
|
||||
def _create_list(self, order):
|
||||
l = []
|
||||
ph = 1.0
|
||||
for i in range(1,order*2):
|
||||
if i % 2 == 0:
|
||||
l.append(0)
|
||||
else:
|
||||
l.append(ph / (i*i))
|
||||
ph *= -1
|
||||
return l
|
||||
|
||||
def setOrder(self, x):
|
||||
self._order = x
|
||||
self._tri_table.replace(self._create_list(x))
|
||||
self.normalize()
|
||||
self.refreshView()
|
||||
|
||||
@property
|
||||
def order(self):
|
||||
return self._order
|
||||
@order.setter
|
||||
def order(self, x): self.setOrder(x)
|
||||
|
||||
#--Startup noise
|
||||
sn = Pan(Sine(440)).out()
|
||||
def call1():
|
||||
sn.stop()
|
||||
def call2():
|
||||
LP.out()
|
||||
RP.out()
|
||||
cafter1 = CallAfter(call1, 1)
|
||||
cafter2 = CallAfter(call2, 1.5)
|
||||
|
||||
#--Notes
|
||||
notes = [65.41,73.42,82.41,87.31,98,110,123.47,130.81,146.83,164.81,174.61,196,220,246.94,261.63,293.66,329.63,349.23,392,440,493.88,523.25,587.33,659.25,698.46,783.99,880,987.77,1046.5]
|
||||
|
||||
#--Ribbon handling
|
||||
ribbon = 0
|
||||
smooth = 0.3
|
||||
note = SigTo(ribbon, time=0.1)
|
||||
|
||||
def ribbonsense():
|
||||
global ribbon
|
||||
ribbon = adc.read_adc(1,gain=2/3)
|
||||
#print ribbon
|
||||
#print (ribbon/25250.0)
|
||||
note.value = notes[int((ribbon/25250.0)*len(notes))] #25200
|
||||
ribp = Pattern(ribbonsense, 0.1).play()
|
||||
|
||||
#--Entire synth
|
||||
#note = Choice([440,220,880],4)
|
||||
#dis=note
|
||||
dis=note
|
||||
mod = Sig(0.5)
|
||||
mod.ctrl(title='Modulation')
|
||||
#mod.setValue(0.5)
|
||||
prt = Sig(0.5)
|
||||
prt.ctrl(title="Portamento")
|
||||
porta = SigTo(value=dis,time=prt/5)
|
||||
mod5 = mod-0.5
|
||||
trmod = mod5*100
|
||||
pitch = porta - trmod
|
||||
#out = Sine(freq=pitch)
|
||||
vibin = Sig(0.0)
|
||||
vibin.ctrl(title='Vibrato')
|
||||
vibsep = Sig(0.5)
|
||||
vibsep.ctrl(title='Vibrato Channel Seperation')
|
||||
ptsep = Sig(0.0)
|
||||
ptsep.ctrl(title='Vitch Channel Seperation')
|
||||
#vibin.setValue(0.5)
|
||||
volin = Sig(0.5)
|
||||
volin.ctrl(title='Volume')
|
||||
trvibL = vibin*Sine(5-vibsep)*5
|
||||
trvibR = vibin*Sine(5+vibsep)*5
|
||||
waveL = pitch + trvibL + (ptsep*5)
|
||||
waveR = pitch + trvibR - (ptsep*5)
|
||||
#out = Sine(wave).out()
|
||||
tri = TriTable()
|
||||
saw = SawTable()
|
||||
squ = SquareTable()
|
||||
wavetypenum = Sig(1)
|
||||
wtslmap = SLMap(1,4,'lin','value',1,'int')
|
||||
wavetypenum.ctrl([wtslmap],"Wave Type")
|
||||
type1L = Sine(waveL)
|
||||
type2L = Osc(saw,waveL)
|
||||
type3L = Osc(squ,waveL)
|
||||
type4L = Osc(tri,waveL)
|
||||
type1R = Sine(waveR)
|
||||
type2R = Osc(saw,waveR)
|
||||
type3R = Osc(squ,waveR)
|
||||
type4R = Osc(tri,waveR)
|
||||
audio1L = type1L + type2L + type3L + type4L
|
||||
audio1R = type1R + type2R + type3R + type4R
|
||||
def wavetype():
|
||||
if wavetypenum.value.value == 1:
|
||||
type1L.mul = 1.0
|
||||
type2L.mul = 0.0
|
||||
type3L.mul = 0.0
|
||||
type4L.mul = 0.0
|
||||
type1R.mul = 1.0
|
||||
type2R.mul = 0.0
|
||||
type3R.mul = 0.0
|
||||
type4R.mul = 0.0
|
||||
elif wavetypenum.value.value == 2:
|
||||
type1L.mul = 0.0
|
||||
type2L.mul = 1.0
|
||||
type3L.mul = 0.0
|
||||
type4L.mul = 0.0
|
||||
type1R.mul = 0.0
|
||||
type2R.mul = 1.0
|
||||
type3R.mul = 0.0
|
||||
type4R.mul = 0.0
|
||||
elif wavetypenum.value.value == 3:
|
||||
type1L.mul = 0.0
|
||||
type2L.mul = 0.0
|
||||
type3L.mul = 1.0
|
||||
type4L.mul = 0.0
|
||||
type1R.mul = 0.0
|
||||
type2R.mul = 0.0
|
||||
type3R.mul = 1.0
|
||||
type4R.mul = 0.0
|
||||
elif wavetypenum.value.value == 4:
|
||||
type1L.mul = 0.0
|
||||
type2L.mul = 0.0
|
||||
type3L.mul = 0.0
|
||||
type4L.mul = 1.0
|
||||
type1R.mul = 0.0
|
||||
type2R.mul = 0.0
|
||||
type3R.mul = 0.0
|
||||
type4R.mul = 1.0
|
||||
else:
|
||||
type1L.mul = 1.0
|
||||
type2L.mul = 0.0
|
||||
type3L.mul = 0.0
|
||||
type4L.mul = 0.0
|
||||
type1R.mul = 1.0
|
||||
type2R.mul = 0.0
|
||||
type3R.mul = 0.0
|
||||
type4R.mul = 0.0
|
||||
wavep = Pattern(wavetype, 1).play()
|
||||
def pstart():
|
||||
p.play()
|
||||
#CallAfter(pstart,1)
|
||||
#audio1.out()
|
||||
sabs = Abs(vibin)
|
||||
fv = sabs + volin
|
||||
cutoff = Sig(1.0)
|
||||
cutoff.ctrl(title='LPF Cutoff')
|
||||
fv5 = fv*cutoff*1000
|
||||
LPF_L = Tone(audio1L,fv5)
|
||||
LPF_R = Tone(audio1R,fv5)
|
||||
#LPF.ctrl()
|
||||
srcL = LPF_L
|
||||
srcR = LPF_R
|
||||
#env = MidiAdsr(note['velocity'],attack=0.01,decay=0.5,sustain=0.7,release=0.25)
|
||||
#env.ctrl()
|
||||
#env.play()
|
||||
volaffect = Sig(0.0)
|
||||
volaffect.ctrl(title='Affect Of Vibrato On Volume')
|
||||
srcL.mul = volin+(trvibL*volaffect)
|
||||
srcR.mul = volin+(trvibR*volaffect)
|
||||
mm = Mixer()
|
||||
mm.addInput(0,srcL)
|
||||
mm.addInput(1,srcR)
|
||||
mm.setAmp(0,0,0.5)
|
||||
mm.setAmp(1,1,0.5)
|
||||
chanpan = Sig(0.5)
|
||||
chanpan.ctrl(title='Channel Panning')
|
||||
glopan = Sig(0.5)
|
||||
glopan.ctrl(title='Global Panning')
|
||||
LP = Pan(mm[0],pan=(chanpan)*(1.0-glopan))
|
||||
RP = Pan(mm[1],pan=(1.0-chanpan)*(1.0-glopan))
|
||||
#-- End of synth
|
||||
|
||||
print 'Devices loaded'
|
||||
print 'Starting server...'
|
||||
#scope = Scope(src)
|
||||
s.start()
|
||||
s.gui(locals())
|
||||
@@ -0,0 +1,258 @@
|
||||
#!/usr/bin/env python
|
||||
from pyo import *
|
||||
RIBBON_MODE = 1
|
||||
|
||||
if RIBBON_MODE == 1:
|
||||
import Adafruit_ADS1x15
|
||||
adc = Adafruit_ADS1x15.ADS1115()
|
||||
|
||||
pa_list_devices()
|
||||
pm_list_devices()
|
||||
#print pm_get_default_input()
|
||||
|
||||
# --Server setup--
|
||||
s = Server()
|
||||
s.setMidiInputDevice(3)
|
||||
#print pm_get_default_input()
|
||||
#print s.getMidiActive()
|
||||
s.setBufferSize(512)
|
||||
s.setDuplex(0)
|
||||
s.setOutputDevice(1)
|
||||
s.setNchnls(2)
|
||||
s.setSamplingRate(16000)
|
||||
s.boot()
|
||||
#print s.getMidiActive()
|
||||
print('Server booted!')
|
||||
s.amp = 0.25
|
||||
|
||||
|
||||
# --TriTable import from examples-- (Not in normal libs?)
|
||||
class TriTable(PyoTableObject):
|
||||
def __init__(self, order=10, size=8192):
|
||||
PyoTableObject.__init__(self, size)
|
||||
self._order = order
|
||||
self._tri_table = HarmTable(self._create_list(order), size)
|
||||
self._base_objs = self._tri_table.getBaseObjects()
|
||||
self.normalize()
|
||||
|
||||
def _create_list(self, order):
|
||||
l = []
|
||||
ph = 1.0
|
||||
for i in range(1, order*2):
|
||||
if i % 2 == 0:
|
||||
l.append(0)
|
||||
else:
|
||||
l.append(ph / (i*i))
|
||||
ph *= -1
|
||||
return l
|
||||
|
||||
def set_order(self, x):
|
||||
self._order = x
|
||||
self._tri_table.replace(self._create_list(x))
|
||||
self.normalize()
|
||||
self.refreshView()
|
||||
|
||||
@property
|
||||
def order(self):
|
||||
return self._order
|
||||
|
||||
@order.setter
|
||||
def order(self, x): self.set_order(x)
|
||||
|
||||
|
||||
def call2():
|
||||
LP.out()
|
||||
RP.out()
|
||||
|
||||
|
||||
def ribbon_sense():
|
||||
ribbon = adc.read_adc(0, gain=2/3)
|
||||
note.value = notes[int((ribbon/25250.0)*len(notes))] # 25200
|
||||
|
||||
#vibratoribbon = adc.read_adc(1, gain=2/3)
|
||||
#vibIn.value = vibratoribbon / 1000.0
|
||||
|
||||
wheel1 = adc.read_adc(2, gain=2/3)
|
||||
volIn.value = wheel1 / 25250.0 * 1.5
|
||||
|
||||
#wheel2 = adc.read_adc(3, gain=2/3)
|
||||
#mod.value = (wheel2 - 18000) / 1000.0
|
||||
|
||||
|
||||
# --Startup noise--
|
||||
sn = Pan(Sine(440)).out()
|
||||
Clean_objects(1, sn).start()
|
||||
cAfter2 = CallAfter(call2, 1.5)
|
||||
|
||||
|
||||
# --Notes--
|
||||
notes = [65.41,
|
||||
73.42,
|
||||
82.41,
|
||||
87.31,
|
||||
98,
|
||||
110,
|
||||
123.47,
|
||||
130.81,
|
||||
146.83,
|
||||
164.81,
|
||||
174.61,
|
||||
196,
|
||||
220,
|
||||
246.94,
|
||||
261.63,
|
||||
293.66,
|
||||
329.63,
|
||||
349.23,
|
||||
392,
|
||||
440,
|
||||
493.88,
|
||||
523.25,
|
||||
587.33,
|
||||
659.25,
|
||||
698.46,
|
||||
783.99,
|
||||
880,
|
||||
987.77,
|
||||
1046.5]
|
||||
|
||||
# --Ribbon handling--
|
||||
if RIBBON_MODE == 1:
|
||||
note = SigTo(0.0, time=0.1)
|
||||
ribP = Pattern(ribbon_sense, 0.2).play()
|
||||
dis = note
|
||||
else:
|
||||
note = Notein(scale=1, poly=1)
|
||||
dis = note["pitch"]
|
||||
|
||||
# --Entire synth--
|
||||
mod = Sig(0.5)
|
||||
#mod.ctrl(title='Modulation')
|
||||
prt = Sig(0.5)
|
||||
prt.ctrl(title="Portamento")
|
||||
porta = SigTo(value=dis, time=prt/5)
|
||||
pitch = porta - (mod-0.5)*100
|
||||
vibIn = Sig(0.0)
|
||||
#vibIn.ctrl(title='Vibrato Depth')
|
||||
vibIn2 = Sig(0.2)
|
||||
vibIn2.ctrl(title='Vibrato Frequency')
|
||||
vibSep = Sig(0.5)
|
||||
vibSep.ctrl(title='Vibrato Channel Separation')
|
||||
ptSep = Sig(0.0)
|
||||
ptSep.ctrl(title='Pitch Channel Separation')
|
||||
volIn = Sig(0.5)
|
||||
#volIn.ctrl(title='Volume')
|
||||
trVibL = vibIn*Sine((5-vibSep)*(vibIn2*5))*5
|
||||
trVibR = vibIn*Sine((5+vibSep)*(vibIn2*5))*5
|
||||
waveL = pitch + trVibL + (ptSep*5)
|
||||
waveR = pitch + trVibR - (ptSep*5)
|
||||
tri = TriTable()
|
||||
saw = SawTable()
|
||||
squ = SquareTable()
|
||||
waveTypeNum = Sig(1)
|
||||
wtSlMap = SLMap(1, 4, 'lin', 'value', 1, 'int')
|
||||
waveTypeNum.ctrl([wtSlMap], "Wave Type")
|
||||
type1L = Sine(waveL)
|
||||
type2L = Osc(saw, waveL)
|
||||
type3L = Osc(squ, waveL)
|
||||
type4L = Osc(tri, waveL)
|
||||
type1R = Sine(waveR)
|
||||
type2R = Osc(saw, waveR)
|
||||
type3R = Osc(squ, waveR)
|
||||
type4R = Osc(tri, waveR)
|
||||
audio1L = type1L + type2L + type3L + type4L
|
||||
audio1R = type1R + type2R + type3R + type4R
|
||||
|
||||
|
||||
def wave_type():
|
||||
if waveTypeNum.value.value == 1:
|
||||
type1L.mul = 1.0
|
||||
type2L.mul = 0.0
|
||||
type3L.mul = 0.0
|
||||
type4L.mul = 0.0
|
||||
type1R.mul = 1.0
|
||||
type2R.mul = 0.0
|
||||
type3R.mul = 0.0
|
||||
type4R.mul = 0.0
|
||||
elif waveTypeNum.value.value == 2:
|
||||
type1L.mul = 0.0
|
||||
type2L.mul = 1.0
|
||||
type3L.mul = 0.0
|
||||
type4L.mul = 0.0
|
||||
type1R.mul = 0.0
|
||||
type2R.mul = 1.0
|
||||
type3R.mul = 0.0
|
||||
type4R.mul = 0.0
|
||||
elif waveTypeNum.value.value == 3:
|
||||
type1L.mul = 0.0
|
||||
type2L.mul = 0.0
|
||||
type3L.mul = 1.0
|
||||
type4L.mul = 0.0
|
||||
type1R.mul = 0.0
|
||||
type2R.mul = 0.0
|
||||
type3R.mul = 1.0
|
||||
type4R.mul = 0.0
|
||||
elif waveTypeNum.value.value == 4:
|
||||
type1L.mul = 0.0
|
||||
type2L.mul = 0.0
|
||||
type3L.mul = 0.0
|
||||
type4L.mul = 1.0
|
||||
type1R.mul = 0.0
|
||||
type2R.mul = 0.0
|
||||
type3R.mul = 0.0
|
||||
type4R.mul = 1.0
|
||||
else:
|
||||
type1L.mul = 1.0
|
||||
type2L.mul = 0.0
|
||||
type3L.mul = 0.0
|
||||
type4L.mul = 0.0
|
||||
type1R.mul = 1.0
|
||||
type2R.mul = 0.0
|
||||
type3R.mul = 0.0
|
||||
type4R.mul = 0.0
|
||||
|
||||
waveP = Pattern(wave_type, 1).play()
|
||||
|
||||
sAbs = Abs(vibIn)
|
||||
fv = sAbs + volIn
|
||||
cutoff = Sig(1.0)
|
||||
cutoff.ctrl(title='LPF Cutoff')
|
||||
res = Sig(0.0)
|
||||
res.ctrl(title='LPF Resonance')
|
||||
distortion = Sig(0.0)
|
||||
distortion.ctrl(title='Distortion')
|
||||
fv5 = fv*cutoff*1000
|
||||
LPF_L = MoogLP(audio1L, fv5, res*2.0)
|
||||
LPF_R = MoogLP(audio1R, fv5, res*2.0)
|
||||
srcL = Disto(LPF_L, distortion)
|
||||
srcR = Disto(LPF_R, distortion)
|
||||
#env = MidiAdsr(note['velocity'], attack=0.01, decay=0.5, sustain=0.7, release=0.25)
|
||||
#env.ctrl()
|
||||
volAffect = Sig(0.0)
|
||||
volAffect.ctrl(title='Affect Of Vibrato On Volume')
|
||||
srcL.mul = (volIn+(trVibL*volAffect))
|
||||
srcR.mul = (volIn+(trVibR*volAffect))
|
||||
mm = Mixer()
|
||||
mm.addInput(0, srcL)
|
||||
mm.addInput(1, srcR)
|
||||
mm.setAmp(0, 0, 0.5)
|
||||
mm.setAmp(1, 1, 0.5)
|
||||
chanPan = Sig(0.5)
|
||||
chanPan.ctrl(title='Channel Panning')
|
||||
LP = Pan(mm[0], pan=chanPan)
|
||||
RP = Pan(mm[1], pan=(1.0-chanPan))
|
||||
#LP.mul *= env
|
||||
#RP.mul *= env
|
||||
dValue = Sig(0.0)
|
||||
dValue.ctrl(title='Delay Offset')
|
||||
dFeedB = Sig(0.0)
|
||||
dFeedB.ctrl(title='Delay Feedback')
|
||||
srcDL = Delay(LP, dValue, dFeedB).out()
|
||||
srcDR = Delay(RP, dValue, dFeedB).out()
|
||||
# --End of synth--
|
||||
|
||||
print('Devices loaded')
|
||||
print('Starting server...')
|
||||
#scope = Scope(LP+RP)
|
||||
s.start()
|
||||
s.gui(locals())
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,13 @@
|
||||
import RPi.GPIO as GPIO
|
||||
import time
|
||||
from math import sin
|
||||
|
||||
GPIO.setmode(GPIO.BCM)
|
||||
GPIO.setup(9, GPIO.OUT)
|
||||
i = 0
|
||||
while True:
|
||||
GPIO.output(9,1)
|
||||
time.sleep((sin(i)+1)/4.0)
|
||||
GPIO.output(9,0)
|
||||
time.sleep((sin(i)+1)/4.0)
|
||||
i+=1
|
||||
Binary file not shown.
@@ -0,0 +1,46 @@
|
||||
import RPi.GPIO as GPIO
|
||||
import time
|
||||
|
||||
GPIO.setmode(GPIO.BCM)
|
||||
GPIO.setup(21, GPIO.OUT)
|
||||
GPIO.setup(20, GPIO.OUT)
|
||||
GPIO.setup(16, GPIO.OUT)
|
||||
GPIO.setup(12, GPIO.OUT)
|
||||
GPIO.setup(1, GPIO.OUT)
|
||||
GPIO.setup(7, GPIO.OUT)
|
||||
GPIO.setup(8, GPIO.OUT)
|
||||
GPIO.setup(25, GPIO.OUT)
|
||||
GPIO.setup(21, GPIO.OUT)
|
||||
GPIO.setup(23, GPIO.OUT)
|
||||
GPIO.setup(10, GPIO.OUT)
|
||||
GPIO.setup(15, GPIO.OUT)
|
||||
GPIO.setup(14, GPIO.OUT)
|
||||
while True:
|
||||
GPIO.output(21,1)
|
||||
GPIO.output(20, 1)
|
||||
GPIO.output(16, 1)
|
||||
GPIO.output(12, 1)
|
||||
GPIO.output(1, 1)
|
||||
GPIO.output(7, 1)
|
||||
GPIO.output(8, 1)
|
||||
GPIO.output(25, 1)
|
||||
GPIO.output(21, 1)
|
||||
GPIO.output(23, 1)
|
||||
GPIO.output(10, 1)
|
||||
GPIO.output(15, 1)
|
||||
GPIO.output(14, 1)
|
||||
time.sleep(1)
|
||||
GPIO.output(21,0)
|
||||
GPIO.output(20, 0)
|
||||
GPIO.output(16, 0)
|
||||
GPIO.output(12, 0)
|
||||
GPIO.output(1, 0)
|
||||
GPIO.output(7, 0)
|
||||
GPIO.output(8, 0)
|
||||
GPIO.output(25, 0)
|
||||
GPIO.output(21, 0)
|
||||
GPIO.output(23, 0)
|
||||
GPIO.output(10, 0)
|
||||
GPIO.output(15, 0)
|
||||
GPIO.output(14, 0)
|
||||
time.sleep(1)
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+147
@@ -0,0 +1,147 @@
|
||||
#!/usr/bin/env python
|
||||
from pyo import *
|
||||
import math, time
|
||||
|
||||
#pa_list_devices()
|
||||
#pm_list_devices()
|
||||
print pm_get_default_input()
|
||||
|
||||
#Server setup
|
||||
s = Server()
|
||||
s.setMidiInputDevice(3)
|
||||
#print pm_get_default_input()
|
||||
#print s.getMidiActive()
|
||||
s.setBufferSize(256)
|
||||
s.setDuplex(0)
|
||||
s.setOutputDevice(0)
|
||||
s.setNchnls(1)
|
||||
#s.setSamplingRate()
|
||||
s.boot()
|
||||
#print s.getMidiActive()
|
||||
print 'Server booted!'
|
||||
s.amp = 0.5
|
||||
|
||||
#TriTable import from examples (Not in normal libs?)
|
||||
class TriTable(PyoTableObject):
|
||||
def __init__(self, order=10, size=8192):
|
||||
PyoTableObject.__init__(self, size)
|
||||
self._order = order
|
||||
self._tri_table = HarmTable(self._create_list(order), size)
|
||||
self._base_objs = self._tri_table.getBaseObjects()
|
||||
self.normalize()
|
||||
|
||||
def _create_list(self, order):
|
||||
l = []
|
||||
ph = 1.0
|
||||
for i in range(1,order*2):
|
||||
if i % 2 == 0:
|
||||
l.append(0)
|
||||
else:
|
||||
l.append(ph / (i*i))
|
||||
ph *= -1
|
||||
return l
|
||||
|
||||
def setOrder(self, x):
|
||||
self._order = x
|
||||
self._tri_table.replace(self._create_list(x))
|
||||
self.normalize()
|
||||
self.refreshView()
|
||||
|
||||
@property
|
||||
def order(self):
|
||||
return self._order
|
||||
@order.setter
|
||||
def order(self, x): self.setOrder(x)
|
||||
|
||||
#--Startup noise
|
||||
sn = Sine(440).out()
|
||||
def call():
|
||||
sn.stop()
|
||||
cafter = CallAfter(call, 1)
|
||||
|
||||
#--Entire synth
|
||||
note = Notein(scale=1,poly=1)
|
||||
#note = Choice([440,220,880],4)
|
||||
#dis=note
|
||||
dis=note['pitch']
|
||||
mod = Sig(0.5)
|
||||
mod.ctrl(title='Modulation')
|
||||
#mod.setValue(0.5)
|
||||
prt = Sig(0.5)
|
||||
prt.ctrl(title="Portamento")
|
||||
porta = SigTo(value=dis,time=prt/5)
|
||||
mod5 = mod-0.5
|
||||
trmod = mod5*100
|
||||
pitch = porta - trmod
|
||||
#out = Sine(freq=pitch)
|
||||
vibin = Sig(0.0)
|
||||
vibin.ctrl(title='Vibrato')
|
||||
#vibin.setValue(0.5)
|
||||
volin = Sig(1.0)
|
||||
volin.ctrl(title='Volume')
|
||||
trvib = vibin*Sine(5)*5
|
||||
wave = pitch + trvib
|
||||
#out = Sine(wave).out()
|
||||
tri = TriTable()
|
||||
saw = SawTable()
|
||||
squ = SquareTable()
|
||||
wavetypenum = Sig(1)
|
||||
wtslmap = SLMap(1,4,'lin','value',1,'int')
|
||||
wavetypenum.ctrl([wtslmap],"Wave Type")
|
||||
type1 = Sine(wave)
|
||||
type2 = Osc(saw,wave)
|
||||
type3 = Osc(squ,wave)
|
||||
type4 = Osc(tri,wave)
|
||||
audio1 = type1 + type2 + type3 + type4
|
||||
def wavetype():
|
||||
if wavetypenum.value.value == 1:
|
||||
type1.mul = 1.0
|
||||
type2.mul = 0.0
|
||||
type3.mul = 0.0
|
||||
type4.mul = 0.0
|
||||
elif wavetypenum.value.value == 2:
|
||||
type1.mul = 0.0
|
||||
type2.mul = 1.0
|
||||
type3.mul = 0.0
|
||||
type4.mul = 0.0
|
||||
elif wavetypenum.value.value == 3:
|
||||
type1.mul = 0.0
|
||||
type2.mul = 0.0
|
||||
type3.mul = 1.0
|
||||
type4.mul = 0.0
|
||||
elif wavetypenum.value.value == 4:
|
||||
type1.mul = 0.0
|
||||
type2.mul = 0.0
|
||||
type3.mul = 0.0
|
||||
type4.mul = 1.0
|
||||
else:
|
||||
type1.mul = 1.0
|
||||
type2.mul = 0.0
|
||||
type3.mul = 0.0
|
||||
type4.mul = 0.0
|
||||
p = Pattern(wavetype, 0.4).play()
|
||||
def pstart():
|
||||
p.play()
|
||||
#CallAfter(pstart,1)
|
||||
#audio1.out()
|
||||
sabs = Abs(vibin)
|
||||
fv = sabs + volin
|
||||
cutoff = Sig(1.0)
|
||||
cutoff.ctrl(title='LPF Cutoff')
|
||||
fv5 = fv*cutoff*1000
|
||||
LPF = Tone(audio1,fv5)
|
||||
#LPF.ctrl()
|
||||
src = LPF
|
||||
env = MidiAdsr(note['velocity'],attack=0.01,decay=0.5,sustain=0.7,release=0.5)
|
||||
env.ctrl()
|
||||
#env.play()
|
||||
src.mul = env*volin
|
||||
|
||||
src.out()
|
||||
#-- End of synth
|
||||
|
||||
print 'Devices loaded'
|
||||
print 'Starting server...'
|
||||
#scope = Scope(out)
|
||||
s.start()
|
||||
s.gui(locals())
|
||||
@@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env python
|
||||
from pyo import *
|
||||
import math, time
|
||||
import Adafruit_ADS1x15
|
||||
|
||||
RESIST = 1000000
|
||||
|
||||
adc = Adafruit_ADS1x15.ADS1115()
|
||||
|
||||
#--Server setup
|
||||
#pa_list_devices()
|
||||
s = Server()
|
||||
s.setBufferSize(1024)
|
||||
s.setDuplex(0)
|
||||
s.setOutputDevice(3)
|
||||
s.setNchnls(1)
|
||||
s.setSamplingRate(32000)
|
||||
s.boot()
|
||||
print 'Server booted!'
|
||||
s.amp = 0.5
|
||||
|
||||
notes = [65.41,
|
||||
73.42,
|
||||
82.41,
|
||||
87.31,
|
||||
98,
|
||||
110,
|
||||
123.47,
|
||||
130.81,
|
||||
146.83,
|
||||
164.81,
|
||||
174.61,
|
||||
196,
|
||||
220,
|
||||
246.94,
|
||||
261.63,
|
||||
293.66,
|
||||
329.63,
|
||||
349.23,
|
||||
392,
|
||||
440,
|
||||
493.88,
|
||||
523.25,
|
||||
587.33,
|
||||
659.25,
|
||||
698.46,
|
||||
783.99,
|
||||
880,
|
||||
987.77,
|
||||
1046.5]
|
||||
|
||||
ribbon = 0
|
||||
smooth = 0.3
|
||||
ribbon_s = SigTo(ribbon, time=0.25)
|
||||
saw = SawTable()
|
||||
se = Osc(saw,ribbon_s)
|
||||
#se2 = Osc(saw,ribbon_s+5)
|
||||
def ribbonsense():
|
||||
global ribbon
|
||||
ribbon = adc.read_adc(1)#(smooth*ribbon)+((1-smooth)*adc.read_adc(1))
|
||||
#if (ribbon < 4000) and se.mul == 0.0:
|
||||
# ribbon = adc.read_adc(1)
|
||||
#print ribbon
|
||||
#ribbon = (ribbon*RESIST)/(65535.01-ribbon)
|
||||
#ribbon = round(ribbon/10000)*100
|
||||
ribbon_s.value = notes[int(ribbon/1000)]
|
||||
#ribbon_s.mul = 0.01
|
||||
if ribbon > 4000:
|
||||
#se.mul = 0.0
|
||||
pass
|
||||
else:
|
||||
se.mul = 1.0
|
||||
#print ribbon
|
||||
#print se.mul
|
||||
#print ribbon/100
|
||||
p = Pattern(ribbonsense, 0.1).play()
|
||||
se.out()
|
||||
#se2.out()
|
||||
|
||||
s.start()
|
||||
s.gui(locals())
|
||||
Binary file not shown.
Reference in New Issue
Block a user