是否需要从主线程调用QAudioOutput :: start()?

时间:2012-08-22 03:17:02

标签: qt phonon

我正在我的代码中播放音频:

// decode routine

QAudioFormat format;
format.setFrequency(aCodecCtx->sample_rate);
format.setChannels(2);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);
QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
if (!info.isFormatSupported(format)) {
    cout<<"raw audio format not supported by backend, cannot play audio." <<endl;
    format = info.nearestFormat(format);
}
QAudioOutput * audio = new QAudioOutput(format);
connect(audio,SIGNAL(stateChanged(QAudio::State)),SLOT(stateChanged(QAudio::State)));
if( !buffer->open(QBuffer::ReadWrite) )
    cout << "Couldnt open Buffer" << endl;
cout << "buffer.size()=" << buffer->size() <<endl;
audio->start(buffer);

我在工作线程中运行此代码,因为解码器例程很重。但是没有声音在播放。我将此代码转移到主线程,一切正常。

为什么会这样? QAudioOutput文档没有说明它需要在哪个线程上运行

1 个答案:

答案 0 :(得分:0)

我忘了在工作线程中启动一个事件循环。否则线程退出,这就是音频无法播放的原因