Как сделать спектр звука

Как сделать спектр звука

Эффект Спектр аудио Audio spectrum After Effects
Служит для применения эффекта спектра аудио к слою видео для отображения спектра аудио слоя, содержащего аудио (а также, если применимо, видео). Эффект служит для отображения величины уровней аудио на частотах в диапазоне, заданном с помощью параметров «Начальная частота» и «Конечная частота». Этот эффект позволяет отобразить спектр аудио различными способами, включая контур маски.

Слой аудио, который необходимо использовать в качестве входа.
«Начальная точка», «Конечная точка»

Определяет позицию начала и окончания спектра, если для параметра «Контур» задано значение «Нет».
Контур

Путь маски, вдоль которого следует отображаться спектр аудио.
Использовать путь в полярных координатах

Контур начинается с отдельной точки и принимает вид радиальной диаграммы.
«Начальная частота», «Конечная частота»

Более низкие и высокие частоты для отображения (в герцах).
Полосы частот

Число полос частот, на которое следует разделить отображаемые частоты.
Максимальная высота

Максимальная высота (в пикселях) отображаемой частоты.
Длительность аудиозаписи

Длительность аудио в миллисекундах, которая используется для вычисления спектра.
Смещение аудио

Смещение по времени в миллисекундах, используемое для получения аудио.
Толщина

Толщина полос.
Мягкость

Степень размытия полос.
«Внутренний цвет», «Внешний цвет»

Внутренние и внешние цвета полос.
Наложение перекрывающихся цветов

Указывает, что перекрывающиеся спектры накладываются.
Интерполяция тона

Если значение больше 0, то отображаемые частоты поворачиваются через цветовое пространство оттенков.
Динамическая фаза тона

Если флажок установлен, а значение параметра «Интерполяция тона» больше 0, значение «Начальный цвет» смещается к максимальной частоте в диапазоне отображаемых частот. Этот параметр позволяет оттенку следовать за базовой частотой спектра, отображаемой по мере изменения.
Симметрия цвета

Если флажок установлен и интерполяция цветового тона больше 0, начальный и конечный цвета будут одинаковыми. Этот параметр обеспечивает непрерывность цвета на закрытых контурах.
Параметры отображения

Определяет, следует ли отображать частоты с использованием следующих параметров: «Цифровой», «Аналоговые линии» или «Аналоговые точки».
Параметры — по бокам

Определяет, следует ли отображать спектр над контуром (сторона А), под контуром (сторона B) или и там, и там (сторона А и B).
Усреднение продолжительности

Указывает, что аудиочастоты усреднены для уменьшения произвольного выбора.
Разместить на оригинале

Если параметр выбран, отображается исходный слой с примененным эффектом.

Источник

Рисуем звук

Пять лет назад на Хабре была опубликована статья «Печать и воспроизведение звука на бумаге» — о системе создания и проигрывания спектрограмм. Затем, полтора года назад Meklon опубликовал квест, в котором такая чёрно-белая логарифмическая спектрограмма стала одним из этапов. По авторскому замыслу, её надо было распечатать на принтере, отсканировать смартфоном с приложением-проигрывателем, и воспользоваться таким образом «надиктованным» паролем.
Как сделать спектр звука

У меня в тот момент не было в досягаемости ни принтера, ни смартфона, так что меня заинтересовали два аспекта задачи:

Готовых скриптов для воспроизведения спектрограмм я не нашёл, хотя для обратного преобразования — звука в спектрограмму — легко * находятся примеры, благодаря тому, что функциональность AnalyserNode.getByteFrequencyData() встроена в Web Audio API. А вот для преобразования массива частот в массив PCM для воспроизведения — не обойтись без реализации в скрипте обратного преобразования Фурье (DFT).

*В первом примере в качестве аудиозаписи для спектрального анализа предлагается фрагмент трека » Как сделать спектр звука» от Aphex Twin: в качестве секретного послания музыкант встроил в этот трек селфи, проявляющееся на логарифмической спектрограмме. К сожалению, в этом примере спектрограмма отображается линейно, так что лицо получается растянутым вверху и сжатым внизу.

