2016-03-29 12 views
0

void * dataに格納されたオーディオを長さdata_sizeで再生しようとしましたが、「バッファアンダーフローが発生しました!QtバッファアンダーランでRAWオーディオを再生する

int callback(void * data, long data_size) { 
    QBuffer audio_buffer; 
    audio_buffer.setData(static_cast<const char*>(data), data_size); 

    audio_buffer.open(QIODevice::ReadOnly); 

    QAudioFormat format; 
    format.setSampleSize(16); 
    format.setSampleRate(44100); 
    format.setChannelCount(1); 
    format.setCodec("audio/pcm"); 
    format.setByteOrder(QAudioFormat::LittleEndian); 
    format.setSampleType(QAudioFormat::SignedInt); 

    // get default output device 
    QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice()); 

    // start playback 
    QAudioOutput output(info, format); 
    output.start(&audio_buffer); 
    // ...then wait for the sound to finish 
    QEventLoop loop; 
    QObject::connect(&output, SIGNAL(stateChanged(QAudio::State)), &loop, SLOT(quit())); 
    do { 
    loop.exec(); 
    } while(output.state() == QAudio::ActiveState); 
} 
+0

をサポートされているかどうかもチェック!オーディオでは、通常は一度しかやっていないので、連続してリフィルされる小さなバッファです。 – dtech

+1

音声が聞こえますか?コールバックは複数回呼び出されますか?これは非常に驚くべき関数です... – UmNyobe

+0

はい、コールバックは複数回呼び出されます。 - 最初にファイルに書き込んだ後、ファイルから再生すると、オーディオは聞こえますがアンダーランも発生します。 – gro

答えて

0

.PROファイル

QT+= multimedia 

以下のいくつかの変更を試してみてくださいフォーマットは一般的に、バッファはどのくらいです

// get default output device 
    QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice()); 

    if (!info.isFormatSupported(format)) 
    format = info.nearestFormat(format); 

    // start playback 
    QAudioOutput output(info, format); 
    output.start(&audio_buffer); 
+0

すべて完了 - 同じ問題 – gro

+0

'data_size'の値は期待通りですか? – Mozfox

+0

はいそれは期待どおりです – gro

関連する問題