SCCでPCM再生?

さて、この解析結果を見ると(見なくてもすでに充分有名ですが)SCCは好きな波形データを音色として、音楽を再生できるではありませんか。
これは、つまり、うまくするとひたすらPCMデータを再生できるのではないか?という発想に・・・普通はならないか。ま、まあ、思いついてみた事は、とりあえず実験をしてみようと。

実験、初歩の初歩。
とりあえず、15.75KhzのPCMデータを再生してみようと、分周比レジスタに226を書き込んでみる。実際にレートは、3579545/(226+1)=15769になるはずなので、約2ミリ秒ごとに波形データを書き換えてみる。Z80のアセンブラで組んで、タイミングはバッチリなはずなのに・・・
結果は、まるでダメ。ほぇ〜。

その後、SCCの解析をさらに進めると、分周比レジスタに値を書き込むと波形メモリの先頭から再生をしなおす、というモードがあることを発見。しかし、ゲームでは使われていないのに、なんでこんなモードがあるんだろう。まあ、いいや。

実験、とりあえずならしてみるパート2
では、実際にこのモードにして、波形メモリの先頭にPCMデータを書き込んで、その都度分周比レジスタに値を書き込むと・・・。バッチリ、PCMデータを再生してくれました。が、しかし、音量がものすごく小さい。うーん、やっぱり、チャンネルAしか使わないとこんな感じか、と思いつつも、成功したことには感激。やったね!
それなら、他のチャンネルも一斉に鳴らせば音量は5倍、と思って、そのままさらに実験を続けると・・・ひたすらノイズが・・・。
なんでだろう、処理速度の関係かな?と思いつつ調べてみると、チャンネルABCだけなら大丈夫、でも、チャンネルDEを使うと、とてもノイズが出るということが解りました。ちなみに、使っていたのはメガロムです。そういえば、メガロムのSCCってチャンネルDとEを使うと普通の音楽でもノイズが入っていたような。
でも、3チャンネルならターボRの内蔵PCMよりは音量は小さい物の、それなりに実用的、という結果にはなりました。めでたし。


SDスナッチャーゲット!
後日、SDスナッチャーがやっと手に入り(つい最近まで持っていなかった)、普通に音(音楽)を鳴らしてみると・・・。ん?音が何か違うぞ。スナッチャーのサウンドカートリッジは、波形メモリが5つある、というのは知っていたのですが、メガロム互換モードで使っても音が違う。この違いは何?と思いつつ調べてみると、メガロムではチャンネルDEを一緒に発音すると(普通に音楽に使っていても)、変なノイズが入るというのには前々から気が付いていたのですが、スナッチャーでは全くそんなことがない。おぉ、バグが直っている。と、いうことは、もしかしてPCM再生で5チャンネル全部使っても大丈夫か?と思って、早速実験。結果は。バッチリOK。しかも、音量はターボRの内蔵PCM並。これは、もう、充分過ぎるくらい実用レベル。

と、いうわけで、この方法を使ったサンプルをライブラリ2にアップしておきました。他のサンプルも一緒です。

でも、SCCって32バイトの波形メモリがあるけど?
もしかして、32バイト書き込むたびに分周比レジスタに値を書き込めば、32バイトの先読みができるかな?ということで実験してみました。
とりあえず、結果は、ノイズ混じりで全然ダメです。どうやら調べた所によると、16バイト目から17バイト目に移動する時に、ノイズが発生するようで。
あと、SCC自体が波形メモリにアクセスをするときに、MSX側からも波形メモリにアクセスすると、MSXが優先されて、ノイズになる、ということも解りました。これらの結果を考えて、「16バイトしか使わない」「SCCが波形メモリをアクセスするときには、MSXは待っている」というように作り変えてみました。
結果は、バッチリOK。サンプルに入っています。

それじゃあ、PCM再生は16サンプルに一回処理するだけでしょ?
そうです。約1m秒ごとにSCCにアクセスするだけで、PCMが再生できます。とすると、R800ならば常駐できるのでは?ということで、さらに実験。MIDIのタイマー割り込みを使って、SCCへアクセスしてみました。ついでに、せっかくあるのに使い道がよく分からなかった、MEGASCSIのセマフォ管理に頼って、常駐でディスクも読み込んでみよう。これで、大きさが無制限でPCMファイルが常駐可能に・・・?
結果は、だいたいOK。ちょっとノイズが気になるけど、常駐の感動はなかなかなもの。これもサンプルに入っています。


※このページの内容は、裕之が独自に解析したものであり、また、その内容についての保証もありません。このページの内容について、コナミ株式会社に質問をするという行為は絶対にしないで下さい。

感想、要望、バグ報告、その他何かありましたら、メールもしくは掲示板にてご連絡ください。
裕之  
ホームに戻る