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

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

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

  • объединить фоновый аудиофайл
  • Как копировать аудио с видео?
  • Как построить wav-файл
  • Вход PyAudio переполнен
  • Запись звука Python на обнаруженный звук
  • Список всех аудиоустройств с pyaudio Python (привязка к порталу)
  • Я не против, если это только для одного канала, так как я могу понять звуковую часть этого, это математика, которая плавает передо мной, когда я смотрю на них 🙂

  • Каков самый простой способ читать wav-файлы с помощью Python ?
  • Изготовление спектрограммы из микрофона
  • объединить фоновый аудиофайл
  • Django / Python: как читать файл и проверять, что это аудиофайл?
  • как преобразовать волновой файл в амплитуду поплавка
  • Пигаме, звуки не играют
  • 2 Solutions collect form web for “Как использовать numpy с portaudio для извлечения басов, средних высоких частот”

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

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

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

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

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

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

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

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

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

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