【问题标题】:How do I stream audio into OpenAL Sources?如何将音频流式传输到 OpenAL Sources?
【发布时间】:2013-04-17 08:54:14
【问题描述】:

我刚刚开始使用 OpenAL。

我已成功将 WAV 文件加载到其中,并成功播放。这很容易。

现在,我需要能够将音乐流式传输到 OpenAL,而不是将整个文件加载到其中。虽然这对音效等有好处,但对音乐来说可能非常危险,您可能知道。

问题是,我似乎在 Google 上找不到与此相关的任何内容。虽然我找到了一些与流 OGG 文件相关的示例,但我更愿意制作一个支持所有音乐文件的系统。

据我了解,OpenAL 应该为此内置函数。但我找不到它们。

所以,我的问题是,如何将音频流式传输到 OpenAL 的缓冲区中,同时删除已播放的部分并导入尚未播放的部分?

如果这是一个无知的问题,我深表歉意。

【问题讨论】:

    标签: java audio stream lwjgl openal


    【解决方案1】:

    使用alSourceQueueBuffers() 将缓冲区排队等待源直接连续播放。在播放过程中,使用alGetSourcei()AL_BUFFERS_PROCESSED 来获取已完全播放并准备好重复使用的缓冲区的数量。 alSourceUnqueueBuffers() 将为您从队列中弹出这些缓冲区,因此您可以用新数据填充它们并再次将它们排队。

    基本上,您将在一个线程中循环:休眠一小段时间,测试新的可用缓冲区,用数据填充它们,将它们排队并再次休眠。

    SFML 在其SoundStream class (C++) 中实现了这一点,如果您愿意,可以将其作为参考。

    【讨论】:

      猜你喜欢
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      • 2019-10-29
      • 1970-01-01
      • 2020-02-19
      • 2010-09-14
      相关资源
      最近更新 更多