简体   繁体   English

Qt缓冲区欠载播放RAW音频

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM