製作メモ:SPRESENSEで楽器のクラス設計

ssprocLib のFilterクラス

  • ssprocLib のクラスは独特の思想 → 詳しくはこちら
  • フィルタをつなげて音を作る。
  • 入力段(マイク入力やボタンなど) は Src とよび、出力段(スピーカ出力) は Sink とよぶ。
  • Src も Sink も Filter の派生クラスである。
  • Filter (全てのフィルタの基底) → NullFilter (次の段の無いフィルタ (=Sink) の基底) → BaseFilter (次の段の有るフィルタ (Srcも含む) の基底)
  • BaseFilterは、次の段のフィルタをメンバに持ち、コンストラクタで指定する。
  • つまり、Sink は NullFilter の派生クラスとして実装し、Srcやその他のフィルタは BaseFilter の派生クラスとして実装する。

ssprocLib の思想に沿って設計すべき?

  • ssprocLib と AudioClass を併用したら実行時エラーが発生した。
Memory pool initilization error.
Audiarm_hardfault: Hard Fault escalation:
arm_hardfault: PANIC!!! Hard Fault!:
arm_hardfault:  IRQ: 3 regs: 0xd07cd78
arm_hardfault:  BASEPRI: 000000e0 PRIMASK: 00000000 IPSR: 00000003 CONTROL: 00000000
arm_hardfault:  CFSR: 00008200 HFSR: 40000000 DFSR: 00000000 BFAR: 0007ce74 AFSR: 00000000
arm_hardfault: Hard Fault Reason:
_assert: Current Version: NuttX  12.3.0 SDK3.2.0-8e5b871 Feb  9 2024 14:56:53 arm
_assert: Assertion failed panic: at file: :0 task: spresense_main 0xd0040b1
(以下略)
  • 原因は不明。この手のエラーは深追いしたくない。
  • AudioClass は使わず、ssprocLib の思想に沿った設計をすべきか。