Ejemplo n.º 1
0
        public MainWindow()
        {
            InitializeComponent();

            //MIDIデバイスオープン
            int    midiDeviceNum  = MIDIOUT.GetDeviceNum();
            string midiDeviceName = "";

            for (int i = 0; i < midiDeviceNum; i++)
            {
                midiDeviceName = MIDIOUT.GetDeviceName(i);
                break;
            }
            try
            {
                midiOut = new MIDIOUT(midiDeviceName);
            }
            catch (MIDIIOException ex)
            {
                MessageBox.Show("MIDIデバイスが開けませんでした。\n音はなりません。", this.Title);
            }

            FieldDrop = new Ellipse[Field.FieldHeight, Field.FieldWidth]
            {
                { drop00, drop01, drop02, drop03, drop04, drop05 },
                { drop10, drop11, drop12, drop13, drop14, drop15 },
                { drop20, drop21, drop22, drop23, drop24, drop25 },
                { drop30, drop31, drop32, drop33, drop34, drop35 },
                { drop40, drop41, drop42, drop43, drop44, drop45 }
            };

            //盤面をランダムに設定
            for (int y = 0; y < field.DropStates.GetLength(0); y++)
            {
                for (int x = 0; x < field.DropStates.GetLength(1); x++)
                {
                    field.DropStates[y, x] = (DropState)random.Next((int)DropState.DropState1, (int)DropState.DropState6);
                }
            }

            //盤面を、削除できるドロップがない状態で開始
            DeleteAndFallDrop(false);

            //盤面更新
            DrawField();
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            MIDIClock.TimeMode lTimeMode = 0;
            int lTimeResolution          = 0;
            int lTempo = 60000000 / 160;             /* [microsec/quarter note] */

            MIDIOUT  mIDIOUT  = new MIDIOUT("Microsoft GS Wavetable Synth");
            MIDIData mIDIData = new MIDIData("D:\\旧ドキュメント\\TSQ\\音楽(tsq)\\君とみた海(完全版)\\君とみた海(伴奏).mid");

            lTimeMode       = (MIDIClock.TimeMode)mIDIData.TimeMode;
            lTimeResolution = mIDIData.TimeResolution;

            //すべてのイベントを列挙してから再生
            List <List <MIDIEvent> > mIDIEvents = new List <List <MIDIEvent> >();

            foreach (var track in mIDIData)
            {
                List <MIDIEvent> events = new List <MIDIEvent>();
                foreach (var @event in track)
                {
                    events.Add(@event);
                }
                mIDIEvents.Add(events);
            }

            MIDIClock mIDIClock = new MIDIClock(lTimeMode, lTimeResolution, lTempo);

            Console.WriteLine("Now playing...");
            mIDIClock.Start();

            int lCurTime = 0;
            int lEndTime = mIDIData.EndTime;
            int lOldTime = 0;

            while (lCurTime <= lEndTime && !Console.KeyAvailable)
            {
                lCurTime = mIDIClock.TickCount;
                foreach (var track in mIDIEvents)
                {
                    foreach (var @event in track)
                    {
                        int lTime = @event.Time;
                        if (lOldTime <= lTime && lTime < lCurTime)
                        {
                            if (@event.IsTempo)
                            {
                                lTempo          = @event.Tempo;
                                mIDIClock.Tempo = lTempo;
                            }
                            if (@event.IsMIDIEvent ||
                                @event.IsSysExEvent)
                            {
                                byte[] byMessage = @event.Data;

                                mIDIOUT.PutMIDIMessage(byMessage);
                            }
                        }
                    }
                }
                lOldTime = lCurTime;
            }

            mIDIClock.Stop();
            mIDIOUT.Dispose();
            Console.WriteLine("Now end.");

            Console.Read();
        }