import librosa
import numpy as np
WAVFILE = "/content/spkslt_98.wav"
audio, sr = librosa.load(WAVFILE)
f0, voiced_flag, voiced_probs = librosa.pyin(y=audio,
                                             fmin=librosa.note_to_hz('C2'),
                                             fmax=librosa.note_to_hz('C7'),
                                             pad_mode='constant',
                                             n_thresholds = 10,
                                             max_transition_rate = 100,
                                             sr=sr)
onsets = librosa.onset.onset_detect(y=audio, sr=sr)

Helpers

def load_tsv(filename):
    output = []
    with open(filename) as inf:
        for line in inf.readlines():
            parts = line.strip().split("\t")
            output.append((float(parts[0]), float(parts[1]), parts[2]))
    return output
def get_detdem(tsvish):
    determiners = ["this", "that", "these", "those"]

    output = []
    for part in tsvish:
        if part[2] in determiners:
            output.append(part)
    return output

TSV data

tsvcontent = load_tsv("/content/spkslt_98.tsv")
get_detdem(tsvcontent)
[(0.78, 1.04, 'this'), (4.84, 5.05, 'that'), (21.58, 21.97, 'this')]
detdem = get_detdem(tsvcontent)
starts = np.array([x[0] for x in detdem])
ends = np.array([x[1] for x in detdem])
detdem
[(0.78, 1.04, 'this'), (4.84, 5.05, 'that'), (21.58, 21.97, 'this')]

Frames vs. times

!ffprobe -i {WAVFILE} 2>&1|grep Duration
  Duration: 00:00:27.44, bitrate: 1058 kb/s
librosa.time_to_frames(np.array([0.0, 24.62, 27.44]), sr=sr)
array([   0, 1060, 1181])
len(f0)
1182

Frames

frstarts = librosa.time_to_frames(starts, sr=sr)
frends = librosa.time_to_frames(ends, sr=sr)
frstarts, frends
(array([ 33, 208, 929]), array([ 44, 217, 946]))
for z in zip(frstarts, frends):
    print(np.nanmean(f0[z[0]:z[1]]))
193.80076757544543
172.74165512508745
201.8456084757203