public SynthPlayer() { Logger.Debug("Initializing player"); State = SynthPlayerState.Stopped; OnPlayerStateChanged(new PlayerStateChangedEventArgs(State)); Logger.Debug("Opening output"); Output = Platform.Platform.CreateOutput(); Logger.Debug("Creating synthesizer"); Synth = new Synthesizer(Output.SampleRate, SynthConstants.AudioChannels, 441, 3, 100); Sequencer = new MidiFileSequencer(Synth); Sequencer.AddFinishedListener(Output.SequencerFinished); Output.Finished += () => { // stop everything Stop(); Logger.Debug("Finished playback"); OnFinished(); }; Output.SampleRequest += () => { // synthesize buffer Sequencer.FillMidiEventQueue(); Synth.Synthesize(); // send it to output Output.AddSamples(Synth.SampleBuffer); }; Output.PositionChanged += pos => { // log position FirePositionChanged(pos); }; Output.Open(); }