64kでむントロを行う方法

むントロむントロ



デモシヌンは、リアルタむムで動䜜するクヌルな䜜品を䜜成するこずです「コンピュヌタヌを回転させる」ように。 それらはデモず呌ばれたす 。 それらのいく぀かは本圓に小さく、たずえば64k以䞋です-これらはむントロず呌ばれたす。 名前は、広告たたはクラックされたプログラムの提瀺に由来したすクラックむントロ。 そのため、むントロはほんの少しのデモです。



倚くの人がデモシヌンに興味を持っおいるこずに気付きたしたが、実際にデモがどのように行われるのかはわかりたせん。 この蚘事では、新しいむントロGuberniyaの頭脳ダンプず死埌解剖に぀いお説明したす。 初心者ずベテランの䞡方にずっお興味深いものになるこずを願っおいたす。 この蚘事では、デモで䜿甚されるほがすべおの手法を取り䞊げおおり、それらの䜜成方法に぀いおの良いアむデアを提䟛したす。 この蚘事では、 ステヌゞ䞊で受け入れられるものであるため、ニックネヌムで人々を呌び出したす。



Windows バむナリ  guberniya_final.zip61.8 kB AMDカヌドで少し故障



䞀蚀で蚀えばGuberniya



これは、 デモRevision 2017でリリヌスされた64kのむントロです。 いく぀かの数字





開発



デモは通垞、demopatiで公開され、芖聎者がデモを芋お勝者に投祚したす。 デモパヌティヌの問題は、締め切りがしっかりしおいお、熱心な芖聎者がいるため、良いモチベヌションになりたす。 私たちの堎合、それは䌝統的にむヌスタヌの週末に行われる倧きなデモパヌティヌであるRevision 2017でした。 いく぀かの写真を芋お、むベントのアむデアを぀かむこずができたす。





1週間あたりのコミット数。 最倧の急増は、締め切り前に緊急にハッキングするこずです。 最埌の2列は、demopatの埌の最終バヌゞョンの倉曎です。



1月䞊旬にデモの䜜業を開始し、むベント䞭の4月のむヌスタヌにリリヌスしたした。 垌望する堎合は、競技党䜓の蚘録を芋るこずができたす:)



私たちのチヌムは、cce私です、 varko 、 noby 、 branch 、msqrt、goatmanの6人で構成されおいたした。



デザむンず圱響



曲はかなり早い段階で準備ができおいたので、私はその動機に基づいお䜕かを描いおみたした。 蚘憶に残る郚分を備えた倧きくお映画的なものが必芁であるこずは明らかでした。



最初の芖芚的なアむデアは、ワむダヌずその䜿甚を䞭心に展開されたした。 私はViktor Antonovの䜜品が本圓に奜きなので、最初のドラフトは䞻にHalf-Life 2からコピヌされおいたす





芁塞の塔ず野心的な人間のキャラクタヌの最初のスケッチ。 フルサむズ 。





Half-Life 2 Vising RatonのViktor Antonovのコンセプトワヌク



類䌌点は非垞に明癜です。 颚景シヌンでは、Anthony ShimesのEldion Passagewayのムヌドも䌝えようずしたした。



颚景は、 アむスランドに関するこの玠晎らしいビデオずコダアニスカッツィからむンスピレヌションを受けたず思いたす。 ストヌリヌボヌドに描かれたストヌリヌの倧きな蚈画がありたした。





このストヌリヌボヌドは、むントロの最終バヌゞョンずは異なりたす。 たずえば、残忍な建築は切り取られたした。 完党な絵コンテ 。



もう䞀床やるなら、気分を決めおくれる写真を2、3枚に限定しおいたでしょう。 だから、仕事が枛り、想像力が生たれたす。 しかし、少なくずも絵を描くこずで考えを敎理するこずができたした。



船



nobyによっお蚭蚈された宇宙船。 これは、幟䜕孊的プリミティブず亀差する倚数のマンデルブロフラクタルの組み合わせです。 船の蚭蚈は少し䞍完党なたたでしたが、最終バヌゞョンでは觊らない方が良いず思われたした。





宇宙船は、他のすべおのものず同様に、距離のレむマヌチングフィヌルドです。



むントロに入らない別のシップシェヌダヌがありたした。 今、私はデザむンを芋お、それは非垞にクヌルであり、それのための堎所がなかったこずは残念です。





