- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用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*
)
最佳答案
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/
官方解析 QAudioInput 这个类提供了从外设接收音频数据的接口。 使用逻辑是这样的,首先创建QAudioInput并且指定好QAudioDeviceInfo,以及QAudioFormat。然后
出于我的目的,我想使用 Qt5.1 录制 WAV 格式的声音,16000Hz,16 位和 1 声道,但声音默认都是 32 位。所以我必须找到一个可以设置“位大小”的类,这个类是 QAudioForma
我有一个带麦克风的设备,它通过以太网连接到我的计算机,Qt 无法将其视为音频设备,因此,我从中获取数据包并将它们放入 QByteArray。我需要从流中播放这些数据包。我在互联网的某个地方找到了几乎相
我是 Qt 的新手。 (还有 C++) 我从 QAudioInput 类引用中看到了一个示例,为了通过编译,我做了一点改动(您从我的代码中看到的与示例的所有差异都是因为一开始编译失败)。 我在网上查了
我想用 QAudioInput 从我的音频设备中捕捉声音。我有一个立体声(双 channel )输入信号,通常我只是用我的 channel 数调用函数 setChannelCount(),在本例中为
我对以下代码片段有疑问…… const qint64 bytesReady = m_audioInput->bytesReady(); const qint64 bytesSpace = m_buff
我正在尝试监视音频输入并将音频记录到文件中,但仅在超过级别阈值时才进行。 Qt 中的录制似乎有两个主要选项; QAudioRecorder和 QAudioInput . 长话短说:我正在尝试找到可以获
出于我的目的,我想以原始格式(仅样本)、8kHz、16 位(小端)和 1 channel 录制声音。然后,我想将这些样本传输到窗口并使用 QAudioOutput 播放。所以我有两个独立的程序:一个用
我是一名优秀的程序员,十分优秀!