2019/02/10

VSTシンセ自作 オシレータ実験

Audacityのコンパイル用に超巨大開発環境のVisualStudioをインストールしたのが去年の年末。 せっかく入れたので、これで何か作ってみようかと思ってVSTシンセの実験をしてみた。

VSTは9年前にちょっと触ったことはあるのだが、当然ながら大きく変化していた。まずVSTは現在3.6で仕様も大きく異なっていた。とりあえずGUIなしで、シンセのオシレータ部分(発振回路)だけでも作ってみようと試行錯誤してみる。

割とあっさり音が出せるところまでこぎつける。とりあえずサイン波を電子ピアノから鳴らすことはできた。

手持ちの電子ピアノのMIDI信号をキャッチしてみたら、ノートオフは使われていないのね。すべてノートオンで、音を止める時は0で止めていた。 下はJavaScriptによるMIDI機器との通信スクリプト。PCに接続された楽器のMIDI信号を16進数で表示させられる。また信号の送信も可。

Basic Web Midi Api | BooleanEffect

INPUT :

OUTPUT:



Input


90 3c 3e


次にノコギリ波にチャレンジ。 まずは理論通りのサイン波の合成によるノコギリ波を作ってみた。基本的には5年前に作ったこのページの加算合成の方法。1サンプルごとに膨大な計算量なので、どうかな?と思っていたが、リアルタイムでもあっさり再生。最近のPCパワーは素直にすげーと思った。

デジタルの場合、倍音が多く含まれる波形は要注意で、ナイキスト周波数を意識する必要がある。ナイキスト周波数はサンプリング周波数の半分で、再生できる最高音のこと。これを超える周波数を扱おうとするとエイリアスノイズが発生する。

下が60倍音まで扱ったノコギリ波の音。低い音は問題ないのだが、音が上がるにつれて、妙な音が入ってくる。この音がナイキスト周波数を超えた倍音が、低い音として認識されて、再生されてしまっている状態。

波形はこんな感じでノコギリ波としては悪くない。

これではまずいということで、次の実験。
だったら倍音を少な目にするという方法。手持ちの電子ピアノの最高音はG7の3136Hzなので、ナイキスト周波数24000Hz(サンプリング周波数48000Hz)とした場合7倍音までならナイキスト周波数は超えない。ということで、 低音から高音まで一貫して7倍音まで扱うノコギリ波にしてみた。音はこんな感じ。

聴いてみると低音が物足りない。波形を見ても、ノコギリ波としては中途半端。

次にやることは倍音をナイキスト周波数まで扱うというもの。これは音域ごとに倍音の数が違うので、以下のようなプログラムで対応してみた。 整数倍音を60回まで順次加算するのだが、倍音が最高音の24000Hzを超えたら抜けるという内容。
for(int i = 1; i <= 60; i++){
if(pitch * i  >= 24000) break;
  phase += sin(theta * i) * (1.0f / i);
 }

音はこんな感じになった。低音から最高音まで問題なし。

エフェクトを通すと、まともなシンセと比較しても大差ないのでは?という印象。

ここまで来ると結構面白くなってくる。いろいろな方法で波形を作ってみようかな。



2019/01/27

Cakewalk by Bandlab
Sonitus fx Compressor

Cakewalk標準コンプと言っていいと思う。 Sonitusプラグインは、cakewalk社がUltrafunk社を会社ごと買収して得たプラグイン。買収してまで手に入れたプラグインなので、悪いとは思えない。

実際パラメータは設定範囲が広く正確に機能する。コンプに必要と思われるパラメータは一通り揃っているので、思い通りにコントロール可能。

基本的に色付けしないので、原音を変化させたくないときによいと思う。 正統派デジタルコンプという感じで、そこがつまらないと言えばつまらないのだが、実用的ではある。

デジタルの利点を最大限利用していて、先読みバッファによる、アタックタイムを完全に0にできるなど、あらゆるソースに対応できるようになっている。

このコンプは、パラメータも多く、いろいろな使い方ができるので、知識がないと使いこなせないだろう。 プロチャンネルにある実機をモデリングしたコンプは操作つまみが少なく、なんとなくでも使えるが、このコンプはそれを許さない。

Threshold 0~-60dB

幅広いスレッショルド調整が可能。

Ratio 0.4~1~30,無限大

おしろいのは1以下があるということ。コンプとしては普通ない領域で、用途が思い浮かばない。 無限大はデジタルらしく、スレッショルドでスパッと切ってしまえる。

Knee 30~1,Hard

