在所有环境中都找不到QAudioDeviceInfo availableDevices

时间:2018-02-13 23:15:10

标签: qt audio qt4 vmware

我在两种类型的工作站上运行我的qt4.8 gui(使用QAudioOutput播放.wav)。

1.  A windows computer via Oracle VM VirtualBox Redhat- linux
2.  A Linux computer via VMware workstation- linux

当我在Windows VB上运行gui时,gui播放音频就好了并且没有打印错误。当我(尝试)在VMWare上播放时,应用程序会陷入困境,我收到以下错误:

Raw audio format not supported by backend, cannot play audio.
Using null output device, none available

当不支持defaultOutputDevice时,我抛出Raw音频格式错误。空输出设备错误是从qt代码生成的。

当我添加以下代码时:

 foreach (const QAudioDeviceInfo &deviceInfo, 
    QAudioDeviceInfo::availableDevices(QAudio::AudioOutput))
    {
        qDebug() << "Device name: " << deviceInfo.deviceName();
    }

在VirtualBox上我得到:

Device name: “default:CARD=I82801AAICH”
Device name: “sysdefault:CARD=I82801AAICH”
Device name: “default”

在VMWare上,它不会打印任何可用的设备。

当我运行命令lspci | grep -i audio 在VirtualBox上我得到:

multimedia audio controller:Intel corporation 82801AA AC'97 (rev 01)
在VMWare上我得到:

VMWare HD Audio Controller (rev 09)

此外,我可以在命令行和wav文件播放的两个工作站上使用play命令。另外,我目前没有安装aplay rpms进行故障排除。我还检查了.vmx文件以进行音频设置,它与VMWare recomendations相匹配。我还要提到我在virtualBox上使用pulseaudio版本6,在VMWare上使用10,但我不认为这是问题所在。

任何想法可能导致此错误在VMWare redhat工作站上发生什么,以及我可以查看的任何其他问题进行故障排除?这是库还是兼容性问题?

更新:

我用来设置设备的代码:

    //set bytes to buffer
    qbuff=new QBuffer();
    qbuff->setData(qbyte);
    qbuff->open(QIODevice::ReadOnly); 

    //set expected wav format
    format.setFrequency(48000);
        format.setChannels(1);
        format.setSampleSize(16);
        format.setSampleRate(48000);
        format.setCodec("audio/pcm");
        format.setByteOrder(QAudioFormat::LittleEndian);
        format.setSampleType(QAudioFormat::SignedInt);
    foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput))
    {
        qDebug() << " Device name: " << deviceInfo.deviceName();
    }
QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
    if (!info.isFormatSupported(format))
    {
            qWarning()<<"raw audio format not supported by backend, cannot play audio.";
    }
    audioOutput  = new QAudioOutput(format,this);

0 个答案:

没有答案