USB-DACとPCオーディオ(2)
2018/06/17
PC内部で扱っているのはPCMデータ
  • 今回はWindows PC内でデジタル音楽データがどう扱われているかについてレポートしたいと思います。音楽データに限らずPCはデジタルデータを扱う機器です。従って、音楽データをPC内部で扱うために必ず何らかのデジタルデータへ変換しています。このデジタルデータですが、ずばりPCM(*1)です。

  • 我々が持っている音源データの基準はCDになりますが、CD内のデジタルデータがPCMになっています。PCMデータは元の音楽波形をサンプリングし、その音圧(Sound Pressure)を数値で格納したデータです。いわゆる我々が聴いているCD/DVDが持つPCMデータは
    • 44.1kHz(CD) / 48kHz(DVD) サンプリング周波数
    • 16bit 音圧データ
    • 2チャンネル分 (Left & Right)
    になっています(*2)

    Figure 1: CDのPCMデータ

  • Windows Media Player や Apple iTunes等の再生アプリは、このPCMデータをONボードサウンドチップ等のサウンドデバイスへ送ることで、音楽を再生しています。

再生アプリがやっていることはPCM変換
  • 我々は音楽を常にCDで聴いているかと言われれば、そんなことはありませんね。PC内にMP3やAAC等の圧縮音楽データを置き、再生アプリで聴くことの方が多いと思います。

  • しかし先に説明したように、サウンドデバイスが受け付けるのはPCMデータですね。これからわかるように再生アプリは様々な音楽データをPCMに変換してサウンドデバイスへ送るアプリケーションなのです。

    Figure 2: 再生アプリの役割

  • 例えば最初に購入したCDのデータを再生アプリ上で聴きながら、同時にMP3変換するといったこともよくやっていると思いますが、再生アプリはCDからPCMデータを取り出してサウンドデバイスへ送りつつ、そのPCMデータに対するMP3エンコードも同時に行って、PC内のディスクへMP3ファイルとして置いているわけです。

  • MP3ファイルを再生する場合は、再生アプリがMP3データをPCMデータにデコードしてサウンドデバイスへ送ります。MP3データは圧縮音源なので、エンコード/デコードの味付けについてはアプリケーションの実力を問われる(*3)ところになります。

  • ちなみにCDのPCMデータをそのまま取り出したファイルが wav ファイルです。CDデータそのままなので1分あたりのデータ量が 16bit x 2ch x 60sec x 44.1k/sec = 10MByte 程度になります。

  • 各再生アプリがサウンドデバイスへ送るPCMデータのサンプリング周波数とbit数は、各再生アプリ自身が決めています。設定を探るとbit数やサンプリング周波数の項目を見つけられるでしょう。例えば iTunes だと「再生環境設定」の「オーディオ再生ビットレート」と「オーディオ再生の B/SMPL」です。「オーディオの再生方法」...API選択については後で説明します。

PC内では音楽再生アプリが複数同時に動いている
  • PCの場合、純粋なオーディオ機器と異なり、音楽再生と並列に他のアプリケーションも動いています。その中にはシステム音の他にインターネット上のコンテンツ再生など複数の音源があります。

  • 通常のPCとしての使い方であれば全ての音を鳴らす必要があります。これら複数のアプリケーションが一つのサウンドデバイスを共有するためにシステムがミキサーを持っており、それは Audio Engine(*4)と呼ばれています。


    Figure 3: Windowsのミキサー(Audio Engine)

  • このAudio Engineですが、Figure 3で示すように、各アプリケーションが出力するPCMデータを合成し、状況によってはピークリミッタをかけてサウンドデバイスへ送ります。また各アプリケーションが出力するPCMデータは、サンプリングレートやBit数がそれぞれ異なるため、Audio Engineで合成する前にリサンプリングも行っています。

  • 複数のアプリケーションを使うPCという環境では「すばらしい仕組み」と言えますが、PCオーディオの観点では
    • 音楽鑑賞中に他のアプリケーションの音が割り込んでしまう
    • 想定と異なるPCMデジタルデータがサウンドデバイスへ送られる
    といった問題点が出ます。ちなみに私の場合、前者は問題と思いましたが、後者は実感できていません。

  • このAudio Engineが各サウンドデバイスへ送るPCMデータの設定は
     コントロールパネル→サウンド→オーディオデバイスの管理
    にてサウンドデバイス毎に行います。

  • Audio Engineの存在を理解していないと、再生アプリ側のPCM設定と何が違うのかわかりにくい点ですね。

排他モードでサウンドデバイスを占有する
  • さて、先程述べた「他のアプリの再生音割り込み」問題への対処ですが、サウンドデバイスを音楽再生アプリで占有できれば良いことになります。一般的なPCの使い方としては問題ですが、PCオーディオとしては正しいです。これは音楽再生アプリでAPIを選ぶ(*5) ことで実現できます。

  • Windowsでサウンドデバイスにデータを送るAPIには、下記の種類があります。
    • Direct Sound: 昔からあるWindows標準。Audio Engine経由でPCMデータを送る。
    • WASAPI(*6): Vista以降のWindowsが持つAPI
      • 共有モード(Shared): Audio Engine経由でPCMデータを送る。
      • 排他モード(Exclusive): Audio Engineをバイパスし、サウンドデバイスを占有する。
    • ASIO(*7): Audio Engineをバイパスし、サウンドデバイスを占有する。DTMメーカ主導API。

  • つまり、サウンドデバイスを占有するには、再生アプリが選択するAPIに、WASAPIの排他モードASIOを適用します。しかし、このWASAPI排他モードまたはASIOをAPIとして選択できる再生アプリは限られており、有名どころでは foobar2000 (*8)一択です。Figure 4に代表的な再生アプリのAPI対応を示します。


    Figure 4: 再生アプリ,APIとサウンドデバイス占有の関係

  • 上記の図からわかるように、Media PlayerはDirect Soundしか選べません。iTunesもWASAPIは共有モードしか選べません。これらの再生アプリはAudio Engineから離れられなくなっています。

  • USB-DAC等のサウンドデバイスを、ある再生アプリに占有させる使い方をしたい場合、真の意味で代表的音楽再生アプリである iTunes と Media Playerは適していないのです。そして次回説明しますが、flac再生にも同様な問題があります。

  • つまり、PCオーディオを楽しむには、音楽再生アプリに foobar2000 を使いましょうという、ここに少しばかり素人がわかりにくいと感じる要素があると思います。foobar2000 の設定/カスタマイズ情報はネットのあちこちにあるのですぐ探せますが、要は音楽を聞きたいだけなのに、ちょこちょこ設定が必要なのは理解が得られにくいのでは。

  • 今回は、PC内の音楽データについてレポートしました。次回はハイレゾ音源について話をしたいと思います。
Notes
  • PCM: Pulse Code Modulation
  • PCMのサンプリング周波数や、データのbit数には複数の種類があります。Figure 1 はCD-DAの例です。
  • でも私はその違いを実感できたことがありません。
  • 以前はKernel Mixerと呼ばれていました。
  • API: Application Programming Interface
  • WASAPI: Windows Audio Session Application Programming Interface (心の中で「わさび」と)
  • ASIO : Audio Stream Input Output (心の中で「あじ塩」と)
  • MusicBeeも良いみたいです。でも今は foobar2000 の方が情報探しやすいと感じています。そしてUSB-DACと組み合わせた、少し凝った使い方について、どこかで説明したいと考えています。
Copyright(C) 2018 Altmo
本HPについて