ПрограммированиеФорумЗвук

Как правильно сделать часто повторяющийся звук?

Страницы: 1 2 3 Следующая »
#0
22:09, 29 ноя 2020

Есть звуковой эффект для одиночного выстрела бластера, он длиной пол секунды (для примера).

Бластер стреляет 5 раз в секунду (тоже для примера), но иногда ускоряется до 7 выстрелов в секунду или замедляется до 3 выстрелов в секунду.

Как правильно запрограммировать этот звуковой эффект? Сейчас при каждом выстреле текущий эффект отменяется и заменяется собой же, но эффект начинается с начала. Я не совсем понимаю почему, но мне кажется из-за того, что существует некий лаг между софтом и железом, и из-за того, что звук отменяется в неподходящем месте возникают непрятные побочные эффекты: шум, треск, изменяется тон, звук в целом звучит неприятно.

У меня есть идеи как это можно попробовать исправить, но может есть какой-то стандартный способ как это делается?

Я использую SoLoud.

#1
22:20, 29 ноя 2020

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

#2
23:00, 29 ноя 2020

Наверное я или плохо описал вопрос, или плохо понял ответ.

Проблемы с каналами нет, каналов на всё хватает, есть проблема с тем, что длина эффекта не кратна "длине" выстрела из бластера. Эффект длится пол секунды, а бластер стреляет 5 раз в секунду, когда бластер делает новый выстрел, эффект от старого выстрела ещё играет и его надо как-то прервать, иначе звучит ещё хуже.

Ну как-то это делается в любой FPS, но я не могу нагуглить как. Ну нажимаешь лкм, оружие делает один выстрел, зажимаешь лкм, начинает стрелять очередью. Как это делается? При зажиме эффект лупится внутри себя, а при отжиме луп прерывается и эффект завершается или как-то попроще это можно сделать?

#3
23:08, 29 ноя 2020

ogfyodor
Один и тот-же  семпл воспроизводится в разных звуковых потоках, которые создаются для каждого экземпляра.
По окончании звучания экземпляра он уничтожается.

#4
23:28, 29 ноя 2020

flint2
Вот, вроде бы начинаю понимать. Два семпла воспроизводятся одновременно. А переход от "старого" семпла к "новому" делается через короткие fade-in/fade-out, да? Спасибо, попробую.

#5
2:13, 30 ноя 2020

ogfyodor
Мне кажется, что Fade-in — это подъем громкости (или любого другого эффекта), а fade-out, соответственно, спуск (уменьшение).
Я говорю о создании нового потока и его уничтожении, когда он доиграл, а громкость в нём сама идёт, как правило, на затухание. Чтобы не мониторить конец, используй Callback.
То есть у тебя воспроизводятся два потока со сдвигом по времени.
Если семплы достаточно длинные, то может появится эффект реверберации, тога можно принудительно применить затухание.

#6
4:07, 30 ноя 2020

ogfyodor

В SoLoud у источника звука можно запретить параллельное воспроизведение нескольких инстансов.

AudioSource.setSingleInstance()

This function can be used to tell SoLoud that only one instance of this sound may be played at the same time.

menuselect.setSingleInstance(1); // Only play it once, Sam

This may be useful if, for example, you play a sound effect every time user interacts with a menu, and don't want the effect to overlap.

#7
9:31, 30 ноя 2020

ogfyodor
>когда бластер делает новый выстрел, эффект от старого выстрела ещё играет и его надо как-то прервать
Это физически некорректно, не нужно ничего прерывать, при каждом выстреле запускай на воспроизведение еще один экземпляр звука,
прерывать нужно, только если нет доступных звукоресурсов.

#8
12:03, 30 ноя 2020

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

#9
13:00, 30 ноя 2020

ogfyodor
> короткие fade-in/fade-out, да
fade in точно не надо делать, т.к. это испортит сэмпл.

#10
16:08, 30 ноя 2020

fade in точно не надо делать, т.к. это испортит сэмпл.

Не испортит!
Это регулируется атака и затухание в потоке, а семрл остаётся, как был.

#11
19:25, 30 ноя 2020

flint2
Короче сделал, что когда бластер стреляет, он всегда создаёт новый эффект который начинает набирать громкость, а старый если есть, начинает быстро (но не очень быстро) затухать. Получается, что новый эффект быстро возникает, а старый быстро затухает.

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

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

Что весьма подозрительно, проявился похожий артефакт, что и при двух параллельных эффектах с принудительным затуханием - иногда возникает какой-то резонанс.

Походу дело в том как что-то где-то микширует звук, но хотя бы теперь понятно, что проблема где-то рядом с отменой эффектов и их лучше вообще не отменять. Спасибо.

#12
20:12, 30 ноя 2020

ogfyodor
> Что весьма подозрительно, проявился похожий артефакт, что и при двух параллельных эффектах с принудительным затуханием - иногда возникает какой-то резонанс.
Просто в природе не бывает полностью идентичных звуков, они всегда хоть немного, но отличаются.
Если звуковой движок позволяет, сделай звукам небольшое случайное растяжение.

#13
21:27, 30 ноя 2020

ogfyodor

от двух бластеров стреляющих друг рядом с другом иногда входят в резонанс и резко увеличивается громкость,

Всё индивидуально, надо смотреть по месту.
В одних случаях помогает сглаживание звукового потока, в других ограничение (наверное это тот случай), в третьих усреднение. Всё надо пробовать, одного рецепта нет.

#14
21:29, 30 ноя 2020

}:+()___ [Smile]
Вот это сильная вещь. Ещё немного слышно артефакт, но гораздо слабее. Возможно у меня эффект не очень мелодичный или я рнг плохо перемешал.

Ещё я сначала немного переборщил и аж по-другому зазвучало. Надо будет с этим поэкспериментировать, может фильтры какие-то добавить, я оценил мощь. От души спасибо.

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумЗвук

Тема в архиве.