[近況] qSPC用の音色データ開発


 少し前まで、PA GamesさんのqSPCというSFC用のサウンドドライバ・MMLコンパイラといったサウンド開発ツールのために、音色データを作っていました。もちろんqSPCではPPSE部さんのC700でBRRとして出力した音色データを使うことができるのですが、音色データは誰もが気軽に作れるものではないので、オリジナルの音色データを用意しました。

左:BRR形式の音色データセット/右:manifest.jsonによる音色定義

00-a_guitar アコースティックギター/生録/収録周波数250Hz/1,847bytes

01-bassdrum バスドラム/生録/ピッチなし/1,064bytes

02-castanet カスタネット/生録/ピッチなし/335bytes

03-cymbal シンバル/生録/ピッチなし/2,459bytes

04-d_bass ダブルベース/物理モデル生成/収録周波数500Hz/1,469bytes

05-e_bass エレキベース/物理モデル生成/収録周波数250Hz/902bytes

06-e_guitar エレキギター/物理モデル生成/収録周波数500Hz/542bytes

07-e_piano エレピ/物理モデル生成/収録周波数500Hz/434bytes

08-eggshaker エッグシェイカー(マラカス)/生録/ピッチなし/1,739bytes

09-harmonica ハーモニカ(ブルースハープ)生録/収録周波数500Hz/335bytes

10-harp ハープ/物理モデル生成/収録周波数500Hz/911bytes

11-hihat ハイハット/生録/ピッチなし/2,279bytes

12-marimba マリンバ/物理モデル生成/収録周波数500Hz/1,163bytes

13-metronome メトロノーム/生録/ピッチなし/1,199bytes

14-noise ホワイトノイズ/Audacity生成/ピッチなし/1,955bytes

15-piano グランドピアノ/生録/収録周波数500Hz/1,154bytes

16-pipeorgan パイプオルガン/物理モデル生成/収録周波数500Hz/335bytes

17-saw ノコギリ波/Audacity生成/収録周波数500Hz/299bytes

18-shinobue 篠笛/生録/収録周波数1,000Hz/1,028bytes

19-sin サイン波/Audacity生成/収録周波数500Hz/299bytes

20-snare スネア/生録/ピッチなし/1,667bytes

21-square 矩形波 デューティ比50%/Audacity生成/収録周波数500Hz/299bytes

22-tin_whistle ティンホイッスル/生録/収録周波数1,000Hz/641bytes

23-tom タム/生録/ピッチなし/1,478bytes

 このように全部で24音色あります。開発に様々な制約がある為、楽器の種類や品質に偏りがあるのですが、あくまで試奏のためのものとしてご理解ください。添付の音色データに関しては、音質よりもデータサイズを小さくすることに努めています。

 SFCの自作ROMやSPCファイルとして固めた「音楽」としてではなく、qSPCのようにインターネットで配布し、不特定多数の人が使うツールに添付する音色データは、楽器メーカーなどが作ったPCM音源の波形データをサンプリングして添付すると、大幅な加工をしていてもメーカーが作った音色データの二次配布をしていると見なされることがあります。

qSPCのプロジェクトではそのような権利的な問題を避けるため、音色は新たに生楽器・PSG・FM音源の楽器を録音するか、Audacityで単純な波形を生成したり、波形メモリ音源のように波形を手書きするしかありませんでした。結果的には新しいアプローチとして考えていた、Sculptureといった無から波形を生成するタイプの物理モデル音源からサンプリングするという手段も成功し、数百バイトで記号的かつクリーンな音色を得られることを知ったので、おかげさまで勉強になりました。

ちなみにTaco(仮称)でゲームとして組み込む音色は、音楽データとして固めた上で音色単独での配布は行わない為、AudacityやSculptureで生成した波形だけではなく、往年のSFCソフトのように楽器メーカーが作ったPCM音源の波形をサンプリングして実装することができています。

 本来ならば音色データ自体は、もう少しサイズが小さいのですが、qSPCのドライバでは、ほとんどの音色データがBRRデータの先頭部分に384サンプル程度の無音を挿入しないと、発声する度にトラックがクリッピングして僅かなプチノイズが走るという問題があるため、ひとまず音色データ側で無音のデータを盛るということをしています。ただ、これだと本来100bytes程度しかないパイプオルガンやハーモニカの音色が3倍のサイズになってしまいますし、サウンドメモリに読み込む音色の数が増えるほどロスが大きくなる為、もったいない気持ちはあります。また必然的にエンベロープのアタックの値の効きが悪くなるのと、再生する周波数が低くなるほど発声が遅れるのは問題だと感じています。

Taco(仮称)では無音を盛っていない音色データも実装しているのですが、これはエンベロープのアタックの値を強めに効かせることでノイズが発生しないようにしています。これはこれで音色が丸くなりすぎて劣化したように聞こえる側面もあるため、あくまで応急処置としています。

仮に波形データそのものに問題がなく、これがSPC700の仕様なのであれば、ドライバ側での対処をという流れになるのですが、そもそもの原因が不明なので何かご存知の方がいればアドバイスを頂ければと思います。

 qSPCがオープンなものになるのはTaco(仮称)がリリースされてからです。ただ、qSPCはSPC700のハードウェアが持つ機能を解放しきれていないので、それらをドライバに実装して頂ける方々が現れて、個人がSPC700の機能をフルに使ったSFCのゲームを開発したり、自由にリリースできるようになることを願っています。