Используемая вами библиотека mp3 декодирует mp3 в "Raw" аудио, обычно PCM . В документации для NewDecoder также упоминается
Поток всегда форматируется как 16-битные (с прямым порядком байтов) 2 канала, даже если источником является одноканальный MP3. Таким образом, сэмпл всегда состоит из 4 байтов.
После этого вы можете найти точный формат звуковых данных. Похоже, это так же просто, как 16 бит слева, 16 бит справа, повторить. Это значение преобразуется в положение диафрагмы динамика.
Чтобы искать громкость, вам нужно искать большое значение или, возможно, большое изменение значения со времени последнего кадра. Вам не нужны вещи FTT. Это операция, известная как « быстрое преобразование Фурье ». Это позволяет вам видеть, какие частоты в настоящее время в звуке. Это полезно для определения высоты тона, но совсем не полезно для определения громкости. Я бы удалил практически все после декодера и попытался бы просто прочитать с него несколько байтов.
РЕДАКТИРОВАТЬ: После дальнейших размышлений громкий звук длится гораздо дольше, чем один образец (цифровой звук не это мое поле). - это то, как вы на самом деле это делаете -
Также обратите внимание: 16 битов могут быть подписаны или не подписаны (s16le или u16le). Похоже, что подписанный является «стандартным» и вероятным.
РЕДАКТИРОВАТЬ 2: Если вы не разрабатываете библиотеку обработки звука, я бы порекомендовал найти ее самостоятельно. Я лично использую GStreamer для такого рода вещей, но это то, что вам нужно (я просто рекомендую , а не ).
Может быть, что-то вроде библиотека типов данных PCM . Похоже, что они имеют некоторое усиление и масштабирование в здесь . Похоже, хорошее место, чтобы копать.