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