我在两种类型的工作站上运行我的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 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);