为什么多次播放时声音会失真?

时间:2019-06-13 21:44:22

标签: core-audio openal

当多次播放相同的声音时,第一次听起来不错,但是下一次变得失真(静音,好像它很远)。我正在使用openAL从同一缓冲区(在启动时从.wav文件初始化一次)播放。奇怪的是,在Apple应用程序(Xcode,Quicktime Player,Safari)中播放声音但在许多第三方应用程序(VLC,Chrome等)中播放声音时,也会发生同样的情况。相同的代码可以在iOS上正常工作,并且相同的声音文件也可以在MacOS上的旧版Carbon版本中正确播放。

出现问题的声音之一是http://www.colibricks.com/Sound131.wav。 通过在Safari中打开该链接并按“播放”按钮,您可以自己听到。第一次听起来还不错,下一次听起来好像真的很遥远。重新加载页面,第一次尝试时听起来又不错,然后又很远。 不过,在Chrome中打开同一页面,每次听起来都没问题。

奇怪的是,旧的已编译的32位Carbon版本,我不能再在当前版本的XCode中编译,但使用相同的声音文件,听起来不错!

我尝试用Audacity打开文件,将其导出为许多不同的格式(wav,aiff,16或32位,...),然后在Quicktime Player中播放这些文件。总是相同的结果:先播放OK,然后失真。

这是我用来播放声音的代码(在以几乎标准的方式设置了所有源和缓冲区之后)

alSourcef(source[i], AL_GAIN, volume * (1.f/256.f));
alSourcei(source[i], AL_BUFFER, 0);
alSourcei(source[i], AL_BUFFER, bufID[which-128]);
alSourcePlay(source[i]);

openAL或音频系统的其他部分似乎存在某种错误,当反复播放声音时,声音会变形,不仅在我的应用程序中,而且在其他Apple应用程序中也如此。

我想尝试其他解决方案来播放声音(无论如何,不​​建议使用openAL),但是很难找到CoreAudio或AudioAVEngine的简单示例代码,该示例代码只能左右左右播放不同音量的声音(或者极其平移) )。我的需求非常简单:将一堆非常短的声音加载到缓冲区中,然后在游戏中以左/右不同的音量播放它们。没有特殊的3d效果和混响以及所有这些东西。我有点害怕完成所有工作来实现AudioAVEngine,而只是发现问题仍然存在。而且,CoreAudio似乎有些令人生畏,除非有人可以为此指出一些不错的可用代码?并能解决失真的声音吗?

0 个答案:

没有答案