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();
}