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日

Open.Theremin@バグフィックス等の整備を行う

そろそろバグ潰しのタームに入っているが、運用上問題が発覚しているポイントから地道に潰していく。

まず、メモリのアサインが怪し気だったChordEditモードの不具合を解消。 これは、ArpeggiatorMode分だけ拡張したアドレスの処理を失敗していたのが原因だった。

次にTunerのピッチを確認したところほぼ完全な"E"だったので、これを慣習的に判り易い"A"に変更した。設定上偶々500という値が、偶然"E"と合致していたようだ。 

image.jpg

Screen Shot 2018-07-10 at 23.59.57.png

iPadのチューナーアプリで測定したところ、ほぼ完璧な440Hzを確認。

image.jpg

ついでに、Sequencerのフレーズを編集し易いように、変数を追加しておいた。

Screen Shot 2018-07-10 at 23.58.52.png

ChordEditMode上でチューニングの設定がいきなり不能になる現象は、ロータリーエンコーダーのデータ型がintなのが原因と判明したので、該当する箇所のデータ型をuintに変更。 同時に、ヴォリューム系など負の値を扱わない箇所のデータ型にも修正を行っておいた。

処理が重くなってきた感があるので、アルペジエーター周りのダイエットが必要になるかもしれないが、表面的な不具合は一通り解消できた模様。

課題としては、プリセット波形のチューンアップが望まれるので、これは今週中にこなすべき案件としたい。

ハードウエア面では、新しく届いた基板を仮組してみた。

IMG_8153.JPG

赤&黄のトップパネル基板は、精度が上がっているため緑基板よりも嵌め込みが容易になっていた。

IMG_8156.JPG

メイン基板との取り付けにはVRTの高さ分のギャップを解消するために、ロータリーエンコーダーにワッシャー3枚を挿入している。

IMG_8157.JPG

赤/黄基板の合せ目の精度が心配だったが、こちらも問題はない模様。

IMG_8183.JPG

IMG_8181.JPG

黄色い方の基板にはアンテナ側のオシレーターを実装できる仕様だが、温度変化による周波数変動の問題が心配される。
posted by Yasuski at 06:35| open.Theremin

2018年07月09日

Open.Theremin@DigitalSequencerの実装

ふと思い付いたのだが、メモリーしたコードをアルペジエーターに反映させたらシンプルで面白そうだ。

メモリーは16パターン登録できるので、伴奏の幅がさらに大きく展開する。 ROMの容量にはまだ相当余裕があるので、アルペジエーターのコードパターンを8から32に拡張しても問題は無い。

で、、、早速組み込んでみた。 



暫定でArpeggiatorと同じ7stepとしているが、これはMemoryの用法次第で最大64step(4note x16ch )まで拡張できる。 ただし、これをやるとChordMemory機能が使い物にならなくなるので、実質的には最後の4アドレス分を使った16stepとするのが正解だろう。 シーケンスの循環は、別のパラメーターで決定できるので、これは呼び出すシーケンスのチャンネルごとに個別に設定する。 現実的には7/8/9/10/14/16stepを準備することになる。 ランダムモードで演奏する場合はstepに拘る必要はあまりないのだが、とりあえず音符をバラす方向で考えることにする。

運用試験の結果ニーズがありそうに感じたので、思い切って16StepSeqencerの実装を行った。

あくまでArpeggiatorの拡張機能といった扱いだが、7StepのみだったStep数の選択を7・8・9・10・12・14・16に拡大している。 

全Stepへの対応はアップカウントとランダムのみで、オルタネイトとダウンカウントは7・8・9Stepのみに対応させているが、運用形態に依っては対象を拡大する可能性もあり。

WS001349.JPG

実用性を考慮して、SequencerがChordMemoryから参照するアドレスを使用頻度が少ないと思われる8番から16番をメインに指定して、本来の「コードを記録する」機能との整合性を図った。

スリム化は図ったものの、仕込みが大変で完全な実証試験は明日以降に持ち越すことにした。

何となくだが、Bluesっぽいベースラインが欲しくなって、ブルース進行専用のシーケンスを追加する事を思い付いた。 この場合はベースラインの繰り返しなので、メモリーの再利用が出来る筈。 しかも、bluesのベースラインは結構決め打ち?っぽいので、ルートの決定だけをメモリーでやって、あとはプリセットで問題ないかもしれない、、、。

ということでフレーズを解析したネタ元から、ノートのステップが96にもなってしまった。 

WS001347.JPG

ベースラインはアンテナ入力のピッチを追従せずに、MemoryChannelModeのアドレス1番のVoice01に記録したピッチをルート音に固定して運用する特殊な用法なので、対策を講じた2VoiceMode(赤)の#15を専用アドレスに振っておいた。 

WS001348.JPG

勿論、通常モードでもアサインは可能だが、多分ピッチが滅茶苦茶になるので対策が必要だが、予期せぬ形で妙なエフェクトが掛かる可能性もあるので、暫くは運用を行いながら様子を見ることにする。

追記:

36802317_1929762493720866_3058412427268849664_n.jpg

