2012-03-04 21 views
4

私はWindows 7 Ultimate x64上でQt Creator 2.4.1でQt 4.8を使用しています。QAudioOutputは常にUnderrunErrorに遭遇します

私はQAudioInputクラスを使用してオーディオ入力を受けて、QAudioOutputを使用して再生しています。私が使用しているオーディオ形式は、入力と出力の両方のデバイスでサポートされて

class MainWindow 
{ 
    // ... 

    QByteArray output_data; 
    QBuffer output_data_buffer; 
    QAudioOutput *audio_out; 

    // ... 
}; 

MainWindow::MainWindow(QWidget *parent) 
{ 
    // ... 

    output_data_buffer.setBuffer(&output_data); 

    // ... 
} 

void MainWindow::audioInputStopped(QByteArray data) 
{ 
    output_data = data; 
    output_data_buffer.open(QIODevice::ReadOnly); 
    audio_out = new QAudioOutput(audio_format, this); 
    connect(audio_out, SIGNAL(stateChanged(QAudio::State)), 
      SLOT(audioOutputStateChanged(QAudio::State))); 
    audio_out->start(&output_data_buffer); 
} 

次のように私は、出力を入力を服用してから、セットアップを停止した後に2秒のタイムアウトがあります。 QAudioDeviceInfo::isFormatSupported()を使って確認しました。 2秒間のオーディオ(data in audioInputStopped())は常に正常に再生されます。

スロットaudioOutputStateChangedには、バッファ再生が完了した後で、audio_out->error()から常にエラーQAudio::UnderrunErrorが発生しています。 audio_out->start()が呼び出された後、次のように、エラー(audioOutputStateChanged()のパラメータとして渡された)状態が行く:

  1. エラーはありませんが。アクティブ状態。
  2. エラーはありません。停止状態。
  3. アンダーランエラーです。アイドル状態。

アイドル状態のaudio_outを停止することに注意してください。following this exampleなぜコードにアンダーランエラーが発生していますか?これは正常ですか?

答えて

1

これは奇妙に思えるかもしれませんが、Qtの組み込み配列がヒープ上に構築されたとき、または少なくともヒープ上にそれらの要素が構築されたときに、ポインタの)。メモリ管理はやや難解ですが、それらにプッシュされた項目は範囲外にはなりません。 Qt Object Modelはまた、ほとんどのものをヒープに配置し、それらを正しく育てることを促進します。これは役に立ちます。

まだ何か他のものは、それへの書き込みまたはその逆されている間、オーディオソースから読み取るしようとしているものがあるようにバッファアンダーランで少しアップ読んだ後、それが聞こえます。下記のリンクをご覧ください。バッファを読み込む前に、audio_inの部分をバッファから切り離すことができます。これにより、エラーを修正する可能性が高くなります。

私はまた、あなたのメインウィンドウのコンストラクタでのごQAudioOutputポインタを構築します(多くのスタイルのものなど)。 Qtの例題でどのように構成されているのかを見てみると、それはより良い組織のようです。 QAudioInput exampleの場合はcppです。

もっと完全な例がある場合は、エラーを再作成してデバッグするためにさらに試してみることができます。ここで

は、と同情する誰かである:

http://qt-project.org/forums/viewthread/16729

とWikiの記事:

http://en.wikipedia.org/wiki/Buffer_underrun

やマルチメディアexamplのリストQtの上のES:

http://doc.qt.nokia.com/4.7-snapshot/examples-multimedia.html

お役に立てば幸いです。

+0

hmm。これは本当に奇妙です。私はヒープ上で '新しいものを嫌い。私はあなたのソリューションを後で試してみます。 – Donotalo

関連する問題