<課題1 波形を正弦波に変える>
とりあえず音の波形を正弦波に変えて見たんですが、どうしても雑音が入ってしまう。
正弦波の振幅の計算にsin関数を使ってたんですが、どうやらこの関数で時間がかかってたみたい。
まぁ、サンプリングレート16Kで3和音鳴らしたら、1秒間に48000回も計算してるんだから遅くなるのも当然か。
Sinの値をあらかじめ配列に入れておいて、Sinの計算時は配列を読み出すようにしたら、スピードアップしたみたいで雑音が入らなくなった。
ただ、正弦波にすると低音が小さくなってしまう。
<課題2 エンベロープ周期に対応する>
経過時間による音の音量変化です。以下の4つに対応すればいいみたい。
アタックタイムで立ち上がり時間を設定したら、アコーディオンやフルートっぽい音は出るようになった。
・アタックタイム
ノートオンしてから音量が最大になるまでの時間。
この最大値がボリュームで指定した値になる。
・ディケイタイム
最大音量から少し下がって一定音量に下がるまでの時間。
ページによってはこの下がり具合が曲線になっているんだが、計算方法が見当たらない。
・サスティンレベル
一定音量のレベル。
・リリースタイム
ノートオフしてから音量が0になるまでの時間。
http://www.uyouyo.com/gallery/synthedit/manual/midi_implementation.html
音量エンベロープについて(MIDI インプリメンテーション様)