音楽-MMLWAV13によるPCM再生とは何か、例えばこのピコカキコを聴いてみてください。両サイドで鳴っているパッドの音、それにドラムの音、とても綺麗です。どちらもトリッキーな鳴らし方をしているようですが、この記事ではドラムで使われている技法を主に追求します。PCM利用補助ツールを作成しました。後述の面倒な計算が一瞬で行えます。実用的な面だけ知りたい人は、まずツールのページを読んで、それから情報を本記事で補うと良いかもです。~ロジックとトリックドラムの音など、サンプリングした音色を鳴らしたい場合、普通はファミコンのDPCMに相当するWAV9を使用します。WAV9の性能はファミコン由来なので音質は低く、音程も15段階でしか鳴らせません。普通はパーカッションはDPCMで妥協し、音色は各種波形でなんとか近いものを作成することになります。知る限り、これを克服して品質の高いサンプルを鳴らすトリッキーな方法が3つあります。PCMテストで知られる手法(PCM変換スクリプトと説明)。テンポを超高速にする必要があるため、単発で鳴らさなければならない。波形メモリを超低音で鳴らして任意の8bit波形を鳴らす。後ほど考察するが、音程や発音の長さを巧みに調整する必要がある*2(上記ピコカキコの両側のドラム音で使用)本記事では、一番最後の手法を自身の楽曲に組み入れたい場合の考え方を考察します。わかりやすく書きたいところですが、話の性質上MMLや波形に関する一定の知識が必要です。ありますが、可変長(長さ上限あり)の符号なし8bit波形メモリ音源です。本来は周期的に繰り返される短い波形を扱うものです。1周期分の波形を16進数で書いて波形定義します。ノートを発音すると、定義した波形が1秒間に440回繰り返される周波数で再生されます。いうとんでもない高さになります。ファイルらしい再生周波数になります。して活用できるのです。あるため、発音が波形終端に達した後で先頭に戻ってしまう。【対策】発音する長さをtick単位で制御してループ直前で止める。休符を併用してリズムを取る。(実質マクロ利用が必須)【問題】1024サンプルは短く、な波形を一つ鳴らすにも不自由することが少なくない。【対策】複数のWAV13定義波形をシームレスに鳴らして1024サンプルの壁を超える。【問題】テンポが変動すると波形がうまくつながらなくなる。わたしはこれで半日も悩みました!実用へのアプローチ(理論的な話)上述の通り、音程や音長をシビアに調整しなければなりません。解像度が低く調整困難なのはノートの長さです。よって、1つの波形が何tickに相当するのか決定するところから、各種の調整を行います。バンクあたりの再生時間(tick単位)を決定するバンクの再生時間とサンプル数からサンプリングレートを求める(リサンプリングに使用)バンクの再生時間から再生周波数を計算し、音階とディチューンの値を求める求めた音階とディチューンと再生時間で入力波形を鳴らすこのような順序になります。音色定義時のサンプル数ですが、サンプル数が変動すると想定サンプリングレートが変化してしまうため、定義は一律最大サンプル数になるように最終サンプルを複製します。細かく計算式を書くと面倒なので、知りたい方は補助ツールのソースコードから読み解いてください。サンプルを使う方法!上記の説明は概念的過ぎますし、詳細が理解できる人でもいちいち計算するのは面倒です。PCM利用補助ツールを作成しました。面倒で謎に包まれた計算が一瞬で行えます。長さが「最大サンプル数」を超える場合は複数の波形定義に分割する。長さが「最大サンプル数」より短い定義は、最終バイトを複製して「最大サンプル数」まで増やす。(ただし、仕組みを理解していれば短いまま使うこともできる。「最大サンプル数」を変更して計算を行い、得られたノート再生コマンドを使えばよいだけの話)「ノート再生コマンド」で波形が鳴ることを確認する。悟茶辞苑ッ*1:バグのようなので挙動が保証されないのが問題ですが、音程を変更しやすいのでメロディ音色に使えます。これはWAV13では乏しい利点です。*2:2つ以上のサンプルをつなげて使うことが多いですが、そうすると特にテンポ変更や音程変更ができないので、音程の固定されたパーカッションなどに使うことになります。»プロフィールid:GOCHADTM、TAS、プログラミングが趣味です。かわいいものがすきです。)にも興味があります。技術系の一般記事を書いています。動画にときどき投稿します。gochaはてなブログをはじめよう!GOCHAさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。