У меня есть проект C#, работающий с входным аудиопотоком из Kinect 1, Kinect 2, Microphone или что-то еще.Как я могу разделить и направить несколько потоков NAudio
waveIn.DataAvailable += (object sender, WaveInEventArgs e) => {
lock(buffer){
var pos = buffer.Position;
buffer.Write(e.Buffer, 0, e.BytesRecorded);
buffer.Position = pos;
}
};
Переменный буфер является потоком из компонента А, которые будут обрабатываться SpeechRecognition компонента В, работающих на Потоках.
я добавлять новые компоненты C, D, E, работающий на Streams, чтобы вычислить высоту, обнаруживать звук, делать отпечатки пальцев или что-нибудь еще ...
Как я могу дублировать поток для компонентов C, D, E?
Компонент А отправить событие «У меня есть поток делать то, что вы хотите» Я не хочу, чтобы изменить логику с помощью Event «Дайте мне ваши потоки»
Я ищу для «MULTISTREAM», которые могли бы дать мне поток экземпляр и будет обращаться с работой
Компонент а
var MultiStream buffer = new MultiStream()
...
SendMyEventWith(buffer)
Компонент В, С, D, Е
public void HandleMyEvent(MultiStream buffer){
var stream = buffer.GetNewStream();
var engine = new EngineComponentB()
engine.SetStream(stream);
}
- MultiStream должен быть потоком, чтобы обернуть метод Write() (потому что поток не имеет доступную механику данных)?
- Если поток является Dispose() компонентом B, MultiStream должен удалить его из массива?
- MultiStream должен бросить исключение на Read() требует использования GetNewStream()
EDIT: Kinect 1 обеспечить сам поток ... :-(я должен использовать тему pumpit в MULTISTREAM ?
ли кто-нибудь есть такой многопоточных класса?
Благодаря
В Паб/Суб наблюдателя я буду писать данные из потока в другой, используя поток? Это может исправить проблему Kinect 1, которая обеспечивает поток, который я могу перекачивать в поток памяти. –
Но это не решает проблему MultiStream. На стороне у меня есть поток в компоненте A, а с другой стороны у меня есть считыватели B, C, D, E, которые хотят читать полный поток. Так что это не проблема с блокировкой, а проблема с «прочитанным» курсором, которую я пытаюсь решить. –
В методе 'Notify'' IObservable вы отправляете полученную информацию каждому подписчику, чтобы каждый абонент получал полную копию данных работать на. Если вам нужно сохранить историю данных в каждом наблюдателе, тогда использование памяти может немного сдуться ... это компромисс, я думаю. Вы * можете * делиться потоком между разными подписчиками, если хотите, с объектом курсора потока для каждого абонента, который обрабатывает независимое позиционирование, которое им требуется. Было бы интересно писать ,,, но дать Pub/Sub попробовать. –
Corey