前回までで、NuVCOは11 Voiceまで動作するようになり、Sine生成の処理時間についてもCycle Counterで測定し、LUT化まで行いました。
基本的なVCOを動かすこと以外にも、いろいろ試してみたいことが増えてきました。
例えば、現在考えているものには次のようなものがあります。
Detune Range
Detuneの可変域を設定する。Voice Spread
Detuneの広がり方を設定する。Pair Morph
Sine → Triangle → Square → Sawtoothという一続きのMorphだけでなく、Sine → Square、Triangle → Sawtoothなど、2つの波形を選んでMorphする。Voiceの初期phase
複数Voiceを同じphaseから始めるか、Voiceごとにphaseをずらすかなどを設定する。波形の重なり方が変わるので、音の立ち上がりや厚みなどに違いが出る可能性がある。Stereo / Pan
MorphingやDetuneしたVoiceをL/Rへ振り分け、Stereoの広がりを持たせる。Sub
1 Octave下の波形を生成してMixする。
これらは私にとって未知の世界です。
名前や考え方は分かっていても、NuVCOで実際に音を出したときにどういう効果になるのかは、試してみないと分かりません。
最初のNuVCOの操作系
最初のNuVCOの設計では、
Tune POT
Wave POT
Detune POT
USER1 SW
USER2 SW
を使っていました。
Tune POTは基準周波数、Wave POTはSine → Triangle → Square → SawtoothのMorph、Detune POTは複数VoiceのDetune量を操作します。
USER1 SWではVoice数を、
1 / 2 / 3 / 5 / 7 / 9 / 11
と切り替え、USER2 SWではTune Rangeを切り替えるようにしました。
この方法で機能を増やしていく場合、機能ごとにPOTやSWを追加する必要があります。
部品や配線が増えるだけでなく、Nucleo-G431KB側もADCやGPIOとして自由に使えるpinには限りがあります。
UI用のI2Cを追加したときにも、pinの制約が実際に出てきました。
当初はI2C2を、
SCL: PA9
SDA: PF0
で使う予定でした。
ところがPF0が実機でうまく使えなかったため、SDAをPA8へ変更しました。
PA8は、それまでUSER1 SWのVoice数切り替えに割り当てていたpinです。
そのためI2Cを組み込んだ直後は、USER1 SWによるVoice数切り替えが使えなくなりました。
今はVoice切り替えをMCP23017側へ移しています。
このように、POTやSWを単純に増やしていく方法では、部品数だけでなくMCUのpin資源にも制約があります。
実験用UIを作る
まだNuVCOに搭載する音作り機能は絞れていません。
そこで、最終形のUIを決める前に、いろいろな機能を試すための実験用UIを用意しました。
現在の状態を確認するためにOLEDを使い、必要な設定値も表示します。
値の変更にはRotary Encoderを使います。
1個のPOTで複数のパラメータを切り替えて操作する方法もありますが、POTには物理的な位置があります。
例えば、あるパラメータを大きな値に設定してPOTが右側にある状態で別のパラメータへ切り替えると、POTの位置と新しいパラメータの値が一致しません。
Rotary Encoderなら絶対的な位置を持たないので、表示している現在値を基準に増減できます。
OLEDで現在の項目と値を表示し、Encoderで変更する方式なら、操作するパラメータが増えても主にFirmware側の変更で対応できます。
さらにMCP23017を使い、SwitchやLEDも追加できるようにしています。
NuVCO UI Expander
NuVCOの音作りを試すために作ったUI Expander Proto-A。OLED、Rotary Encoder、MCP23017、5個のSwitchとLEDを搭載しています。
現在は、OLED、Rotary Encoder、MCP23017、Switch、LEDを NuVCO UI Expander Proto-A にまとめています。
NuVCO本体とはAdapter基板を介して接続します。
このUIは最終形ではなく、Detune RangeやVoice Spreadなど、これから試してみたい機能を操作するための実験用です。
機能を増やしても、すぐに専用POTや専用SWを追加する必要はなく、Firmware上で項目を追加し、OLEDで状態を確認しながらEncoderやSwitchで操作できます。
次回は、この実験用UIで使っているOLED、Rotary Encoder、MCP23017をどのように試し、NuVCOへ組み込んでいったかを書こうと思います。

0 件のコメント:
コメントを投稿