Как мне найти шкалу между двумя различными сэмплами?

1

Я планирую сделать универсальное приложение, которое анализирует образцы аудио. Когда я говорю "универсальный", я имею в виду, что любая технология (Javascript, C, Java и т.д.) Может использовать ее. В основном я сделал приложение на iOS, используя Apple AVFoundation, которое получает в реальном времени образцы микрофонов на длине 512 (bufferSize = 512). На Python я сделал то же самое, используя PyAudio, но, к сожалению, я получил очень разные значения...

Посмотрите образцы:

Samples of bufferSize = 512 on iOS:

[0.0166742969, 0.0181432627, 0.0184620395, 0.0182254426, 0.0181945376, 0.0185530782, 0.0192517322, 0.0199078992, 0.0204724055, 0.0212812237, 0.022370765, 0.0230008475, 0.0225516111, 0.0213304944, 0.0200473778, 0.019841563, 0.0206818394, 0.0211550407, 0.0207783803, 0.020227218 ....

Samples of bufferSize = 512 on Python:

[ -52.  -32.  -11.   10.   24.   31.   37.   38.   33.   25.   10.   -4.
  -18.  -26.  -29.  -39. ....

Подробнее:

https://pastebin.com/jrM2VWXR

Код Python:

https://gist.github.com/denisb411/7c6f601175e8bb9f735d8aa43a0db340

В обоих случаях я использовал один и тот же компьютер.

Как мне найти способ "конвертировать" (не знаю, правильно ли это слово) в один и тот же масштаб?

Если бы я был неясен в вопросе, пожалуйста, сообщите мне.

Теги:
audio
avfoundation
signal-processing

1 ответ

0
Лучший ответ

Образцы аудио обычно квантуются на 16 или 24 битах. Но существуют различные соглашения о диапазоне значений, которые могут принимать эти образцы:

  • если вы квантовали бы на 8 бит, образцы обычно сохранялись в виде неподписанных байтов в диапазоне от 0 до 255
  • если вы квантуете 16 бит, сэмплы обычно будут храниться как целые числа со знаком "2", начиная от -32768 до 32767.
  • если вы квантуете 24 бита, образцы обычно будут храниться как целые числа без знака
  • и др.

В принципе, когда вы решаете хранить образцы, у вас есть два параметра:

  • подписанный или неподписанный
  • int или float

У каждого есть свои преимущества и недостатки. Например, сохранение в поплавке в диапазоне [-1, 1] имеет то преимущество, что умножение двух выборок всегда будет в том же диапазоне [-1, 1]...

Итак, чтобы ответить на ваш вопрос, вам просто нужно изменить формат, с которым вы открываете поток PyAudio. В настоящее время вы используете format=pyaudio.paInt16. Попытайтесь изменить его pyaudio.paFloat32, и вы должны получить те же данные, что и с вашей реализацией iOS.

  • 0
    Большое спасибо. Это решило мой вопрос. Просто чтобы дополнить, я должен был использовать «f» вместо «h» в wave.struct.unpack.
  • 0
    Если возможно, вы можете очистить меня еще одно сомнение? Чтобы преобразовать эти значения float32 в дБ, я просто 10 * log10 (образец) каждого значения? Это действительно? Я хочу найти эти образцы, и логарифмическая шкала очень мне поможет.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню