public MidiPlayer(SmfMusic music, IMidiOutput output, IMidiTimeManager timeManager) { if (music == null) { throw new ArgumentNullException("music"); } if (output == null) { throw new ArgumentNullException("output"); } if (timeManager == null) { throw new ArgumentNullException("timeManager"); } this.output = output; player = new MidiSyncPlayer(music, timeManager); EventReceived += (m) => { switch (m.EventType) { case SmfEvent.SysEx1: case SmfEvent.SysEx2: if (buffer.Length <= m.Data.Length) { buffer = new byte [buffer.Length * 2]; } buffer [0] = m.StatusByte; Array.Copy(m.Data, 0, buffer, 1, m.Data.Length); output.SendAsync(buffer, 0, m.Data.Length + 1, 0); break; case SmfEvent.Meta: // do nothing. break; default: var size = SmfEvent.FixedDataSize(m.StatusByte); buffer [0] = m.StatusByte; buffer [1] = m.Msb; buffer [2] = m.Lsb; output.SendAsync(buffer, 0, size + 1, 0); break; } }; }
public void Invoke(IMinion minion) { IMidiMinion m = minion as IMidiMinion; if (m != null) { byte[] juices = m.ExtractJuices(0); output.SendAsync(juices, 0, 3, 0); } }
void doit() { TimeSignature timeSig = new TimeSignature(4, 4, 120); TockTicker t = new TockTicker(timeSig); KickSequencer ks = new KickSequencer(timeSig); BassSequencer bs = new BassSequencer(timeSig); Scuttler b = new Scuttler(timeSig.GetNoteForBars(8), Enumerable.Range(0, 4).Select(_ => new League( ks.GetKickSequence(1), ks.GetSnareSequence(1), ks.GetHatSequence(1), bs.GetBassSequence(1) )).ToArray()); Scuttler c = new Scuttler(timeSig.GetNoteForBars(4), Enumerable.Range(0, 2).Select(_ => new League( ks.GetKickSequence(1), ks.GetSnareSequence(1), ks.GetHatSequence(1), bs.GetBassSequence(1) )).ToArray()); ChainGang cg5 = new ChainGang(b, c, b, c); IGang playThis = cg5; MidiMinionGrinder minionGrinder = new MidiMinionGrinder(); t.Start(); while (!playThis.FizzledOut) { t.SleepUntil(playThis.TimeToKill); do { IMinion m = playThis.GetSacrificialMinion(); if (!(m is NoOp)) { minionGrinder.Grind(m); } } while (!playThis.FizzledOut && playThis.TimeToKill == 0); byte[] juices = minionGrinder.ExtractJuices(); output.SendAsync(juices, 0, juices.Length, 0); } //Console.ReadLine (); }
public MidiPlayer(SmfMusic music, IMidiOutput output, IMidiTimeManager timeManager) { if (music == null) throw new ArgumentNullException ("music"); if (output == null) throw new ArgumentNullException ("output"); if (timeManager == null) throw new ArgumentNullException ("timeManager"); this.output = output; player = new MidiSyncPlayer (music, timeManager); EventReceived += (m) => { switch (m.EventType) { case SmfEvent.SysEx1: case SmfEvent.SysEx2: if (buffer.Length <= m.Data.Length) buffer = new byte [buffer.Length * 2]; buffer [0] = m.StatusByte; Array.Copy (m.Data, 0, buffer, 1, m.Data.Length); output.SendAsync (buffer, 0, m.Data.Length + 1, 0); break; case SmfEvent.Meta: // do nothing. break; default: var size = SmfEvent.FixedDataSize (m.StatusByte); buffer [0] = m.StatusByte; buffer [1] = m.Msb; buffer [2] = m.Lsb; output.SendAsync (buffer, 0, size + 1, 0); break; } }; }