def _addSyllableNucleiToTextgrids(wavPath, tgPath, tierName, syllableNucleiPath, outputPath): # Add syllable nuclei to textgrids for name in utils.findFiles(wavPath, filterExt=".wav", stripExt=True): tg = tgio.openTextgrid(join(tgPath, name + ".TextGrid")) entryList = tg.tierDict[tierName].entryList startTimeList = [entry[0] for entry in entryList] nucleusSyllableList = uwe_sr.toAbsoluteTime(name, syllableNucleiPath, startTimeList) flattenedSyllableList = [nuclei for sublist in nucleusSyllableList for nuclei in sublist] wavFN = join(wavPath, name + ".wav") duration = audio_scripts.getSoundFileDuration(wavFN) oom = my_math.orderOfMagnitude(len(flattenedSyllableList)) labelTemplate = "%%0%dd" % (oom + 1) entryList = [(timestamp, labelTemplate % i) for i, timestamp in enumerate(flattenedSyllableList)] print(flattenedSyllableList) tier = tgio.PointTier("Syllable Nuclei", entryList, 0, duration) tgFN = join(tgPath, name + ".TextGrid") tg = tgio.openTextgrid(tgFN) tg.addTier(tier) tg.save(join(outputPath, name + ".TextGrid"))
def _calculateSyllablesPerSecond(wavPath, syllableNucleiPath): for name in utils.findFiles(wavPath, filterExt=".wav", stripExt=True): nucleusSyllableList = uwe_sr.toAbsoluteTime(name, syllableNucleiPath, [0, ]) nucleusSyllableList = [nucleus for subList in nucleusSyllableList for nucleus in subList] numSyllables = len(nucleusSyllableList) wavFN = join(wavPath, name + ".wav") duration = audio_scripts.getSoundFileDuration(wavFN) print("%s - %.02f syllables/second" % (name, numSyllables / float(duration)))
def _calculateSyllablesPerSecondForIntervals(wavPath, tgPath, tierName, syllableNucleiPath): # Add syllable nuclei to textgrids for name in utils.findFiles(wavPath, filterExt=".wav", stripExt=True): tg = tgio.openTextGrid(join(tgPath, name + ".TextGrid")) entryList = tg.tierDict[tierName].entryList startTimeList = [entry[0] for entry in entryList] nucleusSyllableList = uwe_sr.toAbsoluteTime(name, syllableNucleiPath, startTimeList) durationList = [] for intervalList, entry in utils.safeZip( [nucleusSyllableList, entryList], enforceLength=True): start, stop = entry[0], entry[1] duration = len(intervalList) / (stop - start) durationList.append(str(duration)) print("%s - %s (syllables/second for each interval)" % (name, ",".join(durationList)))