Ratioを極端に設定しても、この調整を行えば、角ができず歪を緩和でき自然な感じにできる。 パラメータ値はスレッショルドの上下dBとなっている。 リミッター的にピークを切る場合は、Hardなどに設定する。

Type Normal/Vintage

ノーマルはデジタルらしく線形のかかり方だが、ビンテージにすると入力レベルが高いとイマイチ圧縮しきれないという、アナログぽさを演出できる。

Gain ±30dB

これは出力のレベル

Attack 0.0~400msec

先読みゆえに本当に0からつぶすことができる。 また400msecと光学式コンプ以上に、かなり長い設定も可能。

Release 1~4000msec

リリースはマニュアル設定できるが、素材によって調整する必要があるので結構難しい。TCRというボタンを押せばオートに切り替えることができる。

TCR

リリースタイムを自動でやってくれるボタン。何も考えなくていいので便利。

Limiter

出力段階で0dBを超えるような場合に、クリップさせないためのリミッター機能。コンプ本体の最終段にリミッターがあると思えばいい。これを使うことでコンプ部と組み合わせて過激な音作りや、カットができる。

まとめ

コンプそのものを勉強したい場合は、プロチャンネルにあるアナログコンプよりも、こちらがおすすめ。数値通りに機能することは重要なので。

2019/01/26

Cakewalk by Bandlab
PC4K S-Type(VCAコンプ)

CakewalkプロチャンネルにあるコンプPC4K S-Typeについて。


PC4K S-TypeはSSL(Solid State Logic社)のSL4000シリーズのモデリング


これもPC76と同じように実機があるコンプ。 SL4000シリーズは、世界中のスタジオで70年代後半から使われていたコンソール。 PC4K S-Typeは、そのコンソールのコンプ部分を切り出したものとなる。


特徴

動作原理はVCA(Voltage Controled Amplifier)コンプ。 VCAチップによるフィードフォワード方式と思われるが詳細は不明。 音は割とナチュラルなかかり方をする。 高価なコンソールなので、操作性で妙な癖はないと思ったら、そうでもなかった。 これもPC76と同じようにスレッショルドの値が当てにならない。PC76よりもさらに混乱を招くぐらいパラメーター数値と実際のスレッショルドが一致しない。Ratioごとにスレッショルドが変わるのだ。 Ratioが3個しかないからと、なめてかかると、とんでもないことになる。

以下の絵は、Ratio2,4,10の場合で、音量が-無限大~0dBに変化する波形に対して、スレッショルドをすべて-12dBに設定して適用したもの。

Ratio2

肩が緩すぎて、どこがスレッショルドなのか不明だが、12dBよりも深いことは明らか。もしくはKneeのレベルが高い。 こういうカーブは自然な感じになる。

Ratio4

カーブを見ると普通のコンプ的なかかり方。 -9dBよりも浅いところから圧縮されている。つまり実際のスレッショルドは、設定値よりも3dB浅くなる。スレッショルドを変えてもその差は3dBのようだ。

Ratio10

このカーブはリミッティング的な使い方に適している。ピークを削るという感じ。 実際のスレッショルドは-5dBぐらい。設定値よりも8dB浅くなるようだ。これもスレッショルドを変化させても、およそ8dB差となった。

上記のスレッショルドの設定と実際の差を理解してしまえば迷うことはなくなる。これを知らないと、えっ!? てなる。


Thresh -50~0dB

スレッショルドは上記のようにRatioによって変化するので注意。


Attack 0.1~30.0msec

アタックは PC76は0.02msec~なので、比較すると遅め。アナログコンプとしては十分速い方。


Release 0.1~1.2s, Auto

リリースにオートがあるのはいいかも。リリースはソースごとに設定が変わるので、それなりの知識が求められる。 とりあえず何も考えずオートにしておけば、それほどおかしなことにならない。オートによるリリースタイムの決定は、ピークの長さに依存するようだ。


MakeUp -10~30dB,Auto

これは出力レベルだが、オートもある。Ratioとスレッショルドの設定から計算されるようだ。


S.Chain

個人的にはまず使わないだろうサイドチェイン。これをオンにすると別のトラックのレベルに応じてコンプを掛けることができる。その際HPFを使うこともできる。


まとめ

全体的にPC76よりもナチュラルな効き方と、適度なアナログの味付けもするコンプという印象。スレッショルドさえ気を付ければ、使いやすいコンプと言える。Ratio2は極端な設定にならないので、全体をまとめるには向いている。 個人的には、「高価なコンソールってこんな変なんだぁ」という楽しみ方になる。


2019/01/24

Cakewalk by Bandlab
PC76 U-Type(FETコンプ)

