diff options
author | amartin <olpc@xo-00-CE-12.localdomain> | 2007-06-28 21:25:38 (GMT) |
---|---|---|
committer | amartin <olpc@xo-00-CE-12.localdomain> | 2007-06-28 21:25:38 (GMT) |
commit | 146f6eefdb76494a1d8d9b033c64b3a686227225 (patch) | |
tree | 89485e3b794411f62e04a8739e312a6f0209f802 /Util/NoteDB.py | |
parent | 1a360aa3235c5b661f8eff0f9b57de4816e73d68 (diff) |
network
Diffstat (limited to 'Util/NoteDB.py')
-rw-r--r-- | Util/NoteDB.py | 64 |
1 files changed, 60 insertions, 4 deletions
diff --git a/Util/NoteDB.py b/Util/NoteDB.py index 2293cdc..7f3266d 100644 --- a/Util/NoteDB.py +++ b/Util/NoteDB.py @@ -2,6 +2,8 @@ import Config class PARAMETER: + PAGE_BEATS, \ + PAGE_COLOR, \ ONSET, \ PITCH, \ AMPLITUDE, \ @@ -13,7 +15,7 @@ class PARAMETER: DECAY, \ FILTERTYPE, \ FILTERCUTOFF \ - = range(11) #python-stye enum + = range(13) #python-stye enum class Note: def __init__( self, page, track, id, cs ): @@ -23,8 +25,9 @@ class Note: self.cs = cs class Page: - def __init__( self, beats ): # , tempo, insruments, color = 0 ): + def __init__( self, beats, color = 0 ): # , tempo, insruments, color = 0 ): self.beats = beats + self.color = color self.ticks = beats*Config.TICKS_PER_BEAT self.nextNoteId = 0 # first note will be 1 @@ -48,6 +51,9 @@ class PageListener: def notifyPageMove( self, which, low, high ): pass + def notifyPageUpdate( self, which, parameter, value ): + pass + class NoteListener: def notifyNoteAdd( self, page, track, id ): pass @@ -69,6 +75,8 @@ class NoteDB: self.tune = [] # list of pageIds ordered by tune + #self.beatsBefore = {} # count of beats on previous pages indexed by page id + self.listeners = [] # complete list of listeners self.pageListeners = [] # list of listeners who want page notifications self.noteListeners = [] # list of listeners who want note notifications @@ -106,6 +114,8 @@ class NoteDB: pid = self._newPage( pid, page ) at = self._insertPage( pid, after ) + #self._updateBeatsBefore( at ) + for l in self.pageListeners: l.notifyPageAdd( pid, at ) @@ -124,6 +134,8 @@ class NoteDB: for n in self.noteD[id][t].keys(): self.deleteNote( id, t, n ) + #del self.beatsBefore[id] + del self.noteD[id] del self.noteS[id] del self.parasiteD[id] @@ -136,8 +148,10 @@ class NoteDB: if not len(self.tune): self.addPage( -1, Page(beats) ) # always have at least one page safe = self.tune[0] + #self._updateBeatsBefore(0) else: safe = self.tune[max(ind-1,0)] + #self._updateBeatsBefore(low) for l in self.pageListeners: l.notifyPageDelete( which, safe ) @@ -156,11 +170,13 @@ class NoteDB: new = {} for cp in sorted: - id = self._newPage( -1, Page(self.pages[cp].beats) ) + id = self._newPage( -1, Page(self.pages[cp].beats,self.pages[cp].color) ) self._insertPage( id, after ) after = id new[cp] = id + #self._updateBeatsBefore( first ) + for l in self.pageListeners: l.notifyPageDuplicate( new, first ) @@ -190,11 +206,39 @@ class NoteDB: i += 1 self.tune = self.tune[:at] + sorted + self.tune[at:] + + #self._updateBeatsBefore( low ) for l in self.pageListeners: l.notifyPageMove( sorted, low, high ) - #-- private -------------------------------------------- + def updatePage( self, page, parameter, value ): + if parameter == PARAMETER.PAGE_BEATS: + self.pages[page].beats = value + self.pages[page].ticks = value*Config.TICKS_PER_BEAT + #self._updateBeatsBefore(self.tune.index(page)) + elif parameter == PARAMETER.PAGE_COLOR: + self.pages[page].color = value + + for l in self.pageListeners: + l.notifyPageUpdate( page, parameter, value ) + + # stream format: + # parameter id + # number of following pages (N) + # page id + # value + def updatePages( self, stream ): + i = [-1] + parameter = self._readstream(stream,i) + N = self._readstream(stream,i) + for j in range(N): + page = self._readstream(stream,i) + val = self._readstream(stream,i) + self.updatePage( page, parameter, val ) + + + #-- private -------------------------------------------- def _newPage( self, pid, page ): if pid == -1 : pid = self._genId() self.pages[pid] = page @@ -215,6 +259,14 @@ class NoteDB: return at + #def _updateBeatsBefore( self, ind ): + # if ind == 0: beats = 0 + # else: beats = self.beatsBefore[self.tune[ind-1]] + self.pages[self.tune[ind-1]].beats + # for i in range(ind, len(self.tune)): + # self.beatsBefore[self.tune[ind]] = beats + # beats += self.pages[self.tune[ind]].beats + + #======================================================= # Track Functions @@ -645,6 +697,10 @@ class NoteDB: def getPageIndex( self, page ): return self.tune.index(page) + # Not sure if this is useful! + #def getBeatsBeforePage( self, page ): + # return self.beatsBefore[page] + def getNote( self, page, track, id, listener = None ): if listener: return self.parasiteD[page][track][listener][id] |