噂には聞いていましたが、かなり大変ですね。。
音声合成するときは、フォルマントデータという、パラメータ群を、PD7752に送る必要があるんです。
mkIIや、6601の場合は、、BIOSの中で、ループしながら、連続的にフォルマントデータを送出しつづけていました。
この場合、フォルマントデータは止めどなく流れてくるので、間が空きにくいです。
しかし、SRでは、BIOSはフォルマントデータを作成して、PD7752に開始を宣言するだけで、すぐに抜けてしまい、BASICに戻ります。
そして、VOICE割り込みを要請します。VOICE割り込みの中で、フォルマントデータを、1バイトずつ、送出します。
なぜこうなっているかというと、バックグラウンドで、音声合成を流しながら、すぐに、次の命令を実行出来るようにするためだと思われます。。
しかし、このVOICE割り込みというのが、結構時間のかかる処理で、その割には、1バイトずつしか、送ってくれない。。
PD7752エミュレータの方は、このデータが7バイト来てから、音声合成の波形作成を始める。
普通に、今までのルーチンを流用して、実行した場合、フォルマントデータが、かなりゆっくりやってくるので、音声合成の波形も、間がかなりあいた波形になってしまう。。
talk"f a." とやっても、
あ あ あ あ あ あ あ あ。。。
細切れ。。乙。
あーあという感じ。。
フォルマントデータを、ある程度貯めてから、やれば、少しはましになるかな?
全部貯めてから、発声すれば、確実だけど、それだと、発声タイミングが、異様に遅くなるのでダメ。。orz
はぅーん。これは大変だ。。
一つの手として、割り込み間隔を短くする。。
といっても、限界があるよなぁ。。波形を作っている間は、フォルマントデータ受け入れも停止するらしいし。。
やはり、pd7752のフォルマントデータを受け取る部分は、フォルマントデータをリングバッファに貯めて、波形を作るスレッドでは、フォルマントデータがある程度たまってきたら、波形を作成。。
音声合成のストリームの残りバイト数が減ってきたら、次のデータで波形作成するとか。。??
うーん。
いずれにせよ、今までの mkII や、6601と同じルーチンではだめということだ。。