このページの本文へ

前へ 1 2 3 次へ

塩田紳二のWindows 8 IN-N-OUT 第22回

アプリに合わせてサウンド再生を細かく制御するWindows 8

2012年10月12日 12時00分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

 今回はあまり言及されることのない、Windows 8でのサウンド機能の改良について解説しよう。

Windowsのサウンド機能の変遷

 覚えている方もおられるだろうが、Windowsが最初に登場したとき、サウンド機能はパソコンの標準機能ではなかった。正式にサウンドカードなどがサポートされたのは、Windows 3.0からだ。DOSの時代にはいろいろなサウンドカードが存在したが、Windows 3.0用に1991年に登場した「Multimedia Extension」によって、CD-ROMドライブとサウンドカードが正式サポートされたのだ。また、マイクロソフトが「Multimedia PC」なる仕様を提案し、パソコンメーカーなどにサウンドカードの搭載を呼びかけたこともあった。

 初期のサウンドカードは、現在でいうPCM音源とMIDI音源を搭載しており、多く場合CD-ROMドライブ用のインターフェースを持っていた。当時は現在のストレージ用インターフェースの標準規格である「ATA」が制定される前であり、いくつかの規格が存在した。また音楽用CDの再生はCD-ROMドライブ側の機能を使う関係で、スピーカーに接続するサウンドカードと音声出力を接続する必要もあったからだ。

 その後サウンド機能はパソコンの標準機能となっていき、その過程で圧縮音声データの伸張やMIDI音源、CD-DA再生、ミキサーなどがソフトウェアで実現された。また動画再生性能も向上し、オーバーレイを使わずにある程度の品質の動画を再生できるようになった。

 動画は必然的に音声再生をともなうが、当時は動画再生とサウンドの再生タイミングを合わせることも難しかった。MP3の再生は、Windows 98で可能になっていたが、ソフトウェア処理による遅延があり、音質的にはあまりいいものではなかった。再生タイミングによっては、テンポが変わったりノイズが入ることもあった。

 こうした問題もあってWindowsでは、ネットワークによるパケットの送信速度(一定時間内に送信するパケット数)に制限を加えて、サウンド再生のための処理時間を確保できるようにした。この制限はいまでもレジストリに残っている。

Windows 8でのメディア再生機能の改良は
バッテリー駆動時間を延ばすため

 Windows 8ではバッテリー寿命や消費電力の改善のため、サウンド/ビデオの処理をハードウェアで行なう「オフロード」が可能になるように作られた。もちろん従来のWindowsでも、ビデオ再生/録画にGPU側の機能を使うことができた。しかし、ARM系のSoCでは動画関連のハードウェアだけでなく、音楽再生や静止画のエンコード/デコード処理などにも、ハードウェア機能を搭載しているものが少なくない。

 一般的に同じ処理を行なうのであれば、ソフトウェアよりもハードウェアで処理したほうが全体の消費電力は小さくなる。そのため組み込み系SoCでは、サウンドやビデオなどファイル形式が決まったメディアデータ※1の、再生専用ハードウェアが組み込まれる傾向にあるというわけだ。
※1 MP3やMPEGなどは本来ハードウェア再生を前提として作られたフォーマット。

 ビデオキャプチャーに関しては、Windows 8ではプログラムが大きく変更されている。従来の「DirectShow Capture API」ではなく、新たに作られた「Windows 8 Media Foundation Capture API」を使うようになった。これによりエンコード性能があがり、CPU使用率を下げることが可能になったという。WMVファイルのデコードでは、Windows 7ではCPU負荷が32%だったのに対して、Windows 8では14%に下がった。またキャプチャー画像のプレビューでは、同じく27%が8%に下がっている。

 また、サウンド再生でもマルチスレッドを使うことで、再生のためのデータ形式の変換処理を並列に行なって、結果的にCPUがアイドル状態になる時間の割合が長くなった、つまり省電力化されたという。手順としては、さまざまなサウンド形式から再生に必要なデータ(サウンド機能が必要とするデータ形式)を、従来よりも大容量のバッファに保存しておき、次にデータを作る必要ができるまでは処理を休む。音楽データは時間に応じて一定量のデータを出力していくものなので、繰り返しの周期はバッファに貯める再生用データのサイズと、再生のビットレートで決まる。

 より多くのデータをバッファに貯めれば、繰り返し周期を長くできるが、処理時間も比例して長くなるので、1曲を再生する時間で見ると、スリープする時間は変わらない。これに対して、処理を高速化して大きなバッファを使えば、一曲再生する時間でのスリープ時間の比は大きくなり、かつスリープの持続時間も長くできるようになる。

 Windows 7までは、間欠的にスリープできる時間が10ミリ秒程度だった。これをWindows 8では、1秒程度まで延長したという(図1)。

図1 Windows 8ではサウンド再生のためのデータを準備するバッファを大きくし、さらに準備のための処理時間を短縮したため、次のデータを準備するまで1秒近くCPUをアイドル状態にしておくことができる

前へ 1 2 3 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン