【问题标题】:Circular buffer in VB.NETVB.NET 中的循环缓冲区
【发布时间】:2010-02-24 18:43:03
【问题描述】:

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

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

我目前使用 marshall 类在堆中构建一个规则的字节数组。

【问题讨论】:

    标签: vb.net heap-memory circular-buffer


    【解决方案1】:

    好的,我会字节...

    您真的是指 CIRCULAR(固定大小)还是可以使用链表?

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

    【讨论】:

    • 我认为我不能使用链表,因为我只需要将指向内存块的指针传递给 winmm API。我正在进行的工作在这里:waveout.codeplex.com/SourceControl/changeset/view/43602#798077 我正在尝试从缓冲区播放完成时开始在回调中旋转缓冲区,但这并不是严格意义上的循环缓冲区
    • 好的,我看了一下...似乎您将“样本”创建到队列/数组中,然后将 Marshall.write 逐字节写入堆,然后将 ptr 传递给多媒体 dll。如何创建一个明确定义的数据结构(即 LChannel 数据紧跟 RChannel 数据)然后将指向该结构的指针传递给 MM_ddl?可以想象,您可以在播放数据时替换“前端”上的数据。或者你可以有一个触发器安排,在你填充第二个时将一个数组传递给 MM_dll,然后传递那个,然后返回并再次填充第一个。
    • 该结构将被创建得足够大,以每秒容纳您需要的 44100 个样本。
    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2022-11-14
    • 2019-06-08
    • 1970-01-01
    相关资源
    最近更新 更多