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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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