public void ProcessMidiEvents(Synthesizer synthesizer) { if (sequencer == null) { sequencer = new MidiFileSequencer(synthesizer); sequencer.Play(midi, loop); } sequencer.ProcessEvents(); }
protected override bool OnGetData(out short[] samples) { lock (mutex) { var t = 0; for (var i = 0; i < blocksPerBatch; i++) { sequencer.ProcessEvents(); synthesizer.Render(left, right); for (var j = 0; j < left.Length; j++) { var sampleLeft = (int)(32768 * left[j]); if (sampleLeft < short.MinValue) { sampleLeft = short.MinValue; } else if (sampleLeft > short.MaxValue) { sampleLeft = short.MaxValue; } var sampleRight = (int)(32768 * right[j]); if (sampleRight < short.MinValue) { sampleRight = short.MinValue; } else if (sampleRight > short.MaxValue) { sampleRight = short.MaxValue; } batch[t++] = (short)sampleLeft; batch[t++] = (short)sampleRight; } } samples = batch; } return(true); }