2018年08月17日

SequencerModeを新設する

使い勝手が悪くオマケ機能の印象が強かったSequencerModeを、独立したパラメーターとしてリファインした。

IMG_8442.JPG

これまでは、Sequenceの再生を2VoiceModeの3アドレス分に割り振っていた=再生できるSequenceは3つまでだったが、今回の拡張で再生数を8 Sequenceまで増やすことになった。

IMG_8432.JPG

ただし、このまま再生chを追加するとMCUのメモリー使用量が限界を超えてしまうので、1Sequence辺りのStep数を1024に減らし、8ch分のエントリーを可能とした。

IMG_8443.JPG

RGB LEDの単純なオンオフに拠る順列組み合わせで発色可能な数は消灯を含めた8種類で、Sequencerの項目を増やすには新たな色味の設定が必要となる。 今回はRとGの調合を工夫して中間色を発色させることにした。 追加するパーツは電流制限用の抵抗と電流の逆流防止用のダイオードで、ダイオードには極力順方向電圧が低いものをチョイスしている。

IMG_8447.JPG

Rは最も効率が良い光源なので、同じ電流を流した場合どうしても輝度が勝ってしまう。 そのため、Rには電流を調整するための抵抗をダイオードとシリーズに配置している。 一方、効率の悪いG/Bはダイオードを2個直列に挿入する方法で電圧を調整した。 また光源によって使用するダイオードを変更して、色味の調整を行っている。

IMG_8454.JPG

SequencerModeには独自のプリセット項目、「再生スピード」と「波形選択」を新設している。 このうち、「再生スピード」はRGBロータリーエンコーダー下側のArpeggiator/Patternの前にアサインした。 また、VolumeAntennaによって再生スピードのコントロールが開始されるスレッショルドはArpeggiatorよりも若干ではあるが近接域で発動するように調整している。

IMG_8459.JPG

SequencerModeのエントリーは、RGBロータリーエンコーダー上側の最終項目にアサインしている。 色味はオレンジ。 下のLEDはEditModeを表すヴァイオレット。 こちらもRとBの比率を調整した中間色。

IMG_8462.JPG

今回の改装では、WaveFormSelectorをEdit可能なアドレスにアサインした時に発色がSkyBlueからVioletに切り替わる機構を追加している。 以前から編集モードのアサインが判り辛かったが、これで混乱なくモードの確認を行えるようになった。

IMG_8424.JPG

上側のRGBロータリーエンコーダーでは、消灯に色みをアサインしていたChordhEditModeを編集可能なパラメーターを表現するLavenderに変更しているが、輝度の個体差からMagentaになってしまった。 使用しているRGBロータリーエンコーダーは個体差が激しそうなので、事前にLEDの順方向電圧をチェックしたほうが良いだろう。

IMG_8425.JPG

例の如く、バックパネル裏の配線は混乱の極みな状態だが、今回追加したパーツはRGBロータリーエンコーダーのLEDに直接配線した4芯ケーブル2本とコネクタ、電流制限用の抵抗とダイオードで、ダイオードには2種類のショットキバリアダイオードを選定している。

IMG_8420.JPG

Rの電流制限に使用する抵抗値は120Ωとしたが、LEDの個体差が激しく発色を事前にチェックする必要があるようだ。

IMG_8419.JPG

4pinコネクタは丸ピンICソケットを転用している。

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日

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

2018年07月23日

Open.Theremin@デジタルフィルターの復活

電池切れ対策を兼ねてAC駆動の多チャンネルアンプで演奏してみたら、コレが存外気持ちの良いものであった。



ただし、ここまで至るのには紆余曲折があって、当初は低域部のノイズが酷過ぎて、運用出来る状態ではなかった。

今回再確認したのは、このテルミンは通常のテルミンが周波数を扱うのとは逆の方向でセンシングを行っていることで、アンテナに手を近づけるほどゼロビートに近づいていく。 システム上の最低域の設定は、FTMカウンター上で測定可能限界の高い周波数を意味する。

このテルミンの妙な扱いにくさはここに原因があったわけだが、オシレーターの実験を行っていた段階で、ペアのうちどちらをリファレンスとして扱うかを選択する過程で、センシングの方向性が決定されていたことを失念していた。 現状行っているセンシングのベクトルを変更し、通常のテルミンと同じ方向でデータを扱えないかソフトウエア上でトライしてみたが、現時点でその試みは上手くいっていない。

低域が荒れるのは当たり前で、高い周波数のセンシングエラーがそのままノイズの発生につながっていた。センシングエリアのダイナミックレンジを狭めても、音域が狭まるだけであまり効果はなかった。 この問題を解決するには、やはりデータにフィルターを掛けるしか無い。

