2011-09-04 56 views
0

這樣做的正確方法是什麼?假設我有一個音頻數據流,並希望在將其寫入磁盤之前應用一些音頻過濾器操縱流

過濾器的接口應該是什麼樣子?

Sub Process(InputStream as IO.Stream) 

Function Process(InputStream as IO.Stream) as IO.Stream 

我想我有點不清楚應該如何在類和方法之間傳遞流 - 我是否需要讀取方法中的整個流,處理它,然後寫入返回的新流?

沒有固定長度的流如何?我不想嘗試讀取一個潛在的無限流到內存中 - 我希望每個過濾器處理一個塊並將其傳遞到下一個過濾器。

有人可以請指出我在正確的方向嗎?

+0

流應該像其他任何東西一樣傳遞。你認爲他們有什麼特別的? –

+0

嗯,我需要處理是連續的 - 例如,樣本1到達,在被寫入磁盤之前通過「VolumeUp」,然後是「PitchShift」等進行處理。雖然示例1正在進行音調移動,但示例2已經到達並且需要通過'VolumeUp'等運行...即,它不是我傳遞的離散數據,我需要將我的類連接爲處理器,我認爲它應該並行或快速連續運行...... – Basic

+0

因此,這與如何傳遞數據流無關,而是如何創建一組「處理器」來順序處理數據流。你甚至有辦法將流分成樣本嗎? –

回答

1

通常,我想使用Decorator模式擴展Streams的功能。在這種情況下,一個流包裝原始數據並在將數據傳遞給原始數據流的方法之前對數據進行處理。查看this article from MSDN Magazine創建InterceptorStream,爲包裝的Stream提供附加功能。

+0

那篇文章解釋了我需要知道的東西 - 謝謝,完美的答案。 – Basic