pyAudio Что такое in_data в обратных вызовах? - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь получить частоты из массива, сгенерированного из функции обратного вызова 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, и я не уверен, что делать дальше. Я сузил круг операций, которые мне нужно делать, и попытался применить к нему FFT, но понял, что мне нужно распаковать данные, а документации 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 и может использоваться.

...