シャッフルっぽいフレーズの再生を目指したら、288Stepが必要になってしまった、、、。



シャッフルは実質3連符なので、一巡させるのに最低でも12stepが必要だったが、ノリがいまいち。 ノリの再現を考えれば16step以上が望ましいので改変するか。
posted by Yasuski at 04:10| open.Theremin

2018年07月06日

Open.Theremin@ランダムアルペジエーターの実装

昨日実装したMetroを使ったS&Hっぽい仕掛けを眺めていて、これはアルペジエーターに変身させられるのでは?と思いついたので、パターンを登録したデータアレイをロータリーエンコーダーで選択し、アレイをランダムに読み出す機能に改変した。

Screen Shot 2018-07-06 at 7.24.02.png

ランダム係数を音源の数だけ用意して、和音の再生を可能にしている。 ランダム音列(ややこしい)を読み出す場合も専用のランダム係数を用意してあるので、和音がランダムに展開する複雑な効果が得られる。

青色LEDをアサインした音列の選択を行うロータリーエンコーダーは18番目のパラメーターとして下側のノブに追加する。 インターフェイスは試験運用の経験から、デフォルトで水色の波形選択、一つ進めて紫色のtransition設定、一つ戻して青色の音列選択、更に一つ戻してMetroのRate設定といった風に、使用頻度の高いパラメーター群が近接するように仕様を小変更している。

ランダム機能はRateControlの最小値辺りで順送り/逆順送りを切り替えられるよう条件分岐を仕込むと、更に使い勝手が良くなりそうだ。 アップ&ダウンモードのアサインが難しいが、最小値近辺に3ポイントだけ機能を追加するのが正解か、、、。



とか言ってるウチに速攻で作ってしまった。 利便性を考慮して、専用のアルペジオパターンの切り替えノブ(赤)を準備した。 切り替えノブは、0〜3のアドレスを循環して出力する。

まず、アドレス"0"にアサインされているのは、トリガー毎に順送りで0〜6を出力する関数で、

WS001345.JPG

この出力を使って、pitchTableに記録した音列を順番に参照する。

次のアドレス"1"には出力が0〜6を昇り降りする関数がアサインされている。

WS001344.JPG

出力のオーバーフロー時に正負の符号を反転させて、昇降順を切り替えている。

アドレス"2"には"0"とは逆の減算方向にデータが変化する関数を配置した。

WS001346.JPG

そしてアドレス"3"は先に説明した「擬似ランダム値」を発生させる関数が割り振られている。
posted by Yasuski at 08:03| open.Theremin

2018年07月05日

Open.Theremin@基板が届いた&日誌みたいなもの

発注していた基板が到着したので検品を行った。

IMG_8125.JPG

メイン基板にはDAC3関連と光ファイバー送信ユニットを駆動するドライバを新たに追加している。 

IMG_8129.JPG

これで、アナログ出力は3ch体制となった。 なお、このヴァージョンではOverload対応のレベルシフターの実装は未了。

黄基板の裏に配置したVCO。 

IMG_8137.JPG

近接した本体側の2chを使わないための選択肢だが、アンテナ端子の配置を失敗している。 ただ、これをリファレンス源として考えれば問題はない。 回路の修正は、次回発注時に反映される。

多分最終ヴァージョンとなりそうなV3基板。 

IMG_8130.JPG

こちらにも、リファレンス用のオシレーターを実装してあるが、使い物になるかどうかは実験してみないと判らない。

検品後にトップパネルのシェイプの摺合せを行った。 

IMG_8138.JPG

単純な平ヤスリを使った都合数分の作業で形を合わせ込めたのは進歩といえるだろう。

IMG_8139.JPG

メイン基板(緑)は概ね問題無さそう。 VRTはロープロファイルな製品がなかなか手に入らず、安売りしていたメーカー製のこれで折衷することになった。 

IMG_8141.JPG

VRTの実装時にタッパが合わない問題が出てくるが、これはRGBロータリーエンコーダーのシャフトに5mm程度のシムを噛ますことでなんとか対応が可能だった。 懸案だったシャフト穴の位置もギリギリ誤差内で問題なし。

昨日設計した基板の裏面に配置していたアナログスイッチの端子配列を勘違いしていたのでコレを修正したが、またもやグランドパターンの接続がパズル状態に陥ってしまい、手当に1時間ほどが費やされることになった。

otot414e.png 

他の修正箇所として、ADATエンコーダと共通だった5Vアナログ電源ラインにラインフィルタを入れて軽く分離を行った。 また、出来る限りノイズの影響を回避するために、効果は未知数ではあるがアナログ回路の周りにグランドポイントを増設しておいた。、

ここ最近の実験の結果、FrequencyDetectorの動作が不安定に思えたので、FTM0_FILTERの項目を現状の7からFまで引き上げて実験を行ってみた。

WS001343.JPG

早朝なので大音響で実験は出来なかったが、ガサゴソするノイズっぽい不安定さがマシになったようだ。

あと、ロータリーエンコーダーのアドレス送りでゼロ未満の逆順方向でバグの発生を確認したので、これをフィックスしなければならない。 現状でも用法を間違えなければ問題はないレベルだが、演奏時の環境で混乱するのはいただけないので、出来ればフィックスしたいところ。
posted by Yasuski at 08:14| open.Theremin

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月23日

Open.Theremin@不安定な発音状態の原因を探る

テルミンのPitchが不安定なのだが、いきなり周波数が変動する現象は物理面の不具合を疑ったほうが良いかもしれない。 完成した楽器を修正のために分解しまくるのはこういった弊害を誘発する可能性がある。 試作機の構造はその辺を考えないとイカンなあと反省させられる。 

IMG_8092.JPG

低音域が安定しないのはその所為かもしれない。 電圧が変動する原因の可能性として電源コードを疑ったら、どうもこれが半分正解だったようだ。 Hiroseの6pin中継コネクタの接触が経年劣化で悪くなっていたのだろう。 不安定な状態を現出させる要因を取り除くために、試作テルミン専用のケーブルを造った方が良い。

あと、下の音域が暴れる問題は、Wavetableの読み出しレートを再検討すべきと感じているが、ハードウエアとソフトウエアの抱える問題を切離すために、一度アンテナによる制御を介しない固定ピッチで音源自体の素行を調査する必要がある。 要は、ノイズを誘発する「制御データの揺れ」が何処で発生しているかを見極めなければならない。 「読み出しレートの固定」は、既に和音を構成してプリセットを行うモードに導入済みだが、現在はフリーな状態のロータリーエンコーダー&doubleの定数でピッチを設定する3オシレーター分の周波数を固定化して評価を行うことになる。

アンテナへの電磁波の影響や、電源の多重供給が原因でMCUをぶっ飛ばす危険を防止するために、楽器の実証試験をPCと離れた場所で行うことにした。 プログラムをロードしたあと、楽器を抱えながらスタンドとアンプを置いた玄関とPCがある自室を行ったり来たりすることになるが、MCU一発4Kオーヴァーをご逝去させないためには安い苦労である。

で、クリーンな電磁環境下でテストを行ってみたところ、電源ケーブルの交換で多少マシにはなったものの、やはり低い方のピッチが安定しないことが判明。テスト時にアンテナのエクステンションは取り外してあったが、どうも物理要因で決定される方のレンジの狭さが原因な雰囲気ではない。

比較のためダイエット前のプログラムに戻してもこれといった変化はなし。 とにかく音が濁るのだ。 この感触はアンテナ経由でノイズが乗って来ている風なので、アンテナのノイズを消すためにデジタルLPFを復活させてみたが、こちらも効果はあがらず。

結局は消去法からデータのバタつきに起因するトラブルと判断してセンシング後のデータ幅を13bitに戻したが、コレが正解だった模様で、コード改修後の音源は低音域まで安定して動作している。 

定数の変更によるトレードオフは当然ながらアンテナの有感帯が狭まることで、これはチューニングがより難しくなることを意味するが、キャリブレーション時に安定した状態で可能な限り大きな変化幅を確保することで対処できるようだ。

この辺りのメソッドを確立しないかぎり製品化は難しいと思っているのだが、「こちらは土台を提供するだけなので、あとは勝手にやってくれ」というスタンスもアリだろう。

さて、どうしたものか。

この実験を行う前に見切り発車で次のヴァージョンの基板を発注してしまったが、これにはDACを3個まで載せることが出来る仕様とした。 実際に現用のハードウエア上でダミーのDACをカラ運用で駆動してみたが、システムは音が濁ることもなく安定して稼働している。
posted by Yasuski at 20:27| open.Theremin

Open.Theremin@処理システムのダイエットを行う

追加したOpen.Thereminの音響処理に関するタスクが増えすぎたので、あまり効果の無さそうなものからダイエットを始めることにした。

まずは、様子見でPitch/Volumeアンテナのセンシングを行っている部分のデジタルLPFを削除してみたが、これは機能を取り除いた後にあまり差が出ない感じだったので、そのまま削除を決定した。

次に、コンパイル時にアラートが出ていたVolumeCurbのWavetableを読み出すアドレスの閾値を設定する部分だが、事前にデータ型を符号無しから符号ありに変更してアラートを回避している。 この部分を仮に削除するとVolumeAntの遣い勝手が極端に悪くなることを確認できたので、残すことに決定。 

また、読み出したデータを丸めるLPF群は、削除後に音色が悪い方向に変化した雰囲気だったので、Wavetable系のデータを扱う部分の閾値設定&アウトプットに噛ますLPFは全て残すことにした。

ちなみに、これらの機能を除いても(ノイズが減る方向の)音質の改善は認められず、逆にOverloadモードのクリッピングが上手くいかなくなる弊害が発生していた。

今回は、本格的なダイエットを行う前の小手調べといった感触ではあったが、そろそろオシレーターの数を減らす、もしくは現時点で24bitに設定している音声系のデータ幅を16bitに縮小する等の大規模なタスクの削減にトライすべきフェイズになってきた。
posted by Yasuski at 05:58| open.Theremin