[英]Qt Buffer Underrun Playing RAW Audio
I try playing audio that is stored at void * data
with length data_size
but get the message: "Got a buffer underflow!" 我尝试播放存储在长度为
data_size
void * data
音频,但收到消息:“缓冲区下溢!”
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);
}
Try some changes below 请尝试以下更改
.pro file .pro文件
QT+= multimedia
also check if format is supported 还检查是否支持格式
// 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.