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);
}
をサポートされているかどうかもチェック!オーディオでは、通常は一度しかやっていないので、連続してリフィルされる小さなバッファです。 – dtech
音声が聞こえますか?コールバックは複数回呼び出されますか?これは非常に驚くべき関数です... – UmNyobe
はい、コールバックは複数回呼び出されます。 - 最初にファイルに書き込んだ後、ファイルから再生すると、オーディオは聞こえますがアンダーランも発生します。 – gro