diff --git a/projects/midi/src/tokens/midi-messages.ts b/projects/midi/src/tokens/midi-messages.ts index 5068711..1dc4e60 100644 --- a/projects/midi/src/tokens/midi-messages.ts +++ b/projects/midi/src/tokens/midi-messages.ts @@ -1,10 +1,11 @@ import {inject, InjectionToken} from '@angular/core'; import {from, fromEvent, merge, Observable, throwError} from 'rxjs'; import {FromEventTarget} from 'rxjs/internal/observable/fromEvent'; -import {share, switchMap} from 'rxjs/operators'; +import {share, startWith, switchMap} from 'rxjs/operators'; import {MIDI_ACCESS} from './midi-access'; import MIDIMessageEvent = WebMidi.MIDIMessageEvent; +import MIDIConnectionEvent = WebMidi.MIDIConnectionEvent; export const MIDI_MESSAGES = new InjectionToken>( 'All incoming MIDI messages stream', @@ -15,11 +16,19 @@ export const MIDI_MESSAGES = new InjectionToken>( switchMap(access => access instanceof Error ? throwError(access) - : merge( - ...Array.from(access.inputs).map(([_, input]) => - fromEvent( - input as FromEventTarget, - 'midimessage', + : fromEvent( + access as FromEventTarget, + 'statechange', + ).pipe( + startWith(null), + switchMap(() => + merge( + ...Array.from(access.inputs).map(([_, input]) => + fromEvent( + input as FromEventTarget, + 'midimessage', + ), + ), ), ), ),