librosa не нормализует волновой файл между [-1, 1]

#python #audio #wav #librosa

#python #Аудио #wav #librosa

Вопрос:

При передаче файла с помощью:

 librosa_audio, librosa_sample_rate = librosa.load(filename)
 

На выходе создается аудиофайл, такой, что:

Librosa audio file min~max range: -1.2105224 to 1.2942806

Файл, над которым я работаю, был получен из https://www.boomlibrary.com / и имел битовую глубину 24. Я уменьшил выборку до 16, а также увеличил выборку до 32 для работы с librosa. Оба этих файла создали одинаковый диапазон min-max после прохождения librosa.

Почему это происходит?
Есть ли способ проанализировать wav-файл в Librosa таким образом, чтобы данные попадали между [-1,1]?

Вот ссылка на файлы:

https://drive.google.com/drive/folders/12a0ii5i0ugyvdMMRX4MPfWMSN0arD0bn?usp=sharing

Комментарии:

1. Можете ли вы поделиться точным файлом, который дал вам эти результаты? Какая у вас ОС?

2. @LukaszTracewski. Спасибо за ваш ответ. Я использую Windows 10. Я также добавил ссылку на файлы, с которыми у меня возникли проблемы. Пожалуйста, дайте мне знать, если вы можете получить к ним доступ. Спасибо!

Ответ №1:

Поведение, которое вы наблюдаете, напрямую связано с повторной выборкой 22050 Hz , которую загрузка librosa выполняет по умолчанию:

 librosa.core.load(path, sr=22050)
 

Процесс передискретизации всегда влияет на звук, поэтому вы видите значения, которые не нормализованы. Вы должны сделать это самостоятельно.

Скорее всего, вы хотели прочитать аудио с собственной частотой дискретизации, и в этом случае вы должны были перейти None к sr следующему:

 librosa.core.load(path, sr=None)
 

Пример, основанный на предоставленном вами звуковом примере:

 In [4]: y, sr = librosa.load('201-AWCKARAK47Close0116BIT.wav', sr=None)
In [5]: y.max()
Out[5]: 0.9773865

In [6]: y.min()
Out[6]: -0.8358917
 

Комментарии:

1. Здравствуйте, спасибо за ваш ответ. Искренне признателен! Для дальнейшего обсуждения найдены данные из набора данных Urbansound 8k: urbansounddataset. weebly.com , не имеют проблем с пересчетом и нормализацией курса. Кажется, что скорость добавления новых файлов, которые я добавляю (sr = 96000), вызывает проблемы. Связано ли объяснение с тем, что этот sr слишком велик и приводит к непоследовательной нормализации? Спасибо!

2. Нормализация выполняется перед повторной выборкой при вас load , отсюда и эффект. Повторная выборка изменяет базовые данные по определению, поэтому вы не должны ожидать, что какая-либо нормализация останется. Не имеет значения, 22 это или 96 кГц. Я бы рекомендовал нормализовать, например, до -1 или -3 дБ после повторной выборки. Вы можете рассмотреть возможность использования, например sox ffmpeg , для пакетного преобразования параллельно всех данных. Эти инструменты обладают превосходной производительностью и обеспечивают наилучшие результаты.