Процедурна генерація звуку у реальному часі

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

Процедурне створення звуку в реальному часі. Основи

Для представлення синусоїди певної частоти потрібно щонайменше два семпла на період: один представляє хвилю в мінімумі, інший – у максимумі. Тобто фактично для подання синусоїди частотою N Гц потрібна частота семплювання (дискретизації) Fs мінімум 2*N Гц. У теорії обробки сигналів ця теорема звучить так:

якщо спектр функції x(t) не містить частот вище FN Гц, її можна відновити однозначно і без втрат за допомогою послідовності точок, рознесених не більше ніж на 1/(2*FN) секунд;

і носить назву теореми Найквіста-Шеннона (англ. Nyquist-Shennon theorem) - в англомовній літературі, або теореми відліків (теореми Котельникова) - в українськомовній літературі. Фактично, це пояснює найбільш поширену частоту семплювання людським вухом лежить десь близько 20 КГц (мінімальна частота – 20 Гц). Максимальну частоту, яку можна представити із заданою частотою дискретизації (фактично, рівну Fs/2 Гц) називають частотою Найквіста. Тут лежить ще одна важлива деталь: при спробі отримати частоти вище, ніж частота Найквіста, виникає ефект аліасингу (англ. aliasing) - хвилі цих підвищених частот будуть представлені сукупністю частот нижче частоти Найквіста невизначеним чином, що в результаті звучатиме брудно .Тому при зниженні частоти дискретизації сигналу необхідно відфільтровувати частоти, що перевищують частоти Найквіста для майбутньої частоти дискретизації (див. розділ Фільтри нижче).

Крім частоти дискретизації іншою важливою характеристикою сигналу дискретному світі є глибина дискретизації, так само звана розрядністю або кількістю рівнів квантування. Ця величина показує, скільки осередків інформації виділяється під зберігання одного семпла. Для стандартного CD аудіо використовується глибина дискретизації 16 біт на семпл, тобто, наприклад якщо сигнал приведений до діапазону [-1; 1], то мінімальний крок усередині цього діапазону буде 2/65536 ≈ 3 * 10 -5 . Зниження глибини дискретизації на існуючому сигналі може привнести квантизационный шум, цей факт використовується наприклад в bitcrusher ефект (див. розділ «Коротко про деякі інші ефекти» далі). У цій статті увага буде загострена, в основному, на субтрактивному синтезі, оскільки це основний інструмент, який використовується у старих аналогових синтезаторах та демосцені. Субтрактивний синтез означає, буквально, «вичитувальне створення», і називається він так тому, що спочатку береться сигнал (наприклад, вихідний сигнал з осцилятора), в якому є багато частот, а потім ці частоти «вирізуються» різними фільтрами. Насправді це не зовсім так, оскільки фільтри з резонансом можуть посилювати частоти, а не тільки їх вирізати/відтіняти, а деякі ефекти можуть навіть додавати частоти ([3], 9:00). Взагалі, дане джерело ([3]) вкрай рекомендується до ознайомлення всім, хто розуміє досить просту технічну мову англійською: у цьому семінарі відомий демосценер – Tammo “kb/farbrausch” Hinrichs – розповідає про основи написання синтезаторів, показуючи на приклади різніосцилятори, фільтри та модуляції. Але про все по порядку.

Основні поняття

процедурна

Варто згадати, що слух людини сприймає музичні звуки, відношення частот яких дорівнює двом, як дуже схожі, на цьому побудовано «октавну систему». Тобто частота ноти «до» у певній октаві рівно вдвічі більша за частоту ноти «до» сусідньої, більш низької октави: Fc2 / Fc1 = 2. Для того Щоб визначити частоту, відповідну фортепіанній клавіші, можна скористатися наступною формулою (октава на фортепіано рівномірно покрита 12-ма клавішами, n - порядковий номер клавіші на фортепіано, для ноти «ля» субконтроктави n = 0):

де I – інтенсивність сигналу, I0 – інтенсивність сигналу, з яким відбувається порівняння. У фізиці часто використовують інше логарифмічне уявлення відносин – одиницю Непер (на честь людини, яка запровадила поняття «логарифм»): тільки використовується натуральний логарифм (на підставіe) замість десяткового (на підставі 10).

Осцилятори

Трикутна хвиля(англ. triangle wave)

реальному

Квадратна хвиля(англ. square wave)

процедурна

Пилоподібна хвиля(англ. sawtooth wave)

генерація

Код для всіх цих типів осциляторів можна подивитися в [4], картинки з розподілом частот взяті з [5] (посилання на конкретний розділ див. вище).

Існує кілька типів шумових генераторів (осциляторами це назвати важко, проте найчастіше їх поєднують для простоти). Типи також зазвичай називають кольорами - знову ж таки, за аналогією спектральної складової зі світлом. Наприклад, звичайнісінький псевдовипадковий шум називають білим, оскільки спектр містить усі частоти в рівній мірі (як і спектр білого світла – в рівній мірімістить усі частоти світла з оптичного діапазону). Більш приємний для людського вуха – м'який шум, амплітуда частот у спектрі якого обернено пропорційна частоті, називають рожевим (низькі частоти – червоне світло – присутні більшою мірою, а високі частоти, що відповідають синьому – практично відсутні). Іноді рожевим шумом називають ширший клас шумів: частоти цього шуму пропорційні 1/f α де ступінь α близька до одиниці. Рожевий шум – предмет дослідження у багатьох областях, він часто зустрічається у природі, і взагалі штука вкрай цікава. Якщо ступінь α збільшити до 2, то вийде червоний шум, його іноді називають Броуновским (Brownian, його ще іноді називають неправильно, через некоректного перекладу, коричневим). Нижні частоти в цьому шумі ще більш акцентовані, так що слухати цей вид шуму навіть приємніше, а також він практично без змін нагадує шум натовпу, так що він незамінний для урбаністичних сценок. Якщо йти у зворотний бік (збільшувати амплітуду частоти в спектрі пропорційно самій частоті), то виходять синій та фіолетовий шуми.