Mutable Instrumentsのモジュールの中に「Tides」というモジュールがあります。これはLFOにもエンベロープジェネレータにもオシレータにもなるというユニークなモジュールです。V1とV2があり、機能は似ていますがソフト・ハードは全く異なります。
機能はリンク先のマニュアルを見ると大体わかりますが、波形としては「右肩下がりの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でバーチャルに動かしてみることができますので、興味のある方は触ってみてください。
コメント