2010-02-24 116 views
0

如何在VB.NET中的堆上创建循环缓冲区?VB.NET中的循环缓冲区

这将用于音频播放通过P/Invoke到winmm.dll waveoutopen和waveoutwrite来支持软件合成器的开发。

我目前使用marshall类在堆中构建常规字节数组。

回答

2

OK,我会字节...

你真的是圆(如固定大小),或者你可以使用一个链表?

and

为什么要担心“堆?”这是VB在嵌入式硬件系统上不是“c/C++”。由于数据范围,生命周期或可用性(对于ALLOC/MALLOC中的其他应用程序),是否使用术语“堆”?

+0

我不认为我可以使用链接列表,因为我只需要通过一个指向winmm API的内存块的指针。我正在进行的工作在这里:http://waveout.codeplex.com/SourceControl/changeset/view/43602#798077我试图从缓冲区播放完成时回调缓冲区,但这不是一个严格的循环缓冲区 – PeanutPower 2010-02-25 18:07:17

+0

好吧,我看了一眼... 看来你创建你的“样本”到一个队列/数组,然后马歇尔。逐字节写入堆,然后将ptr传递给多媒体DLL。 如何创建一个明确定义的数据结构(即LChannel数据紧接着RChannel数据),然后将指针传递给结构MM_ddl? 在数据播出时,您可能会想到将数据替换为“前端”。或者你可以有一个触发器安排,在你填充一秒的时候将一个数组传递给MM_dll,然后再传递一个数组,然后返回并重新填充第一个数组。 – tobrien 2010-02-25 18:52:56

+0

该结构将被创建为足够容纳每秒需要的44100个样本。 – tobrien 2010-02-25 18:53:52