0
現在、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();
}
任意の助けいただければ幸いです。
おかげ
バッファをロードしてキューに入れた後に、AL.SourcePlayを呼び出す必要はありませんか? –
AL.SourcePlayの呼び出しはこの関数の外部にあり、この関数はデータを再生中のチャンネルにキューイングしようとしています – Elliott