Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/City/Parameters.py
blob: 000405e3aacdc2a370698c148a3cb0e4b58081e1 (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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env python
"""Describes an object for storing parameter values. 
All Controllers should write to this object. 
All Readers should read from the object"""

import random
from CsHelpers import * #import global names and functions

class Instrument():
    def __init__(self, name, x = 0, y = 0, w = 0, h = 0):
        self.name = name
        self.lastRect = pygame.Rect(x,y,w,h)
        self.Rect = pygame.Rect(x,y,w,h)
        self.image = None
        self.active_image = None
        self.inactive_image = None
        self.Touch = False
        self.active = False
    def loadImage(self, path, *scale):
        img = pygame.image.load(path)
        if scale:
            img = pygame.transform.scale(img, (img.get_width() * scale[0], img.get_height() * scale[-1]))
        img = img.convert_alpha()
        self.active_image = img
        self.Rect.size = img.get_size()
        self.lastRect.size = img.get_size()
        imgcopy = self.active_image.copy()
        imgcopy.fill((255,5,55) , None, pygame.BLEND_MIN)
        imgcopy.fill((75,75,75) , None, pygame.BLEND_ADD) 
        self.inactive_image = imgcopy
        self.deactivate()
    def activate(self):
        self.image = self.active_image
        self.active = True
        self.Touch = True
    def deactivate(self):
        self.image = self.inactive_image
        self.active = False
        self.Touch = True        
    def x(self):
        return self.Rect[0]
    def y(self):
        return self.Rect[1]
    def lastCtr(self):
        return self.lastRect.center
    def ctr(self):
        return self.Rect.center
    def __setattr__(self, attr, value):
        if attr == 'x':
            self.lastRect[0] = self.Rect[0]
            self.Rect[0] = value
            self.Touch = True
        elif attr == 'y':
            self.lastRect[1] = self.Rect[1]
            self.Rect[1] = value
            self.Touch = True
        elif attr == 'ctr':
            self.lastRect[0] = self.Rect[0]
            self.lastRect[1] = self.Rect[1]
            self.Rect.center = value
            self.Touch = True
        else: 
            self.__dict__[attr] = value
    def __repr__(self):
        return ''.join(map(str, [self.name, " Instrument at location ", (self.x(), self.y())]))


class Parameter():
    def __init__(self, name):
        self.name = name
        self.Instrumentvalues = [[Instrument(ins), 0.5] for ins in INAMES]
        self.state = False
        self.active = False
        self.correspondant = None
    def getValue(self, insname):
        for ndx in range(len(self.Instrumentvalues)):
            if self.Instrumentvalues[ndx][0].name == insname:
                return self.Instrumentvalues[ndx][1]
    def setValue(self, ins, val):
        ndx = [i[0].name for i in self.Instrumentvalues].index(ins)
        self.Instrumentvalues[ndx][1] = val        
    def __repr__(self):
        return self.name

class Perimeter():
    def __init__(self):
        self.data = {}
        for n in PNAMES:
            self.data[n] = Parameter(n)
        csoundChannels = []
    def csoundChannels(self, cs):
        self.csound = cs
        self.csoundChannels = cs.Channels
    def getValue(self, name, instrument):
        return self.data[name].getValue(instrument)
    def setValue(self, name, instrument, value):
        if name == 'Tempo':
            for i in self.data['Tempo'].Instrumentvalues:
                i[1] = value
        else:
            self.data[name].setValue(instrument, value)
            namelen = len(name)
            if  len(self.csoundChannels) > 0:
                for ch in self.csoundChannels:
                    param = ch.name[-namelen:]
                    if param == name:
                        ins = ch.name[:-len(param)]
                        if (ins == instrument and
                                (ch.direction == "input" or "bidirectional") and
                                    ch.type == "Control"):
                            self.csound.setChannelValue(ch.name, value)
    def getPlist(self):
        "returns a list of all parameters"
        return self.data.values()
    def getPdict(self):
        return self.data


if __name__ == '__main__':        
    P = Perimeter()
    print "Value for Drum density is :", P.getValue('Density', 'Drums') 
    print "setting new value"
    P.setValue('Density', 'Drums', 0.75)
    print "Value for Drum density is :", P.getValue('Density', 'Drums')
    c = check(P)
    c.setp(0.9)
    c.getp()