ブランチからの宇宙船の蚭蚈。 フルサむズ 。



実装



叀いフェロモンのむントロ YouTube のコヌドベヌスから始めたした。 基本的なトリミング機胜ず、暙準OpenGL関数のラむブラリず、 bin2h



を䜿甚しおデヌタディレクトリから実行可胜ファむルにファむルをパックするファむルシステムナヌティリティがありbin2h



。



䜜業プロセス



VS2015ではコンパむルされなかったため、Visual Studio 2013を䜿甚しおプロゞェクトをコンパむルしたした。 暙準ラむブラリの眮換は、曎新されたコンパむラではうたく機胜せず、次のようなおかしな゚ラヌが発生したした。





Visual Studio 2015はコヌドベヌスずうたくいきたせんでした



䜕らかの理由で、私たちはただ゚ディタヌずしおVS2015に固執し、v120プラットフォヌムツヌルを䜿甚しおプロゞェクトをコンパむルしたした。





デモでの私の䜜業のほずんどは次のように芋えたした。シェヌダヌは1぀のりィンドりで開かれおおり、コン゜ヌル出力の最終結果は他のりィンドりにありたす。 フルサむズ 。



CTRL + Sの組み合わせを怜出した堎合、すべおのシェヌダヌを再ロヌドする単玔なグロヌバルキヌストロヌクキャプチャを行いたした。



 // Listen to CTRL+S. if (GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState('S')) { // Wait for a while to let the file system finish the file write. if (system_get_millis() - last_load > 200) { Sleep(100); reloadShaders(); } last_load = system_get_millis(); }
      
      





それは本圓にクヌルに機胜し、リアルタむムでシェヌダヌを線集するこずははるかに興味深いものになりたした。 ファむルシステムむベントなどを傍受する必芁はありたせん。



GNU Rocket



アニメヌションず制䜜には、 GNU RocketのフォヌクであるGround Controlを䜿甚したした。 Rocketは、アニメヌションカヌブを線集するためのプログラムであり、TCP゜ケットを介しおデモに接続したす。 参照フレヌムは、デモのリク゚ストで送信されたす。 これは、゚ディタヌを閉じずに、同期䜍眮を倱うこずなく、デモを線集および再コンパむルできるため、非垞に䟿利です。 最終バヌゞョンでは、参照フレヌムはバむナリ圢匏で゚クスポヌトされたす。 ただし、いく぀かの迷惑な制限がありたす。



楜噚





マりスずキヌボヌドを䜿甚しお芖点を倉曎するず、カメラの角床を遞択するのに非垞に䟿利です。 シンプルなGUIでも、ささいなこずが重芁な堎合に圹立ちたす。



䞀郚ずは異なり、デモ甚のツヌルがなかったため、䜜業䞭に䜜成する必芁がありたした。 すばらしい芪愛なるimguiラむブラリにより 、必芁に応じお機胜を簡単に远加できたす。



たずえば、色パラメヌタヌを制埡するためにいく぀かのスラむダヌを远加する必芁がありたす-必芁なこずは、これらの行をレンダリングサむクルに远加するだけです個別のGUIコヌドではありたせん 。



  imgui::Begin("Postprocessing"); imgui::SliderFloat("Bloom blur", &postproc_bloom_blur_steps, 1, 5); imgui::SliderFloat("Luminance", &postproc_luminance, 0.0, 1.0, "%.3f", 1.0); imgui::SliderFloat("Threshold", &postproc_threshold, 0.0, 1.0, "%.3f", 3.0); imgui::End();
      
      





最終結果





これらのスラむダヌは簡単に远加できたした。



F6



を抌すず、カメラの䜍眮を.cpp



ファむルに保存できるため、次のコンパむル埌にデモに衚瀺されたす。 これにより、個別のデヌタ圢匏ず察応するシリアル化コヌドが䞍芁になりたすが、そのような゜リュヌションはかなりずさんなものになるこずもありたす。



小さなバむナリを䜜成する



バむナリを最小化する䞻なこずは、暙準ラむブラリを砎棄し、コンパむルされたバむナリを圧瞮するこずです。 独自のラむブラリ実装の基瀎ずしお、Mike_VのTiny C Runtime Libraryを䜿甚したした。



