summaryrefslogtreecommitdiffstats
path: root/jet_tools/JetCreator/JetPreview.py
diff options
context:
space:
mode:
Diffstat (limited to 'jet_tools/JetCreator/JetPreview.py')
-rwxr-xr-xjet_tools/JetCreator/JetPreview.py200
1 files changed, 200 insertions, 0 deletions
diff --git a/jet_tools/JetCreator/JetPreview.py b/jet_tools/JetCreator/JetPreview.py
new file mode 100755
index 0000000..34c16d3
--- /dev/null
+++ b/jet_tools/JetCreator/JetPreview.py
@@ -0,0 +1,200 @@
+"""
+ File:
+ JetPreview.py
+
+ Contents and purpose:
+ Plays the preview of a segment or event via the dialog box
+
+ Copyright (c) 2008 Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+"""
+
+from __future__ import with_statement
+
+import wx
+import threading
+
+from JetDefs import *
+from JetCtrls import *
+from JetFile import *
+from JetUtils import *
+from eas import *
+from JetStatusEvent import *
+
+class PreviewPlayer(wx.Frame):
+ """ Segment player """
+ def __init__ (self, play_button, segment):
+ self.segment = segment
+ self.play_button = play_button
+ self.mute_button = None
+ self.trigger_button = None
+ self.playerLock = threading.RLock()
+ self.SetKeepPlayingFlag(False)
+ self.graph = None
+
+ def SetGraphCtrl(self, graph, parentWin):
+ """ Sets the graph control for the player """
+ self.graph = graph
+ self.parentWin = parentWin
+
+ def SetGraphCallbackFct(self, ClickCallbackFct):
+ """ Sets the callback function for the graph control to update """
+ self.ClickCallbackFct = ClickCallbackFct
+
+ def GraphTriggerClip(self, sClipName, iEventId):
+ """ Triggers a clip by clicking on it """
+ with self.playerLock:
+ try:
+ self.jet.TriggerClip(iEventId)
+ return True
+ except:
+ return False
+
+ def SetMuteFlag(self, trackNum, mute):
+ """ Sets a mute flag """
+ sync = JetDefs.DEFAULT_MUTE_SYNC
+ with self.playerLock:
+ try:
+ self.jet.SetMuteFlag(trackNum, mute, sync)
+ logging.info("SetMuteFlag() Track:%d Mute:%d Sync:%d" % (trackNum, mute, sync))
+ return True
+ except:
+ return False
+
+ def TriggerClip(self, eventID):
+ """ Triggers a clip via function """
+ with self.playerLock:
+ try:
+ self.jet.TriggerClip(eventID)
+ logging.info("TriggerClip() eventID: %d" % eventID)
+ return True
+ except:
+ return False
+
+ def MuteTrackViaButton(self, button, trackNum):
+ """ Mutes a track via a button """
+ with self.playerLock:
+ self.mute_button = button
+ if button.GetLabel() == JetDefs.BUT_MUTE:
+ if self.SetMuteFlag(trackNum, True):
+ button.SetLabel(JetDefs.BUT_UNMUTE)
+ else:
+ if self.SetMuteFlag(trackNum, False):
+ button.SetLabel(JetDefs.BUT_MUTE)
+
+ def Start(self):
+ """ Starts the playback. Called as a thread from dialog boxes """
+ self.paused = False
+
+ wx.PostEvent(self.parentWin, JetStatusEvent(JetDefs.PST_PLAY, None))
+
+ # create a temporary config file, and jet output file
+ FileKillClean(JetDefs.TEMP_JET_CONFIG_FILE)
+
+ self.jet_file = JetFile(JetDefs.TEMP_JET_CONFIG_FILE, "")
+
+ self.jet_file.AddSegment(self.segment.segname,
+ self.segment.filename,
+ self.segment.start,
+ self.segment.end,
+ self.segment.length,
+ SegmentOutputFile(self.segment.segname, JetDefs.TEMP_JET_CONFIG_FILE),
+ self.segment.quantize,
+ self.segment.jetevents,
+ self.segment.dlsfile,
+ None,
+ self.segment.transpose,
+ self.segment.repeat,
+ self.segment.mute_flags)
+ userID = 0
+ dls_num = -1
+ seg_num = 0
+
+ if len(self.segment.dlsfile) > 0:
+ self.jet_file.libraries.append(self.segment.dlsfile)
+ dls_num = 0
+
+ self.jet_file.SaveJetConfig(JetDefs.TEMP_JET_CONFIG_FILE)
+ self.jet_file.WriteJetFileFromConfig(JetDefs.TEMP_JET_CONFIG_FILE)
+
+ if not ValidateConfig(self.jet_file):
+ return
+
+ self.queueSegs = []
+ self.queueSegs.append(QueueSeg(self.segment.segname, userID, seg_num, dls_num, self.segment.repeat, self.segment.transpose, self.segment.mute_flags))
+
+ self.jet = JET()
+ self.jet.eas.StartWave()
+ self.jet.OpenFile(self.jet_file.config.filename)
+
+ # queue first segment and start playback
+ index = 0
+ Queue(self.jet, self.queueSegs[index])
+
+ index += 1
+ self.jet.Play()
+
+ self.SetKeepPlayingFlag(True)
+ while self.GetKeepPlayingFlag():
+ self.jet.Render()
+ status = self.jet.Status()
+
+ # if no more segments - we're done
+ if status.numQueuedSegments == 0:
+ break
+
+ self.jet.GetAppEvent()
+
+ # if less than 2 segs queued - queue another one
+ if (index < len(self.queueSegs)) and (status.numQueuedSegments < 2):
+ Queue(self.jet, self.queueSegs[index])
+ index += 1
+
+ wx.PostEvent(self.parentWin, JetStatusEvent(JetDefs.PST_UPD_LOCATION, status.location))
+
+ SafeJetShutdown(self.playerLock, self.jet)
+
+ FileKillClean(SegmentOutputFile(self.segment.segname, JetDefs.TEMP_JET_CONFIG_FILE))
+ FileKillClean(JetDefs.TEMP_JET_CONFIG_FILE)
+ FileKillClean(self.jet_file.config.filename)
+
+ self.SetKeepPlayingFlag(False)
+
+ wx.PostEvent(self.parentWin, JetStatusEvent(JetDefs.PST_DONE, None))
+
+ wx.PostEvent(self.parentWin, JetStatusEvent(JetDefs.PST_UPD_LOCATION, 0))
+
+ def SetKeepPlayingFlag(self, val):
+ """ Sets the flag to tell us wheter to keep playing """
+ with self.playerLock:
+ self.keepPlaying = val
+
+ def GetKeepPlayingFlag(self):
+ """ Gets the keep playing flag """
+ with self.playerLock:
+ return self.keepPlaying
+
+ def Pause(self):
+ """ Pauses playback """
+ if self.jet is None:
+ return
+ if not self.paused:
+ self.jet.Pause()
+ self.paused = True
+ wx.PostEvent(self.parentWin, JetStatusEvent(JetDefs.PST_PAUSE, None))
+ else:
+ self.jet.Play()
+ self.paused = False
+ wx.PostEvent(self.parentWin, JetStatusEvent(JetDefs.PST_RESUME, None))
+