Возникли проблемы с правильным чтением ввода микрофона с помощью pyaudio

#python #pyaudio

#python #pyaudio

Вопрос:

Я пытаюсь создать программу на Python, которая отображает форму сигнала на микрофонном входе в режиме реального времени, используя библиотеку pyaudio. Я продвинулся достаточно далеко только до того момента, когда пытаюсь отобразить один единственный момент формы сигнала, и столкнулся с проблемой. Вот мой код на данный момент:

 import numpy as np
import pyaudio
import matplotlib.pyplot as plt

CHUNK = 4096
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100

p = pyaudio.PyAudio()

stream = p.open(
    format=FORMAT,
    channels=CHANNELS,
    rate=RATE,
    output=True,
    input=True,
    frames_per_buffer=CHUNK)

stream.start_stream()
data = stream.read(CHUNK)
data_int = np.frombuffer(data, np.int16)
print(data_int)

fig, ax = plt.subplots()
ax.plot(data_int, '-')
plt.show()
  

Когда я запускаю это, я действительно получаю график, но все значения равны либо 1, 0, либо -1 вместо того, чтобы быть звуковой волной. Вот изображение графика, которое я получаю. Этот график точно такой же каждый раз, когда я запускаю программу.

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

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

1. Я не уверен, поможет ли это, но это видео , похоже, довольно точно соответствует тому, чего вы пытаетесь достичь.

2. На самом деле, это видео, из которого я взял большую часть этого кода. Единственное, что я действительно изменил в его коде, это не использовать библиотеку struct, а вместо этого использовать np.frombuffer()

3. Интересно, я протестирую это в своей системе и свяжусь с вами.

4. Я бы не знал почему, извини. Я бы просто использовал пакет struct и изменил его, как указано в комментариях.

5. Вы нашли решение? У меня такая же проблема