По поводу реализации DFT сразу ясно, что такая «числодробилка» на чистом JavaScript будет работать медленно и печально; к счастью, я обнаружил готовый порт библиотеки FFTW («Fastest Fourier Transform in the West») на asm.js — это форма представления низкоуровневого кода, обычно написанного на Си, которую современные браузеры обещают выполнять со скоростью почти как у скомпилированного в машинный код. Обвязку для FFTW, превращающую чёрно-белое изображение в WAV-файл, я взял из ARSS и собственноручно переписал на JavaScript. ARSS принимает изображения, инвертированные по сравнению с PhonoPaper, и я не стал это менять.

Результатом вы можете полюбоваться на tyomitch.github.io/#meklon.png

Внизу видны повторяющиеся горизонтальные полосы — форманты, по положению которых распознаются гласные. Вверху — вертикальные «всплески», соответствующие шумным согласным: более широкие — щелевым (фрикативным), более узкие — смычным. Сонорным же согласным ([р] и [л]) соответствуют «облака» в средних частотах.

Как сделать спектр звука

Для того, чтобы можно было поиграть со спектрограммой, я приделал примитивную рисовалку, почти целиком скопированную из туториала по рисованию на canvas. Кнопка «Copy» позволяет перевести изображение в красный канал (он игнорируется синтезатором) и попытаться «обвести» звуки.

Википедия пишет: «Считается, что для характеристики звуков речи достаточно выделения четырёх формант». Обведём форманты F2-F4 (F1 почему-то игнорируется синтезатором), и убедимся, что гласные вполне распознаются:

Как сделать спектр звука

Затем обведём шумные согласные: аффриката [ч] — это [т], плавно переходящее в [ш]; а звонкое [д] от глухого [т] отличается наличием среднечастотных формант. Теперь уже можно различить цифры «шесть» и «де’ить»:

Как сделать спектр звука

Добавляем тёмно-серым сонорные согласные: заодно заметим, что [р] немного «приподнимает» гласные форманты, а [л] — наоборот, опускает.

Как сделать спектр звука

Остались недорисованными только губные согласные [б] и [в], но и без них пароль более-менее ясен.

А можно ли нарисовать звук с чистого листа, не обводя спектрограмму аудиозаписи? Скажу честно, у меня не получилось. Может быть, хотите попробовать сами?

Источник

Еще один способ разложения сигнала в спектр

Привет всем, здесь я хочу рассказать про алгоритм анализа звукового сигнала, позволяющий разобрать сигнал на отдельные волны, конечно 100% точности он не дает, но тем не менее результат на мой взгляд довольно неплох.

Лучше всего видна работа на какой-нибудь музыке:

И ссылки на другие примеры разных жанров. Metaldeth-Tornado of souls:


Итак для разложения нужно сделать следующие шаги:

— Из исходного сигнала нужно получить 8 промежуточных сигналов;
— Из этих промежуточных сигналов и исходного сигнала нужно получить 8 сигналов — слоев, которые можно будет разобрать на отдельные волны;
— Посчитать сколько в каждом слое волн и какая у них амплитуда.

Теперь подробнее о каждом этапе: для того чтобы получить промежуточный сигнал нужно взять производную от исходного сигнала. По сути это производная дискретной функции. Чтобы найти ее для каждого момента исходного сигнала нужно задать 1 параметр: период за который эта производная находится. Значение производной это коэффициент наклона в заданном интервале, можно найти например методом наименьших квадратов.

Требуется вычислить 8 промежуточных сигналов с 8 разными периодами. Самый простой набор периодов: 4, 8, 16, 32, 64, 128, 256, 512. Когда период задан, для каждого отсчета сигнала вычисляется производная по формуле наименьших квадратов. Это как скользящее среднее, только здесь не скользящее среднее а скользящая производная текущего интервала.

Таким образом получается 8 производных сигналов и 1 исходный. Теперь каждый из 8 производных сигналов нужно проинтегрировать. В данном случае это значит что каждый следующий семпл равен сумме всех предыдущих семплов. После этого получается 8 промежуточных слоев.

