You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IrrKlang播放WAV文件时getPlayLength()返回时长异常求助

解决irrKlang getPlayLength()返回异常时长的问题

嗨,我之前也碰到过类似的情况,咱们一步步来排查解决:

最可能的原因:音频未加载完成就调用了getPlayLength()

irrKlang的play2D()是异步加载音频的——它会立刻返回声音实例,但后台还在加载音频数据。你刚调用完play2D()就去拿时长,此时只加载了极少量数据,所以返回143ms这种异常值。

解决方法很直接:先暂停播放让音频加载完成,再获取时长:

// 第三个参数设为true,让音频先暂停加载
auto m_pSound = m_pSoundEngine->play2D("G:\\SomeAbsolutePath\\3_Tenor.wav", true, true, true); 

// 等待音频加载就绪
while (!m_pSound->isReady()) {
    Sleep(10); // 短暂休眠,避免占满CPU
}

// 现在获取的时长就是正确的了
auto actualLength = m_pSound->getPlayLength();

// 之后再恢复播放
m_pSound->setIsPaused(false);

备选排查方向:WAV格式兼容性问题

VLC的解码能力很强,但irrKlang对WAV格式有更严格的要求,它优先支持16位PCM、44.1kHz/48kHz的标准WAV。如果你的文件是24位深度、非PCM编码(比如Cubase导出的某些压缩WAV变体),就可能导致irrKlang解析时长出错。

你可以用Audacity把文件转成标准16位PCM WAV,再测试一次,大概率能解决问题。

更可靠的验证方式:先加载音频源再获取时长

如果你想彻底避开异步加载的坑,可以先手动加载音频源,从源里获取时长:

auto soundSource = m_pSoundEngine->addSoundSourceFromFile("G:\\SomeAbsolutePath\\3_Tenor.wav");
if (soundSource) {
    // 从音频源获取的时长是100%准确的
    auto length = soundSource->getPlayLength();
    // 再用这个源播放音频
    auto m_pSound = m_pSoundEngine->play2D(soundSource, true, false, true);
}

最后:检查irrKlang版本

如果以上方法都不行,试试更新到最新版的irrKlang——旧版本可能存在某些WAV解析的bug,更新后大概率能修复。


内容的提问来源于stack exchange,提问作者144226734

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:29:55