簡體   English   中英

在使用 Qt 5.9.4 的 Fedora 上,我無法同時錄制和播放音頻

[英]On Fedora using Qt 5.9.4, I'm unable to simultaneously record and play audio at the same time

我正在嘗試在 Qt 中編寫一個程序,該程序同時記錄來自麥克風的音頻並同時播放。 我正在使用 Qt 5.9.4 並且我在 Fedora 29 上(無法更新到最新版本,因為我們的生產環境是 Fedora 29 - 無法更新它,已經問過老板)。

我編寫了一些准系統代碼,如下所示。 但是每次運行程序時,都會收到以下錯誤消息:

using null output device, none available
using null input device, none available

我已經安裝了每個 qt5* 包。 我也安裝了 alsa-utils 和脈沖音頻。

我也看過這些或多或少對我有幫助但沒有解決我的問題的:

我不知道這是 Fedora 相關問題還是 Qt 相關問題。 請幫忙!

myaudiorecorder.h:

 #ifndef MYAUDIORECORDER_H
 #define MYAUDIORECORDER_H

#include <QAudioFormat>
#include <QAudioDeviceInfo>
#include <QTextStream>
#include <QAudioInput>
#include <QAudioOutput>
#include <QObject>

class MyAudioRecorder : public QObject
{
    Q_OBJECT

public:
    MyAudioRecorder();

    QAudioFormat formatIn;
    QAudioFormat formatOut;

    QAudioInput *m_audioInput;
    QAudioOutput *m_audioOutput;

    QAudioDeviceInfo m_InputDevice;
    QAudioDeviceInfo m_OutputDevice;

    QIODevice *m_input;
    QIODevice *m_output;

    QAudioDeviceInfo deviceIn;
    QAudioDeviceInfo deviceOut;

    void getFormat();
    void createAudioInput();
    void createAudioOutput();
    void beginAudio();

};

#endif // MYAUDIORECORDER_H

myaudiorecorder.cpp:

#include "myaudiorecorder.h"

MyAudioRecorder::MyAudioRecorder() {
    getFormat();
    createAudioInput();
    createAudioOutput();
}


void MyAudioRecorder::getFormat(){
    formatIn.setSampleSize(8);
    formatIn.setCodec("audio/pcm");
    formatIn.setByteOrder(QAudioFormat::LittleEndian);
    formatIn.setSampleType(QAudioFormat::UnSignedInt);

    deviceIn = QAudioDeviceInfo::availableDevices(QAudio::AudioInput).at(1);
    if(!deviceIn.isFormatSupported(formatIn)){
    QTextStream(stdout) << " default formatIn not supported " << endl;
    formatIn = deviceIn.nearestFormat(formatIn);
    } else {
    QTextStream(stdout) << " default formatIn supported " << endl;
    }

    deviceOut = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput).at(0);
    if(!deviceOut.isFormatSupported(formatOut)) {
    QTextStream(stdout) << "1. default formatOut not supported " << endl;
    formatOut = deviceOut.nearestFormat(formatOut);
    }

}


void MyAudioRecorder::createAudioInput(){
    m_audioInput = new QAudioInput(m_InputDevice, formatIn, 0);
}

void MyAudioRecorder::createAudioOutput(){
    m_audioOutput = new QAudioOutput(m_OutputDevice, formatOut, 0);
}

void MyAudioRecorder::beginAudio(){
    m_output = m_audioOutput->start();
    m_input = m_audioInput->start();
}
void MyAudioRecorder::beginAudio(){
    m_output = m_audioOutput->start();
    m_audioInput->start(m_output);


   //Above should do the trick but do check the volume, state and error if any:
   qDebug() << "m_audioInput: volume=" <<  m_audioInput->volume()
            << ", state=" << m_audioInput->state()
            << ", error=" << m_audioInput->error();
   qDebug() << "m_audioOutput: volume=" <<  m_audioOutput->volume()
            << ", state=" << m_audioOutput->state()
            << ", error=" << m_audioOutput->error();

}

您需要將 qt Qt/5.9.x/mingw73_64/plugins/audio 復制到您的二進制目錄,而不是復制 qtaudio_windows.dll ,是復制音頻文件夾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM