Визначення того, наскільки гучним є AudioClip


10

У мене є код, який використовує GetSpectrumDataаудіоресурс, який відтворює пісню, щоб створити рівневий макет для гравця, який може грати. Хочу додати функціонал, де гравці можуть завантажувати власні пісні та відтворювати рівні, створені за допомогою даних цих пісень. На жаль, при порівнянні різних аудіофайлів я зіткнувся з цим:

введіть тут опис зображення

Як бачите, амплітуда різко відрізняється від кліпу до кліпу, згодом створюючи рівні, тривіальні для завершення або майже неможливі. Я хочу знайти спосіб визначити цю "голосність", щоб я міг її зменшити або посилити множником після отримання даних із пісні. Також, чи є спосіб отримати ці дані без відтворення пісні?

Відповіді:


9

Зручний спосіб зробити це - використовувати AudioClip.GetData для отримання зразкових даних у масиві. Потім прокрутіть дані та знайдіть середньоквадратичну площу, щоб знайти «гучність» аудіокліпу.

Потім ви можете масштабувати весь масив так, щоб максимальне значення було 1,0f і записати його в аудіокліп за допомогою AudioClip.SetData . Це називається нормалізацією звуку , і змушує зразки мати найгучнішу точку до максимальної гучності. Зауважте, що це не враховує, що якщо ваші аудіокліпи мають дуже низьку гучність, але мають дуже високі піки. Для цього є більш досконалі методи (зазначено нижче).

Unity також робить нормалізацію автоматично за замовчуванням. Тож якщо ви не торкнулися налаштувань імпорту, ця операція виконується автоматично, і вам не потрібно про це турбуватися. Якщо у вас все ще виникає проблема, навіть якщо ви впевнені, що звук нормалізується, вам, ймовірно, потрібно стиснути аудіо з стисненням динамічного діапазону (зауважте: дуже різна річ від стиснення даних, не має нічого спільного з розмірами файлів або використанням пам'яті) до відповідати вашим потребам із зовнішнім програмним забезпеченням.


Дивовижна відповідь, розглянемо все це більш докладно. Дякую!
Садівник

5
Максимальне значення не завжди є найкращим варіантом (як ви сказали). Дуже короткі гучні шипи (такі звуки, як клацання) не здаються такими ж гучними, як суцільний звук. Якщо ви хочете, щоб сприймалася гучність, вам потрібно вирівняти всі значення, середньозначити це, а потім взяти квадратний корінь. Це робиться так, як це нормалізує, тому, сподіваємось, для цього створено Єдність.
Джеззамон

2
Гучність пов'язана зі звуковою енергією, і спосіб її визначення, як натякає @Jezzamon, шляхом обчислення середньоквадратичного квадрата (RMS). dsp.stackexchange.com/questions/2951/loudness-of-pcm-stream
Zac Crites
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.