Cakewalkのエフェクトを少しずつチェックしてみる。 まずは、使用頻度が高めのコンプレッサーから。 Cakewalkにはプロチャンネルに2個、fxに2個の合計4個のコンプレッサーが標準で搭載されている。 今回はプロチャンネルにあるPC76 U-Typeというコンプレッサーを試してみた。


PC76 U-TypeはUNIVERSAL AUDIO Urei 1176のモデリング

Urei 1176という実機が存在していて、それをモデリングしたプラグイン。 実機は、かなり癖があるのだが、1976年発売で、今でも売られ続けている超ロングセラーのスタジオの定番コンプ。

このコンプがもてはやされているのは、 FETコンプなので、アタックタイムを短く設定できるなどの、機能的な面もあるとは思うが、 それ以上に、通しただけでアナログならではの色付けがされるところが最大の魅力だろう。 デジタルのクリアですっきりしたサウンドとは真逆の部分の需要ということね。 制御方式がFETによるフィードバック方式なので、粘りのある音になる。 PC76も充分実機のニュアンスが感じられる。
原音をなるべく変化させず、クリアな音を求める場合は、Cakewalkの場合、fxSonitus compressor、fxSonitus Multiband、もしくはPC4K S-Typeのコンプを使ったほうがよいかと思う。

Ratioとスレッショルドの関係

圧縮比であるRatioは4つのボタンで選択。4、8、12、20があり、実機だとさらに全部のボタンを押したりすることができる。PC76では無限大ボタンがそれに相当する。

このコンプの独特なところはスレッショルドの調整ノブがないということ。内部的にはスレッショルド固定で、入力レベルを調整して、スレッショルドを決める仕様となっている。開発当初は使いやすいと思ったのだろうけど、入力と出力をセットで調整する必要があるので、ちょっと面倒。 当然PC76も、これを継承している。スレッショルドが分からないというのは、使う上で結構厳しいので、実際どういう動きをしているのかチェックしてみた。

音量が最小から最大にリニアに変化する以下のような波形を作り、これにコンプを適用すると、スレッショルドが分かる。入出力共に0dBにしてある。 見方は、コンプ適用後の波形で段々音量が上がっていく途中で折れるポイントがある。そこがスレッショルド。 Ratioごとにスレッショルドが異なるように思えたので、各Ratioごとに波形のスクリーンショットを撮ってみた。


Ratio4

Ratio8

Ratio12

上図Ratioが4、8、12の場合は、大体-12dBがスレッショルドとして設定されている。


Ratio20

他と違って-8.5dBぐらい。


無限大

無限大は実機の全部押しをシミュレートしているらしい。ほぼ飛び道具扱い。入力信号に対して-20dBぐらいがスレッショルドなのだが、注意点としては全体が10dB増幅されるので出力を見ると-10dBに見える。そして音はとてもノイジーになる。

Ratioによってスレッショルドラインが変化するので挙動がつかみにくいわけだ。使い勝手は悪いが、実機をシミュレートした結果、こうなったのだろう。アナログは、こんなもんだということで、納得するしかない。

使うときは、基本的に音で判断することになるが、波形レベルからある程度予測してインプットレベルを調整したり、メーターを見て確認するとより確実。

VUメーター

GR(Gain Reduction)を表示するので、スレッショルドにかからない信号の場合は針は振れず0のまま。スレッショルド以上になると針が動く。針がガンガン動くときは、過激な使い方で、あまり動かないときは、地味な使い方という感じ。VUメーターなのでピークレベルではなく平均値が表示される。

Attack

実機はFFTコンプなので、アナログ機器としてはアタックを高速に設定できる。 PC76のアタックタイムは0.0~1.2msec。 長くても1.2msecってすごく短い(笑)。833Hzの1周期分に相当する短さ。 では最短の0msecが本当かどうかチェックしてみる。ハイハットのような生音ならアタックもそれっぽく圧縮されたが、1サンプルだけのインパルスレスポンスのようなアタックは、さすがに無理だった。 アナログ機器であれば、当然の結果なので、問題ない。ちなみにハードの実機は0.02msecとなっている。これはサンプリング周波数が48000Hzの場合、約1サンプルに相当する。改めてパラメータの数値は鵜呑みにしてはいけない。

cakewalkは波形をサンプル単位でチェックできないので、エクスポートしてAudacityで表示してみた。赤色波形が適用前で、青が適用後。サンプリング周波数は48000Hzなので、やはり2個目から徐々に効いている。実機と同じ0.02msecと考えていいと思う。アナログ機器のモデリングなので、アタック部は特徴的になる。デジタルみたいに理論通りではないところが面白いところ。



その他パラメータ

