Отримання гучності треку за допомогою RMS


15

Я намагаюся обчислити гучність звукової доріжки, яку я зберегла в буфері. Буфер містить дані сигналу PCM, і я хочу отримати, наскільки він "голосний", використовуючи Root Mean Squared. Я припускаю, що можу це зробити у часовій області, замість того, щоб переходити на частотну область. Який би був псевдокод для цього?

Я б просто взяти вибірку на одну секунду (аудіо [0] - аудіо [44099], аудіо [44099] - аудіо [88199] тощо) та обчислити RMS цих значень? Наприклад, я би зробив це:

RМS=аудіо[0]2+аудіо[1]2+аудіо[2]2.....аудіо[44099]244100

на кожну секунду?


1
В виразі вище відсутня дужка - я б додав це сам, але, мабуть, потрібно редагувати принаймні 6 символів ...
Paul R

3
@PaulR - Ви можете додати, <!-- html comment -->щоб подолати обмеження символів у рідкісних випадках, якщо в іншому випадку ідеальний пост має крихітну, але дуже важливу помилку. Ця потреба виникає дуже рідко: зазвичай потрібно вдосконалити більше 6 символів. Наприклад, коли відсутні дужки, зазвичай краще використовувати \sqrt{}і \frac{}{}конструкції в TeX.
Кевін Вермер

1
@Kevin: дякую за пораду - я буду використовувати вашу пропозицію щодо коментарів HTML у майбутньому.
Пол Р

@PaulR - Це обговорювалося раніше: обмеження навмисне, призначене для запобігання неповних чи безглуздих редагувань (див. Захист тут ), але має своїх опонентів (див. Обговорення тут ).
Кевін Вермер

4
Зауважте, що лише RMS не розказує вам голосності. Надзвичайно низькі або високі частоти звучать менше, ніж 3 кГц того самого значення RMS. Фільтр з ваговим ступенем дасть точнішу оцінку. gist.github.com/148112
ендоліти

Відповіді:


12

Інша справа, що значення RMS не дуже добре співвідноситься із сприйнятою гучністю. Ви можете замість цього назвати рівень або гучність. Існує щось, що називається рівними контурами гучності, що визначає, наскільки чутливим є вухо до однієї конкретної частоти порівняно з іншою частотою, дивіться у статті Вікіпедії . Ці криві залежать від рівня. Наприклад, вухо дуже чутливе до тону 1 кГц порівняно з тоном 100 ГГц, як показано на цьому зображенні (горизонтальна вісь частота в Гц):

рівні контури гучності

Одне з відносно простих речей, яке ви можете зробити, - це фільтрувати ваші дані PCM за допомогою перевернутої кривої рівності гучності. Або ви можете застосувати стандартні Ваговий см Wikipedia Filter статтю Ваговий . Потім ви можете обчислити значення RMS на виході фільтра, що зважився на рівність по гучності.


Мені незрозуміло, як перейти від коду запитувача до цього. Приклад запитання - це підсумовування квадратів звукових зразків. Відповідь говорить про застосування фільтра до частот, тому здається, що "фільтруйте ваші дані PCM за допомогою перевернутої кривої рівності гучності" недостатньо. Спочатку ви повинні мати значення для кожної частоти, а потім можете зрозуміти, як правильно застосувати криву? Але це великий крок залишився.
gman

@gman Ідея полягає в тому, щоб попередньо обробити аудіо з фільтром, а потім використовувати результат, як у питанні (обчислення RMS). Я не на 100% впевнений, що ти маєш на увазі. Ви не впевнені, як зробити фільтрацію чи, можливо, конструкцію фільтра?
niaren
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.