OpenAL Stream不更新

时间:2017-02-21 10:59:15

标签: c# opentk openal

我目前在使用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();
    }

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

我发现这个问题出现在以下逻辑中:

if (AL.IsBuffer(bufferId))

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

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