他パラメータは、妙な癖はなく普通に使えるっぽいが、リリースは設定値よりも、だいぶ長めになるようだ。

サウンド

設定にもよるけど、色付けしてしまうコンプなので、ミックスにかけるよりも、各トラックごとに使うというのがセオリー。 ボーカルやベースなどには合うと思う。高速なアタックタイムを生かして、打楽器の頭をつぶしたいときも有効だ。 ミックス全体にかける場合は、VCAコンプのPC4K S-Typeや、fxコンプなどナチュラルなタイプがベター。

とりあえずベースで試してみた。ベースは自作ダイレクトボックスからオーディオインターフェイスのUH-7000を通しCakewalkで録音。ラインなので、どうしてもベースのぶっとさみたいなものがスポイルされやすい。このコンプを強めに使うと、そういう部分を多少補完できる。 下図はコンプ適用前と後の波形。明らかに音量が整えられている。

コンプ適用前

下がコンプ適用後



まとめ

古典的な定番コンプレッサーを疑似体験しておくという意味でも楽しめるPC76。


2019/01/20

ピアノの練習をしようと思ったら
へバーデン結節だわさ

ピアノの練習は昨年夏前で途絶えていた。昨年夏が異常に暑くて、ピアノが弾ける環境ではなかったから。そのままズルズルと涼しくなっても弾かないまま半年以上経過。

最近ピアノを録音する環境を整えたので、再びピアノの練習を始めようと思って、弾き始めたら、左手小指に違和感を感じる。 痛みが走るので腱鞘炎か? 練習してないのに腱鞘炎はないだろう。小指の第一関節が見た目にも少しおかしい。これは以前から気にはなっていた。でも痛みはなかったので放置していた。

今回は明らかに痛みがあるので放置はできない。痛いままピアノを弾くというのは、体が悲鳴をあげているということなので、絶対やめた方がいい。ギターもちょっと触ってみたが、まだギターの方が痛みは感じにくい。 どうやらピアノはギター以上に手を酷使するようだ。オクターブを左手で弾くような場合、結構手を広げて、各指に負荷がかかる。そうすると痛い。特に第一関節を反らせようとすると痛い。実際には関節の柔軟性が失われていて反らせられなかった。 ほかの指はどうかチェックしたら、右手の薬指もあまり反らない。ただ見た目は普通。

症状を観察していくと、へバーデン結節が濃厚だ。この病気は40代以降の女性に多いらしい。原因不明で、手をよく使う人がなりやすいという話。指の第一関節が変形したり、炎症を起こし、関節がいびつになって、曲がりぱなしになってしまったりするらしい。痛みは、そのうちなくなるという話もある。そして治療法はないという。

へバーデン結節の情報を調べていくと、仮説が成り立つ。原因不明というのは、ちゃんと分かっていないだけで、原因は素人目にも結構明らかである。そして治療法というか進行を抑えることも可能。だから今何をすべきかも明らか。単に古い情報に流されているような気がしてならない。

女性に多いというのも、患者に女性が多かっただけかもしれない。見た目を気にしない男性は病院にも行かなかったということもあり得る。どちらにしても更年期による体質の変化が影響している。

手先を使う人がなりやすいというのは、手を酷使するからに他ならない。逆に手に負担をかけなければ、この病気になっていても気付かないかもしれない。というか病気ではなく、誰もに、そういう時期があって、それに気付くかどうかの差のように思う。もちろん個人差はあると思うが。

今回、左手小指に、その症状が出ているが、一番負荷がかからない指がどうして?と始め思ったが、理由は明らかで、一番力に耐えられない指だから、ほかの指では、どうってことない負荷でも、小指だと負けてしまうということ。 ピアノなどの楽器は、小指の負荷は相当なもの。本来ならば小指には小指が耐えられるだけの負荷しか与えてはいけない。ほかの指と同等の力に耐えさせようとするのは、本当に酷な話。さらに左手というのは効き手と違って、思い通りに動きにくいので、負荷に負けやすいのだ。

とりあえず、手を酷使するようなことは当分やめておく。その期間は不明だが、半年から数年という単位になりそう。ピアノはお預け。ギターもお預け。 仕事でも指先に力がかかる作業は可能な限り避けようと思う。このまま手を酷使すると、ほかの指も炎症を起こして、関節が曲がったきりになってしまう。まずは炎症を起こさせないために、極力使わないことが重要。炎症さえ起きなければ、曲がりっぱなしになることはないはず。
趣味の楽器を触れないのは残念だが、今までも半年ごとにちょっと触る程度だったので、あえて今やり始めることもないだろう。

