私は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()
のパラメータとして渡された)状態が行く:
- エラーはありませんが。アクティブ状態。
- エラーはありません。停止状態。
- アンダーランエラーです。アイドル状態。
アイドル状態のaudio_out
を停止することに注意してください。following this exampleなぜコードにアンダーランエラーが発生していますか?これは正常ですか?
hmm。これは本当に奇妙です。私はヒープ上で '新しいものを嫌い。私はあなたのソリューションを後で試してみます。 – Donotalo