Qt5中的QAudioOutput没有产生任何声音

时间:2013-03-24 01:32:14

标签: qt

我正在kubuntu 12.10下工作并开发一个应用程序,我需要在QIODevice中生成一些声音,然后用QAudioOutput播放它。

我已经阅读了关于如何正确地做到这一点的所有文章,我认为已经这样做了。

到目前为止,我已经完成了:

QVector <double> * soundData = SoundGenerator::getSound();

soundBuffer->open(QIODevice::ReadWrite);
QDataStream writeStream(soundBuffer);
foreach(double d, *soundData) {
    char value = d * (2 << 7);
    //  qDebug() << "Value : " << (short int)value;
    writeStream << value;
}

QAudioFormat format;
// Set up the format, eg.
format.setSampleRate(SoundGenerator::getAudioSampleRate());
format.setChannelCount(1);
format.setSampleSize(8);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);
QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());

audio = new QAudioOutput(format, this);
if (audio->error() != QAudio::NoError) {
    qDebug() << "Problem playing sound";
}

connect(audio, SIGNAL(stateChanged(QAudio::State)), this, SLOT(aboutToFinish(QAudio::State)));

我也打过电话 音频&GT;启动(soundBuffer)

- 从另一个插槽 我在QAudioOutput的初始化中没有任何错误

我根本没有声音(所有其他应用程序都有声音,我正在将Qt4应用程序移植到Qt5,在Qt4中,一切都可以使用Phonon)

aboutToFinish插槽在调用时调用ActiveState作为状态,调用QAudioOutput :: error时调用NoError,但不再调用它,即使等待的时间远远超过预期的生成声音持续时间。

声音生成过程不会受到质疑,它已通过编写wav文件进行测试,并且可以正常工作。

此外,我已经从Qt的源代码中构建了多媒体示例,当谈到纯音频时没有输出(例如在sprectrum示例中),另一方面,视频播放声音完美。

是否有任何已知问题?那是一个错误吗?我做错了吗?

提前致谢;)

2 个答案:

答案 0 :(得分:3)

这不起作用,因为您设置了8位样本大小和有符号整数格式。

解决方案:您必须将样本类型设置为无符号,以获得8位分辨率:

format.setSampleType(QAudioFormat::UnsignedInt);

这不是Qt错误。为什么?答案是,在WAV规范中,8位采样始终是无符号的,而16位采样始终是有符号的。任何其他组合都不起作用。

因此,对于16位样本,您必须放置:

format.setSampleType(QAudioFormat:SignedInt);

(恕我直言,Qt没有通过强制正确的格式处理这些案件这一事实是一个缺陷,但并不缺乏功能性)。

您可以在本页的备注部分了解有关此内容的更多信息:https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

也是这个非常相似的问题的解决方案(同样的问题,但有16位):Qt QAudioOutput push mode

答案 1 :(得分:1)

尝试添加:

foreach(object game in listBox.Items) { yay01.Write(game.ToString()); }

QEventLoop loop;