Version 2, last updated by hi-pi at January 25, 2009 09:35 UTC
Dumping Song Info to XML
the idea comes from noofny, I extend it to get more song info details.
The function dumps
- the song tempo
- the tracks
- the clips of a track
- the sends of a track
- the device chain with parameters of a track
- the track parameters (mute, solo, pan, volume, output level,arm)
- the clip parameters (is_triggered, is_looping,is_playing,color, index, name, is_muted)
- the master track
- the device chain with parameters of the master track
def DumpSongDetails(self):
xmlString = "<?xml version='1.0' encoding='UTF-8'?>\n"
xmlString += "<song tempo = '"+str(self._Demo__c_instance.song().tempo)+"'>\n"
trackChannel = 0
#iterate through the tracks
for myTrack in self._Demo__c_instance.song().tracks:
trackChannel += 1
try:
myTrackMixer = myTrack.mixer_device
xmlString += "\t<track channel='" +str(trackChannel)+"' name='"+str(myTrack.name)+"' volume='"+str(myTrackMixer.volume)+"' pan='"+str(myTrackMixer.panning)+"' output_meter_level='"+str(myTrack.output_meter_level)+"' mute='"+str(myTrack.mute)+"' solo='"+str(myTrack.solo)+"' arm='"+str(myTrack.arm)+"'>\n"
clipIndex = 0
#iterate through clips of a track
for myClipSlot in myTrack.clip_slots:
clipIndex += 1
if (myClipSlot.has_clip):
try:
myClip = myClipSlot.clip
xmlString += "\t\t<clip index='"+str(clipIndex)+"' name='"+myClip.name+"' color='"+str(myClip.color_index)+"' mute='"+str(myClip.muted)+"' looping='"+str(myClip.looping)+"'playing='"+str(myClip.is_playing)+"' triggered='"+str(myClip.is_triggered)+"' />\n"
except:
self.logger.log("!! error parsingclip !!")
#get sends
for mySends in myTrackMixer.sends:
xmlString += "\t\t<sends name='"+str(mySends.name)+"' value='"+str(mySends.value)+"'>\n"
#iterate through the device chain of a track
#get the devices and the associated parameters
for myDevice in myTrack.devices:
try:
xmlString += "\t\t<device name='"+str(myDevice.name)+"'>\n"
except:
self.logger.log("!! error parsing Device !!")
for myParameter in myDevice.parameters:
try:
xmlString += "\t\t\t<parameter name='"+str(myParameter.name)+"' value='"+str(myParameter.value)+"'/>\n"
except:
self.logger.log("!! error parsing Parameter!!")
xmlString += "\t\t</device>\n"
xmlString += "\t</track>\n"
except:
self.logger.log("!! error parsing track !!")
#represent the Return Track
for myReturnTrack in self._Demo__c_instance.song().return_tracks:
try:
myReturnTrackMixer = myReturnTrack.mixer_device
xmlString += "\t<trackReturn name='"+str(myReturnTrack.name)+"' volume='"+str(myReturnTrackMixer.volume)+"' pan='"+str(myReturnTrackMixer.panning)+"' output_meter_level='"+str(myReturnTrack.output_meter_level)+"' mute='"+str(myReturnTrack.mute)+"' solo='"+str(myReturnTrack.solo)+"'>\n"
#iterate through the device chain of a track
#get the devices and the associated parameters
for myReturnDevice in myReturnTrack.devices:
try:
xmlString += "\t\t<device name='"+str(myReturnDevice.name)+"'>\n"
except:
self.logger.log("!! error parsing return Device !!")
for myReturnParameter in myReturnDevice.parameters:
try:
xmlString += "\t\t\t<parameter name='"+str(myReturnParameter.name)+"' value='"+str(myReturnParameter.value)+"'/>\n"
except:
self.logger.log("!! error parsing return Parameter!!")
xmlString += "\t\t</device>\n"
xmlString += "\t</trackReturn>\n"
except:
self.logger.log("!! error parsing return !!")
#represent the Master Track
try:
myMasterTrack = self._Demo__c_instance.song().master_track
myMasterTrackMixer = myMasterTrack.mixer_device
xmlString += "\t<trackMaster name='"+str(myMasterTrack.name)+"' volume='"+str(myMasterTrackMixer.volume)+"' pan='"+str(myMasterTrackMixer.panning)+"' output_meter_level='"+str(myMasterTrack.output_meter_level)+"'>\n"
#iterate through the device chain of a track
#get the devices and the associated parameters
for myMasterDevice in myMasterTrack.devices:
try:
xmlString += "\t\t<device name='"+str(myMasterDevice.name)+"'>\n"
except:
self.logger.log("!! error parsing return Device !!")
for myMasterParameter in myMasterDevice.parameters:
try:
xmlString += "\t\t\t<parameter name='"+str(myMasterParameter.name)+"' value='"+str(myMasterParameter.value)+"'/>\n"
except:
self.logger.log("!! error parsing return Parameter!!")
xmlString += "\t\t</device>\n"
xmlString += "\t</trackMaster>\n"
except:
self.logger.log("!! error master return !!")
xmlString += "</song>\n"
self.logger.writeXml(xmlString)