Следующий шаг — получение слоев, которые можно будет разобрать на отдельные волны. Итак теперь нужно получить 8 слоев. Слои вычисляются так:

слой0=промежуточный0-исх сигнал
слой1=промежуточный1-промежуточный0
слой2=промежуточный2-промежуточный1
слой3=промежуточный3-промежуточный2
слой4=промежуточный4-промежуточный3
слой5=промежуточный5-промежуточный4
слой6=промежуточный6-промежуточный5
слой7=промежуточный7-промежуточный6
слой8=промежуточный7

Последний слой является не разницей а просто равен последнему промежуточному сигналу.

Можно попробовать и по другому, а именно вычислять последующие промежуточные сигналы из предыдущих промежуточных. Но в текущей программе используется 1 вариант.

Теперь чтобы разобрать слои на отдельные волны нужно просто посчитать участки где значения увеличиваются и где они уменьшаются. Собственно длительность участков и есть их длины волн. Участки сигнала где значения сигнала постоянны нужно просто пропустить. Чтобы найти амплитуду сигнала в спектре в некотором интервале, нужно сложить все амплитуды волн умноженные на их длину.

Код который вычисляет промежуточный сигнал выглядит вот так:

здесь wavesize – число семплов
signal[] – массив с исходным сигналом
SY=0,SX=0,SXX=0,SXY=0,Ky=0 — переменные типа float
Step2=STEP/2 где STEP это период (4,8,16,32,64,128,256,512)

Чтобы вычесть один сигнал из другого достаточно просто вычесть каждый семпл из каждого.
Например для 0 слоя:

Если сложить все слои, и взять последний с обратным знаком то получится исходный сигнал, таким образом умножая какой-нибудь слой, возможно сделать фильтр частот. Далее вопрос заключается в том как считать амплитуды конкретных гармоник. Дело в том что в постоянном интервале, например = 4000 семплов, может быть очень много коротких волн и сравнительно мало длинных.

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

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

Вообще, не думаю что человек воспринимает звук как разложение в спектр, скорее звук состоит из звуковых образов, которые состоят из волн разной длинны. Соответственно громкость какого либо звука это скорее средняя громкость всех волн из которых звук состоит. Но пока что не понятно какие параметры составляют звуковой образ, возможно средняя частота, стандартное отклонение или что то еще.

Источник

Бесплатные VST анализаторы спектра

Всем привет, сегодня представляем вашему вниманию небольшой набор из анализаторов спектра для мониторинга звука ваших инструментов и эффектов.

SPAN от Voxengo

Как сделать спектр звука

SPAN высокоточный, не требовательный к ресурсам спектральный анализатор от отечественного программиста Алексея Ванеева. Плагин имеет хорошо продуманный и нереально удобный интерфейс, с возможностью изменения масштаба окна. Спектральный анализатор работает в режиме реального времени и использует алгоритм основанный на быстрых преобразованиях Фурье (алгоритм позволяющий сократить время спектрального анализа). В целом это очень качественный и удобный анализатор с достаточным количеством настроек для отображения данных, и что не мало важно бесплатный.

Скачать можно по ссылке: SPAN

FreqAnalyst от Blue Cat Audio

Как сделать спектр звука

Blue Cat’s FreqAnalyst это анализатор спектра с высокой степенью разрешения для полного контроля над анализом содержимого вашего аудио сигнала. Его гибко настраиваемый пользовательский интерфейс с функцией «прозрачности» позволяет полностью интегрироваться в вашем аудио приложении, проверить спектр и не закрывая поместить позади. Специально разработанная система определения порога входящего сигнала, поможет вам с легкостью определится с важными частями спектра. Либо вы можете с увеличением масштаба дисплея проверить только интересующую вас часть на графике.

Скачать можно по ссылке: Blue Cat’s Freq Analyst

S SpectrumAnalyzer Free от SIR Audio Tools

Как сделать спектр звука

