Генерація звуку для Unity-проектів за допомогою Chuck і OSC

Невелика замітка з озвучення проекту на Unity (Survival Shooter) за допомогою мови аудіо-програмування Chuck і Open Sound Control (OSC).
У результаті всіх маніпуляцій, вийшов такий результат:

Всі звуки генеруються «на льоту» в Chuck'е. Wav-файли, які не використовуються зовсім. Для генерації подібності голоси використано рішення, написане Perry Cook'ом для Chuck'а, суть рішення частково пояснюється в курсі Physics-Based Sound Synthesis for Games and Interactive Systems. Як пострілу використана звичайна пилообразная хвиля з «падаючим» питчем і додаванням хорус-ефекту.
Як це працює
Для посилки OSC-повідомлень використані напрацювання Mike Heavers'а. Їх потрібно імпортувати у Unity-проект: плагін Osc.cs, плагін UDPPacketIO.cs, скрипт OSCTestSender.cs. До кожного об'єкту, який видає звук, кріпимо ці плагіни і перероблений скрипт — для кожного він свій, змінюються адреси OSC-повідомлень.
Всього в проекті 9 джерел звуку:
  • Player Shoot
  • Player Hurt
  • Player Death
  • Zombunny Hurt (маленький зелений моб)
  • Zombunny Death
  • Zombear Hurt (маленький червоний моб)
  • Zombear Death
  • Hellephant Hurt (великий жовтий моб)
  • Hellephant Death
Прийняття OSC-повідомлень в середовищі Chuck робиться з допомогою класу OscIn. Вказуємо відповідний порт (oin.port) та адреса (oin.addAddress). Далі при вступі osc-повідомлення генерується звук.
На стороні Chuck зроблено 5 окремих проектів, кожен з яких приймає повідомлення по своєму порту і генерує відповідний звук(і):
  • oscin_shoot
  • oscin_player_hurt
  • oscin_zombunny_hurt
  • oscin_zombear_hurt
  • oscin_hellephant_hurt
Для тіста потрібно спочатку запускати всі програми Chuck — робимо окремий файл запуску init.ck. Потім запускаємо проект Unity. Граємо, OSC-повідомлення генеруються як тільки відбувається потрібну подію, Chuck приймає повідомлення і генерує звук.
Наочно це можна представити схемою:
Unity connected to Chuck via Open Sound Control

Єдина проблема з якою я зіткнувся — це перемикання OSC-порту на іншого мобу. Якщо спаунится багато персонажів, наприклад 3 зомбі-кролика, 2 зомбо-ведмедя, то звук буде програватися тільки у першого заспаунившегося мобу відповідного типу. Перемикання каналу відбудеться тільки після цього вбивства першого мобу. Поки швидкого рішення не знайшов.
Сподіваюся було цікаво, якщо у когось є цікаві посилання по даним темам (OSC, генерація звуку і т. п.) — будь ласка, поділіться в коментарях.
Дякую за увагу!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.