pyAudio, что такое in_data в обратных вызовах?

Я пытаюсь получить частоты из массива, сгенерированного из обратного вызова pyAudio().

def callback(in_data, frame_count, time_info, flag):    
    audio_data = np.fromstring(in_data, dtype=np.float32)
    freq_data = np.fft.fft(audio_data)
    freq = np.abs(freq_data)
    # Operations here
    recovered_signal = np.fft.ifft(filtered_freq).astype(np.float32).tostring()

Я получаю массив длины 2048 и не знаю, что делать дальше. Я сузил список операций, которые мне нужно выполнить, и попытался применить к нему БПФ, но понял, что мне нужно распаковать данные, а документации pyAudio немного не хватает (а тем более иногда даже в Интернете).

Часть моей проблемы в том, что я не понимаю, что такое in_data. Из того, что я могу сказать из исследований, это байты, которые numpy преобразует для меня в массив. Однако, прочитав статью об обработке сигналов для python, у меня сложилось впечатление, что я должен быть в состоянии извлечь это в частоты, а затем выполнить это для базового фильтра полосы пропускания.

  for f in freq:
        if index > LOWCUT and index < HIGHCUT:
            if f > 1:
                filtered_freq.append(f)
                #print(index)
            else:
                filtered_freq.append(0)
        else:
            filtered_freq.append(0)
        index += 1

Я также просмотрел np.fft.fftfreq, но он также по-прежнему создает массив длиной 2048 вместо массива, содержащего все частоты и их мощность.

Редактировать: я знаю, что с двумя каналами они переплетаются, но моя проблема в основном заключается в том, что я не понимаю, что представляет собой преобразованный массив с помощью numpy и может быть использован.


person kckaiwei    schedule 15.05.2018    source источник
comment
вроде чередуется, левый и правый канал, данные. - stackoverflow.com/a/22644499/2823755 и portaudio.com/docs/v19-doxydocs/   -  person wwii    schedule 16.05.2018
comment
Я понимаю, что это чередование, но я не знаю, что делать с массивами длины 1048 :\. Не совсем понимаю, что представляет собой массив при преобразовании с помощью numpy.   -  person kckaiwei    schedule 16.05.2018
comment
Вообще непонятно, о чем вы спрашиваете. in_data — это аудиоданные, которые имеют строковый формат, а в функции audio_data — массив аудиоданных. Если вы открыли файл WAV, это должны быть 16-битные двухканальные данные 48 кГц, и как только они будут в Numpy ndarray, вы можете делать с ними все, что захотите. Документы для numpy.fft.fft кажутся довольно ясными, и есть примеры. Прочтите минимально воспроизводимый пример.   -  person wwii    schedule 16.05.2018
comment
Наверное, я спрашиваю, как обрабатывать audio_data. В основном, что означают цифры? Я понимаю, что делает fft, но применение fft к тому, что для меня является массивом чисел без смысла, ничего не делает. Я предполагаю, что, возможно, я спрашиваю не о том сообществе и вместо этого должен нацеливаться на обработку сигналов. Обращаюсь сюда только потому, что я не могу найти кого-либо, кто явно объяснял бы, что возвращаемые audio_data предназначены для тех, кто никогда раньше не работал со звуком.   -  person kckaiwei    schedule 16.05.2018
comment
Думая об этом подробнее, является ли массив просто массивом интенсивности звуковой волны по 1024 образцам? (2048 в данном случае). Чтение этого: pythonforengineers.com/ заставило меня подумать, что я получил бы больше, чем просто 1024 (2048) после применения fft.   -  person kckaiwei    schedule 16.05.2018