diff options
author | James <james@mackie.(none)> | 2007-03-20 20:13:44 (GMT) |
---|---|---|
committer | James <james@mackie.(none)> | 2007-03-20 20:13:44 (GMT) |
commit | 7c42950444a423c95be9f578715f9a9ebf133266 (patch) | |
tree | 0a179fd3565101834e5b9a392f8d8b8b38fc75ff /Util/ControlStream.py | |
parent | 631d817f5491db467f6184ec49fa34e235e82d8d (diff) |
init
Diffstat (limited to 'Util/ControlStream.py')
-rw-r--r-- | Util/ControlStream.py | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/Util/ControlStream.py b/Util/ControlStream.py new file mode 100644 index 0000000..bb4acf4 --- /dev/null +++ b/Util/ControlStream.py @@ -0,0 +1,135 @@ +import sys +import types +import time + +import Config + +from Util import NoteDB +from Util.CSoundNote import CSoundNote +from Util.CSoundClient import new_csound_client + +class TamTamOStream: + def __init__(self, file): + self.file = file + + def note_add(self, note): + l = ['note_add', note.id, note.page, note.track, + note.cs.onset, + note.cs.pitch, + note.cs.amplitude, + note.cs.pan, + note.cs.duration, + note.cs.trackId, + note.cs.instrumentId, + note.cs.attack, + note.cs.decay, + note.cs.reverbSend, + note.cs.filterType, + note.cs.filterCutoff, + int(note.cs.tied), + note.cs.mode] + + self.file.write( " ".join([str(i) for i in l])) + self.file.write('\n') + + def page_add(self, pid, page): + l = [ 'page_add', str(pid), str(page.beats) ] + self.file.write( " ".join([str(i) for i in l])) + self.file.write('\n') + + def tune_set(self, tune): + self.file.write('tune_set ') + self.file.write(" ".join([str(t) for t in tune])) + self.file.write('\n') + +class TamTamTable: + + def __init__(self, noteDB): + self.noteDB = noteDB + self.csnd = new_csound_client() + self.pid = {} + + def parseTable(self): + return { + 'note_set':self.note_set, + 'note_add':self.note_add, + 'page_add':self.page_add, + 'page_set':self.page_set, + 'track_inst':self.track_inst, + 'track_vol':self.track_vol, + 'tune_set':self.tune_set, + 'sleep':self.sleep, + 'quit':self.quit} + + def parseFile(self, ifile): + table = self.parseTable() + while True: + l = ifile.readline() + if l == '\n': break + if l == '': break + cmdlist = l.split() + if len(cmdlist) > 0: + if cmdlist[0] not in table: + print 'ERROR: skipping command %s not found in parse table' % cmdlist[0] + else: + table[cmdlist[0]](cmdlist[1:]) + + def note_add(self, argv): + if Config.DEBUG > 3: print 'note_add', argv + + nid = int(argv[0]) + page = self.pid[int(argv[1])] + track = int(argv[2]) + cs = CSoundNote( + int(argv[3]), + int(argv[4]), + float(argv[5]), + float(argv[6]), + float(argv[7]), + int(argv[8]), + int(argv[9]), + float(argv[10]), + float(argv[11]), + float(argv[12]), + float(argv[13]), + float(argv[14]), + bool(argv[15]), + argv[16]) + + self.noteDB.addNote(nid, page, track, cs ) + + def note_set(self, argv): + print 'note_set', argv + def page_add(self, argv): + if Config.DEBUG > 3: print 'page_add', argv + pid = int (argv[0]) + beats = int (argv[1]) + after = self.noteDB.tune[-1] + self.pid[pid] = self.noteDB.addPage(pid, NoteDB.Page(beats), after) + + def page_set(self, argv): + print 'page_set', argv + def track_inst(self, argv): + print 'track_inst not implemented yet' + def track_vol(self, argv): + print 'track_vol not implemented yet' + def tune_set(self, argv): + if Config.DEBUG > 3: print 'tune_set', argv + + if Config.DEBUG > 3: print 'ERROR: tune_set is not handled properly by mainwindow yet... skipping\n' + return + + self.noteDB.tune = [int(i) for i in argv] + pids = self.noteDB.pages.keys() + pids_to_del = [pid for pid in self.noteDB.pages.keys() + if pid not in self.noteDB.tune] + self.noteDB.deletePages( pids_to_del ) + + def sleep(self, argv): + t = float(argv[0]) + print 'sleeping for %i seconds' % t + time.sleep(t) + def quit(self, argv): + print 'quitting...' + sys.exit(0) + |