以前に、PICマイコンを使ったシンセサイザーやシンセ用ICを使ったアナログシンセサイザーを作ってきましたが、またも懲りずにシンセサイザーを作ってしまいました。 3年程前にデジタルフィルタのプログラミングの学習用にと、秋月電子でSTM32NucleoBoardを購入したのですが学習は全く進まずに眠らせたままでした。 ある時、Youtubeでマイコンを使ったFMシンセの製作動画を見つけました。 動画の内容が面白く自分も作ってみたいなと思い、眠っていたSTM32NucleoBoardでFMシンセのプログラム作りを始めました。 Board単体では、4オペレーター、同時6発音の音出しまで進み、続けてFM音源の音作りのためのスィッチやボリュームの操作回路の検討やそのためのプログラム設計を始めましたが、なかなかうまく纏めることが出来ませんでした。 良いアイデアも出せずFMシンセ作りがちょっと面倒くさくなり、製作方針を変更してアナログシンセをシュミレートするデジタルシンセサイザーを作ってしまったという訳です。 2.回路構成 以前に製作したアナログシンセサイザーはMS-20をモデルにしていましたが、今回は、TEISCO-100Fの機能構成をモデルにしてみました。 OSCx1, LPFx1, HPFx1, VCAx1, LFOx2, EG(AR+ASR)x2 で構成しました。 3.回路概要 3.1 OSC 波形は[WAVE SELECT]のスィッチを上に倒す毎に切り替わります。
[TUNE]を右に廻すとピッチが上がり左に廻すとピッチが下がります。 ピッチは更にEGやLFOで変調をかけることが出来ます。EGやLFOはそれぞれ2つ搭載していますので、[EGmod],[LFOmod]の各つまみが中央で変調なし、左右に廻すことでEG1やEG2、LFO1やLFO2の出力でピッチを変調できます。
正弦波を選択した時は、[FMmod]にてFM変調をかけることが出来ます。 [PORTAMENT]を右に廻すとポルタメント効果が働きます。 3.2 LFO LFOも、正弦波、鋸歯状波、パルス波から波形を選択できます。 波形は[WAVE SELECT]のスィッチを上に倒す毎に切り替わります。 発振周波数は、0から数十Hzまで[FREQ]を右に廻すと変化します。 3.3 ENVELOPE GENERATOR
EGパターンはAtackRelease、AtackRelease+KeyOff、AtackSustainReleaseの3パターンとしました。これはTEISCO-100Fをマネたものです。 アタック時間やリリース時間は[ATACK]、[RELEASE]のつまみで調整します。右に廻すと時間が長くなります。 EGのトリガは、LFO1、LFO2、KEYBORDから選択できます。中央のスィッチで切替ます。 3.4 LOW PASS FILTER [RESONANCE]にてカットオフ周波数付近のゲインを調整できます。 カットオフ周波数は、キーボードやEG,LFOの出力で変調をかけることができます。 それぞれ[KBDmod][EGmod][LFOmod]のつまみで変調度合を調整します。 3.5 HIGH PASS FILTER [RESONANCE]にてカットオフ周波数付近のゲインを調整できます。 EGやLFOによるカットオフ周波数の変調はできません。 3.6 EFECT エコーはオンまたはオフのみです。残響時間の調整などの機能は設けていません。 トレモロは、LFO1またはLFO2でかけることができます。 コーラスは、ピッチが上下にずれた2つの波形を加えてみました。[CHORUS]つまみでピッチのずれを調整します。 3.7 AMP アンプのゲイン調整を、キーボード、EG1、EG2 から選択できます。 出力の全体的な音量調整を[VOLUME]で行います。 現在選択されているオシレータやLFOの波形情報、USBのモード(HOSTまたはDEVICE)などを小さなOLEDに表示するようにしました。 現在設定している各つまみの値などをSDカードやマイコンのROMに記憶し、それを読み出す機能を設けました。 またキーボード演奏時のMIDIノート情報をSDカードに記録し、自動再生できる機能も組み込んでいます。 [SET]や[UP]、[DOWN]の3つのボタンを使ってこれらの操作を行います。 これらの付加機能については後述します。 4.USBのモード切替 シンセサイザーを演奏するためには、USBケーブルでパソコンに接続するか、USBのMIDIキーボードを接続します。 パソコンに接続した時は、MIDI音源として動作します。シーケンサーソフトなどを使って演奏できます。 USBのMIDIキーボードを接続した時は、MIDIキーボードが本装置の鍵盤となります。
パソコンとの接続には、USB-A(オス)コネクタとUSB-CコネクタのあるUSBケーブルを使用します。
MIDIキーボードの接続には、USB-A(メス)コネクタとUSB-CコネクタのあるUSB(OTG)ケーブルを介して接続します。
デバイスモード、ホストモードの切替は、接続ケーブルによって自動で切替を行います。 5.操作メニュー PLY/RECの[SET}、[UP]、[DOWN]のいずれかのボタンを押すと次のような操作メニューがOLEDに表示されます。
表示直後は[Midi Chanel Mute]が反転表示しています。[UP]や[DOWN]ボタンを押して機能を選択し[SET]で確定します。 以下、各機能の概要です。
Midi Chanel Mute
Save Setting/Load Setting
Play normal mode/Play fixed mode
Recording/Playing
Dump Pot/Key 6.回路図 全体の回路図です。ボリュームやスィッチの記載は省略しています。 ![]() 各つまみに使用したボリュームは、全て10KΩです。アンプの[VOLUME]はAタイプですが、その他は全てBタイプです。 トグルスィッチには、ON-ONの1回路2接点のものとON-OFF-ONの中点付きの1回路2接点のものを使っています。 Nucleo64ボードへの電源は、外部のACアダプタからVIN端子にDC(+6V〜+9V)を供給しています。ボード上のジャンパーピンJP5でE5Vの設定にしています。
基板上のUSBタイプC(メス)コネクタには、秋月電子のDIP化基板を使いました。VBUSへの+5Vの供給にはダイオードを入れています。 7.プロジェクトファイル1式 STM32F446RE-Nucleo64のプログラム作成は、STM32CubeIDEで行いました。ファームの書き込みには、STM32CubeProgrammerを使いました。 DigitalSynthですが、プロジェクト名は AnalogSnthになっています。
プロジェクトファイル: AnalogSynth.zip STM32 HALライブラリ等を多用してます。
USB-MIDIホストの処理usbh_MIDI.cは次のプロジェクトから借用しました。
USB-MIDIデバイスの処理usbd_midi.cは次のプロジェクトから借用しました。
low pass/high pass filter の処理アルゴリズムは、次のサイトや記事を参考にしました。
エコーの処理アルゴリズムは次の記事を参考にしました。 |