Ръководство за използване на силата на SciPy и Matplotlib на Python за създаване на аудио спектрограми

Често мислим за аудио данните като просто за данни, които интерпретираме и обработваме чрез нашата слухова система, но това не трябва да е единственият начин, по който анализираме и интерпретираме аудио сигналите. Един такъв начин вместо това можем да разберем аудио данните е чрез визуални представяния на шумовете, които чуваме. Тези визуални представяния най-често се представят в диаграма на формата на вълната, където визуализираме звуковото налягане във връзка с времето.

Това представяне, макар и достатъчно, често прекалено опростява аудио данните, което е повече от просто звуково налягане във времето. Тук представяме спектрограмата. Спектрограма е представяне на честотата във времето с добавяне на амплитуда като трето измерение, обозначаващо интензитета или силата на звука на сигнала при честота и време.

Защо спектрограма?

Визуализирането на данни със спектрограма помага да се разкрият скрити прозрения в аудио данните, които може да са били по-малко очевидни в традиционните представяния на формата на вълната, което ни позволява да различим шума от истинските аудио данни, които искаме да интерпретираме. Чрез визуализиране на аудио данни по този начин можем да получим ясна картина на наличните несъвършенства или основни проблеми, което ни помага да насочваме нашия анализ и ремонт на аудиото.

Полезността на спектрограмата е най-добре подчертана чрез пример. На снимката е извадка от 125 секунди от традиционно шумен аудиозапис, взет от речта на Франклин Д. Рузвелт от 1941 г. след изненадващата атака срещу Пърл Харбър, представена като спектрограма. Този остарял аудио образец е пълен с шум и ниско качество в сравнение със съвременните аудио образци. Въпреки това все още можем да получим представа какво се случва в аудио извадката, като първите 15 секунди са въведение от водещия, по-далеч от микрофона, последвано от 20 секунди пляскане, накрая последвано от началото на Речта на Рузвелт, където можем да видим пикове в интензивността и честотата, докато тогавашният президент обявява и отговаря на атаката. Като първо визуализираме данните по този начин, получаваме представа какви подобрения могат да бъдат направени в аудиото, тъй като много от изречените думи на Рузвелт се размиват заедно в представянето, което предполага наличието на шум.

Визуализиране на Dolby.io Medida Enhance

Една такава стратегия за подобряване на качеството на тази аудио извадка е чрез използването на API за Media Enhance, присъстващ в Dolby.io. Приложният програмен интерфейс (API) Media Enhance работи за премахване на шума, изолиране на изговорения звук и коригиране на силата на звука и тона на извадката за по-модерно представяне на речта. За да използвате сами тази функция, можете да следвате стъпките, включени по-долу, или прескочете до дъното, където показваме резултатите.

За да започнем процеса на визуализация, първо се нуждаем от аудио файл, който да подобрим. Можете да използвате свои собствени или да намерите някои примери тук. Dolby.io поддържа много формати, но ние ще използваме WAV файл, за да създадем подобрена версия. Вижте урока Подобряване на медиите, за да научите как.

1 — Инсталиране и импортиране на зависимости

Има няколко Python пакета, които трябва да импортираме. Ще трябва да инсталирате numpy, matplotlib и scipy във вашата среда на Python.

# for data transformation 
import numpy as np 
# for visualizing the data 
import matplotlib.pyplot as plt 
# for opening the media file 
import scipy.io.wavfile as wavfile

2 — Четене и изрязване на файл

Използвайки функцията wavfile на SciPy, можем да извлечем съответните данни от WAV файла и да го заредим в масив от данни на NumPy, за да можем да изрежем до подходяща дължина.

Fs, aud = wavfile.read('pearl_harbor.wav') 
aud = aud[:,0] # select left channel only
first = aud[:int(Fs*125)] # trim the first 125 seconds

Ще забележите, че когато заредим WAV файла, функцията на SciPy връща два елемента Sample Rate (fs) и данните (aud). Важно е да запазите и двете стойности, тъй като ще ни трябват, за да създадем спектрограмата.

3 — Генериране на спектрограма

В този пример няма да се съсредоточим върху стиловите елементи на Matplotlib, а по-скоро ще се съсредоточим върху начертаването на спектрограмата, с допълнителните стилове като шрифтове, заглавия и цветове, достъпни с пълния артефакт на кода тук. За да начертаем спектрограмата, извикваме функцията specgram на Matplotlib заедно с функцията .show()за проектиране на графиката:

powerSpectrum, frequenciesFound, time, imageAxis = plt.specgram(first, Fs=Fs) plt.show()

Следвайки тези стъпки, трябва да видим нещо подобно на графиката по-долу, макар и съкратено без елементите за стилизиране на Matplotlib.

Когато се изобрази последователно, въздействието на API за Подобряване на медиите е очевидно в представянето на спектрограмата на пробата. Подобреният сюжет включва по-изолирани и интензивни пикове, когато Рузвелт говори, последвани от драматичен контраст в интензитета, където Dolby.io е минимизирал шума. Това води до много по-чисто аудио изживяване, тъй като думите на Рузвелт се сливат по-малко с фоновия шум, ставайки по-отчетливи и четливи за слушателя.

Заключение

Като представяме аудио данни по този начин, ние предоставяме допълнително измерение на нашия анализ, позволявайки по-изчислен подход към аудио корекции и подобряване, подчертавайки полезността на спектрограмите и визуално представяне на аудио данни. Този подход за анализ на аудио данни е използван в редица индустриални и академични приложения, включително разпознаване на реч с „повтарящи се невронни мрежи“, „изучаване и идентифициране на птичи вик“ и дори „подпомагане на глухи хора при преодоляване на говорни дефицити“. Освен това, чрез използването на Dolby.io, можем визуално да видим ефективността на функцията Подобряване и как тя е в състояние да изолира и подобри качеството на звука за по-безпроблемно слушане.

Първоначално публикувано на https://dolby.io.