2012年3月4日日曜日

分解率

独自PSG音源のMMLを実装していますが、分解率は、秒間22050回にする方向で。
つまり、周波数(22050Hz)と同じ。
分解率というのは、1秒間に音符を鳴らせる回数の上限。
その分、処理負荷が掛かりますが、この分解率如何で表現の幅が変わるから、ここは落とせない。
これを最大限に細かくするために、周波数を22050Hzにしたり、音色を固定プリセットにしたりするなど、処理性能を最大限に高めたといっても過言ではないです。

これが完成すれば、独自PSG音源について、残すTODOはMMLコンバータとMIDIコンバータを作る等の面倒な作業を残すのみ。

MMLコンバータは良いけど、MIDIコンバータは規格を解析するのが少しだけ面倒くさい。
なので、MMLコンバータ単体で作り易くしておき、MIDIコンバータは後付にする方向。
というより、MIDIコンバータは作りらないかも。
昔(PC-9801の頃)は、PMDのMMLで何一つ不自由しなかったし。

中々美しく響きます

独自PSG音源で、高音部が上手く鳴らせなかったのですが、どうもプリセットするバッファサイズが小さいことが原因だった模様。

1秒の周波数 = 88200Hz

という実際に鳴らす音(22050Hz)の×4のバッファサイズをプリセットに準備することで解決。
ようやく機械調整での調律が完了。

以下↓は、この状態で手何も手を入れずに、エンベロープを実装して鳴らしたもの。
http://www.k2.dion.ne.jp/~ysuzuki/seikou2.mp3

良い感じで、美しく鳴ってくれました。

×4バッファなら手動調整は不要そうです。
これで、独自PSG音源の音源部はほぼ完成か。

FM音源は要らないかな。
VG-Engineは、PC-Engine並のソフトウェア音源搭載が目標なので。
個人的には、ゲーム音楽用の音源として、FM音源はゴージャス過ぎる気がするというのもあります。
性能を落としてまで、FM音源を搭載させる価値を見出せません。

調律・・・

独自PSG音源の調律を行うために、オクターブと音色を選択できるように改造。

現状の音程を一通りの音色で一通り鳴らしてみましたが、かなりの調整が必要そうです。
これは、特定の波形データを特定の音程で出すシミュレータを作り、それを用いる形で作業が要りそうです・・・なかなか、そういった目的に適うソフトは無い・・・自分で作るしかなさそうです。

エンベロープとMML


(1)エンベロープ

エンベロープについては当初、アルゴリズムパターンを選択する方式にしようとしていましたが。

  • キーONしてから出力100%になるまでの時間(100ms単位)
  • キーOFFしてから出力100%になるまでの時間(100ms単位)
を任意値で指定できる仕様が一番良さそう。

(2)MML

楽曲データはMML→(独自コンバータ)→バイナリ形式というのが当初想定。
しかし、MIDIシーケンサ(SSWとか)でお手軽に作曲したいので、
MIDI→(独自コンバータ1)→MML→(独自コンバータ2)→バイナリ形式
の方向で。

MIDIからダイレクトにバイナリ形式にしてしまうと、エンベロープや音色等の細かい選択ができなくなってしまうので、ワンクッション(MML)を設けるのが適当。MIDIの特定パラメタ(イベント)を利用してダイレクト変換する方式もアリといえばアリですが、MIDIの解析が面倒なので、MIDIからは純粋にノート(音程+音の長さ+音の強さ)の情報のみ拾う感じにするつもり。

本当はピスコラ(ピストンコラージュ)からノート情報を拾いたいんですが....
(ピスコラのバイナリフォーマットは非公開なので、独自に解析するのが面倒)


純旋律で調整(成功)

純旋律で調整してみたところ、無事成功。

http://www.k2.dion.ne.jp/~ysuzuki/seikou.mp3

最後に「プツッ」と切れてしまうのは、エンベロープのアルゴリズムを実装すれば解消するので問題ではありません。今の所、キーオフすればブッツリ切っているから、それが問題なだけです。(つまり、大した問題ではありません)


厄介なのは、Dの音とかがノイズっぽい感じのところとか。
音程はあっています。
なので、これは周波数ではなく波の形状(波形)の問題。

今のところ、C言語で計算式で求めた波形データを元に、C言語の配列宣言の形式で出力するCGIプログラムを使ってメモリ波形情報を(85音階分)プリセットし、それを使って鳴らしています。
なので、波形データは編集自由。

音程の調律は無事完了しましたが、音色の質を調整する調律も必要です。
この部分(アナログデータ)は、流石に機械計算に任せきりにはできません。
この作業で、独自PSG音源の品質が決まるから、ここは手を抜けません。

この部分(音色の質)をシッカリ作りこめば、音色数の少なさは、大した問題ではない筈。
音色数=三角波、ノコギリ波、短形波の3種類+ノイズ
量の少なさは質でカバーする。

純平均律

どうも、純粋な平均律は、一般的な聴きなれた音階ではないようでした。

http://www.k2.dion.ne.jp/~ysuzuki/shippai2.mp3

上記は、以下の周波数で三角波を鳴らしたもの。


C 275.0000
C# 293.3333
D 311.6667
D# 330.0000
E 348.3333
F 366.6667
F# 385.0000
G 403.3333
G# 421.6667
A 440.0000
A# 476.6667
B 513.3333
C 550.0000


計算で鳴らしているのではなく、予め計算されたプリセット(1周期分の波形を準備したもの)を用いて鳴らしているので、微妙な誤差が生じるのは想定の範囲内ですが、ここまで違うとなると純粋な平均値で求めた音階というのは、一般的な平均律とは違うということ・・・かな?

そろそろ思考が停止してきたので、明日考えるか。

2012年3月3日土曜日

これは酷い

とりあえず、三角波のテスト波形ができたので、VG-Engineに載せて、ついでに以下のような鍵盤プログラムを作成し、ドレミファソラシドを演奏してみました。

結果は、
これは酷い()笑

あまりにも酷すぎるので、記念に録音しておきました。
http://www.k2.dion.ne.jp/~ysuzuki/shippai.mp3

これ、ドレミファソラシドって鳴らしています。(念のため)
一応、音程は変わっているので、基本的な理論は正しくできているようです。
なので、実験は失敗ですが概ね成功。

さて、鬼調整でもするか。

合理的ではないものを作りたい

ここ最近、実機版の東方VGSの開発が忙しくて、東方VGSの曲追加が滞っています。 東方VGS(実機版)のデザインを作りながら検討中。基本レトロUIベースですがシークバーはモダンに倣おうかな…とか pic.twitter.com/YOYprlDsYD — SUZUKI PLAN (...