Уровень звука WAV слишком велик - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть монофонический wav-файл для звука «разбитого стекла». Когда я графически отображаю его уровни в python с помощью библиотеки librosa, он показывает очень большой диапазон амплитуд, между + / 20000 вместо +/- 1. Когда я открываю тот же файл WAV с Audacity, уровни находятся между +/- 1 .

Мой вопрос заключается в том, что создает эту разницу в отображаемых уровнях амплитуды и как я могу исправить ее в Python? Масштабирование MinMax искажает звук, и я хочу избежать его, если это возможно.

Код:

from scipy.io import wavfile
fs1, glass_break_data = wavfile.read('test_break_glass_normalized.wav')

%matplotlib inline
import matplotlib.pyplot as plt
import librosa.display

sr=44100
x = glass_break_data.astype('float')

plt.figure(figsize=(14, 5))
librosa.display.waveplot(x, sr=sr)

Это изображения из блокнота и Audacity:

enter image description here

enter image description here

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

WAV обычно использует целочисленные значения для представления отдельных выборок, а не чисел с плавающей запятой. Таким образом, то, что вы видите на графике librosa, является точным для аудиофайла 16 бит / семпл.

Такие программы, как VL C, показывают формат, включая битовую глубину на семпл в их информационный диалог, так что вы можете легко проверить. Другим способом проверки формата может быть использование soxi или ffmpeg .

Audacity нормализует все до значений с плавающей запятой в диапазоне от -1 до 1 - он не показывает вам исходный формат.

То же самое верно для librosa.load() - оно также нормализуется до [-1,1]. wavfile.read() с другой стороны, не нормализуется. Для получения дополнительной информации о способах чтения аудио в формате WAV см., Например, этот ответ .

0 голосов
/ 25 апреля 2020

Если вы используете librosa.load вместо wavfile.read, он нормализует диапазон до -1, 1

glass_break_data, fs1 = librosa.load('test_break_glass_normalized.wav')
...