Gigamix Online

懐かしの8bitおもちゃPC「MSX」を骨までしゃぶり尽くそう。MSXの最新ニュース、ブログ、自作ソフトの配布など。

MGSDRV:識者のみなさんのテクニック集

随時更新中

 MSXのミュージックドライバ「MGSDRV」で音作りのレベルが向上するテクニックをまとめました。

 ちなみにMGSDRVの概要・ダウンロードは、こちらのリンクからどうぞ。 www.gigamix.jp

音色の作り方(FM音源

タイトルOPLLにおける音色の作り方講座[OPLLの概要 / パラメータ解説篇]
概要 「OPLLにおける音色の作り方講座[OPLLの概要 / パラメータ解説篇]」を以下のURLで公開します。平文テキストですが、ご容赦ください。なお、タイトルの通り、まずは概要説明・パラメータ解説のみとしています。#OPLL #YM2413 https://t.co/sMrbFDDW9t — らいきんぐ! (@liking_birds) 2020年12月13日
作者らいきんぐ!(twitter@liking_birds)
リソース https://twitter.com/liking_birds/status/1338006446210830336
タイトルFM音源のブラスの音色だけを集めた「プチ・プラスだけ・音色集」
概要  FM音源のブラスの音色だけを集めた音色集。らいきんぐ!さん(twitter@liking_birds)の解説。
今年に入ってうちがtwitter上で公開したMSXplayの曲データから、FM音源のブラスの音色だけを集めた「プチ・プラスだけ・音色集」というのを作りました。なにかの参考になれば幸いです。https://t.co/Ycmfqpbts7#MSXplay #OPLL #YM2413 #BrassSelection — らいきんぐ! (@liking_birds) 2020年11月21日
作者らいきんぐ!(twitter@liking_birds)
リソース https://twitter.com/liking_birds/status/1330178064056279046
タイトルYM2413の内蔵ROM音色15種類を一気にプレビューする動画
概要  FM音源の内蔵ROM音色15種類を波形付きで見られる動画。MGSDRV・FM-BIOSMSX-BASICで音色番号が違う件にもフォローあり。
YM2413の内蔵ROM音色15種類を一気にプレビューする動画を作りました。YM2413は自作音色が1つしか作れず、後はROM音色を使うしかないという話はよくききますが、ROM音色は実際どんな音がすべてなのか、というと実はそれほど知られていないのでは?という気がして作成しました。https://t.co/udMVOFvFP8 — DSA (@ym2413) 2020年12月5日
作者DSA(twitter@ym2413)
リソース https://twitter.com/ym2413/status/1335365589880119297

音色の作り方(SCC音源)

SCC音源のモーフィング波形作成方法を、自分用に纏めてるナウ (´∀`)《使用ツール》openMSXblueMSXWave Shape EditorS-Cube(SCC音色エディタ)(開発者:Wiz.さん)コナミSCC音源の達人Baboo! JAPAN(MSX関連)の「SCC音源の達人」のリンクは現在切れてますが😅https://t.co/jDmWkW0cL5 — ぎゃぶねこ (@gyabuneko) 2020年11月22日
 SCC音源のモーフィング波形の作成方法。ぎゃぶねこさん(twitter@gyabuneko)の解説。

FM音源:MGSDRVのFM9音モードでリズム音を鳴らす方法

 らいきんぐ!さん(twitter@liking_birds)の解説。MSXplay.comによるMMLソースコード付き!

「MGSDRVのFM9音モードでリズム音を鳴らす方法」のその1を公開します。最終的にやりたいことまでを分割して話す必要があるので、まずは「音を鳴らすだけ」に絞って説明しています。その2以降は今後徐々に書いていきます。#MSXplay #MGSDRV #YM2413 https://t.co/Od2yYkihKo — らいきんぐ! (@liking_birds) 2020年9月21日
 MML上ではFM9音モードを指定したのちYコマンドでFM6音+リズムモードに切り替えてリズム音を鳴らすと音に変化を付けられます。

「MGSDRVのFM9音モードでリズム音を鳴らす方法」のその2を公開します。ここでは、バスドラムをシンセドラム(ナムコドラム)っぽく鳴らすまでを順番に説明しています。#MSXplay #MGSDRV #YM2413 https://t.co/M8bSGQl5Fh — らいきんぐ! (@liking_birds) 2020年9月21日
 FM9音モードではサスティンONによるリリースの伸びをリズムに持たせることが可能。バスドラムがシンセドラムになる!

「MGSDRVのFM9音モードでリズム音を鳴らす方法」のその3を公開します。FM9音モードでのリズム制御で鳴らしている「(you're)SO NICEの冒頭のリズム部分」のコードを紹介するとともに、Yコマンドでリズムモードに切り替える際の補足を示しています。#MSXplay #MGSDRV #YM2413 https://t.co/Nec7IdS9s6 — らいきんぐ! (@liking_birds) 2020年9月21日
 このサンプルではバスドラム・スネドラム・タムを使い、リズムモードでは出せないような様々なパーカッションを発声。

「MGSDRVのFM9音モードでリズム音を鳴らす方法」のその4(ひとまず完了)を公開します。楽曲を鳴らしながらリズムモードを切り替える際、リズムパートから鳴る雑音を抑制するための方法を紹介しています。#MSXplay #MGSDRV #YM2413 https://t.co/q4SVN2DR6E — らいきんぐ! (@liking_birds) 2020年9月22日
「MGSDRVのFM9音モードでリズム音を鳴らす方法」のその4において、英語の解説部分で使用していた「NG ※和製英語」を「[Bad example」に変更しました。その他のコード部分や日本語の解説に変更はありません。#MSXplay #MGSDRV #YM2413 https://t.co/SAPZu7BJ6Y — らいきんぐ! (@liking_birds) 2020年9月24日
 リズムモードへの切替時に発生する雑音をできるだけ抑えるサンプル。

FM音源:発音中に音色を切り替える技

いろんな方に「いいね」を頂けたので、この音色切り替え技(ビブラフォン→フルートの切り替えで鳴らすシンセブラス)のサンプルコードを書いてみました。単純なフルートが、ブラスに化けるところが面白いです。https://t.co/YY86B3bXBp — らいきんぐ! (@liking_birds) 2020年8月13日
 ビブラフォン→フルートの切り替えで鳴らすシンセブラス。単純なフルートが、ブラスに化ける。

先日アップしたYM2413でソーサリアンやYS1/2を演奏した動画では、これら15個のROM音色を重ねたり、一瞬だけ鳴らしたり、素早く切り替えることで、強引にYM2203風味の音を出していますので、よかったらどこにROM音色が割当てられているのか?という視点でも聴いていただければ! https://t.co/AdEvx9ewTQ — DSA (@ym2413) 2020年12月5日
 日本ファルコムのゲームBGMでよく使われるYM2203風味の音をYM2413で再現するためにこのような技術が便利に使えるようです。

この音色から、パッチスライドで33番(ウッドベース)の音色に切替えて鳴らすと、FM1chでもアタックの鋭いパンチの効いた音が出ます。パッチスライドはMSX-BASICでは処理速度的に厳しいけど、MGSDRVなどのFM音源ドライバなら可能です。 https://t.co/0qpW3imEnp — ぎゃぶねこ (@gyabuneko) 2020年11月28日
ここで言うパッチスライドとは、「YM2413内蔵音色を、Key-ONしつつステップ単位で高速で音色を切替るテクニック」の事で、これにより、元の内蔵音色とは全く異なる「自作音色っぽい音色」を出せます。このテクはMSX-BASICでもYコマンドと&コマンドを併用すれば可能ですが、処理速度的に厳しいです😅 — ぎゃぶねこ (@gyabuneko) 2020年11月28日
 OPLLでSCC音源の「モーフィング」のような効果を出す「パッチスライド」と呼ばれるテクニック。

 なお、音色を切り替える技術は、おかしな音が鳴る場合があります。詳しくは MGSDRV:既知のバグ情報・未確認情報まとめ - Gigamix Online をご覧ください。

PSGのハードウェアエンベロープ

 drmさん(twitter@NudiDrm)による解説。 では、PSGのハードウェアエンベロープについて記載しておきます。MSXのPSG(AY-3-8910相当品)では、チャンネルをミュートするとアクティブの状態でホールドされるようで、ここにボリュームやエンベロープジェネレータの音量が反映されるようです。(続く) — drm (@NudiDrm) 2020年9月26日
したがって、エンベロープジェネレータで反復波形を選択し発振させると、可聴周波数の範囲でPSGを鳴らすことが可能です。具体的にはS8,S12で鋸波を、S10,S14で三角波を模擬することができます。MGSDRVのMMLでは言語レベルでチャンネルミュートがサポートされているため扱いが容易です。 — drm (@NudiDrm) 2020年9月26日
具体的には、PSGのチャンネルで”/0”と記述しチャンネルミュートした後、Sコマンド、Mコマンドで非矩形波を発振することができます。例) /0 s8m85 e1 このようにする事でオクターブ2のミの音に近い鋸波を発振できます。音階との対応は、概ね添付の図のようになります pic.twitter.com/4L6RaHa9HG — drm (@NudiDrm) 2020年9月26日
/1でチャンネルミュートしていない場合、発音している音程と干渉することとなります。近い音程の場合には意図的にうねりを発生させることも可能です。例えば以下の曲では、冒頭のベースのうねりをハードウェアエンベロープとの干渉によって実現しています。https://t.co/6Ydc5xMLvo — drm (@NudiDrm) 2020年9月26日
Mの値は整数しか取らないので、表の小数部は四捨五入して入力する必要があり、その分が聴感上の誤差になります。設定値が小さい程誤差の範囲が大きくなるため、同じ音高では三角波の方が鋸波より誤差が発生し易い事を示唆してますね。 — drm (@NudiDrm) 2020年9月26日

先ほどの掲載図の中に誤記があり、S10,14の場合は表の値を1/2することで意図する音程とすることができます。お詫びし訂正いたします。 pic.twitter.com/wcTsLZR8R7 — drm (@NudiDrm) 2020年9月26日
 表はこちらが正しいもの。

SCC音源:簡易的にPCMを再生する

 drmさん(twitter@NudiDrm)による解説。 簡易PCM再生について:原理は単純で、SCC1波形32byteを垂直同期割込周期約60Hz毎に入れ替えることで、約1920Hzを再生させようとするものです。波形データ作成には、例えば下記ツールを使うと各種音声ファイルから1920Hz モノラルWAVファイルを作ることができます。https://t.co/CKVJnvNe38 — drm (@NudiDrm) 2020年11月30日
今回は、SoXで周波数変換したWAVファイルから、テキストのバイナリデータを作成するための簡単なフィルタをCのコンソールアプリで自作してます。(こんなニッチなソフトを欲しい方がいると思えませんが、ご希望の方がいらしたらどこかに配置します。) — drm (@NudiDrm) 2020年11月30日
このように単純な原理なのですが、MGSDRVで実現する際に色々問題があります。そもそも1920Hzの再生周波数は相当に低く、変換後の音声はまず想像通りの音にならないと言えます。またMGSDRVのSCC波形定義の上限(確か32波形)から、音の長さも合計約0.5sec程度の制約となるため、ほぼ1Shot専用です。 — drm (@NudiDrm) 2020年11月30日
とは言え、耳で聴きながら微調整を施したり、他の音源テクと組み合わせることでチップチューン的なLo-Fiな音を演出できたりするので、使いようによっては有用な技術かもしれません。#MSXplay https://t.co/rSLMt8YhSz — drm (@NudiDrm) 2020年11月30日
 SCCの音色を高速に切り替えることで、1920Hz・約0.5秒程度ですがワンショット的にPCMを利用可能になります。

メモリ消費量を抑える方法(1)

 サークルFMPSG主宰、Wiz.さん(twitter@WizardOfPSG)による解説。 MGSDRVでメモリ使用量を減らすコツ?・楽曲途中でテンポ変更すると、ゴソっとメモリ取られるので極力やらない・yコマンドを多用してる曲は、MML内のyコマンドを削るとゴソっと使用量が減る・音長系は最適化してる?っぽく、表記を変えてもさほど変わらない気がする(※推測)(続く — Wiz.@「ペンゴ!オンライン」2曲「キャラバンブーマー」1曲作編曲担当 (@WizardOfPSG) 2020年6月28日
続き)・単音リピートは、3回程度だと却ってメモリを喰うので、ベタで書いたほうが良い(例:「[c4]3」とか)・フレーズリピートや、単音でも5回以上くらいであれば、リピートを使ったほうがメモリが縮む(例:「[r1]8」とか)(続く https://t.co/Nby5dMqVBi — Wiz.@「ペンゴ!オンライン」2曲「キャラバンブーマー」1曲作編曲担当 (@WizardOfPSG) 2020年6月28日
続き)・リズムパートのビルトインマクロは、同タイミングで鳴らすリズム音の種類を減らしてもメモリは(たぶん)減らない(例:「bmsc8」と「s8」は変わらない?)・リズムパートでメモリを削るには、発音トリガを減らす(例;「b4s8b8」→「b4s4」にすると、微妙に減る?)続く) https://t.co/oBQc2n39jE — Wiz.@「ペンゴ!オンライン」2曲「キャラバンブーマー」1曲作編曲担当 (@WizardOfPSG) 2020年6月28日
続き)・どーしてもメモリが足りなかったら、思い切ってchを減らすwディレイや補助用パート、和音構成のパートを丸々削るとか…当然、ゴソっと空きます。…他にもありそうですが、MGSDRVの場合はとりあえずこんな感じで。 https://t.co/Zv9DvGjk6M https://t.co/dxIn5tqVIr — Wiz.@「ペンゴ!オンライン」2曲「キャラバンブーマー」1曲作編曲担当 (@WizardOfPSG) 2020年6月28日

メモリ消費量を抑える方法(2)・トラックバッファ消費量

 MSXplay.com制作者、DSAさん(twitter@ym2413)による解説。 MGSDRVのトラックバッファ消費量という話ですと、yコマンドは3バイトです。音長(L)コマンドが2バイトで、Lコマンドと一致するノートが1バイト、一致しないノートが2バイトです。 https://t.co/tvl5rFFdre — DSA (@ym2413) 2020年6月28日
ノートについては、タイ(&)を使わない方が効率が良いです。c4&c4よりc2またはc4^4の方がトラックバッファの消費量が減ります。 — DSA (@ym2413) 2020年6月28日
MGSCコンパイラで最適化処理は掛かっておらず、たとえばl4l4と明らかに意味のない同じコマンドの羅列がある場合でも、MGSバイナリには記述された個数分同じコマンドが入り、トラックバッファを消費します。 — DSA (@ym2413) 2020年6月28日
また、MGSCは音色データも最適化しません。未使用の音色データもMGSバイナリに残ります。同じ番号の音色を複数個定義すると、なんとバイナリに同じ番号の音色が複数個入ります。 — DSA (@ym2413) 2020年6月28日
その他、コマンド毎の消費バイト数については、こちらに解析資料があります。https://t.co/NBQURLHCAx — DSA (@ym2413) 2020年6月28日
 コマンド毎の消費バイト数について記載された解析資料へのリンク。

セガ・マークIIIっぽい音作り!?

 twitter@Pt.Macumbaさん。 リズムモードかつメロディのディレイ用トラックを最低1つは用意して、メインとディレイのどちらかにデチューン+1&LFOを掛けておくとMGSDRVでもマークⅢのFM曲っぽくできます。 — Pt.Macumba (@Pt_Macumba) 2020年11月29日
 セガ・マークIIIの「FMサウンドユニット」およびセガ・マスターシステムは、MSX-MUSICと同等のFM音源チップ(YM2413, OPLL)を搭載していました。音色が同じであるため、MSXでも擬似的に楽曲の再現が可能です。

その他

YM2608が鳴らすスネアドラムっぽい音が出来たので公開。…え?ディストーションギター?! …食べちゃいましたけどナニか?![過去作品の修正版です] #MSXplay #MGSDRV #YM2413 #SCC #PSG #TheScheme #PerperualDark https://t.co/MSFwhsvFHZ — らいきんぐ! (@liking_birds) 2020年9月19日
ウチがMGSDRVをメインで使う理由は明確で「SWエンベループ定義にPSGのノイズ周波数切り替えや音色変更等ができるから」でして(まえも言ったかな)。 — らいきんぐ! (@liking_birds) 2020年9月21日

 識者のみなさま、情報をありがとうございます。

MGSDRVのトップページ → https://www.gigamix.jp/mgsdrv/