スーパーファミコンの音色データの作り方 初級・後編


前回の続きです。これは一般的なノウハウではなく、qSPC向けの個人的な研究レポートなので前回の記事は必読かと思います。

いよいよクセのある工程になってきます。

 


4.ピッチシフトをかける

前回の1.の工程で500Hzの音程を録音せずに、平均律のB4の音(493.88…Hz)を録音した人が対象です。波形編集ソフトを使って493.88…Hz付近で鳴っている音を、500Hz付近に持ち上げます。ここでは誰もが使えるAudacityのピッチシフト機能を例に解説します。

 

ピッチの変更の画面を開き、波形全体のピッチを確認します。

B4の音を録音しているはずなので、現在の周波数(左側のテキストボックス)が493Hz付近になっていれば良しとします。

今回は495.506Hzと判定されました。

 

◆ パターンA 全体をピッチシフトする場合

ピッチが493Hz前後であることを確認したら、ピッチシフトの目標とする周波数(右側のテキストボックス)を500Hzに設定して処理を行います。

処理が完了したら、波形が変化し、音程がわずかに上昇したことを耳で確認してください。再度、ピッチの変更の画面を開き、現在の波形のピッチを確認します。ここで500Hz ±3ぐらいの値になればよいです。要は最終的に他のサンプリングデータと一緒に鳴らした時に、明らかにピッチがずれていて変に聞こえるような違和感がなければそれでよいのです。

また500Hzと入力してピッチシフトをかけても処理後のピッチが変化しない場合や、500Hz ±3に到達しない場合は、入力する値を少し変えてみてください。例えば、今回のオルゴール音は500Hzと入力しても処理されませんでしたが、504Hzと入力すると501.136Hzにピッチシフトさせることができました。このあたりは試行錯誤ですね。

補足すると、上記のようなやり方で波形全体にピッチシフトをかける方法はお手軽なんですが、主にアタック部分に非楽音的な特徴がある楽器はその波形がカットされてしまい、音色が変化してしまう場合があります。今回のオルゴールの音色は、アタック部分の高域の成分に特徴があるため、わかりやすい一例です。

見方を変えれば、波形の音量が均一化されているので、後々ノーマライズをかけると波形そのものの音圧は確保されるという結果になります。この辺りは表現したいサウンドによって、どのような結果が適しているか判断する必要があります。

 

◆ パターンB 部分的にピッチシフトする場合

アタック部分の特徴を残しつつも、ピッチシフトをかけたい場合の方法です。例外はあるかと思いますが、大抵の音色のアタック音というものは、楽器のピッチが安定するまでの瞬間的な非楽音と捉えることもできます。そこで、音色のアタック部分の非楽音部分を耳で聴き分け、ピッチが感じられる部分にピッチシフトかけた後に、非楽音部分の波形を結合させるという方法です。

上記の波形では、選択部分が非楽音だと聴覚上で判断したため、ピッチシフトかけたい部分(非選択部分)を選択した状態でパターンA と同じ処理を施します。適切にピッチシフトできたら、非楽音部分と結合させるのですが、ピッチシフトをかけた部分は波形の頭にフェードインがかかってしまうので、これを切り詰めて違和感のないように非楽音部分と結合させます。

結合がうまくいったら、結合した部分から波形の最後までを選択して、ピッチの変更で選択部分の平均ピッチを再確認してください。最後に波形全体を試聴して、音色としての違和感がなければ成功です。今回は丁度0.1秒ぐらいの長さに編集することができました。

ここまでの工程で、元々の音色とAとBの音の違いを試聴できるようにしました。元の音色に近いのは、やはりBです。

(先行してノーマライズの処理をかけてあります)


5.サンプリング周波数を変更する

波形のサンプリング周波数を変更し、32,000Hzに変更します。オルゴールの音色は44,100Hzで録音していたので、波形を拡大しておくと32,000Hzに変換したときにサンプルが間引かれる様子が目視できます。このとき、波形全体のサンプル数がどれぐらいになったかを把握しておいてください。オルゴールの音色は4442サンプルから3223サンプルになりました。


6.波形の刈り込みと整形

波形全体のサンプル数を64サンプルの倍数に合わせていきます。サンプリング周波数 32,000Hz/音色の周波数 500Hzのとき、波形全体のサンプル数が数百と少ない場合は、手作業でサンプルを動かして編集し、可能な限り波形の1周期を64サンプルの倍数に合わせた方が音色のピッチが安定します。

これに対し、サンプル数が数千クラスになってくると、今度はピッチのゆらぎを無視して「音色の豊かさ」は語れなくなってきます。これを機械的に表現したいという意図がないかぎりは、泣きながら手作業でサンプルを編集していく必要はないです。少なくとも後述の作業を行なっていけば、ピッチが安定し始めたところでループフラグを立てやすくなります。

現在、オルゴールの音色は3223サンプルになっているので、もちろん後者のやり方でいきます。

上記の波形のように、同じような波形が並び始めてピッチが安定したあたりで、波形の1周期を波形の終端にあわせてカットし、音色に影響が出にくいアタック部分の先頭をわずかに削ることで最終的なサンプル数のつじつまを合わせるということをします。

