= [[ProjectName]] [[ProjectDescription]] ブログ(コメントなど): [http://kamide.b.sourceforge.jp/pwmdac_synth_lib/ PWMDAC_Synthライブラリ] 最近の Arduino では tone() 関数が搭載され、単音の矩形波を簡単に出せるようになりました。 しかし、この方法では和音を出したり、矩形波以外の波形を出すのは困難です。 この[[ProjectName]]を使えば6重和音まで出せて、しかも矩形波だけでなく 正弦波、三角波、のこぎり波、ユーザー定義の波形も出すことができ、 さらにADSRエンベロープによる減衰で「ポーン」という感じの音色にすることもできます。 == どうやって実現してるの? 人間の可聴周波数は 20Hz ~ 20kHz 程度ですが、 ArduinoのPWM周波数はデフォルトで約490Hzになっているため、 そのままでは 1kHz 前後の高い音を乗せることができません。 高い音を乗せるためにはPWM周波数をもっと上げる必要がありますが、 そのためにはAVRマイコンのレジスタを設定し直す必要があります。 このライブラリでは、AVRマイコンのレジスタを設定し直して PWM周波数を最大(30kHz以上すなわち超音波の領域)に設定し、 高い可聴周波数の音も乗せられるようにします。 音は、割り込みサービスルーチン ISR() でプログラムメモリ(PROGMEM)上の波形テーブルから その瞬間の値を読み取ってPWMのパルス幅を計算し、正確なタイミングで出力し続けることで、 正確な音階の音として聞こえるようにします。 同時発音数だけ値を足し算すれば、和音を出すこともできます。 ただし処理時間にそれほど余裕がないため、処理時間のかかる命令を極力さけて最適化したうえで、 限られた同時発音数で発音させることになります。 == MIDI音源として使う [http://playground.arduino.cc/Main/MIDILibrary Arduino用MIDI ライブラリ]と組み合わせることで簡易MIDI音源を作ることも可能です。 付属のサンプルプログラムに実装例がありますので参照してください。 なお、MIDI入出力の回路については[/users/kamide/pf/CAmiDion CAmiDion]の回路図を参照してください。 == 関数の使い方 中に入っている README.txt を参照してください。関数定義の詳細については PWMDAC_Synth.h もあわせて参照してください。 == 今後修正するかも知れない?項目 あくまで妄想ですが…こんな機能があったらいいかもなぁ…って思ったもの。気力があったら機能追加するかも? * プログラムチェンジ対応(波形とエンベロープの組み合わせでどこまでできるのか?) * その他コントロールチェンジ対応(どこまでできるのか?) [[RepositoryInfo]] == リリースファイル (Release Files) Gitリポジトリ、または作業部屋にあるzipファイルを参照。 [[ReleaseList]] == 最近のコミット (Recent Commits) [[RecentCommit]] [[RepositoryReadme]] == 最近更新されたチケット (Latest updated Tickets) [[RecentTickets(limit=5)]] [[RecentBlog]]