2018年08月17日

SequencerModeを新設する

IMG_8442.JPG

IMG_8432.JPG

IMG_8443.JPG

IMG_8447.JPG

IMG_8454.JPG

IMG_8459.JPG

IMG_8462.JPG

IMG_8424.JPG

IMG_8425.JPG

IMG_8420.JPG

IMG_8419.JPG

IMG_8416.JPG

IMG_8410.JPG
posted by Yasuski at 17:03| open.Theremin

2018年08月09日

OpenThereminOnTeensy@楽器の近影

IMG_8358.JPG

2回路分のバイアス電圧切り替え&レベルシフト回路を追加した時点で、バラック感が加速した。

バイアス電圧の切り替えは、波形電圧の振幅の中点をズラしてハーフウエーヴ・ディストーションを発生させる装置で、古のハーモニック・エキサイターに似た用法のエフェクターとも言える。 純デジタル的にこれをやろうとすると結構な手間が掛かってしまうので、過渡特性が複雑な歪み系回路はアナログに任せて仕舞うのが良い。

サンプリングレートの選択や、上面に配置したプッシュスイッチの中継もここで行っている。

IMG_8353.JPG

NOSで確保していた自転車用Q/Rは在庫が希少過ぎて入試が難しい。 代替部品として、コンヴェンショナルなマイク用のパーツを選定しているところ。 ツマミ類も希少なパーツなので、これも良いデザインのものを探さなければならない。

IMG_8341.JPG

この楽器にフィットするハモンドのケースは3種類あるが、アンテナのクリアランスを考えた場合、これよりも更に1サイズ上の製品をチョイスした方が良いかもしれない。

IMG_8333.JPG

マルチターンのVRと、デジタルスイッチの調達が今後の課題。 マルチターンVRは側面からアクセスするタイプの精密半固定抵抗で代用することも考えているが、その場合はノブの扱いをどうするかが問題となる。 

IMG_8340.JPG

左側のアンテナにシールドの追加を検討している。 まずは実験に拠る実証が必要だが、その際にはローディングコイルの装着も行ってみたい。

製品版では、Hiroseの6ピンコネクターの代わりに電源の供給をMicroUSB端子、信号出力を3.5mmのフォン端子で行う予定。 出来るだけレアなパーツを使わない方向で調整を行っていく。

IMG_8339.JPG

縦横比のシェイプは、このケースが一番美しいと思うが、次回は更に横長の製品を試してみたい。
posted by Yasuski at 13:20| open.Theremin

Open.Theremin@インターフェイスの現状(暫定)

Ver.5.1 (Nightly Build #19)に於ける RGB Rotary Encoder の設定(暫定)を記す。

IMG_8257.JPG

The mode select pattern
Power On:LED Upper (Green) Pitch tune
 
LED Lower (Purple) Transition set
click 1:LED Upper (Blue) Volume tune
 LED Lower (SkyBlue) Preset change
click 2:LED Upper (Red) in the 2 VOICE MODE
 
LED Lower (White) Tuning Pitch 1
in the CHORD EDIT MODE
click 3:LED Upper (Yellow) in the 3 VOICE MODE
 
LED Lower (Black) Tuning Pitch 2
in the CHORD EDIT MODE
click 4:LED Upper (Purple) in the 4 VOICE MODE
 
LED Lower (White) Tuning Pitch 3
in the CHORD EDIT MODE
click 5:LED Upper (White) in the 5 VOICE MODE
 
LED Lower (Black) Tuning Pitch 4
in the CHORD EDIT MODE
click 6:LED Upper (Black) in the CHORD EDIT MODE
 
LED Lower (Green) the volume control 1
in the OSCILLATOR EDIT MODE
click 7:LED Upper (Green) return to the 1st position
 
LED Lower (SkyBlue) the waveform selector 1
in the OSCILLATOR EDIT MODE
click 8:
LED Lower (Blue) the volume control 2
in the OSCILLATOR EDIT MODE
click 9:
LED Lower (SkyBlue) the waveform selector 2
in the OSCILLATOR EDIT MODE
click 10:
LED Lower (Red) the volume control 3
in the OSCILLATOR EDIT MODE
click 11:
LED Lower (SkyBlue) the waveform selector 3
in the OSCILLATOR EDIT MODE
click 12:
LED Lower (Purple) the volume control 4
in the OSCILLATOR EDIT MODE
click 13:
LED Lower (SkyBlue) the waveform selector 4
in the OSCILLATOR EDIT MODE
click 14:
LED Lower (Yellow) the volume control 5
in the OSCILLATOR EDIT MODE
click 15:
LED Lower (SkyBlue) the waveform selector 5
in the OSCILLATOR EDIT MODE
click 16:
LED Lower (Red) the counter mode selector
in the ARPEGGIATOR MODE
click 17:
LED Lower (Green) the speed controller
in the ARPEGGIATOR MODE
click 18:
LED Lower (Blue) the pattern selector
in the ARPEGGIATOR MODE
  
Push
Cal SW
over 1s:
Tuning Pitch antenna by 10 turn volume pot
Push
Cal SW
over 1s:
Tuning Volume antenna by 10 turn volume pot
Push
Cal SW
over 1s:
Recording the Initial Values (skip OK / Do not need
to set them if the oscillators are not warmed up)
Push
Cal SW
short time:
Return to play mode








posted by Yasuski at 08:03| open.Theremin

2018年08月08日

OpenThereminOnTeensy@オペマニュアル最新版

そろそろ仕様が固まった感があるので、何度目か忘れたがオペレーション・マニュアルっぽい映像を作った。



今回は、CSSV等の説明がややこしくなるポイントを端折っているので、出来ればOverViewと項目毎にまとめた映像を製作する必要がある。
posted by Yasuski at 20:55| AudioElectronics

Open.Theremin@波形合成部のリファイン & "File"の修正

基本的なテルミンのプログラム開発が一段落した感触なので、今週からは音色のプリセットを中心に整備を行っている。 この時点で該当するヴァージョンは5.0。

現在ROMに書き込んでいる設定を、microSDから読み出す仕組みに改変することを考えている。 発振波形の記録は既にmicroSDに移行しているので、ついでにそれをミックスする比率も外部に記憶させれば、カスタマイズを行った結果を他の楽器に簡単に反映出来るようになる。 

当初は、処理がややこしくなるCSSVではなく単純な数値の読出し機能だけを実装すれば良いので、改良のハードルは低いと思っていたが、単純作業とはいえ該当箇所に予備を含めた6ch×14アドレス=84パラメーターの読み出しを行うルーティンを記述する作業は半日仕事となった。

改良を行う過程で、SDカードの差し替えで楽器を分解する手間を思い出した。 これを省くための簡易な波形編集プログラムを製作することにした。 途中で、プログラム上のバラバラな場所に位置している波形編集データを一括して視認でき利点に気付き、データの扱いにすこし工夫をした。

WS001421.JPG

倍音構成とミックスレベルが一望できるので、合成する波形の全体像が容易に把握できるようになった。

WS001422.JPG

これも、ライブ演奏を行った時のフィードバックだが、全音声出力のステレオ化を行うことにした。 ステレオ化のメソッドは、前半のアドレスにはモノラル×2といった単純な方法を採り、後半は微妙なパンニングを行うように調整する。

コードを組んだ後に楽器で試験を行っうと、いきなりの大破綻で音がぐちゃぐちゃになっってしまった。 プログラムを動作が保証されたヴァージョンに戻しても症状は変わらない。 いくらなんでもこれはおかしいので原因を探るっていくと、サンプリングレートを設定するピンが抜けていた。 96kHzで運用など出来るわけがないので、ピンを繋ぎ直して楽器を正常な状態戻した後に再びテストを行ったが、改良の結果はあまり芳しくない。 特に、プリセット波形を選択した時にシステムが破綻して例の「スローモーション状の処理の遅れ」が発生してしまう。

やはり、全チャンネルステレオ化は無理な相談だったのか。 サンプリングレートを下げるのが一番手っ取り早い解決法なので、32kHzまでレートをダウンして運用を行ったところ全モードで破綻のない動作を確認できた。 ここにきて、サンプリングレートの手動切替装置の有効性が証明されたようなものだが、44.1kHzに特別な拘りはないので、暫くは32KHzで運用を行うことにする。

一方、波形編集項目をmicroSDに移行する計画だが、コードのコンパイルは通ったものの通電後に楽器が起動しない謎の現象が発生した。

いろいろと要素を取り替えて原因を追求してみたが、なかなか原因がハッキリしない。 試しに読み出し機構を殺した状態で起動試験を行ってみたが、プログラムの同じ場所でスタックしてしまう。 

変数だけを残して、読み出し機構を完全に取り除いた状態でも、スタックが発生する。 追加した怪し気な要素はSDカード絡みに限定されると判断して更に要素を取り除いてみたところ、なんとmicroSDにアクセスするためにFile名を登録した時点で破綻が発生することが判明した。

取り込み機構や、アレイ変数が乱立する情況が原因と思っていたら、予想外のところに地雷が埋まっていた。 多分これはバグなのだろうが、ひとまず波形の編集は外部に記録せず、コード上で行うことにした。 (暫定的にこのVerは5.2としている)

SDカードに関しては殆ど知識らしいものがない手探りの状態で導入を進めていったのだが、やはりこの周辺のコードが怪しい。 仕切りなおすために、作例を調べ直す過程で気付いたのは、”File”をバッファーと認識出来ていないことだった。

単なるバッファーとしてならば、名称は”myFile”等でも良いわけで、実際の作例もそのように記述されているものが多い。 SDカードを導入した当初に、混乱を避けるため要素ごとに異なる名称を付けていたのを、そのまま拡大させてしまったことが悔やまれる。

結局、散乱したファイル名を”sdData”という名称に統一することにしたが、”SEQ01.TXT”といった形でmicroSDに格納するファイル名をバッファーと同じ文言にしていたために作業がややこしくなった。 

WS001426.JPG

一括で書き換えを行うのが楽だが、

WS001427.JPG

それをやると書き換えてはいけないファイルパスまでが変更されてしまうのだ。該当する箇所をピックアップして検証する手間を考えて、チマチマと手動で変更を行うしかなかった。

このように、錯綜していたFileの管理状態を

WS001424.JPG

シンプルな形に修正した。

WS001423.JPG

修正の効果は絶大で、無駄に消費していたメモリーが6%も開放された。 結果フリースペースが増えたので、読み込む波形を1つ増やしている。

ちなみに、余ったメモリーはローカル変数に使用されるため、最低でも5%は余裕が無いとシステム全体が作動しないようだ。 (この時点でのヴァージョンは数字が戻って5.1となった。)

スケッチを大幅にダイエットした筈なのに、コンパイル後のプログラムのファイルサイズが5割増程に激増しているのが謎だ。

WS001425.JPG

以前体験したオプティマイザーのバグっぽい挙動も、このような使用者側の非常識に起因していたのかもしれないが、まあ普通バグはそういった場合に出てくるものなのだから仕方が無いとも言える。


posted by Yasuski at 15:11| open.Theremin

2018年08月06日

Open.Theremin@コルピッツ型発振回路について

コルピッツ型発振回路のシミュレーションを行っている。

WS001419.JPG

C1とC4のコンビネーションで発振周波数が決定する。150pFと330PpFの組み合わせが、Pitch/Volumeが干渉し難い設定だろう。 

150pFから330pF辺りのチョイスで350~440kHz辺りの周波数に落ち着くようだ。 この回路の周波数調整は少々レンジが広くなりすぎるので、ある程度は制限が必要かもしれない。 C4の値を増減することで、変化の幅を調整できるはずだ。

当初の設定では発振周波数が高すぎたのでC2/C3の値を調整して周波数を下げていく。

WS001412.JPG

WS001414.JPG

WS001415.JPG

WS001416.JPG

これは、Volume側に予定していた発振器の周波数レンジ。 C1/C4の値は220pF。 変化幅50kHzは少々広過ぎるか。

WS001417.JPG

Pitch側オシレーターの周波数レンジ。 C1/C4の値は150pF。 C2/C3は470pFとした。

WS001418.JPG

Franklin and Butler の結果はこちら。

WS001420.JPG
posted by Yasuski at 17:21| open.Theremin

2018年08月05日

Open.Theremin@Arpeggiatorにメモリー機能を実装する

Arpeggiatorの初期設定をmicroSDから読みだす機能の実装を完了した。

Arpeggiatorを停止する際に、Arpeggiatorのローカルバッファーに設定を上書きすることで、記録された状態は何度でも復活する。

初期設定は該当するパラメーターにアクセスした際に解除され、その時点のロータリーエンコーダーの値に上書きされる。 Arpeggiatorを停止するまでは、ロータリーエンコーダーのローカルバッファーがパラメーターの値として認識される。 

停止でArpeggiatorのローカルバッファーに初期値を上書き、パラメーターにアクセスする毎に、ロータリーエンコーダーのローカルバッファーの値で上書き、という動作を繰り返す。

初期値の記録は、該当するVoiceのArpeggiatorモードでクリックエンコーダー上側を長押しして行う。

運用上の混乱を避けるため、楽器立ち上げ時の初期状態は、Transition = 紫 とした。 シングルクリックで音色設定 = 水色、ダブルクリックで、Arpeggiatorのノート設定 = 青 に移行する。

30分ほど演奏してみたが、混乱することはあまりなく、実用度の高い機能を実装できたと評価している。
posted by Yasuski at 21:28| open.Theremin

Open.Theremin@オシレーターの問題を考える

検討中のアンテナのセンシングを行うベクトルの変更だが、確かに普通のテルミンと同じアンテナに手を近づけると音程が上がる方向でチューンを行うと、低域の安定度が格段に上がるようだ。

その反面、ピッチの直線性がメタメタで、Hz/V方式様の挙動を示す。 これを解決するために、アンチログ関数を掛けてみたが、処理の遅れが大きく使い物にならなかった。

解決策としてはやはり変化のカーヴを登録したWavetableを参照するのが正解と思われるが、こちらも遅れ時間を気にする必要が出てくる。

やはり正道は、まともなアナログ特性を備えたオシレーターを製作する、その一点であろう。

発振回路の方式を調査する過程でこのサイトを見つけた。

http://www.robkalmeijer.nl/.../1990/02/page32/index.html

コンパクトで素敵なシェイプの回路だが、アンテナを繋いで適度にドリフトしてくれるかどうかは判らない。 回路そのものは既にYaesu製通信機"FT101"のMODで稼働実績があるという。

ちなみに、今試験中の回路はリファレンス側とアンテナ側の発振回路の構造が若干異なるため、ドリフトの発生はある程度折り込み済ではあったが、アンテナ側のオシレーターに、運用に拠る負荷が原因と思われる周波数のドリフトが発生。 これが、温度変化の影響とは明らかに異なる挙動を示している点が大問題で、発振回路の設計を考え直さなければならない。

8月中に製作する予定の実証機のオシレーターは現行の設計で評価を行うことになるが、これはダメ出しの確認となる公算が高い。 従って、ハードウエアの製作と同時にドリフトの少なそうな発振回路の選定を行うことになるが、まずはLTSpiceを使って事前に回路の実効性と必要となる部品の定数を探ることにした。

さて、そのLTSpiceだが、いじり方を完全に忘れているのは当たり前で、数百日以上の間放ったらかしだと起動時にアプリから恨みがましく指摘された。

とりあえず回路を書き込んで行ったシミュレートの結果は「発振しない」だったが、今回は元になるモデルの作りが怪しいので、判定はペンディングとした。

WS001392.JPG

オリジナルの時定数では10MHz近辺で余裕で動いているので、やはり定数の設定がダメなのだろう。

あれこれイジった結果、7Vまで電源電圧を下げても稼動する状態に持ち込むことが出来た。

WS001393.JPG

どうも、チャージポンプ回路周りの定数がキモのようである。

WS001394.JPG

オリジナル回路の電源電圧は8Vの設定で、この状態の発振はより安定している。

WS001395.JPG

FFTの解析結果はこれで、まだまだ周波数を下げなければならない。

WS001396.JPG

Vari-Capを操作した時に発生する周波数の変動値を観測したところ、あまり芳しい結果ではなかった。

WS001399.JPG

500kHz辺りは放送との関係でマージンが取れないので、更に下の周波数を下げていく。

WS001400.JPG

部品の時定数をカットアンドトライで試しながら波形の確認を行う。

WS001401.JPG

ようやく3.3Vまで電圧を下げることが出来た。

WS001402.JPG

割とフラットに周波数が変化しているが、適当に選んだVari-Capのモデルなので結果はあくまで参考値。 
Cは47pF等、小さめの値を選んでいる。  ついでに、異なる時定数を用いて発振周波数の変動を確認する。

WS001403.JPG

高い方の周波数ではデューティーサイクルが変化するようだ、これは、出力コンデンサーのマッチングの問題と思われる。

WS001404.JPG

発振が開始される初期段階の波形。 充放電のタイミングに問題があるのか。

WS001405.JPG

これが、低い方の周波数を発進させた場合は、デューティーサイクルのバランスが理想的な状態になっていた。

次に、VariCapを0Vから3Vまで加圧した時に発生する周波数のスウィープを、異なる周波数設定下でシミュレートしてみた。

WS001406.JPG

高い周波数のほうがリニアリティーが良い感じだが、オシレーターを干渉させたゼロビート周辺で発生する可聴帯域の変化カーヴのような極々狭い領域ではまた別の挙動を示すのだろうか???

WS001407.JPG

デューティーサイクルの望ましい比率に関しては、チャージポンプ周辺及び出力バッファ前の時定数で調整する必要がある。 次に、BB914の設定をインポートしてシミュレーションを行った。

WS001408.JPG

結果はまるで違うが、よりフラットな反応が得られた。

WS001409.JPG

回路定数はこれでほぼフィックスしている。

WS001410.JPG

試しに、他の低電圧動作が保証されたVari-Capを試してみたが、これは変化幅が大きく、アンテナ接続に拠る周波数変動をカヴァーできるレンジが確認できた。

WS001411.JPG

次の試作基板では、このVar-Capを使って実験を行うことにした。
posted by Yasuski at 18:08| open.Theremin

2018年08月02日

Open.Theremin@オシレーター死亡ケースの謎

驚くべきことだが、ソフトウエア上でWavetableを読み出すだけのOscillatorが「死んでしまう」案件が発生した。

音が変だ?と感じてオシレーターの発振を個別に調べたところ、ソフトウエア的に内装している5基のうち3基からの反応がない。 分解してSDカードのデータを調べてみたが、ファイルに問題は見つからず。 接触不良の可能性もあるが、カードを抜き差ししても問題は解決しない。

コンパイラの問題なのか???

そういえば、今朝は昨日と音が違う感じがしていたのは、Oscillatorが死んでいた所為なのだろう。

その後に行った調査の結果、謎のオシレーター死亡の件はMCUの交換で決着した。 まさか、発熱&気温の上昇が凄すぎて、接着した放熱板がズレてショート事故が起こる等というシチュエーションを想像できただろうか。 頻発していたショート事故の原因はこれだった。 度重なるショートによってMCUはご逝去されたのであろう。 MCUの状態が謎だが、中途半端に死んでるのかコンパイルが通ってしまうのがやるせない。

ちなみに、データ読み出しのエラーは、コンパイラ/オプティマイザーのバグであったことが判明している。

WS001389.JPG

オプティマイザー/LTOで発生していたエラーが、Pure-Codeにスイッチすると解消されたことが判る。

IMG_8302.JPG

posted by Yasuski at 22:57| open.Theremin

2018年08月01日

Open.Theremin@ArpeggiatorにSceneMemory機能を追加する

先日行ったライヴ演奏の体験で、演奏を行っている最中にVoiceModeを変更した場合に、Arpeggiatorのスピードやフレーズ等のパラメーターが固定されている状態が予想していた以上に遣い難いことが判った。

モードを切り替えても一本調子で同じパターンが機械的に繰り返されるシチュエーションによって、Arpeggitatorから感じられる「機械っぽさ」の印象が助長されてしまうのだ。

マイナスの印象を少しでも軽減するために、VoiceMode毎にそれぞれの設定が切り替わるようにインターフェイスを変更した。 構造は単純で、Arpeggiatorを構成しているコードのローカルに条件分岐によって切り替わるバッファーを組み込むだけ。 VoiceModeが切り替わるのと連動して、Arpeggiatorの設定も切り替わっていく。

現時点ではmicroSDに設定を記憶させる機能を追加していないために、事前にパラメーターを仕込むことが必要だが、これも使いにくいことが判明した時点で徐々に改善を行っていく予定。



試験運転を終えた後の印象としては、パラメーターがややこしくなる分だけ混乱を回避するためにメモリー機能が必要な感触だった。 一番にアクセスするのは緑=スピードなので、ここに読み込み機能を盛り込むか。

ついでに、Voice毎に音色も切り替えたほうが良いと感じたが、こちらはメモリーが必須。

追記:

その後、ヴォイスモードに連動したプリセットの記憶方法に関して試行錯誤を行っていたのだが、何故かメモリーした値の表示が狂ってしまう謎のバグが発生。外部に同じものを移植するとまともに動くという気味の悪い状況で、結局メモリー機能の実装はペンディングとなってしまった。

WS001388.JPG

モードによってローカルの設定を切り替える機能の実装は成功しているので、本番前にパラメーターを仕込めばよいのだが、電源が落ちれば終わる原始的な設定は出来れば避けたいところ。

が、ロータリーエンコーダーが絡む機能は、何故か基本設定値の扱いが難しく、なかなか上手く動作してくれない。

多分、「クリックエンコーダー」周辺の機能そのものに問題があるのだが、ルーティン内に仕込んでいる出力リミッターを外部に出し、エンコーダーからの出力はデータの増減のみに限定するのが正道っぽい。

ついでに、コンパイル時の設定をPure-Codeなるものに変更したところ、

IMG_8302.JPG

コード領域の仕様サイズが7%ほどアップしてしまった。 面白いのは、荒れていたVolumeアンテナ側の挙動がマシになったと感じたことで、(明らかに音量が下がっている)原因は謎だがひとまずこの仕様を運用を続けてみることにした。
posted by Yasuski at 23:37| open.Theremin