Kkrunchyは、この目的のために䜜成されたツヌルであるバむナリの圧瞮に取り組んでいたす。 個々の実行可胜ファむルで動䜜するため、C ++、Rust、Object Pascalなどでデモを䜜成できたす。 正盎に蚀うず、サむズは倧したこずではありたせんでした。 画像などのバむナリデヌタを倧量に保存しなかったため、操䜜の䜙地がありたした。 シェヌダヌからコメントを削陀する必芁さえありたせんでした



浮動小数点



浮動小数点コヌドは、存圚しない暙準ラむブラリの関数を呌び出すこずで頭痛の皮になりたした。 それらのほずんどは、 /arch:IA32



コンパむラスむッチでSSEベクトル化を無効にし、 /QIfst



フラグを䜿甚しおftol



呌び出しを削陀するこずで解決されたした。これは、切り捚おモヌドのFPUフラグを保存しないコヌドを生成したす。 これは問題ではありたせん。PeterSchoffhauserの次のコヌドを䜿甚しお、プログラムの先頭で浮動小数点の切り捚おモヌドを蚭定できるためです。



 // set rounding mode to truncate // from http://www.musicdsp.org/showone.php?id=246 static short control_word; static short control_word2; inline void SetFloatingPointRoundingToTruncate() { __asm { fstcw control_word // store fpu control word mov dx, word ptr [control_word] or dx, 0x0C00 // rounding: truncate mov control_word2, dx fldcw control_word2 // load modfied control word } }
      
      





benshoof.orgでそのようなこずに぀いおもっず読むこずができたす。



捕虜


pow



呌び出しは、ただ存圚しない__CIpow



内郚関数ぞの呌び出しを生成したす。 眲名を自分で理解するこずはできたせんでしたが、Wineのntdll.dllで実装を芋぀けたした- レゞスタヌに 2぀の倍粟床数を期埅しおいるこずが明らかになりたした。 その埌、独自のpow



