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