qt 读取音频数据 exec(); 之后就无法监听麦克风
时间: 2024-02-22 19:57:59 浏览: 31
在Qt中读取音频数据时,可能会使用QAudioInput类。如果您调用了QCoreApplication::exec()函数,则该函数会阻塞线程,直到应用程序退出为止,因此您无法同时监听麦克风。
为了解决这个问题,您可以使用多线程。您可以将音频输入相关的代码放在一个单独的线程中,并在主线程中监听麦克风。这样,您就可以在读取音频数据的同时监听麦克风。
以下是示例代码:
```cpp
#include <QCoreApplication>
#include <QAudioInput>
#include <QThread>
class AudioThread : public QThread
{
Q_OBJECT
public:
AudioThread(QObject *parent = 0) : QThread(parent) {}
protected:
void run() override {
QAudioFormat format;
format.setSampleRate(44100);
format.setChannelCount(2);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);
QAudioDeviceInfo info(QAudioDeviceInfo::defaultInputDevice());
if (!info.isFormatSupported(format)) {
qDebug() << "Default format not supported, trying to use the nearest.";
format = info.nearestFormat(format);
}
QAudioInput audioInput(format);
audioInput.start(&outputFile);
exec(); // 将阻塞线程,直到该线程被停止
audioInput.stop();
}
private:
QFile outputFile{"audio.raw"};
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
AudioThread audioThread;
audioThread.start();
while (true) {
// 在此处监听麦克风
// ...
}
return a.exec();
}
```
在上面的代码中,我们将音频输入相关的代码放在了单独的线程中,通过调用`exec()`函数来阻塞该线程。在主线程中,我们可以在`while`循环中监听麦克风。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)