private static void InitDomain() { var track = new MidiTrack(); track.Insert(new TempoEvent() { Tempo = 120, Tick = 0 }); for (int i = 0; i < time.Length; i++) { byte note = 60; if (i > 2 && i % 4 == 1) { note = 67; } if (i > 2 && i % 4 == 2) { note = 64; } track.Insert(new NoteEvent() { Note = note, Tick = time[i], Gate = resolution, Velocity = 64 }); } //midiDataにtrackを対応付け midiData = new MidiData(); midiData.Tracks.Add(track); midiData.Resolution.Resolution = resolution; // テンポマップを作成 domain = new MidiFileDomain(midiData); SetTime(); }
/// <summary> /// MIDIの初期化 /// </summary> /// <param name="portnum"></param> public MidiManager() { int NumOfMode = ModeList.Length; //モードの数だけトラック配列の要素数を用意する tracks = new MidiTrack[NumOfMode]; //モードの数だけコード進行配列の要素数を用意する chordProgList = new List <Chord> [NumOfMode]; //コード進行配列の初期化 for (int i = 0; i < NumOfMode; i++) { tracks[i] = new MidiTrack(); chordProgList[i] = new List <Chord>(); } //Modeの数だけコード進行配列の初期化 for (int mode = 0; mode < NumOfMode; mode++) { tracks[mode].Insert(new TempoEvent() { Tempo = 120, Tick = 0 }); //コードの開始位置を0に初期化 int ChordTickFromStart = 0; //入力コード進行(chordProgress)からコード進行リストを初期化する foreach (String chordName in inputedChord) { //Chordの初期化 Chord chord = new Chord(chordName, ChordTickFromStart, mode); //Chordをインスタンス化 chordProgList[mode].Add(chord); //Modeに対応するインデックスのコード進行配列chordを追加 ChordTickFromStart += chord.Gate; //次のchordの開始タイミングにする //Trackの初期化 tracks[mode].Insert(chord.Base); //ベース音の挿入 foreach (var note in chord.NoteList) { tracks[mode].Insert(note); //伴奏音の挿入 } } } port = new MidiOutPort(0); try { port.Open(); } catch { Console.WriteLine("no such port exists"); return; } //midiDataにtrackを対応付け midiData = new MidiData(); midiData.Tracks.Add(tracks[MODE_QUARTER]); // テンポマップを作成 domain = new MidiFileDomain(midiData); }
public static void InitAccompanimentDomain() { var track = new MidiTrack(); track.Insert(new TempoEvent() { Tempo = 120, Tick = 0 }); for (int i = 0; i < 5; i++) { byte note = 60; track.Insert(new NoteEvent() { Note = note, Tick = BGMtime[i], Gate = resolution, Velocity = 64, Channel = 0 }); } for (int i = 5; i < BGMtime.Length; i++) { int byteIndex = (i - 5) / 4; foreach (byte note in Chord.MidiNumber[byteIndex]) { track.Insert(new NoteEvent() { Note = note, Tick = BGMtime[i], Gate = resolution, Velocity = 64, Channel = 0 }); } } for (int i = 0; i < Chord.NoteList.Length; i++) { int length = Chord.MidiNumber[i].Length * 3; Chord.NoteList[i] = new byte[length]; for (int j = 0; j < 3; j++) { Chord.NoteList[i][j] = (byte)(Chord.MidiNumber[i][j] - 12); Chord.NoteList[i][j + 3] = Chord.MidiNumber[i][j]; Chord.NoteList[i][j + 6] = (byte)(Chord.MidiNumber[i][j] + 12); } } foreach (var notes in Chord.NoteList) { for (int i = 0; i < notes.Length; i++) { Console.Write(notes[i] + ", "); } Console.WriteLine(); } //midiDataにtrackを対応付け BGMmidiData = new MidiData(); BGMmidiData.Tracks.Add(track); BGMmidiData.Resolution.Resolution = resolution; // テンポマップを作成 BGMdomain = new MidiFileDomain(BGMmidiData); }
private static void InitDomain(string filename) { // MIDI ファイルを読み込み //string fname = "../../../Resources/wood.mid";// 0 | 480 1440 | 2400 2880 3360 | 4320 4800 5280 5760 | 6240 … string fname = filename; if (!File.Exists(fname)) { Console.WriteLine("File does not exist"); return; } var midiData = MidiReader.ReadFrom(fname, Encoding.GetEncoding("shift-jis")); // テンポマップを作成 domain = new MidiFileDomain(midiData); }
public static void PlayMidi(MidiFileDomain d) { // MIDI ファイルを再生 player.Play(d); }