Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/City/City.py
diff options
context:
space:
mode:
authorThorin <toz@thorin-kerrs-macbook-3.local>2010-03-19 03:51:27 (GMT)
committer Thorin <toz@thorin-kerrs-macbook-3.local>2010-03-19 03:51:27 (GMT)
commit76ca747b364bbfa06bf0869f7e62df2947672d48 (patch)
tree8e8dea41a08bf99af0a98dcf82e8ddcc5f95098f /City/City.py
Create repository and load
Diffstat (limited to 'City/City.py')
-rwxr-xr-xCity/City.py110
1 files changed, 110 insertions, 0 deletions
diff --git a/City/City.py b/City/City.py
new file mode 100755
index 0000000..766206d
--- /dev/null
+++ b/City/City.py
@@ -0,0 +1,110 @@
+#!/usr/bin/env python
+"""
+Turn all of this into executable functions
+Then move it to run.py
+"""
+
+from CsHelpers import *
+import CsSched, Parameters, OrcBuilder, Tracks
+import random
+
+class ScenePlayer( SceneData ):
+ def __init__(self, scene_name = 'City', key = 'A', mode = 'minor', tempo = 120, defaults = {}):
+ SceneData.__init__(self, scene_name)
+ self.tempo = tempo
+ self.Csynth = CsSched.Csound()
+ self.TimeQueue = CsSched.Sched()
+ self.Params = Parameters.Perimeter()
+ self.orc = OrcBuilder.OrcConstructor()
+ self.makeOrc()
+ self.cs = CsSched.CsoundPerformer(self.TimeQueue, self.orc, self.Csynth.csound)
+ self.Params.csoundChannels(self.cs)
+ self.loadTracks(key, mode)
+ self.setParameters(defaults)
+ def setParameters(self, pdict):
+ "dict is a dictionary in the form: {Instrument:{parameter:value}}"
+ for i in pdict:
+ for p in pdict[i]:
+ print "setting: ", p,i,pdict[i][p]
+ self.Params.setValue(p,i,pdict[i][p])
+ def makeOrc(self, sr = 22050, ksmps = 128):
+ orc = self.orc
+ orc.sr = sr
+ orc.ksmps = ksmps
+ lookuptabs = [OrcBuilder.orcLoadSamples(orc, self.Csynth, instr+"Lookup", eval("self."+instr+"AudioPath")) for instr in INAMES]
+ ftabs = [OrcBuilder.FtableBreakPoint("rvbc1", -558, -594, -638, -678, -711, -745, -778, -808, 0.8, 0.79, 0.78, 0.77, 0.76, 0.75, 0.74, 0.73),
+ OrcBuilder.FtableBreakPoint("rvbc2", -517, -540, -656, -699, -752, -799, -818, -841, 0.8, 0.79, 0.78, 0.77, 0.76, 0.75, 0.74, 0.73),
+ OrcBuilder.FtableBreakPoint("rvba1", -278, -220, -170, -122, 0.4, 0.52, 0.64, 0.76),
+ OrcBuilder.FtableBreakPoint("rvba2", -333, -263, -166, -105, 0.5, 0.52, 0.64, 0.76)]
+ orc.insertftables(*ftabs)
+ volumechans = self.commonChannels("Volume", 0.8)
+ timbrechans = self.commonChannels("Timbre", 0.5)
+ orc.insertChannels(*volumechans)
+ orc.insertChannels(*timbrechans)
+ setlevels = OrcBuilder.OrcSetLevelInstrument()
+ setlevels.effect = True
+ mixerout = OrcBuilder.OrcMixoutInstrument()
+ mixerout.effect = True
+ samplerbody = """
+ idur = p3
+ iamp = p4 * (0dbfs / 127)
+ kcps init cpsmidinn(p5)
+ isamp table p5, %s
+ a1 loscil iamp, kcps, isamp
+ a1 dcblock a1
+ kdeclick linseg 0, 0.008, 1, idur - 0.05 - 0.008, 1, 0.05, 0
+ a1 = a1 * kdeclick """
+ timbrebody = ("""
+ idur = p3
+ ires = 5.75
+ kfco expcurve %s + 0.01, 17
+ kfco = kfco * """ + str(orc.sr*0.5 * 0.45) + """ + 1200
+ a2 rezzy a1, kfco, ires
+ a1 balance a2, a1
+ a1 = a1 * 0.2 + a2 * 0.4
+ """)
+ SamplerInstruments, TimbreInstruments = [OrcBuilder.OrcInstrument(i+'Sampler') for i in INAMES], [OrcBuilder.OrcInstrument(i+'Timbre') for i in INAMES]
+ for Si, Ti in zip(SamplerInstruments, TimbreInstruments):
+ Si.insertLine(samplerbody % [x for x in [n.varname() for n in lookuptabs] if x.__contains__(Si.name[:-7])][0])
+ Ti.insertLine(timbrebody % [y for y in [j.varname() for j in timbrechans] if y.__contains__(Ti.name[:-6])][0])
+ Si.routeOut('a1', Ti, setlevels, [c for c in [v.varname() for v in volumechans] if c.__contains__(Si.name[:-7])][0])
+ Ti.routeOut('a1', mixerout, setlevels)
+ Ti.routeIn('a1')
+ Ti.effect = True
+ orc.appendInstruments(Si, Ti)
+ orc.appendInstruments(mixerout)
+ orc.prependInstrument(setlevels)
+ return True
+ def commonChannels(self, chnName, default):
+ "returns a list of channel objects for INAMES"
+ return OrcBuilder.orcChannelMaker(INAMES, chnName, init = default)
+ def loadTracks(self, key, mode):
+ "see sc below"
+ self.scale = Tracks.Scale(key, mode)
+ midifiles = ResourceList(self.MidiFilePath, ".mid")
+ for m in midifiles:
+ score = Tracks.Midi2Score(self.MidiFilePath + "/" + m)
+ track = score.midiTrack2ScoreTrack(score.getTrack(0))
+ if m.startswith('Lead'):
+ self.leadtrack = track
+ elif m.startswith('Bass'):
+ self.basstrack = track
+ elif m.startswith('Chords'):
+ self.chordstrack = track
+ elif m.startswith('Drums'):
+ self.drumstrack = track
+ else:
+ raise ValueError, "Can't match MIDI file %s to instrument" %m
+
+def makePlayer(scene):
+ "create and return a player"
+ player = Tracks.beatDebugPlayer(scene.cs, scene.TimeQueue, scene.Params, scene.scale)
+ player.setBPM(scene.tempo)
+ lead = scene.orc.nameNumber['LeadSampler']
+ bass = scene.orc.nameNumber['BassSampler']
+ chords = scene.orc.nameNumber['ChordsSampler']
+ drums = scene.orc.nameNumber['DrumsSampler']
+ player.beatInstrumentMap(1, Lead = [scene.leadtrack, lead], Bass = [scene.basstrack,bass],
+ Chords = [scene.chordstrack, chords], Drums = [scene.drumstrack, drums])
+ return player
+