Mutable Instruments Tidesの調査

Mutable Instrumentsのモジュールの中に「Tides」というモジュールがあります。これはLFOにもエンベロープジェネレータにもオシレータにもなるというユニークなモジュールです。V1V2があり、機能は似ていますがソフト・ハードは全く異なります。

機能はリンク先のマニュアルを見ると大体わかりますが、波形としては「右肩下がりのSAW~三角波~右肩上がりのSAW」の変化、LPFを使った「サイン波~三角波」およびウエーブフォールディングによる倍音成分の付加、それにウェーブシェイパによる波形変化が可能です。

先日NTS-1用のLFOを作りましたが、TidesがNTS-1に移植出来たらもっと応用が広がるかなと思い、v1/v2の実装を調べてみました。結論としてはサイズ的に移植は無理そうでしたが、調べた結果をまとめておきます。

まず、実際にビルドしてみました。

~/logue-sdk/platform/nts-1_mkii/eurorack_nts-1_mkii/eurorack$ make -f tides/makefile TOOLCHAIN_PATH=~/logue-sdk/tools/gcc/gcc-arm-none-eabi-10.3-2021.10/
~/logue-sdk/platform/nts-1_mkii/eurorack_nts-1_mkii/eurorack$ size build/tides/tides.elf 
   text	   data	    bss	    dec	    hex	filename
  69464	   1280	   1528	  72272	  11a50	build/tides/tides.elf
~/logue-sdk/platform/nts-1_mkii/eurorack_nts-1_mkii/eurorack$ make -f tides2/makefile TOOLCHAIN_PATH=~/logue-sdk/tools/gcc/gcc-arm-none-eabi-10.3-2021.10/
~/logue-sdk/platform/nts-1_mkii/eurorack_nts-1_mkii/eurorack$ size build/tides2/tides2.elf 
   text	   data	    bss	    dec	    hex	filename
  98336	   1600	   2912	 102848	  191c0	build/tides2/tides2.elf

初代が72KB、二代目は103KBということで、いろいろ削らないとdrumlogue以外は難しそうです。が、実際に移植する意味があるのはNTS-1・NTS-1 mkIIだけではないかと思いますので、この時点で移植は無理かなという結論になりました。

サイズが大きくなっているのは何が原因かというと、ウエーブテーブルのようです。

$ objdump -t tides.elf|grep wav
0800a2f0 g     O .text	00001002 _ZN5tides16wav_bump_controlE
08009aec g     O .text	00000802 _ZN5tides16wav_bipolar_foldE
0800fb08 g     O .text	00001002 _ZN5tides20wav_bump_exp_controlE
08007960 g     O .text	00001002 _ZN5tides13wav_sin_audioE
08011d14 g     O .text	00001002 _ZN5tides21wav_inverse_sin_audioE
0800c2f8 g     O .text	00001002 _ZN5tides17wav_spiky_controlE
0800d2fc g     O .text	00000802 _ZN5tides17wav_unipolar_foldE
0800eb04 g     O .text	00001002 _ZN5tides18wav_normal_controlE
20000000 g     O .data	00000038 _ZN5tides14waveform_tableE
08013d1c g     O .text	00001002 _ZN5tides21wav_spiky_exp_controlE
0800b2f4 g     O .text	00001002 _ZN5tides16wav_linear_audioE
08008964 g     O .text	00001002 _ZN5tides13wav_tan_audioE
0800db00 g     O .text	00001002 _ZN5tides18wav_linear_controlE
08012d18 g     O .text	00001002 _ZN5tides21wav_inverse_tan_audioE
08010b0c g     O .text	00001002 _ZN5tides20wav_reversed_controlE

こんな感じで、4KBくらいのウエーブテーブルが10個以上入っています。TidesのMCUはBraidsと同じSTM32F103CBT6@72MHzで、FPUは無いので全部16bit固定小数点のウエーブテーブルで処理しているんですね。機能が多い分、ウエーブテーブルの数も多いです。

ではv2はどうかというと、v2もウエーブテーブルが占有する領域は多いです。

$ objdump -t tides2.elf|grep lut
0801f7f0 g     O .text	00000404 _ZN6stmlib19lut_pitch_ratio_lowE
080162a8 g     O .text	00006018 _ZN5tides13lut_wavetableE
0801d2d0 g     O .text	00001010 _ZN5tides17lut_unipolar_foldE
0801e2e0 g     O .text	00001404 _ZN5tides8lut_sineE
0801fbf4 g     O .text	00000404 _ZN6stmlib20lut_pitch_ratio_highE
0801c2c0 g     O .text	00001010 _ZN5tides16lut_bipolar_foldE

初代よりもテーブルの個数は少ないですが、lut_wavetableが24KBもあります。他のも合わせるとやはり40KBくらいあるようです。Tides2のMCUはSTM32F373CCT6@72MHzですが、FPUがあるのですが演算量を省くためか、lut_wavetableはTides同様に16bit固定小数点で、それ以外ではいくつかfloat型でのテーブルを持っています。

というわけで、残念ながらTidesをlogue SDK上に持ってくるのは(そのままでは)ちょっと無理そうでしたが、Tidesは面白いモジュールですし、VCV Rackでバーチャルに動かしてみることができますので、興味のある方は触ってみてください。

コメント