public override IObservable <Mat> Process(IObservable <Mat> source) { return(Observable.Using( () => AudioManager.ReserveContext(DeviceName), resource => { var buffer = resource.Context.ResourceManager.Load <Buffer>(BufferName); return source.Do(input => BufferHelper.UpdateBuffer(buffer.Id, input, SampleRate)); })); }
public IObservable <Mat> Process(IObservable <AudioSource> audioSource, IObservable <Mat> dataSource) { return(Observable.Using( () => AudioManager.ReserveContext(DeviceName), resource => audioSource.SelectMany(source => dataSource.Do(input => { var buffer = AL.GenBuffer(); BufferHelper.UpdateBuffer(buffer, input, SampleRate); AL.SourceQueueBuffer(source.Id, buffer); source.ClearBuffers(0); if (AL.GetSourceState(source.Id) != ALSourceState.Playing) { AL.SourcePlay(source.Id); } })))); }