Музичне підсвічування колекції оптичних скла

У музеї оптики СПбДУ ІТМО є досить примітний експонат - каталог Аббе, що представляє з себе колекцію оптичних скла різних марок і розмірів. Керівництво музею бажало щоб цей каталог підсвічувався під музику, тому на світ з'явився проект музичної підстветки каталогу, яким я власне і займався. Це щось схоже на завдання миготіння світлодіодом за допомогою мікроконтролера, тільки помасштабніше.


Апаратна частина була розроблена у фірмі ЛМТ. Під кожним склом розташована світлодіодна лінійка, підключена до контролера. Контролери об'єднані за допомогою вітої пари в мережу, що підключається до концентратора, який у свою чергу підключається через USB до комп'ютера.

Моїм завданням була розробка ПЗ, яке формувало б зображення за допомогою світлодіодних лінійок відповідно до музики, що грає в даний момент. Тобто. нескладний аудіоплеєр, який міг би візуалізувати аудіо і мав би при цьому інтерфейс розрахований на тачскрін. Розповідати про програму в цілому я сенсу не бачу, тому зупинюся саме на звуковій частині.

Для роботи з графікою і звуком використовувалася бібліотека SFML, для виконання швидкого перетворення Фур'є - FFTW.

Для того щоб отримувати будь-яку інформацію з аудіосигналу, необхідно мати прямий доступ до аудіосемплів. За допомогою зв'язки SFML + libsndfile реалізувати це не склало труднощів.

Під час програвання аудіофайлу з певною частотою (в даному випадку це частота кадрів) береться невелика ділянка масиву з семплами і потім над ним виконується швидке перетворення Фур'є. Завдяки БПФ з масиву з даними звукової хвилі виходить масив з частотними даними. У разі реального перетворення розмір масиву буде вдвічі меншим за вихідний.

Потрібні приблизно ось такі шматочки:

Тут слід врахувати один момент, для того щоб можна було точно відстежувати басові ноти, для перетворення Фур'є необхідний досить великий масив даних. За моїми підрахунками, щоб можна було починати роботу від Ля другої октави, був потрібен масив розміром 8096. При частоті семплювання 44100 це приблизно 0,2 секунди, а це досить великий інтервал і в нього можуть потрапити ноти, що вже не звучать. Тому в даному випадку слід вдатися до невеликої хитрості, розказаної ще в підручниках з цифрової обробки сигналу - взяти невеликий масив і доповнити його нулями до потрібного розміру. Це трохи змінює результат, проте в даному випадку це не було критично.

Ось над якого виду даними насправді виконується БПФ:

Щоб отримати спектр, необхідно звести всі елементи отриманого масиву в квадрат, далі, виходячи з розміру масиву і частоти семплювання нескладно визначити в яких елементах масиву амплітуди яких частот розташовані, оскільки в останньому елементі масиву буде амплітуда частоти Найквіста рівній половині частоти семплювання, а до цього - з кроком відповідною кількості елементів. Згодом з них вибираються значення амплітуд частот максимально близьких до частот музичних нот.

Спектр одержуваний в результаті обробки масиву аудіосемплів:

Далі ще трохи обробки - відстеження піків, перевищення значення мінімальної межі чутливості, перетворення значення амплітуди на значення яскравості. Після цього можна переходити до формування зображення.

Оскільки роздільна здатність «екрану» невелика - 48х3, то особливо багато варіантів для просторового розташування нот не придумаєш. Але дві ідеї прийшли в відразу ж. В одному варіанті стовпчики по три скла об'єднуються і являють собою одну ноту, зовні виходить щось віддалено нагадує клавіатуру фортепьяно. У другому варіанті одну ноту відображають два скла розташованих поруч в одному ряду, це ближче до гітарі з трьома струнами і вкрай незвичайним налаштуванням;)

Остання частина - формування кольору. Майже відразу ж стало зрозуміло що працювати з колірною моделлю HSV тут набагато зручніше ніж з RGB, оскільки в основному належало керувати тоном. Один з найпростіших і найлогічніших методів візуалізації звуку був запропонований ще Ньютоном - за його ідеєю візуальний спектр відповідає одній октаві. Метод Ньютона представлений на зображенні нижче праворуч:

Поексперементувавши, дана ідея була розвинена далі - в різних режимах проводиться накладення всього видимого спектру або його частини на різну кількість октав. Наприклад, 60 градусів тону на чотири октави, плюс додатково постійне зміщення за часом початкового градуса.

Інший метод формування кольору був запозичений з веб-дизайну. У ньому вибирається палітра кольорів за допомогою одного з шаблонів.

Ось кілька прикладів:

Використовуючи цей метод можна створювати більш контрастні зображення. Також як і в попередньому методі основний тон можна зміщувати в часі.

Відео роботи системи:

Посилання:

1. Luke Nimtz, Primary Harmonics — Music/Color Theory

2. Visual music blog

Студентам і абітурієнтам - такими речами (і не тільки такими) можна займатися в магістратурі СПбГУІТМО, на напрямку «Вбудовані обчислювальні системи»