Soundmaking: различия между версиями
Lizard (обсуждение | вклад) м (Истолкование falloff'a могло вводить читающих в заблуждение) |
Lizard (обсуждение | вклад) (→Базовые знания о кодинге звуков.: Актуализировал информацию в соответствии с новшествами Зве) |
||
Строка 267: | Строка 267: | ||
Удивительно, но просто вставить свой звук куда нибудь в процесс или объект не выйдет. В большинстве случаев придется более подробно смотреть строчки кода в том районе, куда, предположительно, вам нужно будет вставить звук. Вы ведь не хотите зацикленных, обрывистых или вызывающих рантаймы звуков? И это, к слову, не все. Часть из них находится в файле {sound.dm}. Помимо них, существует несколько других способов добавления звука в код(некоторое могло немного устареть): | Удивительно, но просто вставить свой звук куда нибудь в процесс или объект не выйдет. В большинстве случаев придется более подробно смотреть строчки кода в том районе, куда, предположительно, вам нужно будет вставить звук. Вы ведь не хотите зацикленных, обрывистых или вызывающих рантаймы звуков? И это, к слову, не все. Часть из них находится в файле {sound.dm}. Помимо них, существует несколько других способов добавления звука в код(некоторое могло немного устареть): | ||
# /proc/playsound(atom/source, soundin, vol, vary, extrarange, falloff, channel | # /proc/playsound(atom/source, soundin, volume_channel = NONE, vol = 100, vary = TRUE, extrarange = 0, falloff, channel, wait, ignore_environment = FALSE, voluminosity = TRUE). | ||
#: При призыве этого прока будет воспроизводится по умолчанию объемный звук. Этот прок будет использоваться вами чаще всего. | #: При призыве этого прока будет воспроизводится по умолчанию объемный звук. Этот прок будет использоваться вами чаще всего. | ||
#* Чтобы это сделать, вам нужно написать в нужную строчку прок {playsound(*источник*, *путь к звуку*, *громкость*, *вариативность*, *доп. радиус*, *парам. сниж. громкости с расстоян.*, *канал*, * | #* Чтобы это сделать, вам нужно написать в нужную строчку прок {playsound(*источник*, *путь к звуку*, *звуковая категория*, *громкость*, *вариативность*, *доп. радиус*, *парам. сниж. громкости с расстоян.*, *канал*, *ожидание*, *парам. учета окружения*, *объемность*). | ||
#* Конечно же, все эти параметры не обязательно указывать. Вы можете указывать их в том порядке, в котором они расставлены, без присваивания переменным значений, то есть вместо {vol = 100} после пути к звуку вы можете просто написать {100}. | #* Конечно же, все эти параметры не обязательно указывать. Вы можете указывать их в том порядке, в котором они расставлены, без присваивания переменным значений, то есть вместо {vol = 100} после пути к звуку вы можете просто написать {100}. | ||
## {atom/source}. | ## {atom/source}. | ||
Строка 275: | Строка 275: | ||
## {soundin}. | ## {soundin}. | ||
##: Путь к звуку или текстовое название переменной {soundin}, которая превратится в один из заданных путей. Путь к одному звуку указывается в формате {####, 'sound/test.ogg', ####}. Путь к сразу нескольким звукам задается либо в самом проке, где вам нужно проиграть звук при помощи {####, pick('sound/test1.ogg', sound/test2.ogg'), ####}, либо в проверке на "текстовость" soundin'a. В данный момент он находится снизу в {sound.dm}. | ##: Путь к звуку или текстовое название переменной {soundin}, которая превратится в один из заданных путей. Путь к одному звуку указывается в формате {####, 'sound/test.ogg', ####}. Путь к сразу нескольким звукам задается либо в самом проке, где вам нужно проиграть звук при помощи {####, pick('sound/test1.ogg', sound/test2.ogg'), ####}, либо в проверке на "текстовость" soundin'a. В данный момент он находится снизу в {sound.dm}. | ||
## {vol}. | ## {volume_channel = NONE} | ||
##: Громкость звука, в процентах. | ##: Категория звука. Создана в основном для преференсов, для слайдеров громкости звуков. Выставлять нужно обязательно. Уже созданные категории звуков можно посмотреть в дефайнах(не пугайтесь этого слова), а именно в {_DEFINES\sound.dm}. Зачастую придется выставлять {VOL_EFFECTS_MASTER}, так что, если вам страшно лезть в непонятные дефайны из больших, зеленых и угрожающих букв, можете прописать на месте этого аргумента именно {VOL_EFFECTS_MASTER}. Но, все же, я советую вам просмотреть все дефайны звуков перед началом работы. | ||
## {extrarange}. | ## {vol = 100}. | ||
##: Громкость звука, в процентах. | |||
##* Зависимость нелинейная, больше похожа на кусочек параболы. | |||
## {extrarange = 0}. | |||
##: Дополнительные радиус звучания. Положительные значения увеличивают радиус, отрицательные же уменьшают | ##: Дополнительные радиус звучания. Положительные значения увеличивают радиус, отрицательные же уменьшают | ||
##* Каждая единица этой переменной изменяет дальность звука на 3 тайла | ##* Каждая единица этой переменной изменяет дальность звука на 3 тайла | ||
Строка 283: | Строка 286: | ||
## {falloff}. | ## {falloff}. | ||
##: Громкость на определенном расстоянии будет постоянна, а меняться она будет только когда вы отойдете от источника звука достаточно далеко. Причем будет она меняться в сторону уменьшения громкости - чем выше значние {falloff}, тем медленнее будет убывать громкость. | ##: Громкость на определенном расстоянии будет постоянна, а меняться она будет только когда вы отойдете от источника звука достаточно далеко. Причем будет она меняться в сторону уменьшения громкости - чем выше значние {falloff}, тем медленнее будет убывать громкость. | ||
## {channel | ## {channel}. | ||
##: Канал звука. По умолчанию равен 0, то есть любой случайный и свободный из 1024 доступных. Два или более звуков, проигранных на один канал за короткий промежуток времени перекроют друг друга. Более поздний звук "заткнет" более старый, если тот еще не завершен и если переменная wait = 0. | ##: Канал звука. По умолчанию равен 0, то есть любой случайный и свободный из 1024 доступных. Два или более звуков, проигранных на один канал за короткий промежуток времени перекроют друг друга. Более поздний звук "заткнет" более старый, если тот еще не завершен и если переменная wait = 0. | ||
## {wait}. | |||
## {wait | |||
##: Ожидание окончания предыдущего звука на определенном канале. По умолчанию отключен, то есть, звук не будет ждать другой звук - он просто перекроет его. Если переменная включена, то звук добавится в очередь, пока не проиграется. | ##: Ожидание окончания предыдущего звука на определенном канале. По умолчанию отключен, то есть, звук не будет ждать другой звук - он просто перекроет его. Если переменная включена, то звук добавится в очередь, пока не проиграется. | ||
## {ignore_environment = FALSE}. | |||
##: Параметр, который отвечает за эхо. При положительном значении эхо фактически будет отсутствовать(присвоен тип окружения 2 из за технических проблем с бьендокодом), не будет браться в учет окружение, сознание моба. | |||
## {voluminosity = TRUE}. | ## {voluminosity = TRUE}. | ||
##: Объемность звука. Будет ли звук слышен в разные уши или же нет? | ##: Объемность звука. Будет ли звук слышен в разные уши или же нет? | ||
# /mob/proc/playsound_local(turf/turf_source, soundin, vol, vary, frequency, falloff, channel | # /mob/proc/playsound_local(turf/turf_source, soundin, volume_channel = NONE, vol = 100, vary = TRUE, frequency, falloff, channel, repeat, wait, ignore_environment = FALSE, voluminosity = TRUE). | ||
#: Проигрывает звук конкретному игроку. Переменные не различаются, поэтому я не буду их объяснять | #: Проигрывает звук конкретному игроку. Переменные не различаются, поэтому я не буду их объяснять | ||
#* Напишите {M.playsound_local(null, ####)}, где M - определенный моб, которому нужно проиграть звук. Такое | #* Напишите {M.playsound_local(null, ####)}, где M - определенный моб, которому нужно проиграть звук. Такое можно сделать, например, в цикле. Переменная может иметь другое название и быть привязана к подклассу моба, например, к людям {mob/living/carbon/human/H}. Разумеется, в начале нужно устроить несколько проверок и присвоить мобу переменную подкласса человека. Удивительно, но унатх, таяра, абдуктор, тенелинг и так далее также являются людьми! | ||
# {M << sound('sound/example.ogg')}, где M - любая цель. '''Использование запрещено - используйте { | # /mob/proc/playsound_music(soundin, volume_channel = NONE, repeat = FALSE, wait = FALSE, channel = 0, priority = 0, status = 0) | ||
#: Посылает звук конкретной цели( | #: Отдельный прок для проигрывания музыки, эмбиентов и всего прочего, что не требует учета окружения и других сложных проверок. В основном здесь схожие с прошлыми проками аргументы, но давайте рассмотрим новые! | ||
## {repeat = FALSE} | |||
##: Повтор звука. Если аргумент - истина, то звук будет воспроизводится после его же окончания бесконечное число раз, пока его что то не прервет. Например, какой то другой звук с более высоким или таким же приоритетом на одном и том же канале, что и зацикленный звук. | |||
##* Этот параметр не стоит трогать, если у вас не очень много опыта в кодинге. Ведь вы можете создать звук, который ничто не прервет. Здесь нужно многое учитывать. | |||
## {priority = 0} | |||
##: Приоритет звука. Нужно использовать лишь вместе с использованием фиксированного канала. Звук с большим приоритетом прервет звук с более низком приоритетом на каком-нибудь канале. | |||
# {status = 0} | |||
##: Статус звука. Здесь все более сложнее, чем с другими аргументами. Этот параметр изменятся при помощи битовых флагов, таких как {SOUND_MUTE}, {SOUND_PAUSED}, {SOUND_STREAM} и {SOUND_UPDATE}. Здесь, я думаю, не стоит описывать все подробно. Если вы новичок и ищете помощи в кодинге звуков, вы навряд ли поймете все что будет описано в этом аргументе. К тому моменту как вы наберетесь достаточного опыта, вы уже будете способны самостоятельно изучить этот аргумент. Разумеется, его лучше не стоит трогать, если вы конкретно не знаете что делаете. | |||
# {M << sound('sound/example.ogg')}, где M - любая цель. '''Использование запрещено - используйте {playsound_local()} вместо этого.''' | |||
#: Посылает звук конкретной цели(в примере - {M}) при помощи стандартных операторов DreamMaker'a. ИСПОЛЬЗОВАТЬ ЗАПРЕЩЕНО, приведено для ознакомления. | |||
# {fire_sound} - переменная для огнестрельного или энергетического оружия. | # {fire_sound} - переменная для огнестрельного или энергетического оружия. | ||
#: Проигрывается звук при выстреле. Эта переменная, а не прок, поэтому необходимо присвоить ей определенный значения при помощи {fire_sound = 'sound/example2.ogg'} | #: Проигрывается звук при выстреле. Эта переменная, а не прок, поэтому необходимо присвоить ей определенный значения при помощи {fire_sound = 'sound/example2.ogg'} | ||
Строка 306: | Строка 315: | ||
#: Проигрывается звук, когда что то с чем то взаимодействует. Например, моб откручивает что то гаечным ключом. Присваивание значения так же, через {usesound = 'sound/tool.ogg'} | #: Проигрывается звук, когда что то с чем то взаимодействует. Например, моб откручивает что то гаечным ключом. Присваивание значения так же, через {usesound = 'sound/tool.ogg'} | ||
Помимо всех проков, проигрывающих звук, есть куча служебных проков, которые созданы, в первую очередь, для слайдеров громкости. Постарайтесь не запутаться, не обращайте внимания в первое время на все остальное. | |||
Вы можете также создавать свои проки или переменные и использовать их в своих целях. Главное не забывайте, что мы делаем качественные звуки и качественный код, поэтому не переборщите! | Вы можете также создавать свои проки или переменные и использовать их в своих целях. Главное не забывайте, что мы делаем качественные звуки и качественный код, поэтому не переборщите! | ||
Версия 14:38, 22 июня 2019
Как устроены звуки в игре и для чего они нужны?
Предисловие.
В первую очередь, как многим известно, звуки созданы и используются в игре для погружения в атмосферу. Реалистичные и качественные звуки всегда будут необходимы для более глубокой и увлеченной игры. Вы, наверное, согласитесь, что отыгрывать персонажа и жить на космической станции, где симулируются многие физические законы и явления, будет гораздо приятнее, если звуки будут отражать всю полноту происходящего. Вряд ли будет разумным решением на полном серьезе добавлять казуальные, "игрушечные" звуки. Они могут задать настроение игре, могут заставить вас напрячь ваши нервы, почувствовать радость, печаль и даже, возможно, ощутить страх.
Кратко о рекомендуемых форматах.
Игровые звуки, как правило, хранятся и используются в формате .ogg и достаточно нежелательно использовать другие форматы. Хотя и в нашем билде содержатся звуки в формате .wav, их использование не рекомендуется ввиду их большого занимаемого объема памяти. Может быть качество звуков этого формата и высокое, но ого того не стоит. Проигрываются же эти звуки благодаря определенным командам в коде игры, но не стоит пугаться! Это не так сложно и страшно, как звучит на первый взгляд. Иногда бывает гораздо сложнее отыскать нужный звук и обработать его.
Поиск звука. Начальный этап.
Так какой звук вам хочется добавить в игру?
В начале вам стоит определиться, что же вам нужно добавлять в игру? Это звук для машинерии? Может быть для мобов? Или какой нибудь эмбиент? Обычно ответ на этот вопрос приходит вам в ходе игры или даже во время создания уже других звуков. Это словно вдохновение, которое появляется в случайные моменты времени. Именно оно будет вас мотивировать в ходе добавления звука в игру.
Рекомендации по поиску звука. На что стоит обращать внимание.
Надеюсь, у вас уже появилась идея по добавлению звука, но постойте! Прежде чем найти и скачать интересующий вас звук, ознакомьтесь с рекомендациями по его поиску и анализу:
- В вашем звуке есть шумы?
- В начале удостоверьтесь в отсутствии посторонних шумов в звуковом файле. Он должен быть чистым и не должен содержать чьих то голосов на фоне, не нужных второстепенных звуков каких нибудь машин или банального шипения микрофона из за некачественной записи. Так же нежелательно присутствие эха. Если вы обнаружили что нибудь из подобного, то рекомендуется найти другой звук. От этих шумов будет очень сложно избавиться без потери качества.
- Он качественный?
- Что же, похоже, что ваш звук не содержит шумов. Но теперь стоит обратить внимание на его качество. Чем оно хуже, тем хуже он будет звучать в игре. В отличие от шумов, качество звука невозможно повысить. Но им можно пренебречь, если потеря качества незначительная, а вам не удается найти другой. И запомните, что мы ищем качественные и реалистичные звуки, поэтому казуальные и упрощенные звуки не рекомендуются, если это, конечно, не требуется.
- Он подойдет для игры и будет ли удобно обрабатывать его?
- Отлично. Ваш звук не содержит шумов и обладает приемлемым качеством. Дело за малым. Стоит обратить внимание на вашу цель и на содержание звука. Может, это должен быть, например, звук выстрела C20R? Прослушиваем звук перед скачиванием. Вспоминаем, что в нашей игре не предусмотрены выстрелы очередями. Если это уже одиночный выстрел, то это идеально. Нет? Тогда, может быть, его можно обрезать и обработать? Если тоже нет, то этот звук будет сложно нормально обрезать без "заиканий", прерываний или прочего. Стоит поискать другой.
Рекомендованные сайты для поиска бесплатных звуков.
Но где же его достать? Существуют много хороших сайтов с бесплатными звуками, на которых вы можете найти почти любые звуки, но я порекомендую лишь несколько:
- Freesound - настоятельно рекомендован к использованию ввиду огромного разнообразия звуков любого качества. Вы можете найти здесь почти все!
- BBC Sound Effects - не удалось найти необходимые звуки? Тогда можете заглянуть сюда. Здесь не так часто бывают качественные звуки. В основном наполнен звуками с посторонними шумами, но здесь так же можно найти что нибудь подходящее.
- NoiseSFX - Похоже, что вы в отчаянии. На этом сайте не так много звуков, но зато он отличается звуками неплохого качества. К тому же, он полностью на русском.
Мелкие замечания.
Перед тем как скачать нужный звук с сайта, скопируйте его ссылку себе в блокнот! При создании пулл-реквеста(ПРа) вам будет необходимо указать источник звука, то есть, где вы его скачали. Да, звуки на этих сайтах бесплатны и доступны для скачивания, но они все еще защищены лицензией. Например, звуки с фрисаунда требуют указание источника при использовании.
Весь алгоритм-пример поиска звука на примере одного из сайтов будет показан ближе к концу статьи.
Поиск звука на примере сайта Freesound
В начале вам стоит зарегистрироваться, иначе скачать звук вам не удастся. Она бесплатна и занимает мало времени, не беспокойтесь.
После регистрации, вы наконец то готовы воспользоваться сайтом. И так, в первую очередь нам нужно воспользоваться поиском. Это самый эффективный способ поиска звука. В другом случае - можете воспользоваться категориями, тагами. Я обозначил на первом скриншоте 4 цифры, которые помогут вам ориентироваться здесь. Пятой цифры не существует, но это пояснение к второму скриншоту.
- Поиск звука.
- Вводите любое слово, наталкивающее на интересующий вас звук.
- Не всегда именно тот звук, который вам нужен, называется "прямо". Иногда можно выйти, например, на качественный и страшный эмбиент во время поиска обычного звука оружия! Понадейтесь на удачу, ваш интеллект и интуицию в этом пункте.
- Методы фильтрации поиска.
- {Automatic by relevance}.
- Рекомендуется использовать этот параметр в большинстве случаев. Сортирует звуки на страничке, ориентируясь на сходство названия и описания звука с вашими заданными данными в поиске.
- {Duration}.
- Не рекомендован к использованию. {long first} - поставит самые длинные звуки в начало. Длинные звуки, как правило - некачественные, нечистые звуки. {short first} - поставит самые короткие звуки в начало. Обычно их длины не хватает даже на то, чтобы вы его услышали. Придется перескочить на несколько страничек вперед.
- {Date added}.
- Не рекомендован к использованию. {newest first} - самые новозалитые звуки в начале. {oldest first} - самые мшистые звуки в начале.
- Обычно старые звуки обладают заниженным качеством, но сделаны "с душой". В них нечасто бывают рандомнозалитые, отвратительные, шумные или бесполезные звуки.
- Новые звуки могут обладать высоким качеством, но так же велика вероятность того, что вы наткнетесь на такой звук, который совсем не подойдет для вас. Выбирая этот параметр, вы полагаетесь только на свою удачу.
- {Downloads}.
- Рекомендован к использованию(Most first). Сортирует по загрузкам. Most first - звук с наибольшим количеством загрузок будет в начале списка. Least first - самый непопулярный звук будет в начале.
- {Rating}.
- Не рекомендован к использованию. {highest first} - звук с наивысшим рейтингом в начале. {lowest first} - самый низко оцененный звук в начале.
- {Automatic by relevance}.
- Дата загрузки, рейтинг и количество загрузок.
- Обращать внимание на рейтинг - бесполезное занятие.
- Большое количество загрузок - не всегда верный знак качества звука. Но в большинстве случаев это так.
- Дата загрузки раньше 2012 - гарантия бородатости звука и его низкого качества звучания ввиду устаревшей аппаратуры записи.
- Прослушивание звука.
- Вы можете нажать по треугольнику, чтобы прослушать его.
- Круговая стрелка - зацикливание звука.
- Вы можете прослушать отдельный фрагмент звука, просто нажав по полю звука.
- Вы можете скачать звук. Просто нажмите по его синему названию, откроется новая вкладка. Если вы уже вошли в аккаунт, вы можете нажать на {Download}, чтобы скачать его. Обращать внимание на особые параметры звука здесь не обязательно, если он вам понравился.
- Перед скачиванием звука, обязательно скопируйте ссылку вкладки себе в блокнот. Она пригодится вам во время создания ПРа.
Обработка звука. Промежуточный этап.
Обработка звука необходима в любом случае, если даже он полностью готов и подходит для вашей идеи. Как минимум, необходимо установить определенный битрейт звука.
Рекомендованные программы для обработки звуковых файлов.
Разумеется, без сторонних программ вам это не сделать. Порекомендовать я могу лишь две:
- FL Studio - рекомендован к использованию. Обладает огромным функционалом и предназначен для профессиональной работы. К сожалению, он платный, но вы все еще можете скачать Trial-версию, функционала которой будет достаточно для работы со звуками. Trial-версия не ограничивается каким нибудь стандартным месяцем, а держится до тех пор, пока вы не купите полную.
- Audacity - одна из самых популярных и относительно простеньких программ. Заниматься чем то серьезным здесь будет не очень просто.
В остальном, существует так же огромная куча других программ на ваш вкус. Это лишь две рекомендованных, которые позволят вам делать качественные звуки. Пример работы с одной из программ, как обычно, будет в конце!
Базовые рекомендации на этапе обработки звука
Для предотвращения создания "тяжелых" или попросту некачественных звуковых файлов существуют несколько условных правил, которые рекомендуется соблюдать:
- Одно из самых важных правил - контролирование битрейта звука.
- Слишком высокий битрейт гарантирует вам высокое качество звука, но огромный размер файла. Слишком низкий же, наоборот, - низкое качество, но легкий вес звука. Старайтесь не превышать границу веса звукового файла в 100-150 КБ. Если звук очень длинный, например, если это какая нибудь тревога на станции, то следует задуматься об альтернативном решении - зацикливание короткого звука. Засорение билда огромными звуковыми файлами - не лучшее решение.
- Битрейт 64 кб/с рекомендован к использованию в большинстве случаев
- Битрейт 32 кб/с используется только лишь в тех случаях, когда размер файла превышает 100-150 КБайт.
- Битрейты ниже 32 кб/с не приветствуются из за слишком низкого качества звука.
- Битрейт 128 кб/с необходим лишь тогда, когда качество звука ощутимо страдает из за занижения битрейта.
- Битрейты выше 128 кб/с не приветствуются. На крайний случай - можете повысить его до 256 кб/с, но не больше.
- Контролируйте громкость звука.
- Громкость звука всегда можно снизить через код, но ее нельзя повысить этим же способом. Но не стоит делать очень громкие звуки! Найдите идеальный баланс, сделайте звук так, как он должен звучать в игре. Все же, меня громкость всех звуков через код - тоже не есть хорошо.
- Слишком громкий звук теряет свое качество и может сильно раздражать игроков. Перед его обработкой, обязательно снизьте громкость, если он чрезмерно громкий.
- Слишком тихие звуки почти не будут слышны в игре. Их громкость на данный момент времени нельзя повышать в коде игры. Следует стабилизировать громкость на этапе обработки.
- Следите за качеством вашей работы.
- Звук должен звучать наиболее реалистично и физически осмысленно. Может быть, это новое шипение ксеноморфа? Хорошо, но оно не должно звучать как шипение кошки. Это должен быть хищнический и хитрый звук. Возможно, что кошачье шипение будет отдаленно напоминать вашу цель, но это может плохо сказаться на атмосферности игры. Вы ведь не забыли, что мы здесь с вами делаем качественные и реалистичные звуки?
- Старайтесь избегать добавления эха при помощи программы. В игре существует свой собственный код по динамической обработке звука. Если кто нибудь, помимо вас, будет добавлять универсальное эхо для всех игровых звуков, то наложение эха подарит вам повышение громкости звука, ощущение "кашицы" в нем, а так же его потери универсальности.
- Вы можете добавить в коде игры переменную is_global = 1, если вам так необходимо эхо. И все же, оно крайне не рекомендуется.
- Если все же вам нужно наложить эхо - не забывайте о качестве! Если это, например, звук отстыковки для экстренных капсул - стоит добавить подходящее эхо для крохотных помещений. Это анонс о надвигающейся ионосферной аномалии? Выкрутите эхо на максимум, ведь станция - не маленькая, а большинство персонала будет находится в ее широких коридорах и больших отсеках.
- Добавляйте эффект "препятствия" вашему звуку, если он задумывается как звук, исходящий из чего то, что недоступно по стандарту обычному глазу, руке игрока. К примеру, это постукивание, удары внутри шкафчика. Это должен быть приглушенный звук с эффектом препятствия, не так ли?
- Стерео звук, в котором часть звуков идем в левое ухо, а другая часть - в правое - плохое решение. Если скачанный вами звук уже идет в таком формате - вы можете смержить его до монозвука вручную. Не забудьте при этом немного повысить его громкость.
- Придерживайтесь стандартизированных названий ваших звуковых файлов, сортируйте ваши звуки
- Если вы будете создавать большое количество различных звуков, то вы можете потеряться во всем этом! Для предотвращения этого, рекомендуется помещать звуки в разные папки с нужными названиями, а так же называть сами файлы так, чтобы они соответствовали содержанию звука
- Вы так же можете заняться этим на последнем этапе - добавления звука в игру. Но все же, эта рекомендация остается в силе.
Работа со звуком на примере программы FL Studio
Допустим, что мы обрабатываем какой нибудь звук. Так как именно его изменять?
Базовые инструменты FL Studio
Знакомьтесь с FL Studio! Запутанный на первый взгляд интерфейс на самом деле достаточно простой. Вам придется пользоваться только частью его функционала, ведь мы создаем не музыку, а всего лишь звуковой файл. Для упрощения ознакомления вас с этой неплохой программой я выделил 4 цифры:
- Основные инструменты, которые используются при работе, как правило, с несколькими звуками. По большей части вы будете использовать лишь некоторые.
- Инструмент-карандаш.
- Позволит вам перемещать звук по полю редактирования, подогнать его по таймингу, если вы скрепляете несколько звуков. Универсальный. Удерживая звук при помощи ЛКМ вы моежте перемещать звук. Нажав по звуку, а потом по пустому месту в поле - вы скопируете этот звук в определенное место. Нажав ПКМ по звуку - вы его удалите.
- Кисточка.
- С помощью нее можно копировать звуки. Но с этим отлично справляется карандаш.
- Перечеркнутый круг.
- Удаляет звуки по клику... Но с этим отлично справляется карандаш.
- Динамик с крестиком.
- Делает выбранный звук беззвучным. Не удаляет, а именно "выключает" его. Можно вернуть слышимость тем же инструментом.
- Две стрелочки.
- Можно смещать звук относительно его рамки. Полезно, когда, например, вы обрезали часть звука.
- Канцелярский нож.
- Обрезает звук. С помощью ЛКМ можно нарезать звук хоть на тонкие слайсы! Потом эти слайсы можно удалить с помощью карандаша или специального инструмента удаления. С помощью ПКМ можно обрезать и удалить часть звука сразу.
- Пунктирная рамка.
- Позволяет выделить сразу несколько звуков. Не так полезно при работе со звуками, а не с музыкой.
- Лупа.
- Очевидно, что она делает приближение в том месте, где вы нажали ЛКМ.
- Динамик с полосами громкости.
- Дает вам возможность прослушать конкретный звук при нажатии на нем ЛКМ. Удивительно, но, смотря куда вы нажмете и сколько будете держать кнопку, с такого места и столько он будет проигрывать этот звук.
- Но при обычной работе вам придется использовать в основном карандаш и канцелярский нож. Иногда заглушение звука.
- Инструмент-карандаш.
- Это ваш звук! Вы можете применять все инструменты, обозначенные сверху. Как видите, вокруг него много звуковых дорожек. Сверху обозначены условные единицы, подобие секунд. Каждая такая единица - две секунды. Начинаются они не с нуля, а с одного, так что имейте это в виду. Вы можете менять масштаб поля при помощи Ctrl + Колесико мыши.
- При двойном щелчке по конкретному звуку в поле, вы можете открыть панель редактирования звука. Снизу так же ваш звук - вы можете прослушать его, кликнув по нему.
- {PITCH}.
- Меняет тональность звука
- {MUL} и {TIME}.
- Меняет длительность звука вместе с тональностью.
- {PITCH}.
- Более тонкие инструменты настройки звука.
- Здесь будут расписаны лишь основные инструменты, которыми вам придется пользоваться.
- {Normalize}.
- Нормализует звук и его громкость. Фиксирует громкость звука, если включен. Если звук был слишком тихим или громким - он станет нормально слышимым.
- {Reverse}.
- Реверсирует звук, то есть воспроизводит его наоборот. Не рекомендуется использовать этот инструмент для ваших звуков. Действия этого инструмента ясно ощутимы - звук перестает звучать хорошо, четко слышится реверс.
- {SMP Start}.
- При увеличении этого ползунка, звук будет начинаться раньше. То есть, он сместится немного назад, за поле. Полезно, если звук начинается с тишины. Так же очень полезно при создании зацикленных звуков - можно легко по чуть чуть перемещать его, чтобы синхронизировать его старт с концом, без всяких щелчков или заиканий.
- {Length}.
- Меняет длительность звука. То же, что и SMP Start, только наоборот - убирает звук с конца. Звук будет заканчиваться раньше. Рекомендуется использовать, если ваш звук слишком долгий и его обработка вызывает проблемы с производительностью.
- {In}.
- Плавный старт звука, наращивание громкости с начала. Чем выше значение - тем сильнее будет заглушен старт и тем плавнее звук начнется
- {Out}.
- То же, что и In, только наоборот. Конец звука будет тише, будет заканчиваться плавнее
- Важное замечание для In и Out. Обрабатывается весь звук, а не лишь тот кусочек, который находится у вас в поле. Если звук длинный, то придется выкручивать оба значения на большие значения или подумать об изменении его длины.
- {Crossfade}.
- Проигрывает в конце звука его же, только наоборот. Чем выше значение, тем больший "кусок" звука он проиграет наоборот ближе к концу. Не рекомендован к использованию по тем же причинам, что и в Reverse.
- Вы можете нажать на гаечный ключ или значок справа от него, тогда вы смените режим настройки звука. Это еще более тонкие настройки, со своими "фичами"
- {Boost}.
- Увеличивает громкость звука на значения, превышающее 100% от его первоначальной громкости. Не злоупотребляйте этим инструментом.
- {EQ}.
- Похожий по действию на Boost ползунок. Крутите вправо - увеличиваете громкость. Влево - уменьшаете. Меньшая потеря качества звука при обработке этим инструментом, по сравнению с Boost.
- {RM Mix}.
- Добавление помех, щелчков, интерференции на звуке. Полезно, если вы создаете какой нибудь роботизированный голос, или же какие нибудь помехи.
- {CUT}.
- Чем ниже значение, тем больше будет ощущаться эффект "препятствия" между звуком и вами. Например, если действия происходят где нибудь под полом.
- {RES}.
- Чем выше значение, тем больше будет симулироваться плохое качество звука. Будет так же добавляться некий писк. Полезно при параллельном добавлении помех с помощью RM Mix.
- {Reverb}.
- Ощущение объема вашему звуку, эхо. Нулевое значение - отключен. Минимальные значения - эффект крохотной комнатки. Максимальные значения - ощущение ангарности.
- Reverb {B}.
- Звук ощущается как настоящий, у вас в комнате или где нибудь еще! Добавление слабого эффекта эха.
- Reverb {A}.
- Сильное эхо, максимальная реалистичность.
- {Boost}.
Установка битрейта и формата звука
Чтобы сохранить звук, нажмите {FILE} слева вверху, затем {Save as}. Выберите формат {.ogg}, назначьте название звуку и сохраняйте его.
Опа! А вы думали сохранять звук так просто? На самом деле да, эта панель не должна вас пугать. Здесь вам нужно только изменение стереозвучности/монозвучности звука, а также, самое основное - битрейт. Помните рекомендации по битрейту? Самое время ими воспользоваться!
Порядок действий при сохранении звукового файла:
- Ваш звук звучит в стерео нормально? Есть ли сильные расхождения между ЛЕВО и ПРАВО? Если да, то стоит смержить его до монозвука. Для этого нажмите на {Stereo} и выберите {Mono(Merged)}. Надеюсь в таком случае вы не забудете, что при смерживании в монозвук, громкость и вес самого звука немного уменьшается?
- {Merged(Left)} и {Merged(Right)} используются для проигрывания звука лишь в одно ухо. Не используйте эти варианты.
- Установите битрейт в 64 кб/с при помощи горизонтального ползунка.
- Проверьте параметр {Disk space: NN KiB}. Он превышает 100 КБайт? Тогда стоит уменьшить битрейт звука до 32 кб/с.
- Если он все еще весит больше, чем 100-150 КБайт, то стоит изменить его или найти альтернативное решение, например - зацикливание короткого фрагмента этого звука.
- Сохраните звук, нажав в этом окошке снизу {Start}
- Дождавшись рендеринга звука, скройте FL Studio и прослушайте ваш готовый звук. Не убил ли низкий битрейт ваш звук?
- Ощущается потеря качества или он звучит паршиво? Попробуйте увеличить битрейт звука в вашей скрытой FL Studio. Просто сохраните его снова, повысив битрейт до 128 кб/с. Не забывайте о пороге в 150 КБайт.
- Все еще звучит отвратительно и вы хотите идеальный звук? Странно, до этого обычно дело не доходит. Хорошо, но обратите внимание на его вес. Если он незначительный, то, думаю, вы можете повысить битрейт и до 256 кб/с. Все же, это не приветствуется.
- Прослушайте ваш звук несколько раз, погрузитесь в себя. Это то, чего вы хотели? Именно этот звук должен отражать сущность того действия в игре?
- Не бойтесь начинать работу с начала! У вас все еще есть скрытый FL Studio. Может быть, вы захотите изменить какие нибудь параметры звука, или изменить тайминг воспроизведение какого нибудь из его фрагментов? Или, возможно, вам придется начать работу с нуля, ведь вы осознаете, что те звуки, которые вы выбрали, плохо подходят для этого?
Вживление звука в игру. Финальный этап
И так, похоже, вы наконец то доделали свой звук и готовы добавить его в игру! Отлично. Прежде чем начать, я вас предостерегаю, что на этом этапе не стоит удалять те фрагменты звука, из которых он был составлен(если звук сложный). Они могут вам пригодиться для создания новых звуков, похожих на старые или для переделки звука, если он не понравится вам или другим людям.
Чтобы начать работать в дриммейкере, для начала вам необходимо пройти все этапы "становления" вас на гитхабе, а именно:
- Регистрация в гитхабе
- Скачивание и установка программы для работы
- Клонирование актуальной версии нашего билда
Так же вам необходимо перенести ваш созданный звук в уже клонированный билд. Папка со звуком находится в {####/TauCetiStation/sound/}. Ориентируйтесь по названиям папок в этой папке или создавайте свои, если вы добавляете сразу много близких по роду звуков.
Надеюсь, эти шаги уже выполнены вам. Теперь мы сможем приступить к самому дриммейкеру.
Знакомство с DreamMaker'ом
В начале откройте {taucetistation.dme} в {####/TauCetiClassic/}. Это то место, где вам предстоит кодить.
Ориентация в коде
Отлично, вы дошли сюда и все еще не передумали делать звук из за страшных мыслей о кодинге! Все гораздо проще, чем вы, вероятно, думаете. Вам нужно просто отыскать нужные строчки в коде. Для этого я помогу вам ориентироваться и в папках с кодом, использовать его поиск, ориентироваться в самих строчках. Это необходимо намного больше, чем знание того, как же все таки проиграть звук. Ведь вы же не запихнете звук туда, куда сами не знаете куда будете пихать?
- Если вы абсолютно не разбираетесь в коде, вы можете открыть любой файл и просмотреть синтаксис языка DreamMaker'a. Это не сильно поможет вам в вашей задаче, но поможет вам определить сходства с языком, который вы, возможно, уже изучали. Чтение кода с попытками его осмысления - неплохой способ обучиться кодингу, запомните это, как бы это странно не звучало.
Допустим, что вы уже отошли от шока, понимаете код хотя бы немножечко и готовы приступить к поиску той заветной строчки.
- А какой звук вы хотите добавить?
- Этот вопрос, вы, кажется, уже где то слышали? Не забывайте о ваших целях. Зная примерно, где должен проигрываться звук(вы же не просто так звуки создавали, верно?), вы сможете найти нужную папку, в папке вы найдете необходимый вам файл, а далее - и строчки кода.
- Поиск по дереву папок.
- Малоэффективный и затратный по времени поиск нужного вам файла. Следует ориентироваться на вашу интуицию, логику и знание английского языка в этом пункте. Может, это новый звук удара баллона? Тогда однозначно это что то материальное, и это даже определенный предмет. Значит стоит поискать в code/game/objects/items ? Хм... Это же оружие, верно? Тогда нужно найти что то связанное с оружием. Может weapons? guns? extinguisher в конце концов?
- Поиск по файлам в билде.
- Достаточно эффективный способ найти нужный для вас файл, но для этого также нужно обладать теми же качествами, что и в пункте выше. Алгоритм действий похож на предыдущий, только здесь не придется применять такую логику. Здесь больше интуиции - как бы могли предыдущие разработчики назвать файл, который бы мог содержать интересующий вас процесс или объект?
- Поиск по строчкам кода.
- Так же эффективный способ поиска, но занимает много времени и требует небольшого знания кода. Это же надо, проверить все эти кучи файлов в игре, все их строчки и буквы! Ориентироваться здесь нужно на свои знания кода или уже залитые файлы. Может быть, вы хотите добавить вариативности звука? Вбейте в поиск старый звук формата {sound/*****.ogg}. А может это озвученное действие моба? Введите то, что должен вводить пользователь в F3 в игре, а именно, например, {*cough}. Ведь что то же должно вызывать сообщение с эмоутом, если введено {*cough}?.
- {Find next} находит следующую совпадающую строчку в коде именно в порядке расположения папок и файлов в игре. Еще берется в учет то, куда вы кликните своим курсором - с того места он и будет начинать поиск. Find all - находит все совпадения в одном открытом файле или во всех файлах игры.
- Вы можете выбрать вариант в {Search} - {This file} или {All files}. {All files} ведет поиск совпадающих с вашим запросом строчек по всем файлам игры! Занимает обычно около 15 секунд, может больше(зависит от производительности вашего ПК).
Базовые знания о кодинге звуков.
Неплохо изучить основы кодинга вы можете при помощи руководства анимуса. Здесь же советы будут даны с расчетом на то, что вы уже хоть немного понимаете код.
Удивительно, но просто вставить свой звук куда нибудь в процесс или объект не выйдет. В большинстве случаев придется более подробно смотреть строчки кода в том районе, куда, предположительно, вам нужно будет вставить звук. Вы ведь не хотите зацикленных, обрывистых или вызывающих рантаймы звуков? И это, к слову, не все. Часть из них находится в файле {sound.dm}. Помимо них, существует несколько других способов добавления звука в код(некоторое могло немного устареть):
- /proc/playsound(atom/source, soundin, volume_channel = NONE, vol = 100, vary = TRUE, extrarange = 0, falloff, channel, wait, ignore_environment = FALSE, voluminosity = TRUE).
- При призыве этого прока будет воспроизводится по умолчанию объемный звук. Этот прок будет использоваться вами чаще всего.
- Чтобы это сделать, вам нужно написать в нужную строчку прок {playsound(*источник*, *путь к звуку*, *звуковая категория*, *громкость*, *вариативность*, *доп. радиус*, *парам. сниж. громкости с расстоян.*, *канал*, *ожидание*, *парам. учета окружения*, *объемность*).
- Конечно же, все эти параметры не обязательно указывать. Вы можете указывать их в том порядке, в котором они расставлены, без присваивания переменным значений, то есть вместо {vol = 100} после пути к звуку вы можете просто написать {100}.
- {atom/source}.
- Источник звука. То, к чему он будет привязан. К примеру, {src} - источник звука, {owner} или {host}(это разные вещи, просто немного похожи) - обладатель источника звука или какая либо другая переменная, которую вы могли обозначить в коде несколькими строчками выше. Вы можете добавить "приставку" {.loc}, если хотите привязать звук к месторасположению чего либо.
- {soundin}.
- Путь к звуку или текстовое название переменной {soundin}, которая превратится в один из заданных путей. Путь к одному звуку указывается в формате {####, 'sound/test.ogg', ####}. Путь к сразу нескольким звукам задается либо в самом проке, где вам нужно проиграть звук при помощи {####, pick('sound/test1.ogg', sound/test2.ogg'), ####}, либо в проверке на "текстовость" soundin'a. В данный момент он находится снизу в {sound.dm}.
- {volume_channel = NONE}
- Категория звука. Создана в основном для преференсов, для слайдеров громкости звуков. Выставлять нужно обязательно. Уже созданные категории звуков можно посмотреть в дефайнах(не пугайтесь этого слова), а именно в {_DEFINES\sound.dm}. Зачастую придется выставлять {VOL_EFFECTS_MASTER}, так что, если вам страшно лезть в непонятные дефайны из больших, зеленых и угрожающих букв, можете прописать на месте этого аргумента именно {VOL_EFFECTS_MASTER}. Но, все же, я советую вам просмотреть все дефайны звуков перед началом работы.
- {vol = 100}.
- Громкость звука, в процентах.
- Зависимость нелинейная, больше похожа на кусочек параболы.
- {extrarange = 0}.
- Дополнительные радиус звучания. Положительные значения увеличивают радиус, отрицательные же уменьшают
- Каждая единица этой переменной изменяет дальность звука на 3 тайла
- Минимальное значение переменной, при которой прок playsound() еще имеет смысл: -6. При таком значении звук будет слышен мобам, находящимся на расстоянии не более трех тайлов. При: -7 звук будет слышен лишь мобам, находящимся на тайле с источником звука.
- {falloff}.
- Громкость на определенном расстоянии будет постоянна, а меняться она будет только когда вы отойдете от источника звука достаточно далеко. Причем будет она меняться в сторону уменьшения громкости - чем выше значние {falloff}, тем медленнее будет убывать громкость.
- {channel}.
- Канал звука. По умолчанию равен 0, то есть любой случайный и свободный из 1024 доступных. Два или более звуков, проигранных на один канал за короткий промежуток времени перекроют друг друга. Более поздний звук "заткнет" более старый, если тот еще не завершен и если переменная wait = 0.
- {wait}.
- Ожидание окончания предыдущего звука на определенном канале. По умолчанию отключен, то есть, звук не будет ждать другой звук - он просто перекроет его. Если переменная включена, то звук добавится в очередь, пока не проиграется.
- {ignore_environment = FALSE}.
- Параметр, который отвечает за эхо. При положительном значении эхо фактически будет отсутствовать(присвоен тип окружения 2 из за технических проблем с бьендокодом), не будет браться в учет окружение, сознание моба.
- {voluminosity = TRUE}.
- Объемность звука. Будет ли звук слышен в разные уши или же нет?
- /mob/proc/playsound_local(turf/turf_source, soundin, volume_channel = NONE, vol = 100, vary = TRUE, frequency, falloff, channel, repeat, wait, ignore_environment = FALSE, voluminosity = TRUE).
- Проигрывает звук конкретному игроку. Переменные не различаются, поэтому я не буду их объяснять
- Напишите {M.playsound_local(null, ####)}, где M - определенный моб, которому нужно проиграть звук. Такое можно сделать, например, в цикле. Переменная может иметь другое название и быть привязана к подклассу моба, например, к людям {mob/living/carbon/human/H}. Разумеется, в начале нужно устроить несколько проверок и присвоить мобу переменную подкласса человека. Удивительно, но унатх, таяра, абдуктор, тенелинг и так далее также являются людьми!
- /mob/proc/playsound_music(soundin, volume_channel = NONE, repeat = FALSE, wait = FALSE, channel = 0, priority = 0, status = 0)
- Отдельный прок для проигрывания музыки, эмбиентов и всего прочего, что не требует учета окружения и других сложных проверок. В основном здесь схожие с прошлыми проками аргументы, но давайте рассмотрим новые!
- {repeat = FALSE}
- Повтор звука. Если аргумент - истина, то звук будет воспроизводится после его же окончания бесконечное число раз, пока его что то не прервет. Например, какой то другой звук с более высоким или таким же приоритетом на одном и том же канале, что и зацикленный звук.
- Этот параметр не стоит трогать, если у вас не очень много опыта в кодинге. Ведь вы можете создать звук, который ничто не прервет. Здесь нужно многое учитывать.
- {priority = 0}
- Приоритет звука. Нужно использовать лишь вместе с использованием фиксированного канала. Звук с большим приоритетом прервет звук с более низком приоритетом на каком-нибудь канале.
- {status = 0}
- Статус звука. Здесь все более сложнее, чем с другими аргументами. Этот параметр изменятся при помощи битовых флагов, таких как {SOUND_MUTE}, {SOUND_PAUSED}, {SOUND_STREAM} и {SOUND_UPDATE}. Здесь, я думаю, не стоит описывать все подробно. Если вы новичок и ищете помощи в кодинге звуков, вы навряд ли поймете все что будет описано в этом аргументе. К тому моменту как вы наберетесь достаточного опыта, вы уже будете способны самостоятельно изучить этот аргумент. Разумеется, его лучше не стоит трогать, если вы конкретно не знаете что делаете.
- {M << sound('sound/example.ogg')}, где M - любая цель. Использование запрещено - используйте {playsound_local()} вместо этого.
- Посылает звук конкретной цели(в примере - {M}) при помощи стандартных операторов DreamMaker'a. ИСПОЛЬЗОВАТЬ ЗАПРЕЩЕНО, приведено для ознакомления.
- {fire_sound} - переменная для огнестрельного или энергетического оружия.
- Проигрывается звук при выстреле. Эта переменная, а не прок, поэтому необходимо присвоить ей определенный значения при помощи {fire_sound = 'sound/example2.ogg'}
- {hitsound} - переменная для холодного оружия.
- Проигрывается звук при ударе по чему-либо. Это также переменная, а не прок. Присвойте ей значение {hitsound = 'sound/bolon.ogg'}
- {usesound} - переменная для определенных действий.
- Проигрывается звук, когда что то с чем то взаимодействует. Например, моб откручивает что то гаечным ключом. Присваивание значения так же, через {usesound = 'sound/tool.ogg'}
Помимо всех проков, проигрывающих звук, есть куча служебных проков, которые созданы, в первую очередь, для слайдеров громкости. Постарайтесь не запутаться, не обращайте внимания в первое время на все остальное. Вы можете также создавать свои проки или переменные и использовать их в своих целях. Главное не забывайте, что мы делаем качественные звуки и качественный код, поэтому не переборщите!
Примеры фрагментов кода с использованием различных проков
Здесь будет несколько вырезок из уже созданного кода. Разумеется, на каждый скриншот будет дано небольшое пояснение. Здесь будут такие проки, как {playsound()}, {playsound_local()}, {var/fire_sound} и {var/use_sound}. Пояснения к {<<} и {SEND_SOUND()} не будут из за их схожести с {playsound_local()}
- {var/usesound}.
- Как видно, здесь все предельно просто. Вам лишь необходимо в нужном инструменте или оружии(или любом другом предмете) присвоить конкретное значение переменной, а именно путь к звуковому файлу. Здесь вряд ли потребуются особые условия, проверки или любое другое.
- {var/fire_sound}.
- Аналогично с {var/usesound}. Просто указываете в этой переменной путь к звуку и все.
- {playsound_local()}.
- Это уже прок, а не переменная, и его нужно вкладывать в другой прок, вау. Здесь все немного посложнее. Все зависит от случая. Если необходимо проиграть звук нескольким мобам, которых что то объединяет, будь то поле зрения моба, нахождение его в определенной зоне или что либо другое. Цикл в данном примере проигрывает каждому мобу в зоне {end_location}, пока такие мобы не закончатся. Это переменная, а не зона, поэтому необходимо присвоить этой переменной свою зону, что сделано немного выше. Посмотреть зоны вы можете при помощи редактора карт в DreamMaker'e. Если же нужно проиграть звук какому нибудь одному мобу - сначала уточните какому. В таких случаях циклы обычно не делают. Перед этим проком через точку обозначено, кому же все таки проиграть звук. Указание источника в скобочках не обязательно.
- {playsound()}.
- Также прок, который нужно вкладывать в другие проки. В данном случае - звук проигрывается при спавне движущихся частиц в ускорителе частиц. Здесь, в отличие от {playsound_local()}, нужно указать источник звука, ведь этот звук привяжется к источнику. Если его не будет - к чему тогда привязывать? Если этого не сделать, то и звука не будет.
Советы, замечания, фичи при кодинге звуков в DreamMaker'e
Здесь будет вестись речь только о коде, который необходим для добавление звука в игру. Если вы хотите ознакомиться с полным списком замечаний и советов, то вы можете прочитать эту статью.
- Следите за копипастой в коде.
- Ощущаете, что добавляете слишком много похожих строчек в разные проки или даже файлы? Тогда, возможно, вам стоит задуматься о внесении проигрывания звука в какой то единый прок. А может этот звук можно вынести в прок родителя, объединяющего все проки?
- Вносите звуки с вариативностью в списки в {sound.dm}, если в дальнейшем предвидится работа с этими звуками вами или любым другим кодером.
- Другим саундмейкерам будет проще в работе, если им не придется искать эти звуки по всем файлам. Это - единое место, склад звуков. Добавлять вариативные звуки в сам прок или создавать новые списки нужно лишь тогда, когда вы знаете, что с этими звуками вам или любому другому кодеру вряд ли предстоит работать в дальнейшем.
- Все новые каналы стоит заносить в {####\code\__DEFINES\sound.dm}.
- Другим людям будет проще работать с каналами. Меньше вероятности того, что они будут использовать уже занятый чем то канал в своих целях. К тому же так легче отследить уже занятые, на случай их изменений.
- Не используйте {## << sound(####)} или {## << 'sound/##'}! Вместо этого воспользуйтесь проком {send_sound(##)}
- В коде бьенда есть небольшие проблемы с окружением. Чтобы их обходить, был создан прок {send_sound(##)}. Он почти не отличается от стандартного {sound(##)}, но присваивает по умолчанию переменную {environment = 2}. Проблема эта заключается в том, что переменная окружения делает эхо для всех звуков в игре как только была присвоена. Но некоторым звукам не нужно эхо. Например, музыка в лобби или бвоиньк педалей.
- Следите за возможностью спамом звука.
- Иногда бывает лучше добавить новую переменную, которая ограничивать число проигрываний звука за определенное время, чем потом слышать то, как вашими звуками спамят.
- Всегда устраивайте неоднократные тесты на локальном сервере с вашими звуками и обращайте внимание на их громкость в игре.
- Зачастую громкость или радиус слышимости звуков приходится калибровать. Сейчас вам кажется, что громкость нормальная и не давит на уши, а потом оказывается, что это достаточно громкий звук, который будет раздражать всех игроков.
- Сортируйте свои звуки в папке {####/sound/} грамотно.
- Будет гораздо легче ориентироваться и искать нужные звуки, если здесь все будет расставлено по полочкам. Не бойтесь создавать новые папки, если вы сделали несколько звуков "одной природы". например, это могут быть звуки треска стекла при нагрузке - просто сделайте новую папку в sound/effects/ и перенесите эти звуки туда.
- Обращайте внимание на фидбек игроков при создании ПРа.
- Этот совет достаточно общий и не относится лишь к созданию звуков. Но именно в саундмейкинге это важно, ведь, если звук будет достаточно раздражительным, то игроки ничего не смогут с этим поделать. На данный момент нет таких преференсов, которые могли бы блокировать определенные звуки. Игрок либо слышит все звуки и терпит/наслаждается ими, либо играет без звука, что тоже не есть хорошо, если причиной этому являются ваши некачественные звуки.
- Запись видеоролика с демонстрацией новых звуков приветствуется.
- Связано с предыдущим пунктом в данном списке. Вам будет легче услышать фидбек игроков и изменить звуки в лучшую сторону, если вы запишите видео, где показывайте, даете прослушать новые звуки в игре.
Пошаговые примеры добавления звуков различной степени сложности
Для упрощения ваших начинаний в саундмейкинге, здесь будет краткие шаги моих рассуждений и комментариев во время добавления простого звука. Все будет описываться с расчетом на то, что вы уже ознакомились с остальной частью данной странички википедии.
Добавление простейшего звука
Надо же с чего-то начинать! Здесь будет разобрано добавление звука переключения прожектора. Он целый и не состоит из нескольких частей, без специальной обработки. В коде из особенного он будет иметь лишь КД.
Все описание поиска и добавления звука будет достаточно детально и будет отражать порядок действий при его добавлении.
- Поиск звука.
- Звук переключения прожектора не имеет звук, какой ужас! Немедленно исправить!
- Начнем поиски с фрисаунда
- Как могли бы назвать свое творение авторы еще не найденного нами звука? Может "light switch"... Нет, здесь одни проклятые фонарики и настенные переключатели, а нам нужен пафосный звук, черт возьми!
- Спустя пару попыток догадываемся, что надо было начать поиск с "spotlight"...
- Отыскиваем среди результатов годные звуки. Так... Этот с писком, этот с сильным эхом, а это... Что это, это точно звук прожектора?
- Находим годный звук.
- Прослушаем его несколько раз и убедимся, что, кажется, он подходит для нашей цели. Скачаем же его!
- Обработка звука.
- Откроем нашу программу(в данном случае FL Studio) для обработки звука. Как минимум, нужно обрезать ему битрейт, он весит почти мегабайт!
- Ого. Убеждаемся, что звук слышится по другому, когда скачан.
- Прослушаем звук пару раз. Это стерео звук, причем разные его части идут в разные уши, какой ужас. Нужно будет мержить его до монозвука.
- Отлично. Вероятно, это все. Звук не требует дополнительной обработки и готов к рендеру.
- Сохраняем наш звук. В открывшемся окне называем наш звук {spotlight}, меняем его формат на {.ogg}. Сохраняем... Но это еще не все, в открывшемся окне выбираем {Mono(merged)}, ограничиваем битрейт до 64 кб/с
- Нажимаем {Start}, ждем окончания рендера звука.
- Скрываем FL Studio, прослушиваем наш звук в битрейте 64 кб/с. Он звучит нормально. Мы готовы к добавлению его в игру.
- Вживление звука в игру.
- Создаем новую ветку в нашем форке.
- Подробнее здесь
- Ищем куда нам нужно добавить звук.
- Откроем же папочку со звуками. У нас один звук, верно? И вряд ли кто то будет добавлять ему вариативность. Кинем его в {####/sound/effects/}. Это будет нормальное решение
- Теперь приступим к коду! Воспользуемся глобальным поиском по словам. Но что же нам ввести... Не помним как называется прожектор в игре, ведь {spotlight}-название скачанного нами звука сбивает нас с толку.
- Захостим нашу локалочку, переключим прожектор, может нам выведется сообщение об этом.
- Удача улыбнулась нам. Кто то написал лог в игру о переключении света: {You turn ## the light}. Используем часть {You turn} в поиске.
- Поиск нужного фрагмента кода и добавление туда своей собственной строчки.
- Находим эту строчку в проке {/obj/machinery/floodlight/attack_hand(mob/user)}. Обращаем внимание, что логи добавлены для включения и выключения, а не общие, для переключения. Добавлять придется каждому из двух.
- Просто добавим строчку {playsound(src, 'sound/effects/spotlight.ogg', 100, 0)} в оба ифа с переключением.
- Предполагаем, что этим звуком могут спамить. Создадим новую переменную в {/obj/machinery/floodlight}, сверху. Назовем ка ее {var/last_floodlight_sound = 0}
- Стоит ли добавлять КД всему блоку кода с переключением или только звуку? Думаю, нужно понерфить скорость его переключения.
- Добавим строчки с ифами перед {if(on}, сделаем проверку при помощи вычислительных операций и сравнении нашей переменной с мировым временем.
- Отлично. Компилим наш билд.
- Создаем новую ветку в нашем форке.
- Тесты, калибровка, создание ПРа
- Тесты звука.
- Билд скомпилился без ошибок. Великолепно. Хостим и проверяем наш звук на локалочке.
- Входим в обсерв, убеждаемся что мы не забыли [Server_Startup|прописать себе права администратора]
- Переходим во вкладочку {Debug} в игре, далее - {Spawn}. Вводим уже известное нам название прожектора - {floodlight}.
- Спавним себя. Даже не дожидаясь старта игры, кликаем на наш прожектор со всей силы. Убеждаемся, что у него теперь есть КД и звук. Замечательно!
- Обращаем внимание на громкость звука. Она нормальная, кажется...
- Создание ПРа.
- Заходим на наш гитхаб, входим в аккаунт, заходим в {Pull requests}. Нажимаем New pull request. Выбираем ветку, где мы делали изменения.
- Убеждаемся, что это действительно те изменения, которые вы делали. Создаем ПР, оформляем его по шаблону, по желанию делаем видеоролик с обзором на новый звук, ждем ответа мейнтейнеров.
- Тесты звука.
Добавление звука нового автоматического анонса ИИ стандартного типа
Что же, здесь вам придется хоть немного напрячься. Звук будет состоять из двух составных частей и будет представлять из себя автоматический анонс ИИ о том, что общий доступ к техническим тоннелям станции убран. Нам здесь придется добавить эхо в звуки, паузу между ними. В принципе, это не так сложно, сейчас я попробую вас убедить в этом.
Перед тем как начать, я покажу вам несколько ссылок на полезные программы или звуки, необходимые для создания стандартного анонса на подобии тех, что есть сейчас в билде:
- Стандартный, спокойный анонс перед сообщением
- Стандартный, тип 1, требующий повышенного внимания анонс перед сообщением
- Стандартный, тип 2, требующий повышенного внимания анонс перед сообщением
- Тревога, объявляющая чрезвычайное положение на станции
- Тревога, объявляющая об экстренной ситуации на станции
- Синтезатор речи. В ассортименте два голоса женщины(Lisa, Allison) и один голос мужчины(Michael).
- Поиск звука
- Звука-анонса о доступе в техтоннели нет в билде, кошмар! Надо срочно исправлять.
- Синтезируем голос при помощи этого сайта. Это первый шаг к созданию анонса.
- Это всеобщий анонс или же локальный? Всеобщий, значит синтезируем голос "Lisa". Для локальных, на подобии звуков автопилота шаттла, стоит использовать "Allison".
- Вводим в поле нужные слова(копипаста анонса из кода), нажимаем {Speak}, скачиваем созданный анонс.
- Начинаем поиски звука на фрисаунде. Это важный анонс и нужна ли ему тревога? Нет, поэтому нужно что то спокойное...
- Этот подходит для этой задачи лучше всего. Скачиваем звук.
- Обработка звука.
- Добавим два скачанных звука в поле FL Studio
- Прослушаем каждый из них, проверим на качество и решим, как же их обрабатывать.
- Звук анонса имеет эхо по умолчанию и обладает нормальным качеством. Голос женщины же не имеет эха. Нужно исправить!
- Двойной щелчок по голосу женщины, {Precomputed effects}, выкручиваем {Reverb} на максимум. Проверяем
- Эхо есть, но звучит не как для станции. Пробуем установить эхо на {A}-тип
- Отлично, все подходит идеально. Соединяем звуки воедино, добавив задержку между ними.
- Проверяем слепленный вместе звук ка качество. Звучит круто!
- Сохраняем звук в формате {.ogg}, урезаем его битрейт до 64 кб/с, называем по содержанию.
- Вживление звука в игру.
- Перемещаем звук в {####/sound/AI/}. Переименовываем, если вы это еще не сделали
- Открываем дриммейкер и готовимся кодить в нем. В начале найдем, где же этот звук расположен.
- Отлично, этот прок называется {/proc/make_maint_all_access(var/priority = FALSE)}. И в нем уже есть цикл, великолепно. Просто вставляем {M.playsound_local(null, 'sound/AI/maintenance_revoked.ogg', 70, channel = CHANNEL_ANNOUNCE, wait = 1, is_global = 1)}
- Если анонс реализован при помощи проков {captain_announce()} или {command_alert()}, то вам нужно присвоить в этом звуке значение переменное {sound = "maint_revoked"}(или другое название), перейти к проку, который выводит сообщение и добавить туда свою строчку с путем звука.
- Компилим билд, запускаем локалочку, форсим анонс при помощи панели и кнопки {Admin} => {Secters}.
- Калибруем громкость по усмотрению, создаем ПР и ждем мейнтейнеров.
Создание, обработка и добавление сложного звука
В данном step-by-step гайде вы попробуете составить звук из многих составных частей. А конкретно - это звук отстрела экстренной капсулы от станции. По возможности мы постараемся добавить в этот звук эмбиент, сделать его вариативным, и при этом добавить посторонние, немного даже "эмбиентовые" звуки, которые несут в звуке лишь второстепенный характер.
Также в этом гайде все будет описываться все более кратко, чем в простейших звуках или анонсах ИИ, ведь, если вы сюда зашли, то вы, наверное, уже понимаете, что и как делать?
- Поиск звука.
- Так... нам нужен звук отстрела капсулы... Из чего он может состоять? Однозначно здесь должна быть тревога и голос автопилота, а также сам звук отстрела. Немного эмбиентовых звуков небольшого реактивного двигателя в разные уши... И, наверное, эмбиент содержания "фуххх еле успел, спасся!".
- Приступим к поискам на фрисаунде. Начнем с тревоги, закончим эмбиентом. Каждый подходящий звук будем открывать с новой вкладки, чтобы не запутаться, а потом все разом скачаем и перенесем в блокнот.
- Тревога. Не должна быть громкой и пафосной, небольших пиков от какого-нибудь компьютера будет достаточно. Реактивный звук... Должен быть приглушенным и легким, ведь мы же не шаттл пилотируем. Звук отстрела должен быть негромким, но все еще ощутимым. И эмбиент, он должен звучать после отстрела, не должен быть навязчивым. Из за появления эмбиента нужно добавить вариативность звуку, ведь эмбиент должен вызывать какие то чувства у игрока, а не надоедать ему. Двух-трех будет достаточно.
- Введем в поиске что то на подобии "alert", "alarm", "aircraft alarm". Отлично, мы нашли несколько тревог: 1, 2, 3, 4. Позже мы разберемся как их обработать и вообще нужны ли все. Оставим в открытых вкладках, перейдем к реактивному звуку.
- Ищем звук отстыковки через поиск по "explosion", а реактивный звук можно подыскать через "jetpack". Подходящий звук отстыковки найден, реактивный звук тоже. Разбавим звук отстыковки гидравлическим звуком. Найдем так же небольшой звук глухого удара по металлу.
- Для разнообразия возьмем звук сонара, ведь звук отстрела капсулы с "несчастливыми событиями" слишком разнообразен, а удачный отстрел почти без звуков.
- Применяем разные фильтры, вводим названия, долго и муторно ищем эмбиенты. Найдено несколько эмбиентов, можно создать хоть 4 звука, но, думаю, обойдемся двумя. Первый, второй, третий, четвертый и пятый.
- Хорошо, с этими звуками уже можно работать. Синтезируем голос, воспользуемся переводчиком, включим фантазию и знание английского языка. Пускай первый звук будет "Attention. Shooting escape pod.", синтезируем его через "Allison". У нас есть несколько "тревожных" эмбиентов, куча звук тревог и прочего. Нужно добавить вариативный звук того, что отстрел идет не очень по плану: "Attention. Possible collision. Capsule flight course adjustment.". Теперь заставим автопилота сказать, что нам маячить в космосе приблизительно 2 недели: "The escape pod had reached a safe distance from the station. Estimated time of arrival of the rescue team: two weeks."
- Это все, можно скопировать все ссылки в блокнот, скачать звуки и закрыть вкладки.
- Обработка звука.
- Начнем со звука, который будет до отстрела. Это должна быть тревога с оповещением об отстреле капсулы. Соединим это все вместе и добавим эхо "крохотнного помещения". Снизим громкость, добавим звукам эффект препятствия.
- Соединив все вместе, нажмем {FILE} => {New}. Приступим к самому звуку отстрела. Это должен быть пафосный звук, с двумя различными вариантами, эмбиенсом, тревогами и синтезированным голосом. Сделаем то же самое, применим все наши знания и опыт в создании этого звука. Сделаем в начале звук с неудачным отстрелом.
- Отлично, теперь сделаем обычный звук отстрела, с сонаром. Добавим позитивный эмбиенс, немного обрезанных звуков тревог, чтобы звучало не так "сухо".
- Well done. Теперь, по желанию, спрашиваем мнения у других игроков перед тем как закрыть FL Studio(если у вас Trial-версия, вы не сможете открывать ваши сохраненные в формате {.fls} звуки. Только сохранять)
- Вживление звука в игру.
- Находим нужные строчки в {shuttles.dm}, привязываем звук до отстрела ко времени, а звук самого отстрела к тряске мобов внутри пода. Присваиваем переменную отстрела по умолчанию удачного отстрела, затем с {if(prob(40))} присваиваем ей другое значение - неудачный отстрел. Проигрываем звук после этих строчек. Предотвращаем дублирование звука перед отстрелом, добавляя туда статичную переменную.
- Компилим билд, устраиваем тесты, убеждаемся в адекватности написанного кода, создаем ПР на гитхабе. По желанию записываем видеоролик с обзором на звуки.