Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Framework/Core/TrackPlayer.py
blob: a7e8f7ed2d7be8580ed2a88cc59b48765f2e03ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from TrackPlayerBase import TrackPlayerBase

from Framework.Generation.Generator import Generator
from Framework.Generation.Generator import GenerationParameters
from Framework.CSound.CSoundConstants import CSoundConstants

#------------------------------------------------------------------------------
# A Track is a collection of events.
# TrackPlayer allows the user to create, generate, manipulate and play Tracks
#------------------------------------------------------------------------------
class TrackPlayer( TrackPlayerBase ):
    #-----------------------------------
    # initialization
    #-----------------------------------
    def __init__( self, getTempoCallback, getBeatsPerPageCallback, playTickCallback, volumeFunctions, trackIDs ):
        TrackPlayerBase.__init__( self, getTempoCallback, getBeatsPerPageCallback, playTickCallback, volumeFunctions, trackIDs )
        
        self.trackDictionary = {} #maps trackIDs to lists of events

    #-----------------------------------
    # add/remove/update methods
    #-----------------------------------
    def addTrack( self, trackID, instrument, events = [] ):
        if ( len( events ) != 0 ) and ( trackID not in self.mutedTrackIDs ):
            self.addMultiple( events )
    
        self.trackDictionary[ trackID ] = events
        self.trackInstruments[ trackID ] = instrument
    
    def addToTrack( self, trackID, event ):
        self.add( event )
        self.trackDictionary[ trackID ].add( event )

    def addMultipleToTrack( self, trackID, events ):
        self.addMultiple( events )
        for event in events:
            self.trackDictionary[ trackID ].add( event )
    
    def removeTrack( self, trackID ):
        if self.trackDictionary.has_key( trackID ):
            self.removeMultiple( self.trackDictionary[ trackID ] )
            del self.trackDictionary[ trackID ]
    
    def removeFromTrack( self, trackID, event ):
        self.remove( event )
        self.trackDictionary[ trackID ].remove( event )
    
    def removeMultipleFromTrack( self, trackID, events ):
        self.removeMultiple( events )
        for event in events:
            self.trackDictionary[ trackID ].remove( event )
        
    def updateTrack( self, trackID, events = [] ):
        if self.trackDictionary.has_key( trackID ):
            self.removeTrack( trackID )
        
        # TODO: this stuff is temporary and should be done in Generator
        # i.e. generated notes should already have their instrument set to 
        # self.trackInstruments[ trackID ]
        if self.trackInstruments.has_key( trackID ):
            instrument = self.trackInstruments[ trackID ]
        else:
            instrument = CSoundConstants.CELLO
        for event in events:
            event.instrument = instrument
        
        self.addTrack( trackID, instrument, events )

    #-----------------------------------
    # misc methods
    #-----------------------------------    
    def getEvents( self, trackID ):
        return self.trackDictionary[ trackID ]
    
    def update( self ):
        self.clear()
        
        for trackID in self.getActiveTrackIDs():
            self.addMultiple( self.trackDictionary[ trackID ] )

    def generate( self, generationParameters = GenerationParameters() ):
        if len( self.selectedTrackIDs ) == 0:
            trackIDs = self.trackIDs
        else:
            trackIDs = self.selectedTrackIDs

        for trackID in trackIDs:
            self.updateTrack( trackID, self.generator.generate( generationParameters, trackID, self.trackDictionary ) )