管理人の趣味メインのメモto日記
AIONブログ RSS [情報サイト表示]
[注意] LinkやRSSについて

シエルサーバ RSS [情報サイト非表示]

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ -------- (--) --:-- ]  
   Category:スポンサー広告

・ω・)ノ
 
あぁぁぁ・・・・ (-ω-;
 
 
 
 
 
<本日のトピックス>
  • [雑 記] なぜこうもずれるのか!?
     
     
  • [雑 記] なぜこうもずれるのか!?
    SMFのファイルフォーマット文献を読んでいるとわかるのですが、MIDIファイルを
    mml形式に変換するのは、結構無理があるなぁ・・・・と思います。
    MIDIコントロールといわれる、MIDIハードウェアの初期化や楽器の変更などは
    完全無視で問題ないのですが、音にかかわる情報が調査する前に思っていたのと異なり
    複雑怪奇でした。
     
    イメージ的には、楽譜の情報がトラック単位できれいに保存されていと思ったのですが、
    実際は全然違って、
     
     累積時間が**のタイミングで**という音を鳴らす。
     累積時間が**のタイミングで**という音を止める。
     
    という情報が、トラック単位で表現されています。
    1トラック1音(和音でない)の場合は、音を鳴らす、止めるが交互にくるのですが、
    和音の場合、和音の数分(ドミソなら3回)鳴らす、鳴らす、鳴らすが来てそのあとに
    止める、止める、止めるが出てくるイメージとなります。
     
    また、MIDIは音符の長さは四分音符(数値的には480)なのに、音自体は430の時点で
    止めたりすることも可能で(スタッカートイメージ?)、これの数値を自力で最適値に
    まるめこむ(480とする)必要があったりします。
     
     
    おまけに言うと、MIDIファイルのフォーマットはイベント型ファイルのため・・・・
    例えば、「累積時間960のタイミングでCを鳴らす。」の次に「累積時間1440の
    タイミングでCを止める。」の次に「累積時間1920のタイミングでDを鳴らす。」と
    いう具合に記録されており、休符(この場合1440~1920)の情報はファイル上
    記録されていないのです。
    1トラック1音で表現されているとスムーズにいくのですが和音を自力で分解するとなると
    これまた、自力で休符を算出していく必要があるかなり・・・・プログラム的に煩雑になります。
     
     
    そして、一番のネックはMIDIは累積時間を基準、以下のように考え音楽を演奏しています。
     
     累積時間1=**マイクロ秒とする(これはテンポ設定で異なる)
     
    つまり、多種多様な音の長さを表現できるのに対してmmlは32分音符ぐらいまでしか
    表現できません。この差異は、プログラムではどうすることもできない壁になります。
     
    今まで、シーケンスソフトを通してしかMIDIと向かい合ったことがありませんでしたが、
    ファイルの中身を文献などで読んで・・・・「へぇ~・…。」と、色々新しい事実を知りました。
     
     
     
    まぁ、MIDIファイルとは直接関係ありませんが、バイナリ形式を読んだり、エンディアンを
    考慮したり・・・・、色々と勉強になります。
     
     
     
     
    ■ Midi2AionMML 現在の予定
     
     1. エラーが発生しても、無理やりmml形式で出力する(ただし、正常に演奏されないはず)
     2. AIONハウジングスクリプト(音楽演奏)の構文を自動生成
     
    を、メインに改版中です。
    とは言うものの、和音分解の制度を上げるため変換のラルゴリズムを見直して・・・・どつぼに
    はまってます・・・・はぃ (-ω-;
     
     

  • スポンサーサイト
    [ 2012-06-08 (Fri) 17:00 ]   Comment(0)
       Category:雑記:あいぉんツール
    管理者にだけ表示を許可する

    TrackBackURL
    → http://extremes.blog40.fc2.com/tb.php/502-bbcf9e70
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。