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()
|