C#DirectSound Buffer.Write()参数异常(DirectX SDK 2010年6月)
这里有人使用过DirectSound缓冲区吗?我试图通过使用计时器在每次播放%的数据时向缓冲区写入新数据来获得一个连续的循环缓冲区。我用ms定时器来做这个C#DirectSound Buffer.Write()参数异常(DirectX SDK 2010年6月),c#,buffer,directsound,C#,Buffer,Directsound,这里有人使用过DirectSound缓冲区吗?我试图通过使用计时器在每次播放%的数据时向缓冲区写入新数据来获得一个连续的循环缓冲区。我用ms定时器来做这个 private void tick(object sender, EventArgs e) { Int32 read, write; buffer.GetCurrentPosition(out read, out write); if (read > 0)
private void tick(object sender, EventArgs e)
{
Int32 read, write;
buffer.GetCurrentPosition(out read, out write);
if (read > 0)
Main.Record(buffer, (write / 2), (read / 2) - 1);
}
使用Record()函数时,会执行以下操作:
short[] data;
int size;
if (end > start)
size = end - start;
else
size = BUFFER_SIZE - end + start;
data = new short[size];
foreach (Voice v in voices)
for (int i = 0; i < size; i++)
{
data[i] += v.Record();
v.incLife();
}
buffer.Write(start, data, LockFlag.None);
short[]数据;
整数大小;
如果(结束>开始)
大小=结束-开始;
其他的
大小=缓冲区大小-结束+开始;
数据=新短[尺寸];
foreach(语音中的语音v)
对于(int i=0;i
我使用的是LockFlag.None,因为我不希望缓冲区被锁定,这样我就可以继续写入它。但是,如果我使用LockFlag.None,我会得到一个ArgumentException。如果我使用LockFlag.EntireBuffer,我会得到一个AccessViolationException
是否有人对此有解释或如何绕过它(或关于更好的循环缓冲区实现的建议)