Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Util
diff options
context:
space:
mode:
authoramartin <olpc@xo-05-28-21.localdomain>2007-08-28 11:58:27 (GMT)
committer amartin <olpc@xo-05-28-21.localdomain>2007-08-28 11:58:27 (GMT)
commit82bce73030735492a017113f0486ebe8aae5fae6 (patch)
tree4e606e9e8b1183b43f90fbb572a78f3be9ee2ac7 /Util
parent66de29ff7807cbc2d0849ece71146fc9e72e1fe4 (diff)
Jam save/load
Diffstat (limited to 'Util')
-rw-r--r--Util/ControlStream.py97
-rw-r--r--Util/NoteDB.py16
2 files changed, 73 insertions, 40 deletions
diff --git a/Util/ControlStream.py b/Util/ControlStream.py
index bc58b7a..e76c19b 100644
--- a/Util/ControlStream.py
+++ b/Util/ControlStream.py
@@ -4,6 +4,8 @@ import time
import Config
+import os
+
from Util import NoteDB
from Util.CSoundNote import CSoundNote
from Util.CSoundClient import new_csound_client
@@ -39,11 +41,6 @@ class TamTamOStream:
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')
-
def track_vol(self, vols):
self.file.write('track_vol ')
self.file.write(" ".join([str(t) for t in vols]))
@@ -59,13 +56,30 @@ class TamTamOStream:
self.file.write(str(tempo))
self.file.write('\n')
- def block_add( self, typeStr, x, y, child, data ):
- l = [ "block_add", typeStr, str(x), str(y), str(child), str(data) ]
+ def block_add( self, typeStr, active, centerX, centerY, child, data ):
+ l = [ "block_add", typeStr, str(active), str(centerX), str(centerY), str(child), str(data) ]
+ self.file.write( " ".join([str(i) for i in l]))
+ self.file.write('\n')
+
+ def desktop_store( self, filename, id ):
+ self.file.write( "desktop_store %d\n" % id )
+ try:
+ file = open( filename, "r" )
+ for line in file:
+ self.file.write( line )
+ file.close()
+ except:
+ if Config.DEBUG > 3: print "ERROR:: desktop_store could not open file: " + filename
+ self.file.write( "desktop_store END\n" )
+
+ def desktop_set( self, id ):
+ self.file.write( "desktop_set %d\n" % id )
class TamTamTable:
- def __init__(self, noteDB):
+ def __init__(self, noteDB = None, jam = None ):
self.noteDB = noteDB
+ self.jam = jam
self.csnd = new_csound_client()
self.pid = {} #stream_pid : local_pid
@@ -78,17 +92,16 @@ class TamTamTable:
'track_vol':self.track_vol,
'master_vol':self.master_vol,
'tempo':self.tempo,
- 'tune_set':self.tune_set,
'block_add':self.block_add,
+ 'desktop_store':self.desktop_store,
+ 'desktop_set':self.desktop_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
+ self.file = ifile
+ for l in self.file:
cmdlist = l.split()
if len(cmdlist) > 0:
if cmdlist[0] not in table:
@@ -151,29 +164,49 @@ class TamTamTable:
def tempo(self, argv):
self.tempo = argv[0]
- 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 block_add( self, argv ):
- print "----------", argv
- type = Block.StrToClass[argv[0]]
- x = int( argv[1] )
- y = int( argv[2] )
- child = bool( argv[3] )
+ blockClass = Block.StrToClass[argv[0]]
+ active = eval( argv[1] )
+ x = int( argv[2] )
+ y = int( argv[3] )
+ child = eval( argv[4] )
data = ""
- for str in argv[4:]:
+ for str in argv[5:]:
data += str
data = eval( data )
- self.desktop.addBlock( cls, data, ( x, y ) )
+
+ if blockClass == Block.Loop:
+ data["id"] = self.pid[ data["id"] ]
+ self.jam.updateLoopImage( data["id"] )
+
+ if child:
+ block = blockClass( self.jam.getDesktop(), data )
+ self.lastBlock.addChild( block )
+ else:
+ block = self.jam.getDesktop().addBlock( blockClass, data, ( x, y ) )
+
+ if blockClass == Block.Instrument and active:
+ self.jam.getDesktop().activateInstrument( block )
+
+ self.lastBlock = block
+
+ def desktop_store( self, argv ):
+ filename = self.jam.getDesktopScratchFile( int( argv[0] ) )
+ #try:
+ if os.path.isfile( filename ):
+ os.remove( filename )
+
+ file = open( filename, "w" )
+ for line in self.file:
+ if line == "desktop_store END\n":
+ break
+ file.write( line )
+ file.close
+ #except:
+ # if Config.DEBUG > 3: print "ERROR:: desktop_store could not open file: " + filename
+
+ def desktop_set( self, argv ):
+ self.jam.setDesktop( int( argv[0] ) )
def sleep(self, argv):
t = float(argv[0])
diff --git a/Util/NoteDB.py b/Util/NoteDB.py
index 0b6c6b9..cd8d1ca 100644
--- a/Util/NoteDB.py
+++ b/Util/NoteDB.py
@@ -34,7 +34,7 @@ class Note:
self.cs = self.csStack.pop()
class Page:
- def __init__( self, beats, color = 0, instruments = False ): # , tempo, insruments, color = 0 ):
+ def __init__( self, beats, color = 0, instruments = False, local = True ): # , tempo, insruments, color = 0 ):
self.beats = beats
self.ticks = beats*Config.TICKS_PER_BEAT
@@ -45,6 +45,8 @@ class Page:
else:
self.instruments = instruments[:]
+ self.local = local # page local/global?
+
self.nextNoteId = 0 # first note will be 1
def genId( self ):
@@ -106,14 +108,12 @@ class NoteDB:
self.clipboard = [] # stores copied cs notes
self.clipboardArea = [] # stores the limits and tracks for each page in the clipboard
- def dumpToStream(self, ostream):
+ def dumpToStream( self, ostream, localOnly = False ):
for pid in self.tune:
- ostream.page_add(pid, self.pages[pid])
- for pid in self.noteD:
- for tid in xrange( len( self.noteD[pid])):
- for nid in self.noteD[pid][tid]:
- ostream.note_add(self.noteD[pid][tid][nid])
- ostream.tune_set(self.tune)
+ if not localOnly or self.pages[pid].local:
+ ostream.page_add(pid, self.pages[pid])
+ for note in self.getNotesByPage( pid ):
+ ostream.note_add( note )
#-- private --------------------------------------------
def _genId( self ):