Пиаудио байты данных в librosa с плавающей точкой - PullRequest
0 голосов
/ 24 ноября 2018

, когда звук записывается с использованием pyaudio с paInt16, он дает мне 16-битное целое число, представленное в виде двух байтов.После некоторого изучения я пришел к выводу, что это должно быть # от -32768 до 32767.

Я сохранил аудио как файл wav и загрузил его обратно с librosa.core.load.Я получил значение с плавающей запятой * 32767 и проверил, генерирует ли оно исходное целое число в 16 битов, но оно не совпадает вообще.

Мои вопросы

  1. Откуда происходит это несоответствие ??
  2. - это исходные 16-разрядные целочисленные данные, представляющие частоту?
  3. Состояние документа librosa, которое функция загрузки возвращает floating point time series.Как рассчитать это значение из исходного 16-разрядного целого числа?

1 Ответ

0 голосов
/ 06 декабря 2018

После изучения и изучения кода librosa, вот мои выводы.

  1. Несоответствие происходит из-за того, что байтовый массив wav имеет младший порядок

  2. Представление называется Импульсно-кодовая модуляция (ИКМ) .Каждая выборка (одно целое число) представляет величину звука, масштабированную до диапазона заранее заданного битового диапазона (обычно 16 бит).Подробнее см. глубина звукового бита

  3. Учитывая, что PCM представляет 16-битное представление, каждая выборка имеет диапазон [-32768, 32767].librosa просто преобразует 16 бит в знаковое короткое замыкание и делит на 32768 (не 32767!), чтобы уменьшить диапазон до [-1, 1].Пожалуйста, обратитесь к мой пример кода для точного преобразования

...