本文整理汇总了C#中IAudioStream.Wrap方法的典型用法代码示例。如果您正苦于以下问题:C# IAudioStream.Wrap方法的具体用法?C# IAudioStream.Wrap怎么用?C# IAudioStream.Wrap使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IAudioStream
的用法示例。
在下文中一共展示了IAudioStream.Wrap方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Fill
public void Fill(IAudioStream stream, bool loop)
{
int blockAlign = stream.BitsPerSample * stream.Channels / 8;
int samplePos = stream.SamplePosition;
int sampleCount = _sampleLength;
int samplesRead;
bool end = false;
loop = loop && stream.IsLooping;
int lastSample = loop ? stream.LoopEndSample : stream.Samples;
VoidPtr blockAddr = _part1Address;
int blockRemaining = _part1Samples;
while (sampleCount > 0)
{
//Get current block sample count
int blockSamples = Math.Min(blockRemaining, sampleCount);
//Fill zeros
if (end)
Memory.Fill(blockAddr, (uint)(blockSamples * blockAlign), 0);
else
{
//Do we extend within last sample range?
if ((samplePos <= lastSample) && (lastSample < (samplePos + blockSamples)))
{
blockSamples = lastSample - samplePos;
end = true;
}
samplesRead = stream.ReadSamples(blockAddr, blockSamples);
samplePos += samplesRead;
if (samplesRead < blockSamples)
{
blockSamples = samplesRead;
end = true;
}
else if (loop && end)
{
stream.Wrap();
if (samplePos == stream.SamplePosition)
{
samplePos = -1;
break;
}
samplePos = stream.SamplePosition;
end = false;
}
}
blockAddr += blockSamples * blockAlign;
blockRemaining -= blockSamples;
//Wrap to second buffer
if (blockRemaining <= 0)
{
blockAddr = _part2Address;
blockRemaining = _part2Samples;
}
sampleCount -= blockSamples;
}
}