OpenAL Stream 不更新

OpenAL Stream not updating

我目前在使用 OpenAL 时遇到了一些问题。我开始流式传输声音,然后调用一个函数,如果在初始播放调用中未加载声音,该函数将尝试对声音的剩余部分进行排队。在最初播放较大声音的那一刻,它不会更新源上的数据。

这是用于尝试填充通道缓冲区的源代码:

private void EnsureBufferFilled(Int32 sourceId, List<Int32> bufferIds)
    {
        if(!_Registered || bufferIds.Count == 0) return;

        Task t = new Task(() =>
        {
            List<Int32> loadedIds = new List<Int32>();

            foreach (Int32 bufferId in bufferIds)
            {
                if (AL.IsBuffer(bufferId))
                {
                    AL.SourceQueueBuffer(sourceId, bufferId);
                    loadedIds.Add(bufferId);
                }
                else break;
            }

            bufferIds.RemoveRange(0, loadedIds.Count);

            if (bufferIds.Count != 0)
            {
                EnsureBufferFilled(sourceId, bufferIds);
            }
        });
        t.Start();
    }

如有任何帮助,我们将不胜感激。

谢谢

我发现问题在于以下逻辑:

if (AL.IsBuffer(bufferId))

这只是检查缓冲区是否已创建,而不是所有数据是否已加载。这意味着当执行检查时,我试图在没有数据的情况下对缓冲区进行排队。

为了解决这个问题,我添加了一个额外的检查来查看是否加载了与缓冲区相关的数据(我写入自己的自定义音频数据的函数 class)。