Store audio from QAudioInput and pass it to SciPy FFT
-
How can I get audio input in real time from QAudioInput, store it in a NumPy array and pass it to SciPy FFT? What I have tried:
from PyQt5.QtMultimedia import QAudioDeviceInfo, QAudioFormat, QAudioInput import sys class Window(QMainWindow): def __init__(self): info = QAudioDeviceInfo() input_device = info.defaultInputDevice() if input_device.isNull(): # If no avaiable device is found, we display a error print("There is no audio input device available.") exit(-1) audio_format = QAudioFormat() audio_format.setSampleRate(44100) audio_format.setSampleSize(8) audio_format.setChannelCount(1) audio_format.setCodec("audio/pcm") audio_format.setSampleType(QAudioFormat.UnSignedInt) if sys.byteorder == "little": audio_format.setByteOrder(QAudioFormat.LittleEndian) else: audio_format.setByteOrder(QAudioFormat.BigEndian) self.audioInput = QAudioInput(input_device, audio_format, self) self.ioDevice = self.audioInput.start() self.ioDevice.readyRead.connect(self.read_audio) def read_audio(self): data: QByteArray = self.ioDevice.readAll() print(data.toUInt()) # Prints (0, False) which means error converting data
-
How can I get audio input in real time from QAudioInput, store it in a NumPy array and pass it to SciPy FFT? What I have tried:
from PyQt5.QtMultimedia import QAudioDeviceInfo, QAudioFormat, QAudioInput import sys class Window(QMainWindow): def __init__(self): info = QAudioDeviceInfo() input_device = info.defaultInputDevice() if input_device.isNull(): # If no avaiable device is found, we display a error print("There is no audio input device available.") exit(-1) audio_format = QAudioFormat() audio_format.setSampleRate(44100) audio_format.setSampleSize(8) audio_format.setChannelCount(1) audio_format.setCodec("audio/pcm") audio_format.setSampleType(QAudioFormat.UnSignedInt) if sys.byteorder == "little": audio_format.setByteOrder(QAudioFormat.LittleEndian) else: audio_format.setByteOrder(QAudioFormat.BigEndian) self.audioInput = QAudioInput(input_device, audio_format, self) self.ioDevice = self.audioInput.start() self.ioDevice.readyRead.connect(self.read_audio) def read_audio(self): data: QByteArray = self.ioDevice.readAll() print(data.toUInt()) # Prints (0, False) which means error converting data
@Jaime02 said in Store audio from QAudioInput and pass it to SciPy FFT:
print(data.toUInt()) # Prints (0, False) which means error converting data
I know nothing about audio input or format. But you do realize that
QByteArray::toUInt()
only attempts (if it succeeds) to return the firstunsigned int
in the array?- You are not supposed to assume that one call to
read_audio()
and onereadAll()
read all the data available. It might have read as little as 1 byte. Checkdata
's length?
-