Как использовать numpy с portaudio для извлечения басов, средних высоких частот

Как в этом примере Как извлечь частотную информацию из входного аудиопотока (используя PortAudio)? Мне любопытно о portaudio и numpy

Я не уверен на 100% о fft, как я могу передать numpy chunk и вернуть три значения от -1.0 до 1.0 для баса, середины и высоких частот?

Я не против, если это только для одного канала, так как я могу понять звуковую часть этого, это математика, которая плавает передо мной, когда я смотрю на них 🙂

  • Как получить текущее время в Python
  • Почему это соединение сокета разрешает только 1 отправку и получение?
  • Как скрыть консоль Windows с помощью python Tkinter?
  • Unicode (UTF-8) чтение и запись файлов в Python
  • Как использовать кеш файловой системы в Java или Python?
  • Можете ли вы «потопить» изображения в ffmpeg, чтобы создать видео, а не сохранять их на диск?
  • Keras Ошибка при проверке: ожидается, что embedding_1_input будет иметь форму (None, 100), но получит массив с формой (1, 3)
  • Сортировка имен файлов в каталоге в порядке возрастания
  • 2 Solutions collect form web for “Как использовать numpy с portaudio для извлечения басов, средних высоких частот”

    На самом деле, вы не использовали бы преобразование Фурье для этого.

    Разделение любого звукового сигнала на низких, средних и высоких частотах обычно выполняется с использованием фильтров. Фильтр является устройством обработки сигналов, которое ослабляет определенные диапазоны частот. Фильтры могут быть построены в цифровом или электрическом формате. Например, они используются в звуковых кроссоверах в громкоговорителях.

    Чтобы получить низкочастотную часть баса, вы должны использовать фильтр нижних частот. Фильтры нижних частот отфильтровывают высокие частоты. Они также называются фильтрами с высоким разрешением.
    Чтобы получить среднечастотную среднюю часть, вы должны использовать полосовой фильтр. Полосовые фильтры фильтруют как низкие, так и высокие частоты. Их также называют «колоколообразными фильтрами».
    Чтобы получить высокочастотную тройную часть, вы должны использовать фильтр верхних частот. Фильтры верхних частот фильтруют любые низкие частоты. Они также называются фильтрами с низким разрешением.

    На самом деле, вы также можете использовать фильтр верхних частот и нижних частот. Если вы вычитаете оба отфильтрованных сигнала из исходного сигнала, результатом будет сигнал с полосовым фильтром. Это сэкономит вам один фильтр.

    Каждый фильтр будет иметь пороговую частоту. Пороговая частота представляет собой специальную частоту, из которой фильтр должен начать фильтрацию. В зависимости от порядка фильтра сигнал будет уменьшаться на 6 дБ / окт (1-й порядок), 12 дБ / окт. (2-й порядок), 18 дБ / окт. (3-й порядок) и т. Д. Для вашего приложения дизайн 2-го порядка вероятно, хорошо.
    Обратите внимание, что фильтры в общем беспорядок с вашим сигналом в некотором роде и чем выше порядок, тем более слышимым это может получиться. Кстати, это чистая физика и истинна для всей обработки сигналов, включая преобразования Фурье.

    Использование этих трех фильтров (может быть) эквивалентно выполнению преобразования Фурье только с тремя спектральными точками.

    Преобразование Фурье , упомянутое в выбранном ответе на вопрос SO, на который вы указываете, дает вам «спектр» – большой набор значений, дающий интенсивность звука в каждом из различных диапазонов / срезов частот (выражаемых, например, в Герц).

    Как перевести (скажем) тысячу интенсивностей (по одному на каждый 10-мерный срез спектра, скажем), всего на три числа, как вы пожелаете, это, конечно, эвристическая проблема – например, вы можете просто решить, какие диапазоны частоты соответствуют «басу» и «тройному», причем все между ними «середина» и вычисляют средние интенсивности в каждом. Для чего это стоит, я считаю, что общее соглашение для «баса» составляет до 250 Гц, для «высоких частот» 6 кГц и выше (в промежутке между «средним»), например, на этой странице, – но это скорее произвольная конвенция, так что, «заберите свой яд»! -)

    Когда у вас есть относительные уровни, вы захотите нормализовать их по отношению друг к другу и соответствующим образом нарисуйте их в желаемом диапазоне (предположительно в логарифмическом масштабе, потому что так работает человеческий слух ;-).

    Python - лучший язык программирования в мире.