Как найти амплитуду файла wav в Python?
Я работаю с анализом файлов wav с использованием библиотеки librosa в python. Я использовал librosa.load() для загрузки аудиофайла. Очевидно, эта функция загружает файл wav в массив numpy с нормализованными значениями амплитуды в диапазоне от -1 до 1. Но мне нужно получить фактические значения амплитуды для обработки. Как я могу это найти?
Заранее спасибо!
2 ответа
Вы правильно заметили, что librosa всегда нормализует образцы до моно.
[-1:1]
(а также 22050 Гц). Тем не менее, это цифровой звук, поэтому его можно умножать на все, что угодно, для получения другого масштаба. Если вы настаиваете на том, чтобы ваши образцы были по шкале
-2^15
к, просто умножьте на
2^15
. Это в значительной степени означает то же самое.
Вы ничего не получите, кроме перетаскивания особенности формата кодирования аудио в свои данные.
Тем не менее, если вы этого хотите, вы можете использовать PySoundFile следующим образом:
import soundfile as sf
y, sr = sf.read('existing_file.wav', dtype='int16')
Параметр
dtype='int16'
сообщает библиотеке, что для каждого сэмпла следует использовать 16-битный формат со знаком.
Вы не можете. Как упоминал Хендрик, сигнал является цифровым, и амплитуда в файле WAV ничего не скажет вам о реальной амплитуде звуковой волны / мощности звука. Это полностью потеряно в момент оцифровки в WAV.
При этом вы можете вычислить, например, громкость, относительное восприятие мощности звука. Если вы имеете дело со слуховой системой человека, один из рекомендуемых подходов:
- Используйте шкалу лая (шкала лая лучше отражает то, как мы слышим).
- Вычислите энергию в каждом бункере.
- (Необязательно) Нормализовать на общую сумму.
Если вы не хотите вычислять это самостоятельно, посмотрите, например, YAAFE.