2010-02-24 121 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