C#DirectSound Buffer.Write()参数异常(DirectX SDK 2010年6月)

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)

这里有人使用过DirectSound缓冲区吗?我试图通过使用计时器在每次播放%的数据时向缓冲区写入新数据来获得一个连续的循环缓冲区。我用ms定时器来做这个

    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

是否有人对此有解释或如何绕过它(或关于更好的循环缓冲区实现的建议)