MIDI情報のTIMEの取得について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
MIDI

MIDI情報のTIMEの取得について

#1

投稿記事 by MIDI » 7年前

自分でプログラムで書いて作ったMIDIデータのTIMEを取得できるようにしたいのですが、どのようなプログラムで取得できるようになりますか?MIDIデータのプログラムは下記のようになります。このMIDIデータを読み込ませ、楽譜にしようと考えているのですが、Timeの読み込ませ方が分からなくて困っています。アドバイスの方よろしくお願いします。おーぷんMIDIぷろじぇくと(http://openmidiproject.osdn.jp/)というフリーのライブラリを使用したりしています。

コード:

#include <stdio.h>
#include <MIDIData.h>
int main() {
    MIDIData* pMIDIData;
    MIDITrack* pMIDITrack;
    /* MIDIデータの生成(フォーマット0,トラック数1,TPQNベース,120) */
    pMIDIData = MIDIData_Create(MIDIDATA_FORMAT0, 1, MIDIDATA_TPQNBASE, 120);
    if (pMIDIData == NULL) {
        printf("MIDIデータの生成に失敗しました。\n");
        return 0;
    }
    /* 最初のトラックへのポインタを取得 */
    pMIDITrack = MIDIData_GetFirstTrack(pMIDIData);
    /* イベントを挿入 */
    MIDITrack_InsertTrackName(pMIDITrack, 0, "ちょうちょ"); /* タイトル */
    MIDITrack_InsertTempo(pMIDITrack, 0, 60000000 / 120); /* 120BPM */
    MIDITrack_InsertProgramChange(pMIDITrack, 0, 9, 0); /* Piano1 */
   /* ノートイベントを挿入            Time  ch  key  vel  dur */
    MIDITrack_InsertNote(pMIDITrack, 0, 9, 42, 100, 120); 
    MIDITrack_InsertNote(pMIDITrack, 0, 9, 36, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 120, 9, 42, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 240, 9, 42, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 240, 9, 38, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 360, 9, 42, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 480, 9, 42, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 480, 9, 36, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 600, 9, 42, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 600, 9, 36, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 720, 9, 42, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 720, 9, 38, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 840, 9, 42, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 960, 9, 42, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 960, 9, 36, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 1080, 9, 42, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 1200, 9, 42, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 1200, 9, 38, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 1320, 9, 42, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 1440, 9, 42, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 1440, 9, 36, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 1560, 9, 42, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 1560, 9, 36, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 1680, 9, 42, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 1680, 9, 38, 100, 120);
    MIDITrack_InsertNote(pMIDITrack, 1800, 9, 42, 100, 120);

                                                             /* エンドオブトラックイベントを挿入 */
    MIDITrack_InsertEndofTrack(pMIDITrack, 1920);
    /* MIDIデータを保存 */
    MIDIData_SaveAsSMF(pMIDIData, "eightbeat.mid");
    /* MIDIデータをメモリ上から削除 */
    MIDIData_Delete(pMIDIData);
    pMIDIData = NULL;
    return 1;
}

Bull
記事: 149
登録日時: 11年前

Re: MIDI情報のTIMEの取得について

#2

投稿記事 by Bull » 7年前

MIDIデータ の TIME とはなんでしょうか?
デルタタイムでしょうか? それとも絶対時刻でしょうか? それとも演奏時間ですか?

MIDIdataLib を使用して MIDIファイルを読込めば、MIDIEvent 構造体の m_lTime に絶対時刻が入っているようです。

サンプルプログラムは実行してみましたか?

返信

“C言語何でも質問掲示板” へ戻る