ということで、デジタルフィルターが復活した。使い様を間違えなければこれはかなり有効なノイズ排除の手段となった。

Screen Shot 2018-07-23 at 11.59.22.png

Screen Shot 2018-07-23 at 12.00.31.png

あとは、Arpeggiatorのポリフォニック化を行った。 これ以上タスクを増やしてどうするんだとも思ったが、とりあえず動作上の問題はあまり無さそう。

追記:

やはり、Pitchサイドの低域側が不安定なのが問題に感じたので、Pitchアンテナの接続をD-FFのデータ側接続されたオシレーターに変更した。これに伴い、調整用に取り付けていた66pFのコンデンサーをアンテナと同時に移設している。

ヴォリューム側は現状で安定しているので、回路はこのままにしておく。 D-FFのクロックで入力をクロップする構造は、DINがアンテナ、CLKがリファレンスとするのがオリジナルの回路だが、Volume側ではこれを入れ替えることで、アンテナに近接するポジションをゼロビート側に設定することが出来る。データが荒れないゼロビート側は、微妙な音量コントロールが必要な立ち上がり時の挙動を安定させる働きがあるので、今後はこの設定で回路を構成する。

追記2:

実際に楽器の運用を行って感触を試しているが、音のアラがよく見えるアンプはこの段階で重宝する。 電池駆動の弾薬箱アンプもJBLのカーステ用スピーカーを積んだ新版だったので、こちらもアラが見えるタイプのアンプだったが、AC駆動のアンプにはボロン製のコーンを持つスピーカーが積まれている。 これを鳴らすことで、今までに見えなかった問題点が浮き彫りになってきた。

低音域が不安定で音がフラフラする症状は、センシング時に取り込むデータの「ヒゲ」が原因と思われるが、ディテクターに細工を施した後も、程度の差こそあれ気持ちの悪い操作感はあまり改善されない。

ビットシフトでデータのLSBを削る方法がこの状態に対処する一番単純な方法だが、これをやってしまうとデータのレンジが狭まるために楽器の音域が狭くなってしまう。 Tootsの口笛のシミュレートがしたいのでこれは困る。

解決法として、結局は廃止していたデジタル方式の帰還型LPFを復活させるのだが、前回の作業でこれをディテクターの後のチューナー部に仕込んでみたところ、相応の効果は確認できた。

が、どうしても気になるレベルのフラフラが残ってしまう。 やはり、ゴミデータの元を断つには、ディテクターとして使っているFTMから差分データを取り込むその場所にフィルターを噛ますしかなさそうだ。

ディテクターは、PC_STATE1 / PC_STATE2 に入力されたオシレーターからのパルス5カウントを1ユニットとして、入力されたパルスの立ち上がる間隔を測り、その差分をデータとして出力している。 まずはこの差分出力にフィルターを掛けて、出来る限りデータの不連続ポイント=ヒゲを減らす。

データの中心値を設定するポイントでは、5カウント毎に地均しされたデータが送られてくるが、ここでさらにフィルターを掛けて異常値を取り除いている。

この作業は一度に行ったほうが良さそうだが、多段フィルター的な考え方で異なる係数を掛けるのが目的。最適値はまだ判明していないので、これから演奏に差し障りの無い範囲で、ヒゲを無くす方向にチューンを行っていくことになる。
posted by Yasuski at 19:17| open.Theremin

Open.Theremin@試験環境をAC駆動のアンプに移す。

結局、E-Kora用に作ったアンプで実験を継続することにしたが、アンプ&スピーカーによって、見えてくるアラが違うのが良く判った。 3chとはいえ妙なパンポット効果を確認できたので、これから面白そうな音源配置を考えていくつもり。 まずは、シーケンサのCHをここに割り振っておいたが、これが意外といける感触だった。

実験でサンプリングレートを変えてみたが、やはり32kはチューニングのレンジが狭まるので、ソフトウエア側の対処無しでの導入はアウトっぽい。 48kは意識されるような問題は無かった。 96kもチューニングのレンジが滅茶苦茶になるので、こちらも設定をこれに合わせないと使えない。

低域の不安定さが再発しているのは、過剰に機能を盛り込んだ影響なのか? そろそろ、ロジアナを使って処理ループの観測を行うべきだろう。
posted by Yasuski at 06:10| open.Theremin

2018年07月22日

Open.Theremin@バッテリードライヴ化を真面目に考える

テルミンのバッテリードライヴ化を考えた場合に、高価なHiroseのコネクターを1ペア使用するだけで6k以上が吹っ飛ぶことが大問題で、これを解消する方法を考えていたのだが、モバイルバッテリーをそのまま使用するのがお手軽なことに気付いた。