SpectrumAnalyzer Free бесплатный многоканальный спектра анализатор с возможностью визуализации сигнала с двух звуковых дорожек. Он показывает соотношение громкости и частоты звука, гармоники, ширину полос, а также преобладающие частоты.
Плагин в реальном времени может произвести анализ двух источников сигнала рядом друг с другом, что будет крайне полезно при настройке эквализации в случае обнаружения конфликтующих частот. Анализатор также включает в себя аналоговое отображение, FFT и позволяет пользователю настроить мониторинг пиков, время задержки эквализации и анализ RMS.

Скачать можно по ссылке: Spectrum Analyzer Free

Sonogram SG-1 от ag-works

Как сделать спектр звука

Sonogram SG-1 быстрый и подробный спектральный анализ в реальном времени.
Плагин немного отличается от других анализаторов, и является на самом деле сонограммой (она же спектрограмма), но по сути это просто другой тип анализатора спектра. Попробуйте воспользоваться им при анализе ваших последних миксов, например, чтобы проконтролировать очень высокие частоты.

Скачать можно по ссылке: Sonogram SG-1

The Seeker от Himiltungl Labs

Как сделать спектр звука

Скачать можно по ссылке: The Seeker

#free #analyzer #spectre #бесплатные_программы

Источник

Аудио анализатор спектра в реальном времени

В этом проекте аудио анализатор спектра в реальном времени реализуется с использованием 8-битного микроконтроллера PIC18F4550. Анализ спектра частот осуществляется оптимизированным 64-битным Быстрым Преобразованием Фурье (Fast Fourier Transformation, FFT, БПФ), написанном полностью на C. Выход с FFT отображается с помощью графического ЖК-дисплея 128×64 для визуализации звукового сигнала в реальном времени.

Как сделать спектр звука

Как сделать спектр звука

На картинке показана полноразмерная синусоидальная волна 5000 Гц, генерируемая с помощью ПК. Если бы мы подавали этот сигнал непосредственно на PIC, мы имели бы очень низкий диапазон входного напряжения (0-0.5В), и могли бы сделать выборку только верхней части сигнала, что сделало бы БПФ неверным.
Для того чтобы правильно сделать выборку сигнала, надо сделать две вещи. Во-первых, мы должны усилить сигнал, чтобы гарантировать, что мы можем максимально использовать диапазон 0-5В. Во-вторых, мы должны сдвинуть землю сигнала (0 вольт) на «виртуальную землю» 2.5В. Это позволит PIC сделать выборки и положительного, и отрицательного сигнала. Для этого на демо плате используется простой интегральный усилитель (LM386-1). Поскольку микросхема питается от источника питания 0В и 5В, она имеет удобный побочный эффект – смещение сигнала в середину необходимого диапазона. LM386-1 была использована т.к. это дешево и просто, однако вы можете использовать операционный усилитель с полным размахом входного и выходного сигнала для достижения этого с несколькими внешними элементами.

Следующая осциллограмма показывает сигнал с LM386-1 (для сигнала показанного выше), граничный диапазон напряжений установлен на 5 вольт (с контакта W3 демо платы):

Как сделать спектр звука

Аппаратная часть смешивает линейный стерео вход, используя два резистора 10кОм, которые действуют как простой смеситель. Затем сигнал передается на LM386-1 через потенциометр 10кОм, который позволяет скорректировать сигнал. Далее выход с усилителя LM386-1 передается через простой RC фильтр, который обрезает сигнал примерно до 10 кГц. Затем полученный сигнал подается на контакт АЦП PIC18F4550. Фильтр 10 кГц действует как «сглаживающий» фильтр для БПФ, который не может правильно определить сигнал с частотой более чем 10 кГц. RC фильтр представляет собой очень простой тип фильтра (и очень неэффективный), но он был выбран, поскольку он легко изготавливается, и требует только 2 пассивных элемента. Обычно профессиональный анализатор спектра осуществляет сглаживание фильтром на 80% частоты Найквиста для БПФ (см. ниже), но, поскольку мы ограничены скоростью PIC, в этом проекте это невозможно сделать.

Демо плата также контролирует стандартный ЖК-дисплей с точечной матрицей 128×64, а также 3 светодиода (для тестирования преобразования звук-свет). Кроме того, есть 2 переключателя, позволяющие пользователю управлять выходом ЖК-дисплея в зависимости от того, что измеряется и как оно будет отображаться. Второе гнездо позволяет напрямую подать входной сигнал на другие аудио устройства, такие как наушники или колонки.

