XMSNESでスーパーファミコン音源(SPC)を作る#6

#5で取り上げたSPCToolを使用したエコー調整ですが、、、

もっと簡単でエレガンスな方法がありました
↓ご存知世界一ナウいトラッカーであるところのRenoiseです↓


osoumen氏作のSFCEchoというAudioUnitプラグインを使用する

のですが、、
SFCEchoのパラメータコピー機能は本体のC700に統合され現在は上イメージのようなカタチではありません
(復活希望)
当ブログではXM直からの変換に的を絞っておりますのでC700の運用については飛ばしておりましたが
C700はスーパーファミコンの感触をエミュレートするようなサンプラーでございます
これであるていど実機の鳴りを想定したサンプルを作りMIDIでコントロールして曲を作る
出来たらMIDIをXMに変換して(OpenMPTなどで読み込む)各chにサンプルをセットというような使用法です



作ったサンプルはXi(XMのInstrument設定)で保存してXM対応のトラッカーに読み込めますので
XM直でも十分使えますが
シンプルにエコーの鳴りを試したい場合にはSFCEchoが便利

RenoiseはXM形式を読み込める上にAUプラグインも使えるので【速い】【簡単】【安心】?です
そうRenoiseならね
おしむらくはRenoiseのXM読み込みは完全じゃ無い事、そしてXM形式での保存が出来ない事でしょうか
SFCEchoの吐いたパラメータを手動でXMにコピーしなければなりません(MilkyTrackerは文字列のコピペができない)

というかC700を使用すればDAWで疑似スーファミ音源的な事もできますね、スバラシイ

XMSNESでスーパーファミコン音源(SPC)を作る#5

一般的なSPCのADSRとXMSNESのDirect Gainについて

まず一般的なSPC

ModeがADSRで表示されています

DSP Register Editorで見てみると、、、

ADSRが設定されているいるのがわかります
ドライバによってはここを設定できるようです、、というより普通はここを設定出来る物だと思います

一方XMSNESでは、、、

Directと表示されています(Decは何だろう?)

DSP Registerでは

Gain Modeの下のスライダーが凄いスピードで動いています

XMの場合ADSRという設定はありませんがInstrument settingで複数のエンベロープポイント
サステインポジション、リリースなどの設定が可能なのでむしろADSRより細かいエンベロープの設定が可能です
ただデータサイズや動作負荷(?)にどう影響するかはわかりません
ADSRのほうが軽く済むのかもしれません

もうひとつ、SPCToolを使ってエコーの効きを試して反映させる方法

エコーパラメータはInstrumentsパネルに
>887F000000000000640
などと入力するわけですが、DSP Editorでの見方をバラして見て行くと
上から

Main : ここはパラメータには無い数値でメインボリュームの値です(バイナリエディタなどで変えられるらしい)
Echo : 最初の2桁です左右のエコーボリュームです
Delay : 後ろから3つ目の数値です
Feed Bk : 末尾2つの数値でフィードバックの値です

そしてFIR Filter Coefficientsですが
ここは8本になっています
パラメータでは16桁になっていますね、すなわち、、、2桁で1本のスライダーのパラメータという事です

数値は
16進数で 00 〜 7F が 10進数で 0 〜 127
16進数で FF 〜 80 が 10進数で 0 〜 -127
になっています(FEだと-2だった)

FIRフィルタ設定を一旦7F00000000000000などで書き出しておいてSPCToolでスライダーを動かして効果を試す
その数値をXMで打ち込んで再ビルド


で反映させられます(SPCToolで直接saveはできないのかな??)
当然、DSP Register Editorの値を16進数に置き換えないといけませんが

Singing Super Nintendo

テイルズ オブ ファンタジアのオープニング


歌唱してますがコレ
ひとつのサウンドデータでは無く歌の部分は効果音扱いで読み込んでいるのでしょうかね?
歌唱部分のサンプルを聴けるレートで圧縮していちファイルに収めるのは困難だと思います

このようなデータを作ろうと思ったらサウンドデータではなく
ゲームのようにプログラムを組まないとダメでしょうか

ちょっとしたSNES Demoみたいな
動作条件としてオケデータと歌唱サンプル同時使用時に64Kbになっていないとダメなんでしょうね

ついでに、本編だと書く隙間が無かったんですが
詳しい方には常識かもしれませんがスーパーファミコンのサウンド処理を担当しているSPC700というDSP
設計したのはプレイステーションを作ったSCEの初代社長久夛良木健だそう
以降このSPC700に改良が加えられSPU,SPU2としてPS1,PS2に搭載されました

まあ、、、詳しくは知りません




ちなみにゲームボーイアドバンスだと


PCM粗い

XMSNESとはあまり関係の無いネタですがこういうのもあるんだなという参考に

XMSNESでスーパーファミコン音源(SPC)を作る#4

出来上がったSPCを色々アレするツール

名前もそのまんま

SPCTool


wineを使用して強引にMacで動かしているので表示が所々おかしいですが、、、

■大雑把に出来る事
ID666タグ(SPCのファイル情報など)の編集や諸情報の閲覧
曲をWAVやMIDIでレコーディング(この辺wineでは上手くいかなかったので不明)
サンプルをWAVやBRR(SNESの圧縮形式?)でエクスポート

タグ自体はXM2SNESのオプションでビルド時にも書き込む事が出来ますがSPCToolを使った方が格段にラク
元のXMを無くしてしまっても安心です

BRRに関してはどうなんでしょう?可逆なのか不可逆なのかワカランのでXMで再編集する目的としては微妙なところ
WAVで出力してそれをXM2SNESに掛けると再圧縮されて音が変わってしまうと思われます

BRR直だとaddmusic*や自作ドライバなどでの運用という道も
誰か個人か個人じゃ無い団体が作ったSPCに含まれる音色を(略)は自己責任においてどうのこうのですが

*addmusicはスーパーマリオワールド(海外版)をハッキングしてMMLのようなものでSPCを作るツールらしいです
addmusicにはシリーズ?亜種?のようなモノも存在し、BRRを自前で組み込んだりもできるようです
ただし導入にはある程度の知識が要求されるようです

XMSNESでスーパーファミコン音源(SPC)を作る#3

まだ調査段階なのですがSPCがMODから一皮剥けてキャラ立ちするのに欠かせない要素エコーについて

ざっくりと設置方法

Instrumentsパネルに図のようにパラメータを書きますが設定を書けるのはInstrument 3 〜 F までです
*パラメータを記述するのにInstrumentsパネルを利用するというだけで
記述したInstrument番号にそれが適応されるというわけではありません


パラメータの見方
行頭の > は必須です
以降

頭ふたつ:エコーボリューム
左右のボリュームです
キャラクターコードで正負で指定できます

正【(半角SP) !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO】
負【PQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}~】

右に行くほど大きいです

みっつめから16桁:フィルター
fir係数なんですが、、、、まだよくわかりません
とりあえず7F00000000000000が標準フィルタと呼ばれているようですが

後ろからみっつめ:ディレイタイム
何ms遅れて鳴るか、というような数値です
ここを大きくするとメモリを喰うようです

末尾2桁:リバーブ(フィードバック?)
残響の大きさですかね
0x00 〜 0x7F (0〜127)で指定します

指定したパラメータを反映させるには?


エフェクトコラムに E0x で指定します

E01 : エコーON
E02 : エコーOFF
E03 ~ E0F : セットエコー

(E03でInstrument 3 のパラメータをセットという意味です)
という具合です

セットはどこかひとつのチャンネルに置いておけば全チャンネル有効です
複数の設定を多チャンネルで同時使用は出来ないっぽいです

スーパーファミコンの音をスーパーファミコンたらしめるであろう唯一のファクターではありますが
高音質大型サンプル使用の長曲ではメモリを圧迫するという諸刃の剣でもあります
その辺の調整のかけひきがSPC制作の面白さとも言えるかもしれません

XMSNESでスーパーファミコン音源(SPC)を作る#2

SPCで出せるのは117711Hzまで??
MilkyTrackerの仕様でサンプルの読み込みはピッチシフト+29ファインチューン-28で行われます(16bitの場合)


