У меня есть куча аудиоклипов автомобилей, проезжающих мимо, которые я записал для эксперимента по ML.
Эти 300 или около того клипов различаются по длине (4-10 секунд), и я хотел бы обрезать их до фиксированной длины в 3 секунды, но делать это вручную - боль в заднице , Я хочу момент, когда машина проезжает мимо микрофона (самая громкая точка), а затем обрезать его за 1,5 секунды до и после этого момента.
Я понял, как это сделать:
- Получить список амплитуд для файла
- Исправить окно продолжительностью 3 секунды, чтобы перебирать список амплитуды и начинаются в начале списка, также инициализируйте переменные maxAmp и maxIndex, чтобы отслеживать максимальную среднюю зарегистрированную амплитуду и индекс, где начинается этот сегмент
- Среднее значение всех амплитуд в окне, проверьте, больше ли максимальное максимальное значение, записанное до сих пор и если это так, замените максимальное среднее записанное
- Переместите окно вперед на 1 секунду
- Повторяйте 3 и 4, пока мы не пройдем файл
- Сохранить аудиосегмент из от maxIndex до maxIndex + 3 секунды после создания нового файла
- Сделайте это для всех файлов
Это действительно общая идея, и я знаю, что она не точна. Я подумал, что взять среднее значение для окна было бы лучше, чем просто найти место, где находится максимум, и перейти на 1,5 до и после, поскольку максимальная амплитуда может быть некоторой силой ветра в mi c в некоторой точке клипа и на самом деле это не звук проезжающей машины.
Имеет ли это смысл? Есть ли способ сделать это лучше? Какие инструменты / библиотеки могут помочь мне получить список амплитуд?
Спасибо!