実装を呌び出すラッパヌを䜜成するこずが可胜になりたした。



 double __cdecl _CIpow(void) { // Load the values from registers to local variables. double b, p; __asm { fstp qword ptr p fstp qword ptr b } // Implementation: http://www.mindspring.com/~pfilandr/C/fs_math/fs_math.c return fs_pow(b, p); }
      
      





これに察凊する最善の方法を知っおいる堎合は、お知らせください。



りィナピ



SDLなどを圓おにできない堎合は、画面にりィンドりを衚瀺するために必芁な操䜜に玔粋なWinAPIを䜿甚する必芁がありたす。 問題がある堎合は、次のこずが圹立ちたす。





最埌の䟋では、実際にビゞネスで䜿甚されるOpenGL関数の関数ポむンタヌのみをロヌドするこずに泚意しおください。 これを自動化するこずをお勧めしたす。 実行可胜ファむルに保存されおいる文字列識別子ずずもに関数にアクセスする必芁があるため、ロヌドされる関数が少ないほど、より倚くのスペヌスが節玄されたす。 プログラム党䜓の最適化オプションを䜿甚するず、未䜿甚の文字列リテラルをすべお削陀できたすが、memcpyに問題があるため䜿甚したせん。



レンダリング技術



レンダリングは䞻にレむマヌチング法によっお行われ、䟿宜䞊、 hg_sdfラむブラリを䜿甚したした 。 Inigo Quilez 以降、単にiqず呌ぶは、このテクニックや他の倚くのテクニックに぀いお倚くのこずを曞いおいたす。 ShaderToyにアクセスしたこずがある堎合は、これに粟通しおいる必芁がありたす。



さらに、深床バッファヌの倀であるラスタヌを発行したした。これにより、SDF笊号距離フィヌルドをラスタヌ内のゞオメトリず結合し、埌凊理効果を適甚するこずもできたす。



シェヌディング



GGXを少し䜿甚しお、暙準のシェヌディングUnreal Engine 4 説明付きの倧きなPDF を䜿甚したした。 これはあたり目立ちたせんが、重芁な点で重芁です。 圓初から、レむマヌチングフォヌムずラスタラむズフォヌムの䞡方に同じ照明を䜿甚するこずを蚈画しおいたした。 アむデアは、遅延レンダリングずシャドりマップを䜿甚するこずでしたが、それはたったく機胜したせんでした。





シャドりカヌドのオヌバヌレむを䜿甚した最初の実隓の1぀。 タワヌずワむダの䞡方がレむマヌチンググラりンドに圱を萜ずし、正しく亀差しおいるこずに泚意しおください。 フルサむズ 。



画面ず圱のマップずテクセルの比率が倧幅にスキップされおいるなどの粟床の問題のため、シャドりマップで倧きな領域を正しくレンダリングするのは非垞に困難です。 たた、 カスケヌドシャドりマップを䜿甚した実隓を開始する意欲もありたせんでした。 さらに、異なる角床から同じシヌンをレむマヌチングするのは本圓に遅いです。 そのため、同じ照明のシステム党䜓を削るこずにしたした。 これは埌に、ラスタラむズされたワむダの照明ずシヌンのレむマヌチングゞオメトリを盞関させようずしたずきに倧きな問題になるこずが刀明したした。



地圢



レむマヌチング地圢は、解析的埮分を䌎う数倀ノむズによっお生成されたした。 1 もちろん、生成された導関数は、シャドりを適甚するために䜿甚されたしたが、iqの䟋のように、滑らかな茪郭のレむトラバヌスを加速するためにレむ間隔を制埡するためにも䜿甚されたした。 詳现を知りたい堎合は、 このテクニックに関する叀い蚘事を読むか、ShaderToyのクヌルな熱垯雚林のシヌンで遊んでください 。 msqrtが指数関数的に分垃するノむズを実装するず、ランドスケヌプの高さマップがより珟実的になりたした。





数倀ノむズの私自身の実装の最初のテスト。





圌らが䜿甚しないこずにしたブランチからの゚リアの実装。 理由は芚えおいたせん。 フルサむズ 。



ランドスケヌプ効果は、シャドりず反射をブルヌトフォヌスするため、非垞にゆっくりず蚈算されたす。 シャドりの䜿甚は、シャドりの小さなハックです。シャドりでは、半圱のサむズは、シャドりビヌムを回るずきに遭遇した最短距離によっお決定されたす。 圌らはアクションでかなりよく芋えたす。 たた、バむセクショントレヌスを䜿甚しお効果を高速化するこずも詊みたしたが、生成されるアヌティファクトが倚すぎたす。 䞀方、 Mercuryの レむマヌチングトリック 別のデモグルヌプは、速床を萜ずすこずなく品質を少し改善するのに圹立ちたした。





通垞のレむマヌチング右ず比范しお、改善された固定小数点反埩を䜿甚した地圢レンダリング巊。 右偎の図にある䞍快なリップルアヌティファクトに泚意しおください。



空は、スラむド43のiqからの高床で説明したものずほが同じ手法で生成されたす。ビヌム方向ベクトルのいく぀かの単玔な関数。 倪陜はフレヌムバッファで非垞に倧きな倀100以䞊を生成するため、色の自然さもいくらか加わりたす。



車線シヌン



これは、 ファンホヌの写真の圱響を受けお䜜成されたビュヌです。 最初のゞオメトリは非垞に単玔ですが、埌凊理効果により、実際に゜リッドシヌンを䜜成できたした。





いく぀かの繰り返しフラグメントがあるい距離フィヌルド。 フルサむズ 。





距離が指数関数的に倉化する霧を远加したした。 フルサむズ 。





ワむダヌを䜿甚するず、シヌンがより面癜くリアルになりたす。 フルサむズ 。





最終バヌゞョンでは、距離フィヌルドに少しのノむズを远加しお、レンガの壁の印象を䜜成したす。 フルサむズ 。





埌凊理で色のグラデヌション、圩床、色収差、グレアが远加された堎合。 フルサむズ 。



距離フィヌルドを䜿甚したモデリング



B-52爆撃機は、SDFを䜿甚したシミュレヌションの良い䟋です。 開発段階でははるかに簡単でしたが、最終リリヌスに持ち蟌みたした。 遠くから芋るず、かなり説埗力がありたす。





爆撃機は遠くでは正垞に芋えたす。 フルバヌゞョン 。



ただし、これは単なるカプセルの束です。 確かに、いく぀かの3Dパッケヌゞでそれらをシミュレヌトする方が簡単ですが、適切なツヌルが手元になかったため、より高速な方法を遞択したした。 参考たでに、距離フィヌルドシェヌダヌはbomber_sdf.glslのようになりたす。





ただし、実際には非垞に単玔です。 フルサむズ 。



キャラクタヌ





ダギアニメヌションの最初の4フレヌム。



アニメヌション化された文字は、1ビットのビットマップだけで圧瞮されおいたす。 再生䞭、フレヌムはスムヌズに移行したす。 神秘的なダギ飌いが提䟛するもの。





コゟパスず友達。



埌凊理



埌凊理効果はvarkoによっお䜜成されたした。 システムは次のずおりです。



  1. Gバッファからシャドりを貌り付けたす。
  2. 被写界深床を蚈算したす。
  3. 色の明るい郚分を削陀したす。
  4. N個のガりスがかし操䜜を個別に実行したす。
  5. フェむクレンズフレアずスポットラむトフレアを蚈算したす。
  6. すべおたずめおください。
  7. FXAAで滑らかな茪郭を䜜成したす mudlordに感謝 。
  8. 色補正。
  9. ガンマ補正ず軜い粒子。


レンズフレアは、 ゞョンチャップマンが説明した手法に倚くの方法で埓いたす。 圌らず仕事をするのは難しいこずもありたしたが、最終的な結果が埗られたした。





被写界深床の効果を審矎的に䜿甚しようずしたした。 フルサむズ 。



被写界深床効果 DICEテクニックに基づくは3぀のパスで実行されたす。 最初は、各ピクセルの混乱の円のサむズを蚈算し、他の2぀のパスは、回転領域から2぀のスポットを重ねたす。 たた、必芁に応じお、いく぀かの反埩で改善を行いたす特に、倚数のガりスがかしを適甚したす。 この実装は私たちにずっおうたく機胜し、遊ぶのは楜しかったです。





アクションの被写界深床効果。 赀い写真は、DOFスポットの蚈算されたシャヌプネス円を瀺しおいたす。



色補正



Rocketにはアニメヌション化されたpp_index



パラメヌタヌがあり、これを䜿甚しお色補正プロファむルを切り替えたす。 各プロファむルは、埌凊理シェヌダヌの倧芏暡ブランチオペレヌタヌの異なるブランチです。



 vec3 cl = getFinalColor(); if (u_GradeId == 1) { cl.gb *= UV.y * 0.7; cl = pow(cl, vec3(1.1)); } else if (u_GradeId == 2) { cl.gb *= UV.y * 0.6; cl.g = 0.0+0.6*smoothstep(-0.05,0.9,cl.g*2.0); cl = 0.005+pow(cl, vec3(1.2))*1.5; } /* etc.. */
      
      





それは非垞に単玔ですが、非垞にうたく機胜したす。



物理モデリング



デモには、ワむダヌず鳥の矀れの2぀のシミュレヌションシステムがありたす。 圌らはたた、バルコによっお曞かれたした。



ワむダヌ





ワむダヌはシヌンにリアリズムを远加したす。 フルサむズ 。



ワむダは䞀連のバネず芋なされたす。 それらは、蚈算シェヌダヌを䜿甚しおGPUでモデル化されたす。 ここで䜿甚する数倀積分のVerlet法は䞍安定であるため、このシミュレヌションを倚くの小さなステップで実行しおいたす。 蚈算シェヌダヌは、ワむダヌのゞオメトリ䞀連の䞉角プリズムも頂点バッファヌに出力したす。 残念ながら、䜕らかの理由で、AMDカヌドではシミュレヌションが機胜したせん。



鳥の矀れ





鳥はスケヌル感を䞎えたす。



矀れモデルは512矜の鳥で構成され、最初の128矜はリヌダヌず芋なされたす。 リヌダヌは枊巻くノむズパタヌンで動き、他のリヌダヌはそれらに埓いたす。 実生掻では、鳥は最も近い隣人の動きに埓うが、この単玔化もかなり良いように芋えるず思う。 矀れはGL_POINTs



ずしおレンダリングされ、そのサむズは翌の矜ばたきの印象を䞎えるために調敎されたした。 このレンダリング手法はHalf-Life 2でも䜿甚されたず思いたす。



ミュヌゞック



通垞、64kむントロの音楜はVSTプラグむンを䜿甚しお䜜成されたす。これは、ミュヌゞシャンが通垞の楜噚を䜿甚しお音楜を䜜成する方法です。 このアプロヌチの兞型的な䟋は、farbrauschのV2 Synthesizerです。



それは問題でした。 ある皮の既成のシンセサむザヌは䜿いたくありたせんでしたが、以前の倱敗した実隓から、自分の仮想楜噚を䜜成するには倚くの䜜業が必芁であるこずを知っおいたした。 paulstretchedが甚意したアンビ゚ントミュヌゞックテヌマでブランチが行った芁玠/ゞェスチャヌ61デモの雰囲気が本圓に奜きだったこずを芚えおいたす。 これにより、4kたたは64kの量でこれを実珟するこずになりたした。



ポヌルストレッチ



Paulstretchは、本圓にクレむゞヌなストレッチ音楜に最適なツヌルです。 圌のこずを聞いたこずがないのであれば、Windows 98のあいさ぀の音から圌が䜕ができるかを必ず聞くべきです。 その内郚アルゎリズムは著者ずのこのむンタビュヌで説明されおおり、圌はオヌプン゜ヌスでもありたす。





AudacityのPaulstretch゚フェクトを䜿甚しお䜜成されたオリゞナルサりンド䞊ずストレッチサりンド䞋。 たた、呚波数がスペクトル垂盎軞で塗り぀ぶされおいるこずに泚意しおください。



基本的に、元の信号を匕き䌞ばすずずもに、呚波数空間で䜍盞を揺らしたす。そのため、金属のアヌティファクトの代わりに、䞍自然な゚コヌが埗られたす。 これには倚くのフヌリ゚倉換が必芁であり、元のアプリケヌションはこれにKiss FFTラむブラリを䜿甚したす。 倖郚ラむブラリに䟝存したくなかったので、最終的には単玔な離散フヌリ゚倉換を実装したした ON2 GPUで。 それを正しくするのに長い時間がかかりたしたが、最終的には䟡倀がありたした。 GLSLシェヌダヌの実装は、ブルヌトフォヌスの性質にもかかわらず、非垞にコンパクトで非垞に高速に動䜜したす。



トラッカヌモゞュヌル



゜ヌスデヌタずしお意味のある音があれば、呚囲のバズのコむルを巻くこずが可胜になりたした。 そこで、実瞟のあるテスト枈みのテクノロゞヌであるトラッカヌミュヌゞックを䜿甚するこずにしたした。 MIDI 2によく䌌おいたす。 ただし、サンプルを含むファむルにパックされおいたす。 たずえば、 ゚リヌトグルヌプ YouTube のkasparovデモは、リバヌブを远加したモゞュヌルを䜿甚しおいたす。 これが17幎前に機胜しおいたら、なぜ今はどうでしょうか。



gm.dls



組み蟌みのWindows MIDIサりンドバンクこれも叀いトリックですを䜿甚し、XMモゞュヌルの圢匏でMilkyTrackerを䜿甚しお曲を䜜成したした。 この圢匏は、90幎代のMS-DOSの倚くのデモで䜿甚されおいたした。





MilkyTrackerを䜿甚しお元の曲を䜜成したした。 最終的なモゞュヌルファむルから機噚サンプルがクリアされ、代わりにgm.dls



からのオフセットず長さのパラメヌタヌgm.dls







gm.dls



は、1996幎のロヌランドの楜噚が非垞に叀颚で音質が悪いこずです。 しかし、倧量のリバヌブに浞しおも問題ないこずがわかりたした 以䞋は、短いテスト゜ングが最初に再生され、続いおストレッチバヌゞョンが再生される䟋です。





驚くほどアトモフェルノ、同意したすか そう、私はハリりッドの音楜をたねた曲を䜜りたした。 これは䞀般的に音楜的な偎面に぀いおすべおです。



謝蟞



この蚘事の技術的な詳现のいく぀かを手䌝っおくれたvarkoに感謝したす。



远加資料








1.グラディ゚ントノむズの分析導関数を蚈算できたす https : //mobile.twitter.com/iquilezles/status/863692824100782080↑



2.最初の考えは、トラッカヌモゞュヌルの代わりに単にMIDIを䜿甚するこずでしたが、曲をWindowsオヌディオバッファに単玔にレンダリングする方法ずは思われたせんでした。 どうやら、DirectMusic APIを䜿甚しおどういうわけかこれが可胜ですが、私はその方法を芋぀けるこずができたせん。 ↑



All Articles