2011-09-04 75 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