MilkyTrackerが、というよりXMの仕様でこの調整をしないと実音と違う音階で鳴るので他のTrackerでも同様の筈(*1
ここで周波数がC4 = 44.1KHzに調整されるみたいです(*2
それを踏まえるとF5で117711Hzに到達、そこより上の音階はずっとその音になります


なので Relative note 数値の数値を減らせば使える音階の上限を増やせそうです
Adjust noteにチェック入れておけば元の音階は維持されます
当然元の音質とは変わってきます、一般的には劣化方向ですがこれを味と取る気概が(ry

ノイズ成分が多いドラムの金物系は著しく劣化するので容量節減目的以外では推奨しません
そもそもハイハットやシンバルは固定キーでしょう

サンプル周波数が変わるとループ長も変わります
モノによっては変換の時ノイズになったり音痴になったりするのでそこも調整が必要な場合があるようです

追記:MilkyTrackerでのResampleの仕方

Sampleエディタ上で右クリック、Advancedの一番下をクリックでパネルが開きます


*1
XMの元祖FastTracker2(v.2.0.8)では手動で調整

*2
実音の音階は何であれTracker側ではベースノートC4という扱い

ストリングスの周波数を8363Hzに落として高音を出したデモ

XMSNESでスーパーファミコン音源(SPC)を作る#1

MOD,S3M,XMをSPCに変換するまでの流れ

■SPCとは何ぞ?
SUPER FAMICOMのサウンドファイル(たぶんメーカー非公認)です
PCM(ADPCMらしい)で8チャンネルにエコーが掛けられます
各種ゲーム機用サウンドファイルに対応したメディアプレイヤーでの再生が可能
条件を満たしていれば実機での演奏も可能

■XMSNESとは何ぞ?
FastTracker2のオーディオモジュールであるXMをはじめ
ProTracker等のMODやScreamTracker3のS3MをSPCに変換できるプログラムです
コマンドラインツールです

XMSNES Download
osoumen氏が公式のベータ版に修正を加えたWindowsとMacのバイナリ諸々が入ってます
どこか適当な場所に解凍展開して下さい

■XMを用意する
用意するファイルはMODでもS3Mでもいいのですがサンプルの取り扱いやXMSNESではInstrumentもサポートしているので
XMが一番自由度高くていいと思います

Mac的にはネイティブでXMを取り扱えるアプリケーションがMilkyTrackerくらいなのでそちらも合わせてご用意
WindowsならOpenMPTなど色々あります

MIDIからの変換というアプローチに関しては当ブログではフォローしきれないので
osoumenさんのメモなどを参考に

XMの打ち込み方についても割愛でございます

■手順
1:XMSNESフォルダに変換したいXMを入れます
2:コマンドプロンプト(Macではターミナル)を立ち上げ同ディレクトリをカレントにします
3:コマンドラインに xm2snes -b -d ファイル名.xm で実行

チャンネル数や容量(後述)がオーバーしていなければだいたい通ります

■変換元ファイルの縛り
SPCで扱えるメモリは 64kb 57kbなのでそれ以内にしなければなりません
変換はXMから直接SPCではなく一旦XMSという形式に変換されるようで
その時にサンプルサイズは半分近くまで小さくなるのでXMの段階では少々オーバーしても問題無さそうです
ただしSPCのキモであるエコーを使用する場合
エコーに割当てるメモリ領域の都合で実機では再生できなくなる可能性もあります

サンプルは16bit,8bitどちらでも可

■データ制作のコツ等
波形ループを使用するサンプルの場合はループ長が16の倍数になっていると綺麗に変換されるらしいです
音階は(エディタ上で?)F5以上になるとそれ以上の音階にならず同じ音階で鳴るようです(調査中)
回避策としては
 アレンジを変える
 InstrumentでRelative noteのオクターブを上げエディタのオクターブを下げる
 Resampleしてベースノート自体を変える
 サンプルそのものを差し替える


容量節減
極々シンプルなシンセサイザー音色ならリサンプルでサンプルレートを抑える
生楽器サンプルでも許容範囲で同上(かえってスーパーファミコンらしい音になる事もある)
ちょっとしたディレイは人力で

エコーについては次回以降、、多分

1