Пособие по генерации звуков с помощью sfxr

Авторское предисловие

В отличие от проблем с терминологией, слабое владение компьютером может стать серьёзной проблемой на пути овладения sfxr. Если пользователь не в курсе, куда и как сохранять файлы, пользователь может их потом не найти. Однако, эта проблема уже не касается sfxr как такового (пропуская мимо внимания тот факт, что не владеющий компьютером разработчик видеоигр это редкость), и поэтому освещена в пособии не будет.

4 мая 2013, Xitilon.HD408


Собственно о программе

1. Немного истории


Исходя из ридми-файла при программе, sfxr - генератор звуковых эффектов, созданный разработчиком под ником DrPetter в декабре 2007 года. Создан этот генератор был специально для LD48#10 — довольно широко известного в наше время собрания независимых разработчиков видеоигр. Основное его назначение — позволить разработчику игры быстро получать звуки, необходимые для игры, в то время как традиционный Ludum Dare длится всего лишь 48 часов (отчего и называется LD48), и подразумевает работу в одиночку над всеми аспектами видеоигры — графика, музыка, озвучка, сюжет, движок, и что бы то ни было.

 

http://www.superflashbros.net/as3sfxr/ — а вот ещё портированная на Adobe Flash версия.



2. Базовое использование

Запускаем программу, нажимаем одну из кнопок по левому краю окна программы, чтобы получить звук, соответствующий указанному пресету (встроенному набору параметров). Пресеты означают следующее:

PICKUP/COIN - поднятие предмета / монета
LASER/SHOOT - лазер / выстрел
EXPLOSION - взрыв
POWERUP - усиление (бонус)
HIT/HURT - удар / повреждение (тела)
JUMP - прыжок
BLIP/SELECT - пик / выбор (звуковые эффекты интерфейса)

Если звук устраивает, сохраняем его в файл кнопкой "EXPORT .WAV". Кнопками ниже неё можно изменить качество звука*, а громкость можно отрегулировать через "VOLUME" выше.

"PLAY SOUND" проигрывает звук. Также для этого служит пробел на клавиатуре — довольно удобно.

"SAVE SOUND" и "LOAD SOUND" позволяют сохранить текущие параметры генерации звука в файл, и загрузить их из файла соответственно. Это нужно для того, чтобы можно было возвращаться к найденному звучанию и поправлять уже подошедшие, но ещё "какие-то немного не такие" звуки, либо делать их вариации для нового использования.

* Грубо говоря, чем больше цифры — тем лучше, но это не значит что звук становится хорошим только от того что там установлены максимальные доступные настройки — 44100 Гц и 16 бит, да и на самом деле слуховая разница между худшими и лучшими доступными настройками в sfxr не очень велика. Так как экономии дискового пространства от низких настроек довольно мало, смысла менять максимальные настройки на что-то другое практически нет, разве что на выходе нужна заранее известная битность или частота дискретизации. Эта настройка была бы чрезвычайно уместна в 90-е годы, но едва ли — на сегодняшний день.


3. Продвинутое использование

Если не устраивает ни один звук из сгенерированных по пресетам в левой верхней части окна, есть смысл попробовать нижние кнопки по левому краю окна - сначала "RANDOMIZE", а потом "MUTATE" до тех пор, пока не выходит что-нибудь более интересное, либо снова "RANDOMIZE".

Мутация меняет настройки генерации несильно, хоть и все одновременно. Чаще всего одной мутации не хватает, и есть смысл попробовать разные осцилляторы, переключать которые можно наверху, кнопками "SQUAREWAVE", "SAWTOOTH", "SINEWAVE" и "NOISE".

Точные формы осцилляторов автор не указал, но из результатов их использования всё понятно на слух — "SQUAREWAVE" это "квадратная" (на самом деле — прямоугольная) волна, "SAWTOOTH" — более резкая пилообразная волна, "SINEWAVE" это самая мягкая — синусоидальная, и "NOISE" — это шум, который на высокой частоте является белым, но при понижении её превращается в красный (коричневый).

Что заслуживает отдельного упоминания — волна "SQUAREWAVE" может иметь различную скважность и её изменение во времени, регулируемые через параметры "SQUARE DUTY" и "DUTY SWEEP" соответственно.


4. Экспертное использование


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

Левой кнопкой мыши можно тянуть слайдеры параметров налево и направо, а правой - устанавливать значение по умолчанию. Для двусторонних слайдеров это посередине, для односторонних - слева.

"SQUARE DUTY" и "DUTY SWEEP" уже были упомянуты выше, остальные параметры соответствуют следующему:

ATTACK TIME - время, за которое звук из тишины переходит в полную громкость.
SUSTAIN TIME - время, которое звук держится на полной громкости.
SUSTAIN PUNCH - величина рывка громкости вверх при переходе из ATTACK SUSTAIN, то есть при начале звучания в полной громкости будет слышен рывок громкости ещё немного выше. Если SUSTAIN TIME нулевой, то SUSTAIN PUNCH не слышен вовсе.
DECAY TIME - время, за которое звук из полной громкости уходит в тишину. В алгоритмах звукового синтеза (я имею в виду ADSR-огибающую) этот параметр соответствует "Release".

