2018年07月03日

Open.Theremin@OverloadモードとBIAS電圧について

今日は涼しくなった夕方からレベル調整システムの評価を行っていたが、修正したBIAS電圧の影響が思いの外大きく、Overloadモードの持ち味がかなり薄れてしまう弊害が発覚した。

これは、本来ならば間違いであったBIAS電圧をグランド電位に設定するという、アナログ的な手当を知らず知らずに行っていたために発生してた行幸だったが、修正を行った結果これによって得られていた効果が消失してしまった。

間違いであっても効果的な仕掛けは復活させねばならないが、そのために他の機能が犠牲になるのも考えもので、ここはBIAS電圧の切り替えを行う機構を追加するしか無い。

BIASの切り替えにはDPSTが必要で、この機能を持ったMAXIM製のICは確か在庫があるはず。 で、ストックを掘り起こしたところ、MAX4603というアナログスイッチを発掘した。

WS001341.JPG

4個のSPSTで構成されているスイッチはDPSTとして使用出来るように極性の違うものでペアを組まれているが、そのうち、一組は共通端子を設定せず個別にVRTのグランドラインの断続に使用する。 残りの2個はDPSTとして、Overload出力にアサインしているDAC2のBIAS電圧を切り替える。

少々ややっこしい回路の構成となったが、予め20pのICソケットを基板に展開していたことが功を奏して、素子の積み替えはスムーズに進んだ。 ソフトウエア側で、制御信号の極性を反転する必要があったが、概ねスムーズに転換は進んだ。

実験の結果は上々で、元の暴力的なサウンドが帰ってきた。



将来的には、BIAS電圧を可変して音質の変化を確認する機能を搭載する予定。

posted by Yasuski at 21:06| open.Theremin

Open.Theremin@出力レベル調整回路を実装する

アッテネーターのグランド電位を断続することで、ラフにレベル調整を行う機構をバックパネルに追加した。

IMG_8121.JPG

スイッチはMCUから制御信号のラインを完全にアイソレート出来るPhotoMosRelayを使用している。 MCUから送信されたフラグによって、アッテネーターのグランド側のオン/オフを行う仕組み。アッテネーターが介在した分だけ出力インピーダンスが上がることを避けるために、終段にオペアンプを配置した。

新たに追加した部品は、PhotoMosRelay/AQV203 ✕2、OpAmp/OPA2134、多回転トリマVR、3.3V電源IC、若干数の抵抗&コンデンサで、PhotoMosRelayとOpAmpの電源ラインは3.3V/5Vに分離している。

で、回路を組み上げて実験したところ、明らかに音が歪んでいる。

原因はバッファー入力のバイアス設定をグランド電位にした為と思われるが、既に入力する信号が歪んでいるOverload系は問題はなくても本線がこれではダメなので、セオリー通り1/2VCCのバイアスラインに接続し直して、歪の消滅を確認できた。

次に、肝心の音量の自動調整装置の実験に臨んだ。 ひとまず、ラフな減衰レベルを設定して音源の切り替えを行ってみたところ、音量差が激しいプリセットにアクセスしてもいきなり爆音状態に陥ることは無く、まともに音量調整機構が働いているようだ。 また、Overload系のラインに通常レベルの信号をアサインした時にアッテネーターをオフる回路だが、該当するプリセットにアクセスした場合に音量差が生じることは無く、正常に動作していた。

オプション扱いのDAC3用にも予備のバッファー回路をリザーブしておいた。 いまのところアッテネーターと出力コンデンサを実装してはいないが、レベル調整が必要になったら即応できる状態にしてある。

大改装前に接続ラインの確認と、部品の仮配置を行っているところ。

IMG_8120.JPG
posted by Yasuski at 07:50| open.Theremin

2018年07月02日

Open.Theremin@Wavetableの仕様変更を行う

出力波形を観る限り、無用に再生レートをイジった結果とはいえあまりにもガタガタな低域や、高い周波数帯で発生する不快なビート等、現状の音声出力のクオリティーはイマイチ感が否めない。

vlcsnap-2018-06-19-18h42m35s995.png

そこで思い付いたのはWavetableのデータ長を二倍に延伸することで、これならデータが疎になる状態を少しでもマシにすることが出来る。 現状2048段階のデータを4096段階にスケールアップするのだ。

また、Sin波とCos波を合成することで、より複雑な波形を生成できそうなので、この機会に2種類のサイン波を登録してみることにした。

で、実際に運用を行ってみたところ、何故かSin波の再生時に盛大なノイズが発生してしまう。 不思議な事にCos波の場合は妙なノイズは確認されない。 原因は定かではないがひとまずSin波を全廃してCos波を12種類、三角波と鋸波、それとExpなインパルスの3種類の合計15種類に登録波形をダイエットした。

実験の結果、低域/高域共に音質がスムーズに好変したので、データ長の12bit化は正解だった。 

同時に今回は出力の純ステレオ化を行ってみた。 現状でもデータ的には一定の時間を専有しつつ、出力が行われていなかっただけなので、信号を読みだすルーティンにDACへのラインを追加して実験を行った。

