White Cottage 版 Tonestack Calculator の紹介と使いこなし

ギターアンプのトーンスタック回路の特性を計算するソフトウェアとしては、以前から Duncan's Amp PagesTone Stack Calculator が知られています。この Duncan 版は定番のトーンスタック回路を網羅しているが、収録されていない回路は扱えず、トーンスタック自身のインピーダンス周波数特性と前後の増幅回路との間で生じる相互干渉も考慮できません。そのうえ、Aカーブ(log カーブ)のポットの抵抗変化曲線特性模擬が米国で主流のタイプ(回転角 50% 位置の抵抗値が 10% のものと 30% のもの)しかありません。日本国内で汎用部品として売られているタイプ(15A:50% 位置の抵抗値が 15%)は正しい計算ができません。

ということで結局 LTSpice で検討するしかありませんでしたが、LTSpice ではトーンスタック回路のインタラクティブな操作をする方法がないので悶々としていました。そんな折に偶然、White Cottage による Tonestack Calculator を見つけました。White Cottage 版は、インタラクティブな操作が可能なだけでなく、バックエンドに ngspice が用いられているため SPICE で可能なことなら基本的にはなんでも対応できる汎用性があります。すごく重宝しそうなので、紹介します。


目次

参考にした資料


インストール

ダウンロードは GitHub から可能。単に tonestack.zip を任意のフォルダに展開すれば OK。以下ではこの方法でのテストを記載します。
なお、インストーラーもあるようですが、試していません。


基本的な使い方

展開したフォルダの下位にある bin フォルダにある tonestack.exe を起動するだけです。

数値の値を変えた状態で保存したいとき、設定ファイルに書きこむ設定名を指定するダイアログが出てからファイルを保存ダイアログが出ます。保存先フォルダのデフォルトはユーザーフォルダ(環境変数 %USERPROFILE% 、C:\Users\ログオンユーザー名 )になっています。


自前のトーンスタック回路の追加方法

展開したフォルダの下位にある circuit フォルダに必要な物を追加すれば OK です。以下項目別に説明。

回路図画像の追加

circuit フォルダに 434x326 ピクセルの PNG 画像を追加する。ただし、無くても構わない。ピクセル数が違っても構わないが自動拡大縮小されるため画像が少しぼやける。また、このピクセル数は Windows の表示スケール設定には無関係。

ngspice のネットリストの追加

既存の cir ファイルをひな形にして、新しい回路を記述する。ファイル中に書かれているように、いくつかのノード番号や素子名は予約されている。この予約名に対応する値を tonestack.exe で操縦しつつ ngspice のエンジンに与えることで、計算を行っている。

設定ファイル tonestacks.tsc (JSON) の編集

このファイルに、新たに作成した cir ファイルと PNG 画像に対応するエントリを追加することで、それらが認識されて表示・計算が可能になる。このファイルは JSON なので、記述には文法的約束事というか、コツがあります。少しでも文法を逸脱した記載をすると記載内容が認識されなかったりプログラムが落ちたりします。

詳細は後日追加執筆予定。


注意点:ポットの抵抗変化特性曲線(テーパー)の指定について

正しく計算するためには、部品の定数だけでなく、ポットの抵抗変化特性曲線(テーパー)の指定を正確に行わなければなりません。

メニューの File → Setting です。この設定変更操作は記憶されないので、起動するたびに毎回行う必要があります。

起動直後のデフォルトは、Log というのが中央位置の抵抗値 12%、LogA というのが 25% のカーブになっています。また Reverse Log は Log の鏡写し(すなわち日本でいうCカーブのこと)であり中央位置の抵抗値が 88% になっています。このソフトウェアの作者は英国の方のようで、英国で普通に手に入る(おそらくは EN 規格)ポットがそういう特性カーブなのでしょう。

日本国内で汎用部品として売られているポットは JIS 規格ですので、舶来品とはカーブの特性が異なります。Aカーブは「JIS 15A」といって 50% 位置の抵抗値が 15%、Cカーブはその鏡写しであり 50% 位置の抵抗値が 85% です。これに対応したい場合は、Log Taper を 0.15、Reverse Log Taper を 0.85 に、それぞれ変更します(図参照)。日本メーカー製ポット(千石電商本店2Fにおいてギターパーツコーナーではなく汎用部品コーナーの引き出しに陳列されているもの)や、台湾 ALPHA 社製(桜屋電機店で扱われている)は、こちらに該当します。なお日本メーカー製や台湾 ALPHA 社製には LogA タイプはありません。
Potentiometer Tapers Dialog
また、抵抗変化特性の模擬数式が、べき乗多項式(a(b^x) + c)と対数関数(Pure Log)とが選べるようになっていますが、日本メーカー製のポットの特性はどちらでもありません。例えば ALPS ALPINE 社製 RK163 シリーズは単なる多点折れ線をベースにしているようです。したがって、日本メーカー製のAカーブやCカーブのポットを想定した場合の計算値が正しく模擬できるのは 0%、50%、100% の各位置だけであり、それ以外は正確ではありません。White Cottage 版はオープンソースですから、 日本のポットの抵抗変化曲線を追加できるチャンスはあると思っています。

