Files @ b61c2369aa08
Branch filter:

Location: light9/light9/wavepoints.py

drewp@bigasterisk.com
checkpoint show data
import wave, audioop


def simp(filename, seconds_per_average=0.001):
    """smaller seconds_per_average means fewer data points"""
    wavefile = wave.open(filename, 'rb')
    print("# gnuplot data for %s, seconds_per_average=%s" %
          (filename, seconds_per_average))
    print(
        "# %d channels, samplewidth: %d, framerate: %s, frames: %d\n# Compression type: %s (%s)"
        % wavefile.getparams())

    framerate = wavefile.getframerate()  # frames / second

    frames_to_read = int(framerate * seconds_per_average)
    print("# frames_to_read=%s" % frames_to_read)

    time_and_max = []
    values = []
    count = 0
    while True:
        fragment = wavefile.readframes(frames_to_read)
        if not fragment:
            break

        # other possibilities:
        # m = audioop.avg(fragment, 2)
        # print count, "%s %s" % audioop.minmax(fragment, 2)

        m = audioop.rms(fragment, wavefile._framesize)
        time_and_max.append((count, m))
        values.append(m)
        count += frames_to_read
        # if count>1000000:
        #     break

    # find the min and max
    min_value, max_value = min(values), max(values)
    points = []  # (secs,height)
    for count, value in time_and_max:
        points.append(
            (count / framerate, (value - min_value) / (max_value - min_value)))
    return points