Skip to content

Commit 856a7fe

Browse files
committed
Tweaks to resample()
1 parent c49d64a commit 856a7fe

File tree

3 files changed

+57
-9
lines changed

3 files changed

+57
-9
lines changed

datamapper.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,9 @@ def sample_rate(self):
9898
def sample_rate(self, r):
9999
self._sample_rate = r
100100

101-
def resample(self, factor):
102-
for dob in self:
103-
print 'DOB:', dob
104-
dob.resample(factor)
101+
def resample(self, factor):
102+
for dob in self:
103+
dob.resample(factor)
105104

106105
def append(self, dob):
107106
assert isinstance(dob, DataObject), "You've got a " + str(type(dob)) + ", not a DataObject"
@@ -256,9 +255,9 @@ def trim_to(self, length):
256255
for ts in self.values():
257256
ts.replace_data(ts[:length])
258257

259-
def resample(self, factor):
260-
for ts in self.values():
261-
ts.resample(factor)
258+
def resample(self, factor):
259+
for ts in self.values():
260+
ts.resample(factor)
262261

263262
def __setitem__(self, key, ts):
264263
assert(isinstance(ts, TimeSeries))

geothermophone.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
''' This is a parser for a particular project (the geothermophone). The data
2+
is already in optimized form (a list of dicts from varname to a list of values).
3+
'''
4+
from datamapper import DataObjectCollection, DataObject, TimeSeries
5+
from dataparser import DataParser
6+
from renderers.midirenderers import MidiCCRenderer
7+
from renderers.visual_renderers import LineGraphRenderer
8+
9+
10+
class GriddedDataParser(DataParser):
11+
''' Convert the input data into a DataObjectCollection and return it. '''
12+
13+
def __init__(self):
14+
15+
self.file = open(
16+
'/Users/egg/Documents/Work In Progress/geothermophone/final_values/final_values.txt')
17+
18+
def parse(self):
19+
d = eval(self.file.readline().strip())
20+
doc = DataObjectCollection(sample_rate=1 / 3.0)
21+
for i, octant in enumerate(d):
22+
do = DataObject()
23+
for varname, values in octant.items():
24+
ts = TimeSeries(values)
25+
do[varname] = ts
26+
doc.append(do)
27+
return doc
28+
29+
30+
def build_data():
31+
parser = GriddedDataParser()
32+
doc = parser.parse()
33+
doc.resample(.1403) # Trial and error to get 30 min of data
34+
35+
# renderer = LineGraphRenderer()
36+
# plot = renderer.render(doc, showplot=True, render_separate=True)
37+
38+
# Produce MIDI data
39+
renderer = MidiCCRenderer()
40+
# divide 20 by 1.782
41+
renderer.tempo = 20
42+
var_to_midi_map = {'air': 74,
43+
'prate': 75,
44+
'rhum': 76,
45+
'wspd': 77}
46+
transformed_doc = doc.transform(var_to_midi_map, renderer)
47+
renderer.render(transformed_doc,
48+
output_file='/Users/egg/Documents/Work In Progress/geothermophone/midi/geothermophone.mid')
49+
50+
build_data()
51+

renderers/midirenderers.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,6 @@ def render(self, doc, output_file='output.mid'):
5656
for i, val in enumerate(time_series):
5757
time = float(i) / time_series.sample_rate
5858
logging.debug(str(time) + ' ' + str(val))
59-
#MyMIDI.addNote(track,channel,pitch,time,duration,volume)
60-
#print 'adding: {} {} {} {} {}'.format(track, channel+1, time*8, cc_number, val)
6159
MyMIDI.addControllerEvent(track, channel, time, cc_number, int(val))
6260

6361
# And write it to disk.

0 commit comments

Comments
 (0)