Blue Pill STM32 FX Projects - 簡易サウンドエフェクト・テスト回路
の各エフェクトの簡単な解説です。
ディレイ
最大遅延時間400ms。周波数特性10kHz。Blue Pill(STM32F103C8)のSRAMが20kバイトしかないので、普通に作ればこうなると思います。
アナログディレイ
最大遅延時間800ms。周波数特性1.5kHz。サブサンリングで周波数特性を落とすことで遅延時間を延ばしています。LPFにピークを付けてあるのでフィードバックを最大にすると発振します。
ディレイ(ADPCM)
最大遅延時間1590ms。周波数特性10kHz。ADPCMによるデータ圧縮を使ったディレイです。ADPCMは16ビットデータを4ビットデータへ圧縮します。最大遅延時間が4倍に伸びますが音声品質が少し悪くなります。
2タップディレイ(ADPCM)
サウンドオンサウンド用の特殊なディレイです。ピンポンディレイのモノラル版だと考えて貰うと分かり易いです。遅延を最大にしてフィードバックをゼロにするとディレイ音が2回返ってくるのが分かると思います。ADPCMを使っているので音質は少し落ちますが、最大遅延時間は1590ms(790ms x2)です。
モジュレーションディレイ
最大遅延時間800ms。周波数特性5kHz。ディレイというよりコーラス/フランジャーのロングディレイ版という方が近いのかもしれません。サブサンリングで周波数特性を落とすことで遅延時間を延ばしています。
コーラス
フランジャー
フェイザー
musicdsp.orgのphaser.cを元にしたフェイザーです。RateとDepthの外にフィードバックとフィルタの段数切り替えができます。
トレモロ
普通のトレモロです。少し違いが分かり難いのですが、モード1が正弦波、モード2が矩形波です。
リングモジュレーター
リバーブ
freeverbを元にしたリバーブで、シュレーダーのリバーブレーターの実装です。コムフィルター8個、オールパスフィルター4個で構成されています。サブサンリングで周波数特性を落とすことで遅延時間を延ばしているので周波数特性は10kHzです。
エフェクトなし
STM32F103C8の12ビットADCで2MHzサンプリングしています。50倍オーバーサンプリングでサンプリングレート40kHz(f特20kHz)。DACは抵抗合成による16ビットDual PWM DACです。良く聞くと高音域が歪っぽい音になっていますが。$2マイコンボードで外部コーデック無しですからこんなもんでしょう。これがBlue Pillが出せる最高の普通の音の限界だと思います。
エフェクトプログラムは40kHzで処理関数を呼び出していますが、全てのディレイとリバーブはサブサンプリングで処理回数を減らしています。ディレイは処理回数を1/2に、アナログディレイとリバーブは処理回数を1/4にといった感じです。そうしないと遅延メモリが不足します。コーラス、フランジャー、フェイザーなどはメモリ不足の問題が無いので、そのまま40kHzで処理しています。
9600bpsのUART通信でコントロールできます。テキストデータでプログラム/パラメーターチェンジできるので、例えばArduinoでコントロールプログラムを作って外部からコントロールするということも出来ると思います。STM32は3.3Vですが、TX/RXピンは5Vトレラントなのでそのまま接続しても大丈夫だと思います。ただ機器が分離するのでラッチアップしないような配慮は必要かと思います。
の各エフェクトの簡単な解説です。
ディレイ
最大遅延時間400ms。周波数特性10kHz。Blue Pill(STM32F103C8)のSRAMが20kバイトしかないので、普通に作ればこうなると思います。
アナログディレイ
最大遅延時間800ms。周波数特性1.5kHz。サブサンリングで周波数特性を落とすことで遅延時間を延ばしています。LPFにピークを付けてあるのでフィードバックを最大にすると発振します。
ディレイ(ADPCM)
最大遅延時間1590ms。周波数特性10kHz。ADPCMによるデータ圧縮を使ったディレイです。ADPCMは16ビットデータを4ビットデータへ圧縮します。最大遅延時間が4倍に伸びますが音声品質が少し悪くなります。
2タップディレイ(ADPCM)
サウンドオンサウンド用の特殊なディレイです。ピンポンディレイのモノラル版だと考えて貰うと分かり易いです。遅延を最大にしてフィードバックをゼロにするとディレイ音が2回返ってくるのが分かると思います。ADPCMを使っているので音質は少し落ちますが、最大遅延時間は1590ms(790ms x2)です。
モジュレーションディレイ
最大遅延時間800ms。周波数特性5kHz。ディレイというよりコーラス/フランジャーのロングディレイ版という方が近いのかもしれません。サブサンリングで周波数特性を落とすことで遅延時間を延ばしています。
コーラス
フランジャー
フェイザー
musicdsp.orgのphaser.cを元にしたフェイザーです。RateとDepthの外にフィードバックとフィルタの段数切り替えができます。
トレモロ
普通のトレモロです。少し違いが分かり難いのですが、モード1が正弦波、モード2が矩形波です。
リングモジュレーター
リバーブ
freeverbを元にしたリバーブで、シュレーダーのリバーブレーターの実装です。コムフィルター8個、オールパスフィルター4個で構成されています。サブサンリングで周波数特性を落とすことで遅延時間を延ばしているので周波数特性は10kHzです。
エフェクトなし
STM32F103C8の12ビットADCで2MHzサンプリングしています。50倍オーバーサンプリングでサンプリングレート40kHz(f特20kHz)。DACは抵抗合成による16ビットDual PWM DACです。良く聞くと高音域が歪っぽい音になっていますが。$2マイコンボードで外部コーデック無しですからこんなもんでしょう。これがBlue Pillが出せる最高の普通の音の限界だと思います。
エフェクトプログラムは40kHzで処理関数を呼び出していますが、全てのディレイとリバーブはサブサンプリングで処理回数を減らしています。ディレイは処理回数を1/2に、アナログディレイとリバーブは処理回数を1/4にといった感じです。そうしないと遅延メモリが不足します。コーラス、フランジャー、フェイザーなどはメモリ不足の問題が無いので、そのまま40kHzで処理しています。
9600bpsのUART通信でコントロールできます。テキストデータでプログラム/パラメーターチェンジできるので、例えばArduinoでコントロールプログラムを作って外部からコントロールするということも出来ると思います。STM32は3.3Vですが、TX/RXピンは5Vトレラントなのでそのまま接続しても大丈夫だと思います。ただ機器が分離するのでラッチアップしないような配慮は必要かと思います。
コメント
コメントを投稿