来自libretro使用libao的混乱声音

时间:2015-04-27 22:04:07

标签: c++ qt audio libretro

我正在尝试使用SFML创建C ++中的小型libretro前端,使用声音的libao和Qt框架的某些部分。

这是逻辑:使用SFML的内置时钟系统,我在每个帧刷新libretro核心,在给定的cadency。然后核心首先轮询输入,并为生成的帧提供视频和音频输出。

问题在于音频:每一帧,核心都给我足够的音频以匹配其采样率(例如,对于SNES,它是每秒32000个样本)。因此,每次我收到音频回调时,我只需使用ao_play来播放所需的一切。

这是每帧运行的代码;我已经使用核心给出的参数初始化了libao:有符号的16位整数,良好的采样率和2个通道。

size_t RetroCore::processAudioSampleBatch(const int16_t *data, size_t frames)
{
    ao_play(&aoDevice, (char*)data, frames*4);
    return frames; //just to inform the core
}

但结果非常不稳定,就好像每帧之间有一些延迟。声音准确,但听起来质量很差,输出很差。我被告知我需要更强大的声音实现,这是什么意思?我是否需要重新取样声音,或制作外部线程?

谢谢!

0 个答案:

没有答案