ここで発生する問題は、OverloadMode専用に誂えた外部DACのアッテネーターと、信号レベルのミスマッチで、同様に本来Overload出力を受け付けない方の回線にこれを入力した場合も同様に問題が発生する。 これを回避するには、アッテネーターのグランド側をPhotoMosRelayでコントロールして簡易なレベルシフトを行う回路を追加する方法がある。 この機能によって、レベルのミスマッチをある程度は回避できそうだ。 実際に回路を製作するには至っていないが、下準備として条件分岐で外部にフラグを出力する回線を確保してある。

image1.jpeg

実験の結果、なるほどステレオ化は面白いのだが、事前に効果的な出音を研究して仕込みを行う必要を感じさせられた。

posted by Yasuski at 03:37| open.Theremin

2018年06月30日

Open.Theremin@5voiceを選択する

今日は家人が留守だったので、一日中テルミンのプログラミングと演奏実験を繰り返していたのだが、ひとまず6voice版と5voice版のほぼマスター版を完成させることが出来た。

結論として、現在採用しているMCUの処理能力の限界から、adatを使用しない場合も、5voiceがバランス的に最良な選択とした。 

WS001336.JPG

また、処理能力とは関係なく、Overload出力時のバランスが6voiceでは崩れてしまうことも判った。

適当にでっち上げていた非線形増幅度可変システムは、

WS001337.JPG

Overloadモード時に欠かせない機能と判明したため、今後は絶対に保持すべき項目に昇格した。

今回省略したのはオシレーターの出力波形に噛ませていたLPFだが、

WS001339.JPG

これを外した場合に明白な音質の変化を認められなかった。

ご利益の度合いは不明だが、今回はプログラム全般にわたって可能な限り浮動小数点ユニットを導入している。

他に行った改良のポイントはインターフェイスの大幅な変更で、使用頻度が極端に少ない下側のRGBロータリーエンコーダーに上側にアサインしていた動的な機能を割振ることにした。

WS001334.JPG

変更の方針はライヴにおける運用性の向上で、上側に割り振っていた機能のうち、Pitch/Volumeの修正ポットと和声モードの切り替えを残し、他は下側に移行した。 これは、和音の構成を変更する際に発生するラグを排除するための選択でもある。 

WS001335.JPG

まず、波形選択を楽器の立ち上がりで表示されるページ1に割振った。 使わなくなった6voice目のオシレーターに関する項目は削除し、代わりにPitchのファインチューンとTransitionコントロールを項目の末尾に追加した。切り替える項目は17種類に増えたが、使用頻度の高い3項目は直近に配置している。

具体的には上が7項目

PitchVolume →2voice →3voice →4voice →5voice →ChordEdit 

を循環し、下方は

Waveselect →Pitch01 →Pitch02 →Pitch03  →Pitch04 →Osc1Vol →OSC1 waveform →OSC2 Vol →OSC2 waveform →OSC3Vol →OSC3 waveform →OSC4vol →OSC4 waveform →OSC5 vol →OSC5 waveform →Pitch Tune →Transition

を循環する。

初見なので未だ運用に混乱が生じているが、和音モード選択時にTransitionの調整と波形選択の直アサインが可能になったために、操作の自由度が上がったことが改良の成果といえるだろう。
posted by Yasuski at 00:53| open.Theremin

2018年06月28日

Open.Theremin@シールドスリーヴ付きアンテナ2作目

予備のピッチ・アンテナにシールド用のスリーヴを取り付けた。

IMG_8115.JPG

このアンテナは前作とはシェイプが違うために改造には大幅な加工が必要で、パイプを挿入するために一度アンテナを曲げ戻す必要があった。 

今回採用したシールドスリーヴ用のアルミパイプは径が大きく、前回試作したアンテナよりもクリアランスが稼げる筈だ。 また、パイプの内径が偶々GFRP製のパイプとマッチしていたお陰でスリーヴには保持材が不要で、基台の部分だけでパイプ全体を固定することが出来た。

アンテナ&スリーヴ間に発生する静電容量は実験してみないと判らないが、パイプの径が大きくなった分前回よりも影響を抑えられたかもしれない。

ローディングコイル入りのスリーヴは次回に製作する予定。 アンテナ・ロッドには取り扱いが容易な真鍮を使うことにする。 スリーヴの両端にはGFRPのガイシを配置し、そこにSMAコネクターとM2.6の接続ポートを取り付ける。 コイルを封入するアルマイト仕上げのパイプは絶縁できているので、あまり細かいことは気にせずに製作出来そうだ。 
posted by Yasuski at 21:14| open.Theremin

2018年06月27日

Open.Theremin@DACに供給するSCKのマージンをNOPで稼ぐ

新設したDACの動作試験を兼ねた記録映像。 左手の動きに連れて発生する音量のピークの配分を調整している。



SCKが立ち上がる前後にNOPを4セット×2噛ませることで、以前設定していたNOP2セット×2の時よりも動作を安定させることが出来た。 とはいえ、依然として出力に細かなノイズが乗っているのが残念。

そろそろ楽器の運用に慣れてきたおかげで、ロックの定石っぽい雰囲気の音作りが出来るようになった。 

が、癖の強い音なので予め使用する局面を練っておかないとダメだろう。
posted by Yasuski at 20:35| open.Theremin

Open.Theremin@また新たなバグが発覚する。

アンテナのセンシングが激遅くなるバグがコード編集モードにも波及してきたので、本格的に原因を探ることにした。

まず、5ヴォイスのモードでフリーズに近い状態にセンシングスピードが落ちる問題は、円環カウンタの数値を限定するだけでは上手くいかず、

WS001332.JPG

Wavetable読み出しポインターの制御を行っているコードをcli(); sei();で囲むことでようやく解決できた。

WS001328.JPG

が、コード編集モードでTransitionコントロールモードにアクセスした途端に速度が落ちる現象が発覚。 こちらは処理の遅れが重篤で、もはやエフェクトとはいえない状態になった。 

この問題に対処するために、割り込み禁止ポイントの増設やDACに送るSCKのタイミングを合わせるために挿入したNOPを減らす等いろいろと手を打ってみたものの

WS001331.JPG

情況は全く改善せず、これはMCUの処理能力の限界に達している感があった。 そこで、新たに追加したDACの処理を行わない方向に修正を行ったところ、問題は解決した。

ただ、せっかく搭載したDACを使わないのは惜しい。 動作が可能そうな移設場所を検討した結果、アンテナやロータリーエンコーダのセンシングを行っているループの先頭で処理を行うことにした。

WS001333.JPG

Loop内の処理が状況によって重複してしまう可能性を考慮して、DACのデータ処理ルーチンの終了後に読み出し完了のフラグを立ててタイミングを制御している。 フラグの解消は、サンプルクロックの立ち上がり後、メインのDACにデータが送信された後に行われる。

WS001330.JPG

DACへのデータ送信に要する時間は、NOPによるクロックの遅延によって左右されるが、実験の結果、安定した状態でデータを送るには3NOP以上のマージンが必要と判明している。

WS001327.JPG

残念ながら3rdDACの音質はイマイチで、実用に耐えうるかどうかギリギリの線のクオリティーだったが、ひとまずこれで3ch出力をバグ無しで実行できる体制を整えることが出来た。
posted by Yasuski at 15:12| open.Theremin

Open.Theremin@3個目のDAC&妙なバグが出た

サブCH出力用の3個目のDACを拡張基板に仕込んだ後、ケースに実装した。

IMG_8105.JPG

MAX5541のスピードが心配だったが、最低限のNOP命令でデータ取り込みのタイミングが合わせられているようだ。

IMG_8102.JPG

接続は5V電源とGND、アナログ出力、デジタル入力3線の計6本で行っている。

IMG_8103.JPG

配線はブレッドボード用のピンを使った。

IMG_8106.JPG

この状態は仮で、DACの接続を思い切り間違えている(写真)。 実験用とはいえ、このようなスパゲッティー状態は観るにしのびない。

配線の修正後にDACは難なく動いたが、5 Voice Modeのアドレス境界で妙なバグが出てきた。



アンテナのセンシングが遅れる気持ち悪くて面白い効果なのだけど、ライヴでいきなりこの状態にハマるのが怖い。 多分、原因はエンコーダーでドライヴするループカウンタの計数ミスで、妙なループにハマった結果と思われる。 幸いなことにアドレスを変更すればバギーな状態を脱出できる。 エンコーダーの循環数の管理をきちんと行えばバグを回避できる可能性が高いので、ひとまずは該当部周辺の手当を行ってみよう。

DACはMCU側のボトルネックが心配だったが、すんなりと音が出た。 現状は素直にOSC1のみのモノラル信号を再生しているが、これはadatに送信するデータの大元になるものを16bitにダウンサイジングした信号。 エンヴェロープにちゃんとピークが2つ出来ていることから、Transitionの個別制御が上手くいっている感触だ。
posted by Yasuski at 02:37| open.Theremin

2018年06月25日

Open.Theremin@操作マニュアルっぽい映像を製作する

IMG_8094.JPG













posted by Yasuski at 20:27| open.Theremin

2018年06月24日

死亡したTeensyを復活させる方法

USBによる接続が不可能となったTeensyを復活させる方法を見つけたので備忘録を書いておく。

原因は定かではないが、一種のシャックリのようなものと思えば良いらしく、接続が絶たれただけでMCU自体は死亡していないようだ。

対処法はMAC系のプラットフォームを使用する場合が簡単なようだ。 まずはArduinoを起動して、なんでも良いからスケッチのコンパイルを行い、Teensyの書き込みソフトを起動する。 次に、故障したMCUのリセットボタンを押しながらUSB端子を接続すると、あら不思議、何故かデバイスの認識が行われ始める。

これで、死んだと思って放置していたTeensy3.5と3.6の2個ずつ、計4つのデバイスを復活できた。 ここで断捨離をやらかしていたらこの発見はなかったわけで、とにかくゴミと思われるものであってもある程度は保持する必要があるのだな、、、と痛感させられた次第。
posted by Yasuski at 01:07| AudioElectronics