Я уже спрашивал о нормализации громкости звука. При использовании большинства методов (например, ReplayGain, который меня больше всего интересует) я могу получить пики, превышающие PCM. ограничение (о чем также можно прочитать здесь).
Простая обрезка, вероятно, будет худшим, что я могу сделать. Как советует Википедия, я должен сделать некоторую форму сжатие динамического диапазона.
Я говорю о функции, которую я применяю к каждому отдельному значению выборки PCM. На другой похожий вопрос один ответ предполагает, что этого недостаточно или это не то, что я должен делать. Однако я действительно не понимаю этого, так как мне все еще нужно обрабатывать случай отсечения. Предлагает ли ответ выполнять сжатие диапазона сразу для нескольких сэмплов и делать простое жесткое отсечение в дополнение к каждому сэмплу?
Оставив это в стороне, функции, обсуждаемые в статье в Википедии, кажутся несколько не тем, что мне нужно (во многих случаях в конце я все равно получил бы случай отсечения). Я думаю об использовании чего-то вроде tanh. Это плохая идея? Это немного уменьшит громкость, но гарантирует, что я не получу отсечения.
Мое приложение представляет собой универсальный музыкальный проигрыватель. Я ищу решение, которое в основном работает лучше всего для всех, чтобы я всегда мог его включить, и пользователь, скорее всего, не захочет его выключать.