質問するログイン新規登録

質問編集履歴

2

MIDIデータ構造の追加

2018/01/22 08:53

投稿

zakky79
zakky79

スコア23

title CHANGED
File without changes
body CHANGED
@@ -41,4 +41,62 @@
41
41
 
42
42
  /* */
43
43
  long lRet;
44
+ ```
45
+
46
+ MIDIデータ自体は、プログラムで作りました。フリーなどでダウンロードできるものではありません。TIMEが同じ時にその音が二つ鳴ります。チャンネルの42はハイハット。36はバスドラム。38はスネアドラムです。
47
+ ```ここに言語を入力
48
+ #include <stdio.h>
49
+ #include <MIDIData.h>
50
+ int main() {
51
+ MIDIData* pMIDIData;
52
+ MIDITrack* pMIDITrack;
53
+ /* MIDIデータの生成(フォーマット0,トラック数1,TPQNベース,120) */
54
+ pMIDIData = MIDIData_Create(MIDIDATA_FORMAT0, 1, MIDIDATA_TPQNBASE, 120);
55
+ if (pMIDIData == NULL) {
56
+ printf("MIDIデータの生成に失敗しました。\n");
57
+ return 0;
58
+ }
59
+ /* 最初のトラックへのポインタを取得 */
60
+ pMIDITrack = MIDIData_GetFirstTrack(pMIDIData);
61
+ /* イベントを挿入 */
62
+ MIDITrack_InsertTrackName(pMIDITrack, 0, "ちょうちょ"); /* タイトル */
63
+ MIDITrack_InsertTempo(pMIDITrack, 0, 60000000 / 120); /* 120BPM */
64
+ MIDITrack_InsertProgramChange(pMIDITrack, 0, 9, 0); /* Piano1 */
65
+ /* ノートイベントを挿入 Time ch key vel dur */
66
+ MIDITrack_InsertNote(pMIDITrack, 0, 9, 42, 100, 120);
67
+ MIDITrack_InsertNote(pMIDITrack, 0, 9, 36, 100, 120);
68
+ MIDITrack_InsertNote(pMIDITrack, 120, 9, 42, 100, 120);
69
+ MIDITrack_InsertNote(pMIDITrack, 240, 9, 42, 100, 120);
70
+ MIDITrack_InsertNote(pMIDITrack, 240, 9, 38, 100, 120);
71
+ MIDITrack_InsertNote(pMIDITrack, 360, 9, 42, 100, 120);
72
+ MIDITrack_InsertNote(pMIDITrack, 480, 9, 42, 100, 120);
73
+ MIDITrack_InsertNote(pMIDITrack, 480, 9, 36, 100, 120);
74
+ MIDITrack_InsertNote(pMIDITrack, 600, 9, 42, 100, 120);
75
+ MIDITrack_InsertNote(pMIDITrack, 600, 9, 36, 100, 120);
76
+ MIDITrack_InsertNote(pMIDITrack, 720, 9, 42, 100, 120);
77
+ MIDITrack_InsertNote(pMIDITrack, 720, 9, 38, 100, 120);
78
+ MIDITrack_InsertNote(pMIDITrack, 840, 9, 42, 100, 120);
79
+ MIDITrack_InsertNote(pMIDITrack, 960, 9, 42, 100, 120);
80
+ MIDITrack_InsertNote(pMIDITrack, 960, 9, 36, 100, 120);
81
+ MIDITrack_InsertNote(pMIDITrack, 1080, 9, 42, 100, 120);
82
+ MIDITrack_InsertNote(pMIDITrack, 1200, 9, 42, 100, 120);
83
+ MIDITrack_InsertNote(pMIDITrack, 1200, 9, 38, 100, 120);
84
+ MIDITrack_InsertNote(pMIDITrack, 1320, 9, 42, 100, 120);
85
+ MIDITrack_InsertNote(pMIDITrack, 1440, 9, 42, 100, 120);
86
+ MIDITrack_InsertNote(pMIDITrack, 1440, 9, 36, 100, 120);
87
+ MIDITrack_InsertNote(pMIDITrack, 1560, 9, 42, 100, 120);
88
+ MIDITrack_InsertNote(pMIDITrack, 1560, 9, 36, 100, 120);
89
+ MIDITrack_InsertNote(pMIDITrack, 1680, 9, 42, 100, 120);
90
+ MIDITrack_InsertNote(pMIDITrack, 1680, 9, 38, 100, 120);
91
+ MIDITrack_InsertNote(pMIDITrack, 1800, 9, 42, 100, 120);
92
+
93
+ /* エンドオブトラックイベントを挿入 */
94
+ MIDITrack_InsertEndofTrack(pMIDITrack, 1920);
95
+ /* MIDIデータを保存 */
96
+ MIDIData_SaveAsSMF(pMIDIData, "eightbeat.mid");
97
+ /* MIDIデータをメモリ上から削除 */
98
+ MIDIData_Delete(pMIDIData);
99
+ pMIDIData = NULL;
100
+ return 1;
101
+ }
44
102
  ```

1

文章途中で投稿したため、追記

2018/01/22 08:53

投稿

zakky79
zakky79

スコア23

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,7 @@
1
1
  ドラムのmidiファイルを読み込ませ、それを楽譜に表示させようとしています。
2
2
  現段階で表示自体はできているのですが、ハイハットとバスドラムの音が同時に鳴っている場合、ハイハットしか表示されない。ハイハットとスネアドラムの音が同時に鳴っている場合、ハイハットしか表示されない状態になっています。(下記の図のようになります。)
3
3
  ![![![イメージ説明](600aca2ac03b4a1bb964fb58b9429ed2.png)
4
- 元々のコードが単音のみしか表示させるようになっていないので、二つ同時に表示させるように変更したいのですが、どうしたらいいですか?
4
+ 元々のコードが単音のみしか表示させるようになっていないので、二つ同時に表示させるように変更したいのですが、どうしたらいいですか?アドバイスお願いします!
5
5
  ```c++
6
6
  /***** 楽譜の描画 *****/
7
7
  forEachTrack(pMIDIData, pMIDITrack) {