0

私は次のようにコードでオーディオを再生しています:

// 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ドキュメントには、実行する必要のあるスレッドについては何も記載されていません。

4

1 に答える 1

0

ワーカースレッドでイベントループを開始するのを忘れました。そうしないと、スレッドが終了し、オーディオが再生されないのはそのためです

于 2012-08-22T18:07:28.823 に答える