もちろん全体のサンプル数を節約する場合は、波形の終端から波形を1周期単位で切り詰めていきます。単純な波形の長さよりも、波形全体の複雑さがサンプル数に影響するので、極力節約することを心がけてください。サンプリングした音色の特徴にもよりますが、いろいろ作って試した結果としてはサンプリング周波数が32,000Hzのとき、数百サンプル ~ 数千サンプルが妥当です。個人的には、これが万単位になると明らかに贅沢をしているという感覚になってきます。

 

オルゴールの波形は、全体で3223サンプルと既に適切なサンプル数になっており、かつ波形の終端も波形の周期に合わせてあるので、あとはつじつま合わせでアタック部分をカットするだけです。

ここでは波形全体のサンプル数を64の倍数である3200サンプルにするため、波形の先頭あるいは途中の23サンプルを選択し、削除します。たいていの場合は、アタック音の非楽音部分を少し削ったり間引いたりしたところで音色に影響はないのですが、念のため編集後は試聴してください。

 

 

BRRの仕様としては16サンプルの倍数であればデータとして問題がないようですが、後からC700で違和感のないループポイントを探しやすくするためにも、ここで波形の周期の間隔を無視して、サンプル全体の長さを気まぐれにしてしまうことは品質の面でオススメできないです。特に、全体のサンプル数が少なくなればなるほど、音質やピッチへの影響が大きくなるので、繊細な作業が求められます。

ただし、SEやボイス音などで非楽音として再生させるデータに関しては、この限りではありません。

 

波形全体のサンプル数が64サンプルの倍数になるように、かつ波形の周期に合うように波形の終端をカットできたら、ここでノーマライズをかけます。

次に、ノイズを避けるために波形の初めと最後のサンプルが必ずゼロクロス点をとるようにフェードをかけます。このとき、波形が不自然になるようでしたら、個々のサンプルを動かして滑らかな波形へと修正することができます。特に波形の前後をループでつなぐ場合は、音色の顔である波形の規則性を崩さないようにする方がノイズが発生しにくくなります。

おつかれさまです。以上の波形編集が終わったら、32,000Hz/16bitの.wav形式で保存します。


7.WAVEデータからBRRデータを生成する

ここではPPSE部さんのC700を使います。.wav形式の波形をC700に取り込んだら、まだ機能が少ないqSPCの仕様を想定して以下の設定にします。

 

・High Key,Low Key,Root Keyは初期値で固定

・ループが前提の音色はLoopにチェックを入れる

・Sample Rateは32,000Hzで固定

・エコーやディレイは設定しない

・Enable Release はオフにしてSR1のパラメータのみで調整

 

この状態でMIDIキーボードなどで音を確認しながら、適切なLoop Pointを探していきます。あるいはDAW上でMIDIデータを打ち込んでおき、再生させながらLoop PointやADSRを調整するのもよいです。

ADSRの値は、これから書き出すBRRデータには直接反映されませんが、僕はqSPCの設定ファイルに入力するADSRの値をここでメモしています。

うまくLoop Pointを取ることができたら、Save Smpl…で.brr形式として書き出します。同時にADSRなどの設定情報が含まれた.smplというファイルも出力されますが、これはqSPCで使用できません。

出力された.brrのサイズは、楽器の場合だと1音色につき平均4KB前後を目標にするとよい思います。オルゴールのサンプリングデータは.brrにすると1,811バイト(約2KB)でした。

なお、上記のC700の設定で500Hz付近のピッチに合わせたサンプリングデータを鳴らすと、実音より半音下がった状態で発声されることになるのですが、qSPC側の設定でサンプリングデータの元の周波数を設定できるので、ここで500Hzを設定すると、qSPCから出力された.spcや.smcの再生時には実音で発声されるという寸法です。

最後に、手回しオルゴールのBRRを使って、qSPCから出力したROMイメージをエミュレータで再生させてみました。

今回は他のサンプリングデータとのピッチの比較のために、過去に作ったストリングス系の音色を伴奏として同時に鳴らしています。お粗末ですが、いちおう3トラックあけているので、それっぽい感じです。

 


あとがき

というわけで、qSPCのサンプリングデータ作成はいろいろと頑張らないといけないですね。ここまで読んでもらえるとわかると思うのですが、単純にスーファミのシステムで音楽を作ったり演奏したいということであれば、440Hzでサンプリングできて、機能豊富なC700を使う方が合理的です。

僕も実際にqSPCで鳴らすデータを作るときは、C700でモックアップを作ってから全体のサウンドを確認し、qSPC用にBRRを書き出したり、MMLを用意していくという流れでやってきました。ただし、自分は純粋にBGMやSEを作りたいという思いを持ちつつも、あくまでPA Gamesさんとスーファミの「ゲームを作る」ことが目的なので、手探りでqSPCの仕様に合ったデータを作る必要があったのです。

なぜ、こんな冗長な記事を書くのかというと、近いうちにqSPCがPA Gamesさんより公開される予定とのことだったので、音色データの作り方の一例ぐらい書いておいた方がいいかなと思ったからです。このように、qSPCの仕様に沿ったサンプリングデータを用意するには一手間かかると思われるので、権利的に問題がない、いくつかの音色データを同梱する予定です。後はMMLを用意することができれば、とりあえずqSPCを試すことはできると思います。

何よりPA Gamesさんが独自に開発したサウンドドライバなので、自作のスーパーファミコン用のゲームに組み込むことを想定して作られており、いろいろと将来が楽しみです。