2011-09-04 6 views
0

Quelle est la bonne façon de procéder? Supposons que j'ai un flux de données audio et que je souhaite y appliquer des filtres audio avant de l'écrire sur le disqueManipulation des flux

À quoi devrait ressembler l'interface pour les filtres?

Sub Process(InputStream as IO.Stream) 

ou

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

? Je suppose que je ne comprends pas très bien comment les flux doivent être transmis entre les classes et les méthodes - Ai-je besoin de lire le flux entier dans une méthode, de le traiter et d'écrire dans un nouveau flux retourné?

Qu'en est-il des flux sans longueur fixe? Je ne veux pas essayer de lire un flux potentiellement infini dans la mémoire - je veux que chaque filtre traite un morceau et le passe au filtre suivant.

Est-ce que quelqu'un peut me diriger dans la bonne direction?

+0

Les flux devraient être passés comme n'importe quoi d'autre. Que pensez-vous est spécial à leur sujet? –

+0

Eh bien, j'ai besoin d'un traitement pour être continu - par exemple, l'échantillon 1 arrive, est traité par "VolumeUp", puis "PitchShift", etc ... avant d'être écrit sur le disque. Alors que l'échantillon 1 est en Pitch shifted, l'échantillon 2 est arrivé et doit être exécuté par 'VolumeUp' etc ... C'est à dire que ce ne sont pas des données discrètes que je fais circuler, je dois câbler mes classes en tant que processeurs que je suppose fonctionner en parallèle ou en succession rapide ... – Basic

+0

Cela n'a donc rien à voir avec la façon de passer un flux, mais plutôt comment créer un ensemble de "processeurs" pour traiter séquentiellement un flux de données. Avez-vous même un moyen de diviser le flux en échantillons? –

Répondre

1

Typiquement, je pense à étendre la fonctionnalité de Streams en utilisant le motif décorateur. Dans ce cas, un flux enveloppe l'original et manipule les données avant de les transmettre à la méthode du flux d'origine. Découvrez this article from MSDN Magazine sur la création d'un InterceptorStream qui fournit des fonctionnalités supplémentaires à l'Stream enveloppé.

+0

Cet article explique exactement ce que j'avais besoin de savoir - Merci , réponse parfaite. – Basic