問題は接続端子で、丁度良いサイズの製品が見つけられない。ひとまずは、パネルマウントのMicroUSBポートを試してみることにするが、フットプリントが大きめなのが気に入らない。

あとは、電源周りとの整合性をどうやって確保するか。 データインプットと共用する場合に、パソコン側の電源容量に影響が出ないか問題だが、最大消費電力はMCUなので、これは大丈夫かもしれない。

音声アウトをLEMOに、、、とか要らんことを考えてしまったが、これも6kを余裕で超えるので、現実味はない。 普通のステレオミニジャックがベストで、足りない分は増設すれば良い。

電源供給口の位置を何処にするか、判断が難しい。 諸々の条件を試作機で試すことになるが、現実的には実験機のボディーサイズがバランスが取れていて扱い易い気がしている。

それにしても、ミニジャック形状のパネルマウント型USB端子がこの世に存在しないのが不思議なんだが、よく探せば見つかるのだろうか???

ということで、自作を考えることにした。 多分この方法が正解の一つと思われる。

IMG_8261.JPG

音声端子はこの製品と組み合わせる。

TTRSbreakout.jpg

シャシはいつものNeutrikを使用するとして、材料費は合わせて0.7kから0.8k程になるか。

WS001384.JPG

電源供給用のmicroUSBケーブルとスリムな3.5mm規格の音声ケーブルで、スッキリと配線が行える。バッテリーと音声系が別接続なので、自己が発生する確立は低い。 なにより、既成品のモバイルバッテリーをそのままで使えるところが便利だ。

ID-292版の場合はあのデザインが最優先されるので、Hirose製コネクターはそのまま使用することになると思う。
posted by Yasuski at 09:35| open.Theremin

Open.Theremin@オシレーターのチューニング

この日も朝方からコーディングをやっていて、ついでにケースの加工を始めて気がついたら夕方というかなり感覚が飛んでしまう一日だったが、更に夕方からは楽器を完全にバラして端子の配線を始めてしまい、晩飯も食わずに日付が変わっていた。

ケースの加工後に実験を行ったところ、トリマによるオシレーター周波数の修正が可能な限界点を超えそうな状態に陥って仕舞った。 どうもスイッチ類の実装が影響してオシレーターのチューニングレンジが低い方に移動した結果のようだ。 このままでは楽器としての運用が不可能になるので、余り気が進まなかった全バラシを強行しオシレーターの再チューニングを行うことになった。

今回は以前から気になっていたアンテナ側のオシレーターの周波数を変更したかったのだが、これがなかなか上手く行かず、前回の作業と同様にリファレンス側を調整することになった。 対応方法としては、グランドに接続している220pfをさらに小さな値に交換する必要があるが、丁度使えそうな値のパーツが手持ちになかったので、実験は未了。 現在、Pitch側のオシレーターは480kHz辺りにチューニングされているが、Volume側が450kHz近辺に居るために、周波数のマージンが心配になってくる。

過去に追加したリファレンス側のコンデンサを取り除き、新たに33pf×2を並列に接続して作業は終了した。 ひとまず、Pitch側オシレーターの周波数はVRTの調整レンジ内に落ち着いた。 

その後、運用試験を始めたところ、何故かシステムが落ちて再起動が頻発する案件が発生しだした。

電池の減り具合の影響を予想しつつ調査を行ったところ、サンプリングレートの設定を行うつもりで増設した、デジタルスイッチのコモン端子をグランドに落とすのを忘れていたことが原因のようだ。 つまり、PLLの周波数設定端子がフルでオープンの時の設定、96kHzという無理な仕様で音を出していたことになる。 当初はまともに音が出ているので気付かなかったが、全体のタスクを減らせば96kHzによる運用が可能なのが証明されたということでもある。

今後は気軽にサンプリングレートを32kHzにダウンする実験が行える。 明日は楽器専用電源を製作して、楽器の挙動を確かめよう。
posted by Yasuski at 05:31| open.Theremin

2018年07月21日

基板デザインの変遷・失敗の記録

上の段はMCU変換基板というコンセプトで設計をスタートした。 

IMG_8254.JPG

最初に汎用性を重視したのが間違いで、(赤基板)その点に関連して色々と齟齬が出てきた反省がある。

http://audiohologram.sblo.jp/article/179140747.html

http://audiohologram.sblo.jp/article/179233996.html

この基盤群には規格を合わせる対象が存在するのだが、対象先の仕様変更に追いつけずに、使い難いものになったのが白基板だった。また、色の濃い基板は塗膜が厚く、SMDの実装に向かないことも判った。

http://audiohologram.sblo.jp/article/181087905.html

緑は2枚あって、1枚目は分圧抵抗の配線を失敗、2枚目は分圧抵抗の配線を修正しているが、1枚目でDAC用BIASのRoutingを忘れるという大失敗を察知できずに、2代続けて同じ間違いをやらかしている。

黄色いのはほぼ完成品で、多分このヴァージョンで更新はしない。

下の段はオリジナルのテルミンの基板だが、最初のヴァージョン(青)はadatへのこだわりがあって、Toslinkの基板上への実装を可能としていたた。ただ、AudioDACの選択を間違えたり、高価なチューニング用のDACが必要だったり、電源が容量不足だったり、、、とあまりに欠点が多い設計で、二代目の青基板で修正を行うことになった。

http://audiohologram.sblo.jp/article/179302990.html

http://audiohologram.sblo.jp/article/179650224.html

http://audiohologram.sblo.jp/article/179860956.html

が、2枚目はレベルシフトICの電源端子の極性を間違えるという大ポカをやってしまい、早々に三代目(緑)にバトンタッチすることになった。

http://audiohologram.sblo.jp/article/181037499.html

3枚目(緑)はLC方式とVari-Cap方式の2種類のチューニングシステムが混在する実験機だが、温度ドリフトの特性差や、調整の煩雑さを考えるとLCに拘る(しかも、Cは異常に高価な代物)意義が薄れてしまったうえに、adatの使用に現実味が薄れる過程で、予備のDACを実装したいという思惑は次の設計に反映される。

http://audiohologram.sblo.jp/article/183121123.html

4枚目(緑)はDACを2機搭載した拡張ヴァージョンだが、ここにきてオシレーターの配線ミスが発覚してしまう。

http://audiohologram.sblo.jp/article/183268999.html

そして5枚目(緑)では3機目のDACの搭載と、通信用光ケーブルの運用を可能にしているが、基板の発注の後にアナログ信号のレベルシフター機能が実用化された。

http://audiohologram.sblo.jp/article/183710547.html

http://audiohologram.sblo.jp/article/183718047.html

次のヴァージョンでその機能を盛り込む予定。 今回のは大きめな改変なので、次のヴァージョンは色を黄色か赤に変えてみることにする。
posted by Yasuski at 10:20| open.Theremin

2018年07月18日

Open.Theremin@SequencerにCSVで記述されたノートを読出す

Arpeggiator/SequencerのCSV読み出し機構の構築が難航している。

ArpeggiatorやSequencerの場合は数列を直接呼び出して記録するWaveformsとは異なり、入力されたキャラクタから条件分岐で対応するピッチ関数を呼び出し、その数値をアレイに記録する方式なので、それだけ処理がややこしくなる。 

入力されるテキストデータはキャラクタをカンマで区切ったものを使うが、カンマが入力された時点でカウンタを一つ前に戻して、そこに記述されたカンマの一つ前のキャラクタを呼び出したのち、キャラクタを条件分岐で選別して、関連付けた数値を呼び出している。

WS001376.JPG

短いフレーズは問題無さそうだったのが、

WS001377.JPG

アレイにデータを延々と書き連ねて前のデータを間違って読んでしまうパターンにハマってしまったようだ。

昼過ぎになって、朝から悩まされていたBUGをフィックスした。

不具合の原因はいろいろとあったが、まずデータアレイの取り込みが上手く行えていなかった原因は、データバッファーを駆動するカウンターのリセットを忘れるという凡ミスだった。

37262219_1944948182202297_1382784211508789248_n.jpg

違うファイルを呼び出しているのに同じデータが繰り返し読み出される現象から、原因はすぐに察することが出来たが、試行錯誤を行う過程で件の要素のコピペを失敗したパターンと思われる。

次に改行が行われたCSVの読み出しが正常に行われない症状が見つかったが、ファイルから抽出したデータアレイのカウントは正常値を示している上、テキストデータを「改行なし」に修正した後も動作の不具合は何故か解消されない。

37310924_1944948052202310_5238640914523488256_n.jpg

根本的な原因はこちらも凡ミスっぽいとの判断でコードを精査したところ、Sequencerの音源をアサインしているアドレスに関連付けしたステップ数の設定を取り違えているのが原因だった。

以上の手当を行ったところ、無事ArpeggiatorとSequencerにCSV読み出し機能を実装できたが、試作機を設計した時点ではmicroSDを導入する可能性を全く考慮していなかったために、毎度毎度楽器をバラすはめに陥っている。 これを解消するために、USBからmicroSDに直アサインでデータを書き込めないか探っているのだが、いまのところ簡単な方法は見つかっていない。

