前回の続きです。
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| サウンドカードでさっくり処理できるらしいッスよ
\
 ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ / ̄ ̄ ̄ ̄ ̄
( ・∀・) ∧ ∧ < マジで?
( ⊃ ) (゚Д゚;) \_____
 ̄ ̄ ̄ ̄ ̄ (つ_つ__
 ̄ ̄ ̄日∇ ̄\| ASUS |\
 ̄ ======== \
マジです。
ちょっとした裏技を使うことで、いとも簡単に実現できてしまいます。
以下でその方法を紹介しますが、その前にサウンドカードとは何たるかについてちと語らせていただきたく。
このサウンドカードなるパーツ、パソコンのパーツの中でも、身近な割には意識することが少ないパーツなのではないかと思います。
普段意識するのは、せいぜい「音が小さい」だの「大きい」だの、あるいは「音が出ない」ぐらいでしょうかね。
ましてや、新しくパソコンを買う際には全く意識することは無いのではないかと思います。
鳴りゃオッケー、てか、鳴るよね普通、みたいな。その程度。
意識どころか、通常はマザーボードの機能として既に載っかってたりしますので、わざわざサウンドカードだけ買うことはまず無いのではと思います。ノートパソコンの場合は尚更。
そのサウンドカード、何をやってくれるパーツか?と言いますと、答えは簡単、
「パソコンで音を鳴らす」「パソコンに音を取り込む」パーツです。
では、「音を鳴らす」「音を取り込む」とは何か?
我々人間の理解するのは言うまでもなくアナログな世界。
音も映像もそう。
しかしながらコンピュータが理解するのはデジタルな世界。
音も映像もそう。
この、デジタル界からアナログ界への橋渡しをしてくれるのが、デジタル/アナログ変換ってやつ。
D/A変換と言います。デジアナ変換とも言ったりもします。
なお、逆方向の変換(アナログをデジタルに変換する)をA/D変換と言います。同じく、アナデジ変換と言ったりもします。
細かい説明は省きますが、このA/D変換やD/A変換処理に至る一連の流れは演算処理の固まりみたいなものです。
それゆえ、その演算処理の方法や演算性能が、いわゆる「音の良さ」に直結します。
特にその演算処理の方法については、いかにイケてる演算処理をするかがデジタルオーディオメーカー各社の腕の見せ所となっています。
このように、元来デジタルデータである物を我々人間の耳に届けるまでの間には膨大な演算処理がなされる訳ですが、それを苦もなくこなしているのが、今回の主役であるところの「サウンドカード」になります。
その「膨大な演算処理」ですが、これをCPUでやらせていると音を鳴らすたびにCPUが食われてしまうことになり、いささか気分が良い物ではありません。
音が鳴るたびにCPUが食われてたんじゃ、常に音が出るようなソフト(ゲームとか)なんかだと死活問題です。
その解決策として、音声関連の演算はCPUとは別のプロセッサを乗っけて、そこにお任せしてしまおうという手が考え出されました。
その「別のプロセッサ」のことは、聞いたこともあるかと思いますが、DSP(デジタルシグナルプロセッサ)と呼ばれています。
「CPUとは別のプロセッサを乗っけてそこにお任せ」という手法は、グラフィックカードを例に挙げると分かりやすいかも知れません。
nVidiaのGeForceとかATIのRADEONとかのチップ、これがまさにCPUに代わり画像処理を担うプロセッサになります。
大雑把ですが、サウンドカードの何たるかがご理解頂けたでしょうか。
さてそのサウンドカード、演算処理の方法によって音が変化すると書きました。
「音が変化」というのは、「原音に限りなく忠実たる」方向での変化だけでなく、「演算処理によって多種多様なエフェクトをかける」方向での変化もあります。
これがオーディオメーカー各社の「いかにイケてる演算処理をするか」という「味付け」の部分ですが、それではその味付け部分をもっとアグレッシブに弄ると、どうなるでしょうか?
答えは、今お使いのパソコンの中にもあるかも知れません。
例えば、安物のオンボードサウンドとして頻出の、Realtek HD Audioチップを使っている場合、コントロールパネルを見ると以下のような設定項目があるかと思います。
いくつか例を挙げると、

リバーブの設定だとか

イコライザの設定とか

録音に関しても、ノイズキャンセルや、指向性録音といった機能とか。
これが全て、DSPによる演算処理の賜物です。
しかも、エフェクトかけたからといって音が遅れるわけでもなく、即時反映です。
つまり、膨大な演算を全てリアルタイムでこなしているって訳です。
すげくね?すげくね?DSPすげくね?
このDSPのスゲエ機能を使って、リアルタイムに、かつ、マシンに負荷を掛けることなく空線信号をキャンセリングしてしまおうというのが、今回の内容になります(え?ようやく本題??)。
リバーブやイコライザのような複雑な処理すらも涼しい顔してやってのけるので、空線信号キャンセリングのような簡単なノッチフィルタなんて、DSP的には朝飯前だろ常識で考えてとか思いますが、空線信号のキャンセリングなど、さてどうやって演算させようか。
当然エフェクトのプリセットには入っていないし、かといって自前でドライバを書く能力などもないし、うーむ。
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 自分でエフェクト作れるサウンドカードがあるらしいッすよ
\
 ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ / ̄ ̄ ̄ ̄ ̄
( ・∀・) ∧ ∧ < マジで?
( ⊃ ) (゚Д゚;) \_____
 ̄ ̄ ̄ ̄ ̄ (つ_つ__
 ̄ ̄ ̄日∇ ̄\| ASUS |\
 ̄ ======== \
はい、マジです。
これ以上引っ張ると怒られそうなので、いい加減行きましょうか。
SoundBlaster+kx Driverで作る
JRタイプ空線信号キャンセラー
さて上にも書きましたとおり、今回はこいつを使います。

サウンドカードの定番、SoundBlasterシリーズのひとつ。
SoundBlaster Live!Value。SBLiveと略して呼ばれたりします。
登場はなんと1998年の9月と、今から10年前!
今ならヤフオクや中古ショップ価格で1000円前後と超お買い得です。
当時は圧倒的な低ノイズと再生品質に多彩なエフェクト、それから光・同軸デジタルオーディオ入出力に対応しているということでゲーマーならずとも注目を浴びた製品でした。
私が買った理由も、1万円ちょいの値段で光・同軸デジタルオーディオI/Oが付いてくるってところでした。

因みに載ってるDSPチップはE-muのEMU10K1-ECFというチップ。
E-muと言えば、サンプラーだのシンセだので名を馳せたブランド。後にEnsoniqを買収したりもしてました。
Ensoniqと言えば90年代サウンドには欠かせないシンセです。VFXハァハア(´Д`;)
E-muはその後SoundBlasterのCreative Techonology社へ買収されましたが、Creative社のサウンドカードに載るDSPチップを開発していたり、ソフトシンセを開発していたりと往年の勢いは衰えていないようです。
このEMU10K1はCreativeによる買収後に両者合作で作られたチップで、処理能力は1000MIPSとのこと。
linuxのBogoMips値との比較だと、おおよそPentiumIII-500MHz程度の処理能力になる模様。
単純な比較はできませんが、本当だとすると地味に凄いやつです。
※もっとも、MIPS値だけで処理能力を測ることはナンセンスですし、何よりBogoMipsの値自体がいまいち信用ならないという話も...
そんなビンテージ物のサウンドカードを何で今頃使うのか、ですが、実はこのSBLive!シリーズに限らず、これ以降に発売されたSoundBlasterシリーズのサウンドカードに乗ってるDSP、これが相当イケてるのです。
いや正確には、このDSPを操るドライバが相当イケてるのです。

それがこの kX Projectがリリースしているカスタムドライバ、「kX Driver」。
ウェブサイトはこちら。
先にも述べたとおり、DSP自体はエフェクトのための演算処理をひたすら頑張るだけなので、エフェクトを掛けたければDSPに対して処理をお願いしなくてはいけません。
つまり、DSPに対してどのような処理を行わせるかはドライバに実装されている機能次第です。
もしかしたらDSPが持っている能力の半分も引き出せていないのかも知れません。
このkX Driverは、これらDSPへ処理させる内容を、純正ドライバとは比較にならないほど多岐に渡り細分化・高機能化させ、かつ、それらをユーザ側で自由に組み合わせて使うことができるという、超素晴らしいデバイスドライバになります。
これを使うと、普通のサウンドカードがプロ用の入出力デバイスになる!という謳い文句はあながち伊達ではないのかも、と思えます。
早速使ってみましょう。
最新版のドライバをダウンロードし、手順に沿ってインストールするとドライバがkX Driverに置き換わり、タスクトレイにkX Driverのアイコンが登場します。(Windows2000は注意:後述)

アイコンをダブルクリックするとミキサーコンソールが、
右クリックするとメニュー項目が表示されます。
えらくメニュー項目が多いですが、今回攻め入るのは「kX DSP」になります。

これが「kX DSP」の画面。
何やら地図のような回路図のような画面ですが、これがこのサウンドカードへの音声の入出力マップになります。
各オブジェクトについての簡単な説明は以下の図を見てみてください。

上の図を使い、サウンドカードのライン入力から入力された信号がどのような流れを経るかについて着目して説明します。
ライン入力端子から入力された音声信号は、まずカードへの音声入力を束ねる「prolog」に集められ、そこからカード内部へ解き放たれます。
prologから出た音声信号は、ミキサーオブジェクトである「xrouting」への配線がされているので、xroutingへ送られます(epilogへも配線されていますがここでは割愛)。
xroutingへ行った音声は、OSやアプリからの音声出力を束ねる「FX Bus」からの音声出力とミキシングされた後、xroutingの右側にある端子より出力されます。
xroutingから出力された音声は、いくつかのエフェクトを経た上で出力オブジェクト「epilog」へ渡され、そこからスピーカ出力端子やアプリの録音入力へ渡され、我々の耳に届いたり、また、録音入力を使うアプリへ渡されます。
このように、信号の流れをオブジェクト+配線ベースで制御できるのがこの「kX DSP」です。
さてここにどうやって空線信号キャンセラーを乗っけていくかですが、散々引っ張った割には非常にあっけなくできてしまいます。
ここで追加できるエフェクトの中にノッチフィルタがあるので、そいつをここのマップ上に追加して、カットオフ周波数をセットしてやれば万事OKです。

kx DSPの画面上で右クリックすると、ずらっとメニューが出てきますが、そこから「EQ Notch」を選択し追加してみてください。
オブジェクトをマイクロコードに変換する際の最適化順について、どうするかのメニューが出てきますが、よく分からないので適当にOKでかわすと、EQ Notchのオブジェクトが出てくると思います。

この小さな箱がノッチフィルタの機能を持つオブジェクト。
箱の左側にある赤く小さな端子が入力側端子、右側にある小さな端子が出力側端子を模しており、さながらハードウェアエフェクターのようです。
ちなみに各々の端子の上にマウスポインタを持っていくと、ポップアップでその端子の説明が出てきます。

出力側端子の下側にマウスポインタを持っていくと「outr」と出てきました。
出力側(out)の右側チャンネル(right)ってことです。
このポップアップによる説明は、kx DSPでオブジェクトを追加したり配線を変えたりする際には非常に有用です。
特に端子が山ほどあるミキサー系オブジェクトや入出力系オブジェクトなどのように、「あれ、これって何処だっけ」となりがちな場合には大変助かります。
さてその追加されたEQ Notchをダブルクリックしてみると、ノッチフィルタの設定画面が出てきます。

わざわざ説明するまでもないと思いますが、上がカットオフ周波数、下がその帯域幅です。
今回はJR方式の空線信号をキャンセルするので、カットオフ周波数を2280Hzにセットします。帯域幅はデフォルトのままでよいでしょう。
そしてここでセットしたパラメータは保存しておくことができます。

分かりやすい名前を付けて保存しておくと良いでしょう。

なお、保存したパラメータは、ここから一発で呼び出すことができます。

さてノッチフィルタの用意はできました。
あとはこのノッチフィルタを既存の信号ラインに割り込ませてあげれば万事オッケーです。
どこに割り込ませてあげるかですが、ミキサーに入る前に割り込ませてあげれば、アプリの録音入力に行く信号とスピーカ等外部端子に出る信号の全てに対してキャンセリングが利きますので、そこに入れてみることにしました。
今回、無線機からの音声入力はサウンドカードのAUX端子に入れることにしたので、その音声信号はprologのAC97アナログ出力に出ることになります。
AC97アナログ出力ってprologの何処に出るのよって場合は、端子の上にマウスポインタをゆっくり乗せて行けば分かります(笑)

ここですね。
ついでにお話ししておきますが、このサウンドカード(SoundBlaster Live!Value)のアナログ入力は一旦AC97コーデックに入り、そこで入力ソースの選択とA/D変換が行われた後、はじめてこのprologへ渡ります。図にするとこんな感じ。
prologの出力端子にライン入力やAUX入力やマイク入力が無いのはそのせいです。
なお、デジタル入力については、直接prologに入ります。
マウスポインタでprologの出力端子をゆっくり撫でていくと、SPDIF Right in とか Coaxial Left in とかいう端子があるかと思います。
これはつまり、ライン入力やAUX入力、マイク入力のそれぞれに対して個別のエフェクトを掛けることができないということです。
今回は意識する必要は無いですが、今後応用する際に頭の隅に入れておくと良いでしょう。
閑話休題、それでは早速バイパス配線工事とまいりましょうか。

↑まずは既存の配線を切断し、

↑prologのAC97アナログ出力をノッチフィルタの入力に入れ、

↑ノッチフィルタの出力をxroutingの入力に入れれば完成です。
全体図はこちら。

prologのAC97出力→ノッチフィルタ→xroutingのAC97入力というバイパスルートが出来上がりました。
さてここまできたら、無線機からの出力をサウンドカードのAUX端子へ入れ、kx DriverのAC97コーデックパネルで入力ソースをAUXに選んでみましょう。

気を付ける点としては、上記パネルのスライダーの部分で、該当入力端子(今回はAUX)をミュートしてあげるという点です。
これ、いまいち意味が分からないのですが、ここでミュートせずにいると、各入力端子に入れられた音が各種ミキサーの設定如何によらず、ダイレクトにスピーカーから出てきてしまいます。マスターボリュームをミュートしてても音が出る。謎。
さて、上記の準備が出来たら、無線機にJR列車無線の指令側周波数をセット。
いざ!耳をすませば!
どうでしょう、空線信号は消えましたか?
綺麗に空線信号「だけ」消えていれば、大成功です。
さてでは最終目標であるストリーミングを行ってみましょうか。
Windows Mediaエンコーダを起動し、入力ソースを選び、ビットレートを選択して、エンコード開始!
そしてWindowsMobileのPDAでWindowsMediaPlayerを起動して、いざ受信!
∧_∧ +
(0゜・∀・) ワクワクテカテカ
(0゜∪ ∪ +
と__)__) +

ぴぃ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜(2280Hz)
(>'A`)>アアアアアアアアアアアアア---------------オゥ!!!!
な、なぜ??
EQ Notchの位置を変えたり、あれこれ試行錯誤してみるも状況は改善せず。
いや、それどころか

prologの出力を全部ぶった切っても音が出続けている....
これはいったい...

ミキサーパネルを色々弄ってみたところ、録音ミキサーパネルのAC97ソーススライダーで音を切らないと音が止まないことが判明。
というか、AC97の音を録音するにはここ切っちゃダメなんじゃ...?
これはつまり、AC97コーデックを経由した音声ソースをアプリへの音声入力として選択する場合は、kX DSPのあのマップ上にないルートで音声データの受け渡しが行われていると言うことか?

さて困った。
スピーカーから聴く分にはこれで目的は達成だけど、できることなら最終目的まで到達したい。
どうしたもんか。
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| xroutingすっ飛ばしてepilogに入れちゃえば良いらしいッスよ
\
 ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ / ̄ ̄ ̄ ̄ ̄
( ・∀・) ∧ ∧ < マジで?
( ⊃ ) (゚Д゚;) \_____
 ̄ ̄ ̄ ̄ ̄ (つ_つ__
 ̄ ̄ ̄日∇ ̄\| ASUS |\
 ̄ ======== \
おーなるほど確かに。
録音ソースとしてAC97を選択する(ミュートを解除する)と、謎のルート経由で未エフェクト状態の音声が飛び込んで来ちゃいますが、AC97をミュート状態にした上で、その横からエフェクト済みの音声を突っ込んであげれば良いと。
早速試してみましょう。

EQ Notchの出力を、xroutingの入力ととepilogの入力(Rec IN)にバイワイヤリングしてみました。
xroutingへの入力を切ってしまうと、スピーカへの出力も切れてしまうので、これは残しておきます。
さぁ、それでは再びWindows Mediaエンコーダを起動し、入力ソースを選び、ビットレートを選択して、エンコード開始!
そしてWindowsMobileのPDAでWindowsMediaPlayerを起動して、いざ受信!
∧_∧ +
(0゜・∀・) ワクワクテカテカ
(0゜∪ ∪ +
と__)__) +
・・・・・・・・・・・。
お?これは?
試しにノッチフィルタをOFFにしてみると...

ぴぃ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜(2280Hz)
おおおお!これは遂に!
(・∀・)イェア!
ですな。
これこそが私が待ち望んでいた動作です。
エフェクトにCPUを使わないので、動作が不安定になることもなく、当然CPUへの負荷も一切無く、こりゃまた極めて快適です。
これぞまさに
゚ | ・ | .+o 。| o。 | *。 |
*o ゚ |+ | ・゚ ∩___∩ +・ o |*
o○+ | |i . | ノ ヽ ゚| o ○。
・+ ・ l . / > < | ・|*゚ + |
゚ |i | + | //// ( _●_) ミ |! |
o。! |! ゚o 彡、 l⌒l ノ | * ゚ |
。*゚ l ・ ゚ / __ \ \ヽ |o ゚。・ ゚
*o゚ |! | 。(___) \__) + *|
。 | ・ o ゚l O| / *゚・ +゚ ||
|o |・゚ | /\ \ | ゚ |
o+ |!*。| | / ) ) | *
* ゚ l| | ∪ ( \ o.+ | ・
|l + ゚o i \,,_) ○・ |o゚
_|\∧∧∧MMMM∧∧∧/|_
> <
/\ ──┐| | \ ヽ| |ヽ ム ヒ | |
/ \ / / | ̄| ̄ 月 ヒ | |
\ _ノ _/ / | ノ \ ノ L_い o o
> <
|
その後ちょっとした改良を加え、最終的な形態がこちら。

