Beispiel #1
0
        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);
            }
        }
Beispiel #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 ();
        }
Beispiel #4
0
        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;
                }
            };
        }