Вот принципиальная схема демо платы:

Как сделать спектр звука

Плата является односторонней и используются только выводные компоненты для упрощения повторяемости. Я использовал PIC18F4550 для дополнительных выводов ввода/вывода, однако он может быть заменен на меньший PIC18F2550 который совместим по цоколевке. Схема достаточно проста для постройки на макетной плате, если вы хотите экспериментировать с трассировкой. Вот рисунок платы, который можно скачать ниже.

Как сделать спектр звука

Прошивка

Прошивка полностью написана на C и может быть скачана ниже. Прошивка делится на 4 части:

Выборки АЦП

Маршрутизация АЦП занимает немногим более 64×50 Us = 32 мс (3200 мкс) во время выполнения для каждого цикла.

64-битная БПФ

Подпрограмма БПФ была взята из примера, приведенного в интернете (ссылки на исходный код можно найти в исходном коде). Математика БПФ является сложной и я не претендую на полное её понимание! Код был уменьшен до минимально необходимых команд и портирован для PIC18F. PIC18F4550 имеет аппаратную функцию умножения 8×8 в ALU процессора, поэтому я также оптимизировал расчеты, чтобы компилятор правильно использовал возможности чипа.

То, что 18F имеет аппаратный умножитель 8×8, действительно являться ключом к расчету БПФ таким маломощным чипом в реальном времени. Скорость цикла имеет преимущество даже по сравнению с 64-битными вычислениями в массиве.

Расчет абсолютной величины

Выход из БПФ 32 ‘сложных’ числа, которые состоят из действительной и мнимой части, представленными ​​двумя массивами (вы должны прочитать о БПФ в Google, если вы хотите узнать больше). Для того, чтобы показать результат в осмысленном виде, необходимо рассчитать абсолютную величину комплексного числа, что осуществляется с помощью расчета Пифагора для вычисления расстояния до комплексного числа от начала координат 0. Это включает в себя вычисление корня из числа, что реализуется программным обеспечением очень быстро, используя целые SQRT() эквивалентны, поскольку любые операции с плавающей точкой будут слишком медленными.

Процедура расчета БПФ и абсолютной величины занимает примерно 70 мс (7000 мкс) для каждого цикла

Обновление ЖК-дисплея

ЖК-дисплей 128×64 должен обновлятья​​ как можно быстрее. Для этого я использовал очень простой алгоритм рисования диаграммы, который требует минимально возможного количества команд дисплею.

Процедура обновления ЖК-дисплея занимает около 45 мс для каждого обновления.

Общая (средняя) скорость БПФ

Примерная скорость на дисплее анализатора спектра один кадр в 150 мс, в результате чего общая частота кадров около 6.5 кадров в секунду (или 10 кадров в секунду без ЖК-дисплея). Это можно легко улучшить сокращением необходимых блоков частот (что сократило бы отбор проб и время выполнения БПФ) или с помощью устройства отображения с более быстрым обновлением. Если вы хотели бы использовать БПФ для управления светодиодами светового устройства, можно легко сделать и то и то.

Блоки частот

Частота Найквиста в БПФ (самая высокая частота, которую он может обнаружить) составляет 10 кГц. 32 блока частот равномерно распределяются во всем диапазоне, однако, из-за работы подпрограммы БПФ, нельзя использовать нижние блоки. Это значит, что отображаемая частота для каждого блока выглядит следующим образом (в Гц):

Заключение

Я не сомневаюсь, что программное и аппаратное обеспечение может быть улучшено. Я не эксперт в БПФ, но я хотел бы услышать любые идеи о том, как ускорить этот процесс. Кроме того, сглаживающий фильтр на демо плате не так уж эффективен и может быть легко заменен на фильтр на основе ОУ. Я просто не хочу использовать больше, чем минимально необходимое для работы аппаратное обеспечение.

Также я хотел бы сказать отдельное спасибо моему хорошему другу Richard Stagg, без его математической настойчивости этот проект, наверное, никогда не был бы завершен!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *