C++ Qt缓冲区欠载播放原始音频
我尝试播放存储在C++ Qt缓冲区欠载播放原始音频,c++,qt,audio,qbuffer,C++,Qt,Audio,Qbuffer,我尝试播放存储在void*data中的音频,其长度data\u size但得到消息:“缓冲区下溢!” int回调(无效*数据,长数据大小){ QBuffer音频缓冲区; 音频缓冲区设置数据(静态播放(数据)、数据大小); 音频缓冲区打开(QIODevice::ReadOnly); QAudioFormat格式; 格式设置示例(16); 格式:setSampleRate(44100); 格式。setChannelCount(1); 格式化.setCodec(“音频/pcm”); setByteOr
void*data
中的音频,其长度data\u size
但得到消息:“缓冲区下溢!”
int回调(无效*数据,长数据大小){
QBuffer音频缓冲区;
音频缓冲区设置数据(静态播放(数据)、数据大小);
音频缓冲区打开(QIODevice::ReadOnly);
QAudioFormat格式;
格式设置示例(16);
格式:setSampleRate(44100);
格式。setChannelCount(1);
格式化.setCodec(“音频/pcm”);
setByteOrder格式(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);
//获取默认输出设备
QAudioDeviceInfo信息(QAudioDeviceInfo::defaultOutputDevice());
//开始播放
QAudioOutput输出(信息、格式);
输出。启动(&音频缓冲区);
//…然后等待声音结束
QEventLoop循环;
QObject::connect(&output),信号(stateChanged(QAudio::State)),&loop,插槽(quit());
做{
loop.exec();
}while(output.state()==QAudio::ActiveState);
}
尝试下面的一些更改
.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);
缓冲区通常有多大?对于音频,它通常是一个小的缓冲区,不断地被重新填充,你的缓冲区有点奇怪,因为你只做了一次。你听到音频了吗?是否多次调用回调?这是一个非常令人惊讶的函数…是的,回调被调用多次。-如果我先将其写入一个文件,然后从文件播放,我会听到音频,但也会出现声音不足。如果回调被重复调用,您应该保留并重新使用配置,而不是在每次调用时都重新创建配置。@gro这对您来说仍然是个问题。
数据大小的值是否如您预期的那样?
// 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);