ピアノロッカーdev日記1


私は、私の鉱山のこの小さな考えに取り組んでいました、あなたが少なくとも半年の間ピアノを演奏するゲーム.
それはすべて私がWebのMIDIを考え出した2021年5月に始まった-存在します.そして、それは私がMIDIキーボード入力を聞くのを許すことができましたrock band 3 チャート(これは、MIDIファイル+ oggの茎)ですPRO KEYS MODE - それは偉大なfreakingだろう.
  • 3つの放棄されたプロトタイプ
  • 1insanely viral reddit post with 25 upvotes
  • 1 steam storefront page published
  • そして、何ヶ月もの恐怖は、多くのことが行われますが、何も本当に行われません.
    私の心を他の場所に置くが、あまり遠くに私はこの“ピアノロッカーdev日記”シリーズを開始する、私は技術、開発、音楽ゲームやYknowについての話をする.何でも、私の心に来ます.
    今日の事例研究

    MusicXMLのレンダリング

    シートミュージック-存在するかどうかのように、キーボードを再生する非常にタイトなシートミュージックを読んで結合されています.すべての例外は、すべての“耳でそれを学んだ”ジャズの伝説は、全体のルールを強くする.私は楽譜を何らかの形でレンダリングしなければなりません.
    私を信じて、私はこの弾丸をかわすしようとしたが、私はできないと思う.
    言及する価値がある他の「代替」記法が、あります.最も奇妙なものはABC Notation , the top-down charts a-la keyboardmania それは人気があったSynthesia そして、仮想ピアノの新しい新興流行(ASCIIキーボードの上でピアノを演奏して、それはものです)、人々は実際にそれをしますROBLOX
    私はyousician、単にピアノ、ピアノオなどを見て、すべての楽譜をレンダリングし、私はあなたを保証することができますyousician Windowsアプリのローカルキャッシュでのビットの後に-彼らはすべての音楽のXMLを解析します.

    私が知っている楽譜の最大の公共のソースは、スコア(PDF)(PDF)としてダウンロード可能なMIDIを提供しています(本当に良い、ヘイ、私はすでにそれを実装しているが、私を信頼し、それはない、私は別のポストとしてこれをカバーする可能性があります)、その独自の形式aaand音楽XML.

    それは広く採用されている、それはテキストファイルと同じくらい開いている、それは無料です-私はちょうどそれを解釈し、メモを描画する方法を学ぶ必要があります.これらのすべての人々はすでに、おそらく生き生きとした(希望)のように.
    私はまだこのたわごと、実際に動けなく立ち往生しています、しかし、ここでは、私がこれまでに学んだものです:
  • *.MXLファイルは、XMLファイルをarent、それらは、それらのxmlsファイルをzipファイルです. jszip これはあまりにもハードではなかった
  • おそらく私のようにJavaScriptを行うならば、あなたはXMLをJSONに変換したいでしょうfast-xml-parser 今のところ
  • 私はpixiでものをレンダリングします.ので、私はすべてのかわいいを描画する必要があります🎼🎼🎼♫♫♫S .グッドニュース-すべてのUnicodeフォントは音楽記号の範囲があります.悪いニュース-そのセットは完全なセットでありません、そして、あなたはそれで多くをすることができません.すべての音楽ソフトは特殊な音楽フォントを使用します
  • Bunchaの音楽のフォントは、いくつかの-ブラウザで動作することができますが、幸運は何が何をしていない、どのようにシンボルがマップされ、そのようなものを考え出す幸運.私は半日を別のフリーフォントを試して過ごしたSMUFL 音楽フォントの標準.また、チェックbrief history of music fonts その偉大な読み取り!
  • のための無料の商用プロジェクトのフォントを実装するには Bravura それは、あなたがユニコードシンボルに想像することができる何かをマップすることが可能であるSMUFLウェブサイトからの参照を使用して動作します.あなたがG - clefを必要とすると言いますthis page , G clefはU + E 050(とU + 1 D 11 E)、素晴らしい、あなたのPixiを作成します.text ('\ue 050 ')-ここであなたのg - clef (フォントをプリロードする場合).
  • プリロードフォントは少しの痛みです
  • 今までのところ、実際の音楽のXMLコンテンツにも触れました.ああたわごと!ここで我々は再び行く!
  • ノートには期間があります.デュレーションは時間内に測定されていない、それはシートミュージック、右?我々は四半期ノート、ハーフノート、16ノート、1024番目のメモなどなどがあります.あなたがインタラクティブな何かをしたいならば、あなたは時間にこれらを変える必要があります.今ここで質問です、どのようにそれを行うのだろうか?

  • どのように、あなたは音楽メモを時間と期間に変えますか
    だからあなたの典型的な音楽のXMLmeasure.note でしょうpitch , から成るstep (色のスケールでは、C、Cの経度、D、それは何でも)とoctave ( int )
    それからtype and duration . 型は以下の通りです.whole , half , quarter , .... 32nd , 64th ..... 1024th などduration はint番号です.
    私は馬鹿なので、私は、私はちょうど私のトゥインクルトゥインクルリトルスターチャートをデバッグし、1つは四半期音符、2は半分、4は全体的に決定したスペックを読んでいない.きらめくきらめきは、四半期より小さくなりませんでした.私はintスイッチケースに文字列を書きました.ダム.
    厳しい真実インコメーション
  • 60 bpmで(1分あたりのビート)あなたが聞く/1分で60ビートを再生します.つのビートは4/4(または3/4、または何か/4)の1/4音符です.60 BPMの4/4の1つのビートは、ちょうど1秒です.4/60 60 pmの1つのバーは、4秒、それから、3/4の60 BPMの1つのバーは3秒です.
  • すべてのメジャー(親のノードのノード)の属性があり、そのうちの1つの部門です.分割は四半期音符の区切りの数です.(私のクールなMIDIギャングのPPQのPQ).
  • この数は、分割できない最小の整数です.シートに存在する最小注記分割の小数点.ですから、すべてのノートがクォーターノートよりも小さくならないのです.クォーターは1、半分は2、全体は4です.あなたが第8のメモを持っているならば、分割は2であるでしょう、あなたが16番目のメモを持っているならば、- 4、16番目と三つ子- 2と3で割られることができる何か(24はよいです)
    ではこの例をhttps://www.w3.org/2021/06/musicxml40/tutorial/midi-compatible-part/
    <attributes>
        <divisions>24</divisions>
        <key>
          <fifths>-3</fifths>
          <mode>minor</mode>
        </key>
        <time>
          <beats>3</beats>
          <beat-type>4</beat-type>
        </time>
      </attributes>
    
    ……
    <note>
        <pitch>
          <step>G</step>
          <octave>4</octave>
        </pitch>
        <duration>12</duration>
        <lyric>
          <syllabic>single</syllabic>
          <text>Dans</text>
        </lyric>
      </note>
      <note>
        <pitch>
          <step>C</step>
          <octave>5</octave>
        </pitch>
        <duration>8</duration>
        <lyric>
          <syllabic>single</syllabic>
          <text>un</text>
        </lyric>
      </note>
    
    私たちがこれまでの時間について知っていることは、3/4、部門=四半期ごとの部門24の部門です.この例ではBPM = 120としましょう.
    今どのくらい正確に最初のメモを再生しますか?
    分割( perquarternote )= 24 , bpm = 120 , duration = 12
    timePerOneDivison = (60 / bpm) / Divisions
    
    そして、このノートの持続時間は秒単位で
    持続時間*( 60/bpm )/区切り
    12 *(60/120)/24秒= 0.25秒.
    どのステーキのノートに基づいて(左または右手)あなたのGTimeまたはftime変数にこの期間を追加し、それは次のノートの開始時刻になります.涼しい右?
    ちょっと..私はまた、栄光を使用してノートを“演奏”ですTone.js 私の数学の何かはまだ正確ではありませんが、ビジュアルは正しいので、私は今のところ私のオーディオコード/トランスポートの使用を責めます.
    私は、これが誰かを助けたことを望みます.最終的なメモとして-ここでは、すべての現在のプロトタイプのようにどのように見えるか(楽譜のサポートは現在のメインラインゲームから別のプロジェクトですが、私はそれが完了したときにそれをマージするか、この小さなきれいな少年にメインゲームをマージします..)