現時点でRAMの使用量は9割を超えてしまったので、お気楽に機能を追加することはそろそろ出来なくなってきた。

WS001378.JPG

試しに2048stepのSequencerを8系統実装することに失敗している。波形メモリーに関しても16波登録している現状がギリギリといったところか。 プログラムのエリアはまだ3割弱しか使っていないので、起動時に取り込む波形を選択できるような機能の実装が望まれる。
posted by Yasuski at 14:41| open.Theremin

Open.Theremin@SDカードの実装

今朝も、好調なギニアからの音楽を聴きながらコーディングを行っていた。

アルペジエーターはシーケンサーの拡張版なので、32step程度に容量を抑えたアレイを作ってこれを展開すればよい。 画像はSequencerのパートだが、Arpeggiatorの構造はこれと殆ど一緒。

WS001369.JPG

ひとまず、チューニング(実はダミー)用に準備したもの以外はEEPROMを全廃して、SDカードにデータをストアする構造にコード全体を改変した。

SDカードは数列や文字列をパソコンで書き込めば良いので、音声の編集が楽になるのと、別の楽器にデータを移植できるようになるのが大きなメリットだろう。

そして、ついにRAMの使用量が8割を超えた。

昨日ハマったのは、SDカードを実装後に楽器を起動してしばらくすると楽器が発狂して失神&再起動を繰り返すという悪夢のような現象で、原因はSDカードに記録したパラメーターファイルの「空欄」だった。

これはEEPROMでもハマった現象で、なんらかのデータが書き加えられていないメモリーを参照した結果ループに陥るパターンと思われるが、これはメモリーにデータを書き込むことでこれを解消できる筈。

楽器はあまりバラしたくないが、一度実装したSDカードを取り外して、とりあえず”0”を書き込んだ結果、システムを復旧させることが出来た。

次に陥っているのは、SequencerやArpeggiatorが全くの無反応なトラブルで、どうもデータのハンドリングが上手く行っていない風である。

一方、波形/音量バランスやピッチの記録はまともに行われていて、こちらは一安心。

Screen Shot 2018-07-16 at 15.09.09.png

で、昨日は暑さに負けてシーケンス系のトラブルは放置していたのだが、一夜明けて思い付いたのは、ローカル変数の扱いを間違えていたのではないか?という疑問であった。

試しにトレーサーを追加してプログラムを走らせてみたところ、やはりMainLoopに入った途端にデータが消えるようだ。

WS001371.JPGWS001374.JPG

WS001373.JPG

SDカードをスロットに挿入するついでに、MCUにドイツから購入した放熱チップを取り付けた。

IMG_8225.JPG

別のMCUで実際にダミー運用を行ったところ、結構熱を持つことが判った故の保護策だが、出来ればもう少し表面積を稼いだ製品が欲しい。 

細かい工作を行ったものを以前見掛けた記憶があるのだが、最近は何処を探しても見つけられない。

ちなみに、ドイツからの送料は秋月で同一品を買うよりも安かった。
posted by Yasuski at 06:57| open.Theremin

2018年07月13日

Open.Theremin@Arpeggiator/DigitalSequencer系列モードの記録

まずは、モノフォニック系から。



単純に1Voice分の発音をシーケンサーに振っている。 フレーズはCodeに直接記述するが、利便性に問題がある。 MicroSDのデータを読み込む等、外部データとのリンクを行えるようにシーケンサーとしての機能を研究する必要がある。 フレーズはよくあるブルース進行ベースなので、汎用性はある方だろう。 どちらかというとトレーニングモードの側面が重要なので、この機能自体は今後も保持する予定。

こちらは、実験で仮実装した2VoiceモードのDigitalSequencer。



ベースと伴奏でVoiceを2ch分専有しているため、主旋律が3Voiceに限定されて音が薄くなる弊害あり。 こちらも、外部とのデータリンクが行えない現状では実用性に乏しいだろう。

何れのモードも、事前にオシレーターの構成と波形の選択を厳密に行う必要がある。 Transition設定によって出音が激変するので、オシレーター相互の位置関係を吟味することが重要。 単音源故に音が単調になってしまうので、専用の楽器っぽい波形を準備したほうが良い。



こちらは、プリセット12種とChordEditモードのアドレス#1に記録した音列からフレーズを選択する7step系のシーケンサーのデモ。 実用性は十分なので、今後はプリセット分のフレーズを吟味していく予定。
posted by Yasuski at 02:03| open.Theremin

2018年07月11日