●更新履歴 【最新版はGitリポジトリを参照】 ver.20150913 ・ピッチベンド・センシティビティに対応 ・その他ソースの整理・リファクタリング var.20130327 ・新しいvoiceを割り当てる際に発声中のvoiceが横取りされて しまうことがある不具合を修正 ・ユーティリティ関数 musicalConstrain12() を追加 var.20130113 ・モジュレーションのゆらぎ周期を 変数 PWM_SYNTH.modulation_dphase で調整できるようにしました。 ・リリース後に音(余韻)が鳴っているときにアタックをかけても 音色が変わらない不具合の修正 var.20130112 ・ピッチベンドが中央値から外れているときに NOTE ON すると 実際のピッチが中央値に戻されてしまう不具合の修正 ・ユーティリティ関数 log2() を追加 ・MidiChannelクラスの外出し、関数を .h に出してインライン化、など var.20121110 ・ノート番号0(最小:ものすごく低い 8Hz くらいの音階)を 与えたときドではなくミの音になってしまうバグを修正 ・ユーティリティ関数 musicalMod7() を追加 var.20121108 ・ユーティリティ関数 musicalMod12() を追加し、内部的にも これを使うようにしました。 ver.20121029 ・内部処理のチューニング(不要な初期化の省略など) ver.20121013 ・出力 PWM 端子の変更を、呼び出し側スケッチでできるようにしました。 (それまではライブラリを書き換えないとできませんでした) ・内部ルーチンの整理 ver.20120805 ・getEnvelope()、getWave() を追加 ver.20120719 ・出力 PWM 端子を4つの中から選択できるようにしました (旧:3 のみ → 新:3,9,10,11 から選択可)。 ver.20120716 ・正弦波、矩形波、三角波、のこぎり波の波形テーブルを ライブラリに組み込みました。 ver.20120611 ・波形の指定方法を変更しました。 波形テーブルにRAMを使わず全面的にPROGMEM化(フラッシュメモリへ移動) したことに伴い、波形テーブルを関数で指定するインターフェースを廃止し、 代わりにPROGMEM配列の波形テーブル(呼び出し側で準備が必要)を指定する インターフェースにしました。 これによりRAM領域が削減されたほか、MIDIチャンネルごとに 波形を違うものにすることが可能になりました。 ver.20120609 ・周波数計算の見直し Phase correct(=位相基準)PWM ではタイマーカウンタ(TCNT2)が 三角波を描くように変わりますが、上下の頂点だけ1少ないので 実際は512クロックではなく510クロックごとに割り込みが発生 することが判明しました。これを踏まえて基準値を調整しました。 ver.20120607 ・割り込み処理の高速化。 PWM割り込みでISR()から呼ばれる nextPulseWidth() 関数から 8ビットシフトの演算をループ外へ追い出した。 ・TIMER0を止める処理をコメントアウト ver.20120321 ・波形変更をsetWave()関数に一本化 ver.20120318(初期版)