Есть ли способ получить басы из данных pyaudio?

#python #audio

Вопрос:

извините, если это не имеет смысла, в основном у меня есть куча данных, поступающих в список с 1024 элементами. Что я хочу сделать, так это извлечь из них низкочастотные, однако я точно не знаю, как работает эта аудиосистема.

Что у меня есть:

     wf = wave.open('song.wav', 'rb')
    p = pyaudio.PyAudio()
    stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                    channels=wf.getnchannels(),
                    rate=wf.getframerate(),
                    output=True)

    data = wf.readframes(CHUNK)
    while len(data) > 0:
        stream.write(data)
        data = wf.readframes(CHUNK)
        decoded = numpy.frombuffer(data, dtype=numpy.int16)
        print(decoded)

    while len(data) > 0:
        stream.write(data)
        data = wf.readframes(CHUNK)
        decoded = numpy.frombuffer(data, dtype=numpy.int16)
        print(decoded)
 

В настоящее время вывод выглядит следующим образом:

 [  53  225 -496 ... 2328  384 2363]
[ 597 2091  757 ... -235 -146 -304]
[  190  -146   478 ... -1574  2376 -2444]
[ 2100 -3066  1491 ...  -939  -174  -127]
[ -353   736  -258 ... -1723  -707 -1836]
[-1257 -2033 -1548 ... -2535  3562 -2650]
[ 1807 -2672   131 ...   382  3786 -1292]
[ 4523 -2838  4932 ...  2692 -1329  3022]
 

То, что я ищу, — это низкочастотные биты, опять же, я не уверен, как это точно работает, поэтому я хотел бы обратиться к эксперту!

Комментарии:

1. Чтобы получить частоты, вы должны преобразовать свой волновой сигнал (временная область) в спектр (частотная область) с помощью FFT (быстрое преобразование Фурье). Для этого вы можете использовать Numpy или, возможно, самым простым является использование librosa

2. Разберусь в этом, спасибо за информацию!