Mercurial > code > home > repos > light9
annotate light9/wavepoints.py @ 1832:84306c05d229
sequencer http mode: send faster (this gets 13fps)
Ignore-this: 42794350c8f87faec4392591184e8065
author | drewp@bigasterisk.com |
---|---|
date | Sat, 09 Jun 2018 18:42:06 +0000 |
parents | 4a51d4eefa95 |
children | f066d6e874db |
rev | line source |
---|---|
221
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
1 from __future__ import division |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
2 import wave, audioop |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
3 |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
4 def simp(filename, seconds_per_average=0.001): |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
5 """smaller seconds_per_average means fewer data points""" |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
6 wavefile = wave.open(filename, 'rb') |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
7 print "# gnuplot data for %s, seconds_per_average=%s" % \ |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
8 (filename, seconds_per_average) |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
9 print "# %d channels, samplewidth: %d, framerate: %s, frames: %d\n# Compression type: %s (%s)" % wavefile.getparams() |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
10 |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
11 framerate = wavefile.getframerate() # frames / second |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
12 frames_to_read = int(framerate * seconds_per_average) |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
13 print "# frames_to_read=%s" % frames_to_read |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
14 |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
15 time_and_max = [] |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
16 values = [] |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
17 count = 0 |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
18 while 1: |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
19 fragment = wavefile.readframes(frames_to_read) |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
20 if not fragment: |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
21 break |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
22 |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
23 # other possibilities: |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
24 # m = audioop.avg(fragment, 2) |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
25 # print count, "%s %s" % audioop.minmax(fragment, 2) |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
26 |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
27 m = audioop.rms(fragment, wavefile._framesize) |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
28 time_and_max.append((count, m)) |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
29 values.append(m) |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
30 count += frames_to_read |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
31 # if count>1000000: |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
32 # break |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
33 |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
34 # find the min and max |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
35 min_value, max_value = min(values), max(values) |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
36 points = [] # (secs,height) |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
37 for count, value in time_and_max: |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
38 points.append((count/framerate, |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
39 (value - min_value) / (max_value - min_value))) |
4a51d4eefa95
add wavecurve from semprini with new cmdline ui
drewp@bigasterisk.com
parents:
diff
changeset
|
40 return points |