START FREQUENCY - начальная частота осциллятора.
MIN FREQUENCY - минимальная частота осциллятора. Если частота становится ниже этого порога, звучание прекращается.
SLIDE - скорость изменения частоты осциллятора (вниз или вверх) во времени.
DELTA SLIDE - скорость изменения SLIDE. Позволяет создавать более разнообразные изменения частот, например при положительном SLIDE и отрицательном DELTA SLIDE частота сначала пойдёт наверх под действием SLIDE, но потом DELTA SLIDE пересилит его, и частота упадёт обратно. Аналогично можно сначала частоту снизить, а потом поднять.
VIBRATO DEPTH - глубина вибрато, то есть синусоидального колебания частоты вверх-вниз от текущей, оно же — модуляция синусоидой.
VIBRATO SPEED - скорость вибрато. Непонятно, как именно автор масштабировал этот параметр — по моим замерам вышло, что максимум шкалы приблизительно соответствует 600 Гц, 1/2 — 80 Гц, 1/4 — 4.5 Гц, 1/8 - 1 Гц. При нулевом параметре, естественно, модуляции не происходит вовсе.

CHANGE AMOUNT - резкое и быстрое изменение частоты спустя некоторое время после начала звука.
CHANGE SPEED* - скорость наступления этого изменения частоты.

REPEAT SPEED - скорость повтора инициализации генератора. В sfxr это один из важнейших параметров, кардинально влияющий на звучание. Чем он выше, тем с большей скоростью повторяется возвращение параметров частоты и скважности квадратной волны (SQUARE DUTY) на исходные, в процессе генерации одного и того же звука. CHANGE AMOUNT, судя по всему, тоже возвращается и применяется заново, хотя в инструкции автора этого не указано. Чем выше REPEAT SPEED, тем ближе частота итогового звука к START FREQUENCY, в какую бы сторону её ни пытались менять SLIDE и прочие параметры. Однако, параметр LP FILTER CUTOFF остаётся при повторе неизменным, и может отрезать важную часть звука раньше, чем REPEAT SPEED вступит в действие в полной мере. 1/8 шкалы соответствует 3 Гц (3 повторам в секунду), 1/4 — 2Гц, 1/2 — 8Гц, полная шкала соответствует примерно 120Гц.

PHASER OFFSET - смещение во времени копии генерируемого звука, которая микшируется поверх первично сгенерированного звука. По сути — примитивный фланжер без цикла (то есть, смещение фазы прошло до конца, и обратно не возвращается), хотя автор почему-то пишет про реверберацию.
PHASER SWEEP - влияет на изменение смещения фазера, как SLIDE для START FREQUENCY.

LP FILTER CUTOFF - частота среза фильтра низких частот. Фильтр отсекает все частоты выше заданной, то есть чтобы его проигнорировать, его нужно установить в максимум вправо.
LP FILTER CUTOFF SWEEP - изменение частоты среза для фильтра низких частот. Имеет такое же значение как SLIDE для START FREQUENCY.
LP FILTER RESONANCE - величина резонанса фильтра низких частот. Оставляет от отсечённых частот послезвучие, затухающее через некоторое время. Чем выше резонанс, тем дольше послезвучие.
HP FILTER CUTOFF - частота среза фильтра высоких частот. Аналогично LP FILTER CUTOFF, но отсекает частоты ниже заданной. Чтобы не использовать, установить влево.
HP FILTER CUTOFF SWEEP - также аналогично LP FILTER CUTOFF SWEEP, но для HP FILTER CUTOFF.

* В последней на данный момент версии программы (хотя я не в курсе, было ли их несколько) есть баг — при максимальной CHANGE SPEED звук должен сразу быть с изменённой (уже переключенной) частотой, а вместо этого не меняет частоту вовсе. Впрочем, если чуть-чуть отодвинуть параметр влево от края, результат неотличим на слух от того, что должно было быть.

5. Типичная проблема: звука нет, или он звучит очень слабо.

Сгенерированный звук может "не звучать" по одной из нескольких причин:

а) VOLUME на нуле — очевидно, почему. Звук, умноженный на ноль, каким бы он ни был, звучать не будет.

б) ATTACK TIME, SUSTAIN TIME и DECAY TIME очень малые — звук просто не успевает зазвучать до того как его время заканчивается.

в) START FREQUENCY очень мал, а SLIDE и DELTA SLIDE не поднимают частоту (отрицательны, задвинуты влево от центра) — звук есть, но частота слишком низка для человеческого слуха.

г) MIN FREQUENCY больше чем START FREQUENCY — по принципу работы sfxr, генерация всегда прерывается после того как текущая частота становится меньше минимальной, то есть в этой ситуации — сразу же после начала звука. Эти два параметра желательно ставить подальше друг от друга, если SLIDE, DELTA SLIDE или CHANGE AMOUNT отрицательны.

д) SLIDE или DELTA SLIDE отодвинут в самое левое положение — частота падает слишком быстро, чтобы звук успел прозвучать.

е) LP FILTER CUTOFF на нуле — фильтр нижних частот сразу же блокирует все частоты, и звук исчезает.

ё) LP FILTER CUTOFF SWEEP полностью отрицателен — этот параметр уменьшает LP FILTER CUTOFF, и происходит то же самое что и в пункте е).

Если звук не отсутствует вовсе, а хоть какой-то да слышен, то, прежде чем проверять каждую из этих причин, могу посоветовать увеличить REPEAT SPEED — иногда таким образом интересный звук всё же можно получить. Исключение составляют случаи, когда фильтр нижних частот сразу отрезает звук - тогда LP FILTER CUTOFF и LP FILTER CUTOFF SWEEP нужно увеличить.

 

6. Дополнительные возможности


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

Помимо записи звука в WAV-файл, можно писать звук вживую из приложения во время проигрывания звука в нём. Таким образом можно записать последовательность звуков, и для этого потребуется дополнительная программа записи и соответствующее перенаправление аудиоканалов.