※これはスクリプト演奏ではありません midiファイルをbyte単位で読み取って16進数のテキスト形式にしてリストに読み込むと、scratchでmidiファイルを解析して演奏情報を取得し、演奏させることができます。 デフォルトでショパンの黒鍵のエチュードが入っています。解析ボタンをクリックorスペースキーで解析を行ってから旗を押すと再生できます。 演奏機能はほぼおまけです。演奏方式はかつてないほど雑なので、演奏の際はターボモード必須です。 スプライト「midi」にサンプルとしてショパンのエチュードなど3曲ほどのテキスト形式に変換済みのmidiをリストに入れて保存しておいたので実験にどうぞ。 まだまだ試作品なので複数のトラックの同時再生には対応していません。また、ランニングステータスなどには対応していないので一部のmidiは正常に読み込むことができません。 単純なピアノやオルゴールのmidiなら読めることも多いのでぜひお試しください。 midiを16進数のテキスト形式に変換するのは、私はほかの言語でソフトを作ってやりましたが、ほかにも方法がある?らしいです。 変換さえできれば誰でもmidiのスクリプト演奏ができます! 7/12 革命のエチュードのmidiデータを修復 わかりやすいように猫を解析ボタンに変更
midiの構造を勉強して作りました。 こんな意味不明な数字の羅列だけで演奏が書かれているなんて驚きですね。解析して実感しました。 試作品なのでまた改良するかもです。後々は複数トラックの再生やランニングステータスなどへの対応、ベロシティなどの細かいイベント情報も反映させた演奏ができるようにしたいです。 リスト「解析」の内容をざっくりと説明します。 1、4D546864 ヘッダチャンクのチャンクタイプ 2、データ長 この後に続くヘッダのデータの長さ 3、フォーマット 4、トラック数 2以上の同時再生には対応していません 5、時間単位 拍の取り方?みたいなやつです ここまでがヘッダの内容 以降トラックの数だけ下記のチャンクが続きます。 6、4D54726B トラックチャンクのチャンクタイプ 7、データ長 この後に続くトラックのデータの長さ ここまでは実際の演奏データではありません 以降 デルタタイム(待ち時間みたいなやつ)→イベント(どの音を出すかとか。それだけじゃないけど)→デルタタイム→イベントの順で繰り返していきます。 イベントの表記説明 メタ○○ メタイベントです。○○の部分は細かい種類の番号(16進数)です。基本的に演奏に直接関係しません コントロールチェンジ・プログラムチェンジ・ピッチベント・チャンネルプレッシャー・ポリフォニックキープレッシャー それぞれに役割はありますが、ここでは読み飛ばします on 〇ch〇v〇 ノートオンです。(音を鳴らすイベントです。)〇chはチャンネル、次の〇がノート番号、v〇がベロシティ(音量みたいなやつ)を表します。 off 〇ch〇v〇 ノートオフです。(音を切るイベントです。)〇chはチャンネル、次の〇がノート番号、v〇がベロシティ(音量みたいなやつ)を表します。 SysEx システムエクスクルーシブメッセージを表すイベントです。ここでは読み飛ばします。 以上、すっごくざっくり説明しました。自分で解析プログラムを作りたいときの参考になる?かも。