ノッチフィルタの後ろにノイズゲートを入れることで、ノッチフィルタで空線信号を取り除いた後に残るノイズをばっさり切ってます。
また、epilogに本来入るはずだったxroutingからの出力を救済するため、ステレオミキサーを1個追加し、ノッチフィルタ+ノイズゲートの出力とxroutingとの出力をミックスしてepilogのREC inへ入れています。
それ以外は特に手を入れていません。
とても惜しいのが、先にも少し述べたように、この「ノッチフィルタ+ノイズゲート」のフィルタが、アナログソースの全てに対して掛かってしまうこと。
そのため、この設定を常用するかと言われるとなかなか難しいところです。
そんな時には、このkX DSPの設定をごっそり保存しておき、必要に応じてその設定を読み込んで使うようにしましょう。
ここで、設定の保存・読み込みが出来ます。
こうしておけば、普段はノッチフィルタの無い通常セッティングにしておいて、列車無線を聴きたくなったらノッチフィルタ有り版の設定を読み込み、いざ臨戦態勢!とすることができます。
本当は、各アナログ入力毎にフィルタを掛けることが出来れば一番良いんですけどねえ...
それはまた高級なサウンドカードを買えと言うことでしょう。
さて長々と引っ張ってきましたこのkx Driver、今回はノッチフィルタぐらいしか使いませんでしたが、見ての通り多大なエフェクトが装備されています。
エフェクト以外にも、SoundFontやKX Automation(MIDI入力によりDSPのエフェクトをトリガーしたりパラメータを変更したりする。スゲエ!)といった機能、また、ASIO入力にも対応していたりするので、DTMっぽいことを手軽に楽しむこともできます。
該当サウンドカードをお持ちの方、是非一度試してみてください。
古いカードでも、結構楽しめますよ!
補足
kx Driver 3539から、ドライバのコンパイラが変わったようで、Windows2000で動かなくなりました。
XP以降でのご利用をお勧めします....が、有志により再コンパイルが行われ、Windows2000上でも動くようになったバージョンが存在します。
ちょっと前まではダウンロードできましたが、今は出来なくなってるようなので期間限定でここでもミラーしておきます。どうぞ。
補足2
JR東日本のサイトにもありますが、JR列車無線は2007年よりデジタル化への移行中です。

既に山手線はデジタル化が完了し聞けなくなりました。
デジタル化のロードマップがJR東日本のサイトにもありますが、この空線信号キャンセラーが役立つのは、首都圏に限って言えば2009年中までのようです。

警察無線が聞けなくなったときほどのインパクトは無いにせよ、最近では道路公団の連絡用無線(今はNEXCOになりましたが)が聞けなくなるなど、各分野でも着々とデジタル化の波が訪れて来ています。
時代の流れとはいえ、聞けなくなるのは少し寂しいですね。
「ピンポンパンポン♪」の旅客一斉指令が聞けるのはいつまでかなぁ。
|