У меня есть несколько аудиоданных, загруженных в массив numpy, и я хочу сегментировать данные путем нахождения тихих частей, т.е. частей, где амплитуда звука ниже определенного порогового значения в течение периода времени.
Очень простой способ сделать это примерно так:
values = ''.join(("1" if (abs(x) < SILENCE_THRESHOLD) else "0" for x in samples))
pattern = re.compile('1{%d,}'%int(MIN_SILENCE))
for match in pattern.finditer(values):
# code goes here
В приведенном выше коде найдите части, где есть как минимум MIN_SILENCE последовательные элементы, меньшие, чем SILENCE_THRESHOLD.
Теперь, очевидно, приведенный выше код ужасно неэффективен и страшное злоупотребление регулярными выражениями. Есть ли другой способ, который более эффективен, но все же приводит к одинаковому простому и коротким кодам?