#!/usr/bin/env python3

import sys
import os
import signal
from math import sqrt

try:
    estmoduledir = os.environ["EST_PYTHON"]
except KeyError:
    print("\n** environment variable EST_PYTHON is unset **\n")

sys.path.append( estmoduledir )
import est

beep_threshold = 25
beep_count_required = 4
beep_skip = 0.5
window = 0.1
espscol = 23


labdir = sys.argv[1]
wavdir = sys.argv[2]

if not os.path.isdir(labdir) or not os.path.isdir(wavdir):
    print("Usage: {} split_lab_dir split_wav_dir *.d".format(argv[0]))
    exit(1)

for file in sys.argv[3:]:
    wave = est.Wave()

    base = os.path.splitext(os.path.basename(file))[0]
    labelfile = "%s/%s.lab" % (labdir,base)
    
    wave.load(file)

    lfd = open(labelfile,"w")
    lfd.write("separator ;\n")
    lfd.write("#\n")


    window_size = window * wave.sample_rate()
    frames = wave.num_samples()
    start_frame = 0.5 * window_size
    end_frame =  frames - start_frame


    c = start_frame
    file_count = 0

    while c < end_frame:

        # beep detection based on average abs power.

        p = 0
        for i in range( -0.5 * window_size,
                         0.5*  window_size):
            p = p + abs(wave.a(c+i))
        p = p / float(window_size)
        if p > beep_threshold:
            beep_count = beep_count +1
            if beep_count >= beep_count_required:
                file_count = file_count + 1
                subwavfile = "%s/%s_%3.3d" % (wavdir,base,file_count)
                line = "%f %d text ;  file %s ;\n" % (float(c)/wave.sample_rate()-beep_skip , espscol, subwavfile)
                lfd.write(line)
                line = "%f %d beep ;  file %s ;\n" % (float(c)/wave.sample_rate()+beep_skip , espscol, ".dummy")
                lfd.write(line)
                beep_count = 0
        else:
            beep_count = 0

        c = c + window*wave.sample_rate()

    lfd.close()
                                    