gpt4 book ai didi

c++ - 从麦克风捕获声音时未执行QAudioInput::notify()

转载 作者:行者123 更新时间:2023-12-03 02:04:01 29 4
gpt4 key购买 nike

我想使用QAudioInput从麦克风捕获声音,对其进行处理然后再播放。据我了解,我需要连接到notify信号和内部处理程序,以便用户使用readAll()函数来获取原始数据。但是问题是,此处理函数永远不会执行。这是我的代码:

void MainWindow::on_pushButton_clicked()
{

QList<QAudioDeviceInfo> list = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);

if(list.isEmpty())
{
qDebug() << "No audio input device";
return;
}

QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice();

QAudioFormat format;
// Set up the desired format, for example:
format.setSampleRate(44100);
format.setChannelCount(1);
format.setSampleSize(32);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);

if (!info.isFormatSupported(format)) {
qWarning() << "Default format not supported, trying to use the nearest.";
format = info.nearestFormat(format);
}

qDebug() << "input device :" << info.deviceName();

audio = new QAudioInput(info, format);
qDebug("created()");

connect(audio, SIGNAL(notify()), this, SLOT(onNotify()));
audio->setNotifyInterval(10);

bufferInput = audio->start();
}

void MainWindow::onNotify()
{
qDebug() << "onNotify()";
//QByteArray array = bufferInput->readAll();
//bufferOutput->write(array);
}

( audio的类型为 QAudioInput*bufferInput的类型为 QIODevice*)

当我单击该按钮时,将显示“输入设备=”和“创建的()”消息,但未显示“onNotify()”。

我究竟做错了什么?

最佳答案

QAudioInput似乎已损坏。或者我完全误会了一些东西。
对我来说唯一可靠的方法是使用readyRead()返回的QIODevice缓冲区的start()信号。不幸的是,这在我的系统上很少触发(大约每40到60毫秒一次)。

我发现的是,当我在notify()上调用resume()时(因为在调用QAudioInput之后它处于空闲状态)或在start()上执行readAll()(!),QIODevice开始触发。但是至少对于PyQt,这会在一分钟左右后导致堆栈溢出。
我会怀疑平台也很重要,因为实际的QAudioInput实现取决于所使用的平台和音频系统(在我的情况下为Fedora 32上的PulseAudio)。

关于c++ - 从麦克风捕获声音时未执行QAudioInput::notify(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29053872/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com