そして、次にやることは、その原因となっている部分への対策。 おそらく更年期に多いということは、いままで体の中で作り出せていた栄養素が作れなくなって、不足しているということ。 不足分を補うために体は身を削り始める。その代償の一部が指に来ている。 では、その栄養素を積極的に入れてあげれば、症状は緩和すると思われる。 具体的には、カルシウムやマグネシウム、大豆に含まれる栄養素などなど。調べればいろいろ出てくる。

このへバーデン結節は数年で痛みが引くという報告が多い。おそらく体質が変化し安定するまでの期間があるのだと思う。 この期間はおとなしくしていることが正解で、無理をすると指が曲がってしまうだろう。

過去のメモをチェックしていたら、2年前に小指の異変に気付いていた。 おかしいと思った時点で、すぐ治療すべきだった。 へバーデン結節で曲がってしまった指は、もう元には戻らないので、早め早めがいかに重要かを痛感。 私の場合、小指を反らせることはもうできない。ギターを弾くときに若干不自由する程度だが。

2019/01/19

Audacity ASIO対応にしてみる

AudacityをWin10で使うようにしてから、レイテンシーが毎回大きく変化してしまう。これでは多重録音ができない。 そこで、AudacityをASIO対応にすれば、改善されるはず。 ただし、ライセンスの関係から自分でコンパイルする必要がある。コンパイルにはマイクロソフトの巨大な開発環境であるVisualStudioが必須で、数G単位でHDDを食ってしまう。ということで放置状態が続いていた。 そこで代わりにCakewalkを使おうかと先週セッティングしたところ。

そんな中、たまたまAudaictyのASIO対応コンパイル手順が書かれたサイトを見つけてしまった。
AudacityをASIO対応でコンパイルする
VisualStudioの設定なんて自力ではできそうもないけど、ここまで日本語で丁寧に書かれていたら、何も知らなくても出来そうに思えてくる。ということでAudacityのASIO対応をやってみることにした。
結果は、開発環境さえ整ってしまえば簡単であった。 上記サイトとは若干違う方法を取ったので、以下に手順をメモっておく。


コンパイル手順

通常の最新版Audacity2.3.0をWindows10にインストール。すでに最新版がインストールされていれば、そのままにしておく。

下記ソフトウェアをダウンロード
1 Git (43.5MB これを使ってwxWidgetsとAudacityのソースファイルをダウンロードする)
2 ASIO SDK (4.70 MB)
3 Microsoft Visual Studio 2017 Community(C++ 1GB以上)


GITをインストール(NEXTをクリックしていくだけ)
コマンドプロンプトからGITを使ってwxWidgets(クロスプラットフォーム環境)とaudacityのソースをCドライブ直下にダウンロード。
CD C:\ 
git clone --recurse-submodules https://github.com/audacity/wxWidgets/
git clone https://github.com/audacity/audacity/


環境変数を登録
ASIOSDK_DIR c:\ASIOSDK2
WXWIN c:\wxWidgets

C:\wxWidgets\build\msw\wx_vc15.slnをVisualStudioで開く。
_custom_buildのビルド
ソリューション'wx_vc15'のソリューションのビルド

C:\audacity\win\audacity.slnをVisualStudioで開く。
Audacityのビルド

C:\audacity\win\Releaseに出来上がったAudacity.exeを通常版のAudacity.exeと差し替える。
C:\wxWidgets\lib\vc_dllにできたdllをすべてAudacityフォルダに入れる。もともとあったdllはすべてどこか別の場所に移動しておく。



以上でAudacityがASIO対応になった。

リンク先と違って、 あらかじめ通常版のAudacityをインストールしておく理由は、設定がそのまま継承できるから。いろいろカスタマイズしてあるので、それがクリアされるのが嫌だっという話。GitからダウンロードしたAudaictyは2.3.1alphaの最新版。



レイテンシはどうなった?

ASIOのおかげで、ばっちり再現性のある遅延となった。オーディオインターフェイスはタスカムのHU-7000を使っているのだが、レイテンシーモードが5つあって、それぞれ違うので、計測してみた。結果は以下の通り。

ASIO latency HU-7000 48000Hz 24bit(1sample=0.02msec)
highest latency 2620sample -54.6msec
high latency 1635sample -34.06msec
normal latency 1088sample -22.48msec
low latency 824sample -17.16msec
lowest latency 676sample -14.08msec

lowestでも10msecは切れないんだ。まぁAudacityで使う場合は、レイテンシーが短いことよりも再現性が重要なので、CPUへの負荷が少なく安定しているのが一番。今後試しながら決めていくが、ノーマル以上で使うと思う。