ひもとけば
パソコンの録音
パソコンのサウンドカードは、もっとも古い標準化されたインタフェースカードで、IBM ATでは、CDドライブを接続する目的でほとんど標準的に搭載されていました。
いまでも、「Sound Blaster 互換」と言うことがあります。これを「レガシーオーディオ機能」と記されますが立派に現役です。
サウンドカードのマイクの入力は、A/D(アナログ/デジタル)変換機です。一定周期で波形をサンプリングしてデジタル化します。
マイクがコイルと永久磁石でできているとすると、マイクは空気の振動で電流を生じます。サウンドカードは、この電圧の変化を時系列に測定していきます。
サウンドカードは、温度計などとに次ぐ、普及度の高い計測機器と見ることができます。
しかし、ほとんど使われていません。一部、オシロスコープや騒音計に使われているだけです。
この話は、サウンドカードが、正確に電圧変化の時系列データを生成することを言っているわけですが、OS がデジタル・ミキシングをするようになると、この話も昔語りになります。
デジタル・ミキシング
サーバーマシンがあって、まったくサウンド機能がありません。
このサーバに、別のパソコンから「アクセサリー」「リモートデスクトップ接続」とやって、ログインすると、ちゃんとタスクバーにスピーカーマークがあります。
サーバー上でメディアプレーヤーなどが実行できます。音を出すアプリケーションを複数動かせばミキシングされて聞こえます。
そんな使い方に何の意味もないのかもしれませんが、技術的には大変興味深いものです。
このことは、Windows は、デジタル・ミキシングをしていることを示しています。
DSP(デジタル信号処理)
Core Audio と言うのを聞くので調べると、ノイズリダクションとかエコーキャンセラー、マイクアレイと言った電話の話題で良く聞くDSPのことが出ています。
デジタル・ミキシングだけでなく、Windows はソフトウエアでDSPを行っていると言うことです。
デジタル音声とリアルタイム性
遅延
音の波形を電気の波形に変換して伝えれば、電気は地球を7回半/秒ですから、地球の裏側の人と通話しても71msの遅延です。
サンプリングして送った場合でも、大差ない速度で遅れます。
1024Kbpsの回線があったら、16ビット間隔ごとにサンプリングを行えば、サンプリングレート 64KHzのデジタル音声が電気並みに送れます。1024Kbpsのデジタル回線は16チャンネルの音声を遅延なく送ることができます。
こう考えると、遅延はデジタル化そのものの宿命ではないようです。
-
パケット化
前述の話は1Mbpsの回線を16本の電話線に見立てるものですが、16本の電話線は常時使われているわけではないので、もっと多くの人に売ることができると考えたのだと思います。
タイムスロットを割り当てるのは止めて、何バイトかをまとめてアドレスを付けて送ると言うことを始めました。
これは当然遅延します。これが ベストエフォート と言うことの意味です。
回線が空いていても、パケット分になるまで送信されず、受け取る側もパケット全体を受け取るまで処理できません。
-
圧縮
圧縮もパケットにするのと同様、ある単位のデータを蓄積して伝送することになります。
-
ミキシング
複数の入力がある場合、アナログなら結線すれば、波形は合成され、遅延はありません。
デジタルだと、合成する数に応じて演算時間が延びることになります。
また、ソースごとにサンプリングレートが異なったり、サンプルの型が異なるのも変換が必要になります。
スピーカーにサンプリングレートの設定が必要になったりします。
リアルタイム性
映像の場合、1フレームロストしても気が付かないことが多いと思います。
音の方は、連続性が失われることにかなり敏感です。
-
音声認識のフレーム間隔は10-20ms
-
Windows の採用した音声の収集間隔は10ms
-
無音区間を詰めることは行われている
こうしたことから考えると、10ms は、何とか許容できると言った数字のようです。
クオンタム時間
Windowsにはクオンタム時間があります。現行のパソコンでは 20ms が使われるようです。スレッドに割り当てられる実行時間の単位で、入出力待ちになったりしない場合はこの時間でスイッチングが置きます。
周期的な処理を扱う場合、その間隔はクオンタム時間より十分長くなければ周期は一定になりません。
前述の 10ms は、クオンタム時間を下回っており、本来 Windows OS の守備範囲を超えています。
複数コア
最初、デジタル・ミキシングに気が付いて、なぜこの絶望的な方法が採られたのかと危惧しました。 10ms間に生じるデータは 数ms 以下で処理できる能力を持っていますが、それを正確な周期で行うことは困難です。
やっと考えが至ったのは、今やCPUはマルチコアだと言うことです。
普通にパソコンを使っていれば、十数個から数十個のプロセスが実行されています。
コアが数個になっても大したことはないようにも思えますが、ほとんどすべてのスレッドはリアルタイム性を必要としていません。
リアルタイム性が必要なのは、音や映像の再生に関わる処理だけです。しかもパーソナルユースなので、複数同時に使うケースも稀です。
おそらく3つ以上CPUがあるなら問題のほとんどは消せると思います。
実際に見たことはありませんが、クアッドコアがあり、ハイパースレッドがあるので、8CPUの状態のパソコンも普通なのでしょう。
|