AcademyのKICK2というソフト音源がある。キックに特化しためずらしいシンセだ。おためし版を少しいじってみたが、操作もかんたんでいろんなKICK音を作れる。KICK音と言えば、サンプル・サウンドを切った貼ったして好み音を作るというのが普通だと思うが、KICK2はアナログモデリング音源とサンプラー音源の合わせ技で音作りする。ソフト音源としてはかなりおもしろい音源だと思います。KICK2にインスパイアされて、マイコンとアナログ回路でキック音源を作れないかな~と考えてみた。Kitを使って作ったリズムマシンはまあまあ使えはするが、MPUで波形から振幅変調、音の合成をすべて行っていて、チープな感じが拭えない。二段目の「アナログ音源」と書いてあるあたりが今回の妄想。KICK、SNR、TOMは音の作り方としては、サイン波を振幅変調するのが基本なので同じくくりにしてみた。TR-909の波形これはTR-909のKICKのサンプリング波形で、基本的にサイン波を振幅変調しているのがわかると思う。以前TR-808のKICKと比較してみたが、TR-909は周波数変調も行っているようで最初は周波数が高く、徐々に低周波数に変化している。妄想図に書いたように今回はサイン波を周波数変調したく、3つぐらい考えてみた。サイン波発生器をフルアナログでやればアナログVCO。マイコンでエンベロープを生成してやって、電圧値を出力すれば周波数変調できる。サイン波のアナログVCOは製作が大変そう。ウィーンブリッジ正弦波発振回路の実験」)を使ってアナログ的に周波数可変の正弦波生成ができそう。マイコンで波形を生成する。VCOはデジタル音源となる。後段にアナログVCAで振幅変調するのでそこそこアナログチックな音になるかもしれない。悩んでいるのは、エンベロープの波形だ。LPFを通してやればアナログチックな波形になりそうだが、2)のデジタル・ポテンショメータを使う場合だとデジタル波形がそのままエンベロープにあらわれてしまうので対策しないといけない。(もちろん3)のフル・デジタルでも)必要なエンベロープ波形(?)振幅(Amp)と周波数(Freq)を変調するので、エンベロープは2系統でTR-909の波形を見ると上記2つが必要そう。リニアな補間ではなく時定数っぽいカーブ。このようなエンベロープ波形をマイコンでリアルタイムで生成できれば、なんとなくアナログっぽいEGとして使えるかもしれない。トリガ信号リズムマシンやベースマシンを作ってあるので、これらと絡ませて遊びたい。Kickを楽曲でつかう場合はだいたい4分音符。リズムマシンにTrigger信号を出してもらってこれを拾って1音分出力できればいい。音程はシーケンサーから制御する必要はないと思うが、アナログ・シンセで言うGate信号を使うようにすれば音の長さをコントロールできそうだが。MIDI-CVコンバーターを作ればPCのDAWからでも制御できそう。リズムマシンとのミックスシンバルとう金物はとりあえずリズムマシンから出力して、アナログ的にキックマシンとMixする。キックだけ別系統で出力すれば単体で歪み系のエフェクトが掛けられると思うので、これも楽しみ。妄想は広がりますが、ひとりアジャイルが開発スタイルなので一番かんたんそうなところからやっていくつもりです。LPのDFBを使ったことがある。CreatorのFilterコンポーネントを使うとかんたんにデジタルフィルタを実装できるが、コアがCortex-M3なので浮動小数点演算がなかなかしにくい。Cortex-M0+)が出そうなので期待しています。DSP」というツールを見つけたので試してみた。コミュニティ版は非商用なら無償で使える。DevicesのBlackfinを使ったボードでデジタルフィルタを試したことがある。この本はDSPの使い方入門といった感じで、信号処理の理論的なことにはあまり触れられていないが、DSPとはいかなるもので、どうやってプログラミングすればいいのか?という取っ掛かりにはちょうどいいと思う。DSPの実行環境はなかなかないので付録基板ですぐに試せるのが大きなメリット。<追記:2017.05.31>amazonの転売はふっかけすぎですが、marutsuでは新品を定価販売されているようです。</追記>最初の方の三章を使って、移動平均、FIR(有限インパルス応答)、IIR(無限インパルス応答)の説明がなされている。DSPで3つのフィルターを試してみた。StudioでWindowsのコンソールプログラムを作り、出力をExcelでグラフ化してみた。0;}というコードで矩形波を入力してフィルタ応答を出力してみた。かんたんなLPFで実装が楽で高速。パラメータは前の値を保持しておくバッファ長のみ。横軸が時間で、縦軸が出力値。かんたんなだけあって過渡応答も線形。Filter)フィードバックなしのデジタルフィルタ。フィードバックしないので安定的で発振しない。カットオフ周波数がサンプリング周波数の1/Nに限定される。スマホのファンクションジェネレータ等、デジタル機器の矩形波出力によく似た応答だと思う。IIR(バターワース特性)フィードバックありでアナログフィルタに近い応答をする。設計をミスると発振する。Orderが4の場合の過渡応答で、4次LPFに相当すると思う。FIRに比べるとアナログ回路で見慣れた波形。Orderを1にしてみるOrderを1にした場合は、多少きれいすぎるがCRの1次LPFの過渡応答にそっくりさんだ。Github:https://github.com/ryood/DigitalFilterTest少し触っただけだが、デジタルフィルタについてほとんど知識がなくても使えた。Fuction」が何なのかわからないレベル(^q^;ゼロや極で特性を決めることもできるようだ。←これは制御工学でやったので名前だけは知ってるレベル(^q^:生成されるコードは、標準Cの他に、ARMのCMSISのライブラリを使ったものも出力できる。Form1にしてやる必要がある。count;}となっていてフィルターの演算はCMSISにまかせている。したらDSP付きのARMならDSPを使うようになってるのかもしれない?また、標準Cでもfloat型だけではなく整数型(固定小数点型)のコードも出力してくれるようだ。e^(-t/τ))みたいな関数を使って変換しようかと漠然と考えていたが、この用途にはIIRが使えるかもしれない。IIRの方が速度的に有利な気がする。積分を数式で解くのはしんどいが、コンピューターを使って数値積分すれば近似的に解けるみたいな。I/F経由で録音してみた。Driveをかけているので音はダーティな感じになっています。メモ:一応、RhythmMachineとBaseMachineはsyncさせているが、ツッコミ気味な感じがしないでもない(^q^;TS-OD1はバイパスが欲しい。Envelopeは使いづらいのでもうちょっと考えてみる。フィルターにエンベロープを掛けてみる。ファームウェアを改修してFilterのCutoffにエンベロープを掛けられるようにしてみた。構想段階では、まずはエンベロープはVCAにかけて音量を変化させることだけを考えていて、フィルターの変調は「できたらやってみる」という努力目標にしていた。アナログ的に値を設定するPOT×8パネルの中でエンベロープの初期音量を設定する「Level」ツマミはあまり使わないので、これをフィルターにエンベロープをかける量を調整する用途で使ってみることにしてみた。pinが足りなくてこれ以上はかんたんに入力デバイスを増やせない。スイッチでエンベロープをかける対象を選択するという方法も、エンベロープを設定するデバイスが「可変抵抗」なのでなかなかむずかしい。モードを切り替えると、現在のPOTの位置が別のエンベロープの値に反映されてしまう。これはMIDI入力デバイスでもよくあり、高価なMIDI入力機器はスライドボリュームにモーターが仕込まれていてシーケンサーから送った値でツマミの位置を力ずくで変更するようになっている。タッチ・センスも仕込まれていて人が触っているかどうか判別して、ツマミの位置制御の入力/出力を切り替えるようにもなっている。今回はそこまでやるつもりはないので、できる範囲で(ファームウェアもあまりいじらない方向で)考えることにした。MOD」ツマミで調節するだけ。DCA)に値を送っている部分。考えれば整数演算に落とし込めると思うが、なんと言ってもめんどくさい(@@;Cortex-M4もM0とくらべて高いわけでもないし、次にシーケンサーを作るとしたらCortex-M4の浮動小数点数演算でどこまでできるかという話になるかもしれません。POTのAD8403でデジタル的に受けているので、エンベロープ波形もデジタル的だと思う。過激なので面白いと言えば面白いですが。演算で対数カーブにするのもコンセプトとずれるし、アナログ素子を通してなんとかならないかなあ。今日はもう疲れたので次こそは音出し動画をつくります。やったことを書き留めておかないと1週間後には何をやってたか忘れてしまいますゆえ。TS-OD1でけたいつも使ってるデジカメが故障して写らなくなったのでiPadで撮影してみたが、被写界深度が浅いのか手ブレなのかちょっとボケ気味です。今回もひとまず、プラケースに収めた。回路図C5、C6は0.33uFで実験していたが、0.22uFを仕入れて試してみると0.22uFの方がToneの効きが良かった。がキンピが多いのは、ほとんどキンピしかストックしていないからで、深い意味はないです。アルミ電解は出力のACカップリング用の10uFだけオーディオ用のものにした。0.22uF、1uFはTDKのMKTにした。ハンダ面メモ:ベースマシンにかけると、TubeScreamerタイプの対称ダイオードの方が効きがいい。DelayとOverDriveが合わさると、思ってもみない音の変化がある。リズムマシンにも掛けたいからもう一個ぐらいいずれ作るかも。OS5)のSPI通信を検証してみる。ベースマシンではNucleo(mbed)のSPIでIC間の通信を行っている。UI系とシンセの制御系でNucleoボードを分けてみたが、ボード間のSPI通信でエラーが発生してしまい、分離するのをあきらめた。5がリリースされた時期も重なって何かと混乱してしまった。5を使ってNucleo同士でSPI通信させてみてみた。Header同士をジャンパ線で直結すると通信はほぼほぼうまくいく。ch2:SCK意地悪のほうはSCKとMOSIの波形がずれているように見えるが、よくわからない(@@;←MOSIは無通信時(CSがアクティブになっていない時)の状態は不定なので、クロック、信号線、CSを同時に測定しないとはっきりしない。メモ:まだわからないことだらけだが、SPI通信は配線の状況によって通信エラーが発生することはわかった。ベースマシンではNucleoからシンセに回しているSPI信号をバス・バッファICのTC74HC541を入れて補強しているが、ケーブルが長いので通信エラーが発生している可能性は大きい。頑張ればC基板でも収まりそうですが、これぐらいで妥協。前、LME49600HPAで仮におさめていたプラケースを使いまわして収納するつもりです。休みの日にはんだ付けとテスト合わせて2日はかかりそうですが、息抜きに他のことをやりつつぼちぼちやっていきます。TS-OD1の設計いつも適当な名前を付けていて後で呼び方に困っているので、今回は名前をつけてみた。その名も「TS-OD1」(^q^;TubeScreamerを基本に、ベースマシンで使いやすいように定数を多少変更。対称ダイオードと非対称ダイオードをジャンパで切り替え可。回路図D3のダイオードをピンソケットで実装し、ダイオードを挿すかジャンパ線を挿すかで歪み方を切り替える。R1、R8、C4もピンソケットで実装するつもり。R1は入力レベル調整、R8、C4でクリッピング回路の増幅率(歪み方)と周波数特性を変えられる。仮想GNDはオリジナルのように単にRで分圧しているだけ。1Vp-pのノコギリ波を入力して過渡解析した。Driveの値を変化させている。AC解析オリジナルに比べると、低域の減衰が少ない。電源部を含めて全体をつないでブレッドボードで実験してみた。ブレッドボード配線図9V電池を電源にしてみた。POTを回して出力波形を測定してみた。100%程度メモ:測定時は回路図にあるR15の10kΩとは別に、負荷抵抗として10kΩのRをつないでいる。RATとOD-1をシミュレーションしてみる。RATのDrive部シミュレーション回路図TubeScreamerに比べるとOPAMP周りの増幅回路にダイオードを入れるのではなく、コンデンサ入りの非反転増幅回路で味付けをした後に互い違いに入れたダイオードでクリッピングしているようだ。過渡解析TubeScreamerに比べると歪み方がガチガチで、おそらくこのタイプの方が効果はわかりやすいと思う。上が非反転増幅回路からの出力、下がダイオードでクリッピングしたあとの出力で、音色はクリッピングする前にほぼ決まっている。過渡解析AC解析Toneは(R1+R2)/C1の一次LPFのRの定数で決めている。出力段がJ-FETなので味つけになってるのかどうか。OD-1の出力部OD-1のDrive部は定数が若干異なりますがTubeScreamerとほとんど一緒です。シミュレーション回路図OD-1にはToneの調整ができず、出力レベルのみ。U1あたりは1倍の反転増幅回路回路に1次LPFがくっついたもの。出力段のTrは2SC732GRというタイプらしい。ScreamerのTone回路とLevel調節&バッファ回路をシミュレーションしてみた。入力はDrive回路からの出力で、4.5Vの仮想GNDを基準とした波形になる。Toneと書いてあるあたりのR9/R10のPOTでToneを調整し、Volumeと書いてあるあたりのR14/R15のPOTで出力振幅を調節。Trのエミッタフォロワで出力を強化し、C9/R19でACカップリングして、DC成分を除去して波形をGNDレベルに戻している。AC解析AC解析を見ると、Toneのツマミの位置で1kHzあたりを持ちげる効果があるようだ。過渡解析(ノコギリ波)100Hzのノコギリ波を入力して過渡解析してみた。ノコギリ波がなまる(緑色)~エッジが強調(マゼンタ)まで波形が変化している。Tone部の回路のシミュレーションToneと書いてあるあたりの回路構成は今まで見たことがないので、単体でシミュレーションしてみた。シミュレーション回路図OUT1、OUT2はPOTを左右にいっぱいに回した状態、OUT3はAC解析を見ながら中間値として値を決めた。バーチャル・ショートしているとしてノード間のインピーダンスを計算すれば、理屈でもわかりそうなもんだが、頭がこんがらがってよくわからない(^q^;こういう回路で高域を持ち上げられると覚えてしまったほうがよさそうなきがする。ここの回路でハイ上げの効果があって、元のシミュレーション回路図のR7/C5がFc≒724Hzの一次LPFなので、ハイ上げ回路と合わさって1kHzあたりを持ち上げるTone回路になっているんだと思う。ブレッドボードで実験C5,C7は手持ちの関係で0.33uFのフィルムコンにした。5V安定化電源×220kΩのPOTの手持ちがなくて、10kΩ/BのPOTを使った。ここのPOTの値は周波数特性に絡むのであんまり適当な値を使えない。一応手持ちにある50kΩと10kΩでシミュレーションしてみると、10kΩの方が良さそうだった。自作のファンクションジェネレータで100Hz/1Vp-pのノコギリ波を入力してToneのツマミを回して出力を見てみた。入力は+5Vあたりを中心に振幅、出力はGNDを中心に振幅している。ツマミを中点ぐらいツマミを右いっぱいシミュレーションと似たような出力結果になっていると思う。メモ:OPAMPを使ったアクティブ・フィルタとバッファ回路を使えば似たような特性の回路は作れそうだが、なかなかアーティスティックな回路だと思った。シミュレーター(や、ブレッドボードも?)がなかった時代に紙と鉛筆で計算してこういう回路を作っていたのだろうかと思うと感慨深いです。敬意を表して、ディスクリートでやっているところはディスクリートで組んでみようと思います。フィルターにエンベロープを掛けてみる。OS5)のSPI通信を検証してみる。RATとOD-1をシミュレーションしてみる。Screamerの入力段をシミュレーションしてみる。ノコギリ波~三角波を可変して出力するようにしてみた。