CTS 製などの米国系メーカーのギター用ポットを使う場合は、Log Taper を 0.10、LogA Taper を 0.30、Reverse Log Taper を 0.90 に、それぞれ変更すればよいでしょう。ちなみに CTS の Commercial Rotary Potentiometers の場合、ギター用 450G 型(24mm)のデータシートでは、これら以外にもいろいろなタイプが規定されていて、その符号割り当ても日本の慣例とは異なりますのでデータシートをよく見るようにしてください。CTS 製のギター用ではない 24mm の 450 型では「10% AUD」および「10% CCW AUD」(AUD はオーディオつまり音量調整用、CCW は Counter-ClockWise 反時計回りの意味)となっているため、Log Taper が 0.10、Reverse Log Taper が 0.90 です。
Bourns 製も例えば 16mm(17mm)タイプの PDB18 シリーズにはAカーブといってもありとあらゆるテーパー特性が定義されています。
日本国内の店舗店頭販売やサウンドハウス通販では CTS 製や Bourns 製のものは詳細な型番が掲示されていないため、購入したものの特性を実測で調べるしかないようです。

Duncan 版にはこのテーパー特性数値を指定する方法は存在しません。この機能だけでも White Cottage 版を使う意義があります。

デフォルトを JIS 15A カーブにするための強引な変更方法

Log カーブのデフォルトが 0.12 と 0.88 なのを起動のたびに直すのは地味に不便です。かといってソースコードからのビルドは準備するものが多くて大変で、今のところうまくいっていません。そこで、バイナリエディターを用いて実行ファイル内の 0.12 と 0.88 に対応するバイト列を書き換えるという、超強引な方法をとってみました。これは物事をよくわかっている方向けの説明ですので、自己責任でお願いします。

浮動小数点数内部表現シミュレーター という便利なサイトがあります。これで数値に対応する IEEE 754 倍精度(C/C++言語でいう double 型)バイト列を調べます。実行ファイル内に書かれるものは Intel byte order なので逆順になります(Wintel ですからね…)。

十進 16進 16進 Intel byte order
0.12 3FBE B851 EB85 1EB8 B8 1E 85 EB 51 B8 BE 3F
0.88 3FEC 28F5 C28F 5C29 29 5C 8F C2 F5 28 EC 3F
十進 16進 16進 Intel byte order
0.153FC3 3333 3333 3333 33 33 33 33 33 33 C3 3F
0.853FEB 3333 3333 3333 33 33 33 33 33 33 EB 3F

元の実行ファイルのコピーを取り(ここでは tonestack-JIS.exe としています)、それを書き換えます。ここでは Binary Editor Bz の BzEditor-1.9.8.7.exe (インストーラー版)を使いました(以下、Bz と略します)。
Bz でバイト列をそのまま検索するときには、検索窓の先頭を # として各バイトをカンマ・スペース等で区切って入力します( Bz ヘルプページ→検索ボックス )。大文字で書いていますが、単なる16進数なので大文字小文字の区別はありません。
実行ファイル内部の各数値に対応する箇所は2か所ずつ見つかりました。どうやら片方は内部の数式、もう片方は Qt の GUI 部品のプロパティのようです。何の気なしに2か所とも検索して上書きしているように見えるかもしれませんが、その位置がそうであるということは、ソースや前後のバイナリを見て調べたり、書き換え後の挙動を調べる必要があるのは言うまでもありません。

検索ボックス入力文字列 見つかったところに上書きするバイト列
0.12→0.15 # B8 1E 85 EB 51 B8 BE 3F 33 33 33 33 33 33 C3 3F
0.88→0.85 # 29 5C 8F C2 F5 28 EC 3F 33 33 33 33 33 33 EB 3F

変更前その1 0.12
Patching inside of executable, before 1
変更後その1 0.15
Patching inside of executable, after 1
変更前その2 0.12
Patching inside of executable, before 2
変更後その2 0.15
Patching inside of executable, after 2

0.88→0.85 の書き換えも同じ要領です。カーソル位置を合わせたスクリーンショットは省略しますが、よく見ると 0.12 や 0.15 からあまり離れない位置に 0.88 や 0.85 に対応するバイト列があることが確認できます(その1に関しては何故 DWORD アラインメントされていないのだろうという疑問はあるのだが)。

このままでは実行ファイルがオリジナルのものか書き換え後のものか実行中に見分けがつかなくなります。そこで、ウインドウタイトルも書き換えてしまいます。要領はほぼ同じですので、書き換え前のみ示します。「ToneStack」で検索するとたくさん見つかりますが、この場所にあるもの(ASCII に見えますが、Qt の出自柄 UTF-8 なのかもしれません)だけが対象で、ほかのものは書き換えてはだめです。また、元の文字列の範囲内のみで書き換えます。バイト数を変えてしまったら何が起きても知りません。
Patching inside of executable

以上で、めでたくデフォルトが JIS 15A カーブになります。


実例

今後執筆


略歴


トップページ / ギターの部屋 / White Cottage 版 Tonestack Calculator の紹介と使いこなし
このサイトについて