我在 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)));
我还打电话给 audio->start(soundBuffer)
— 从另一个插槽我在 QAudioOutput 的初始化中没有任何错误
而且我根本没有声音(所有其他应用程序都有声音,我正在将 Qt4 应用程序移植到 Qt5,在 Qt4 中,Phonon 一切正常)
aboutToFinish 插槽在开始时以 ActiveState 作为状态调用,在调用 QAudioOutput::error 时调用 NoError,但它不再被调用,即使等待的时间远远超过预期的生成声音持续时间。
声音的生成过程是毋庸置疑的,它已经通过编写 wav 文件进行了测试,并且可以正常工作。
此外,我已经从 Qt 的源代码构建了多媒体示例,当涉及纯音频时,没有输出(例如在 sprectrum 示例中),另一方面,视频完美地播放声音。
是否有任何已知问题?那是一个错误吗?难道我做错了什么 ?
提前致谢 ;)