(57)【特許請求の範囲】
【請求項１】
落下を検知したときにディスク・ドライブに対するアクセスを停止する衝撃保護システムとオペレーティング・システムのキャッシュ機能を実現するＯＳキャッシュとを備える携帯式のコンピュータにおいてメディア・ファイルを構成する複数のデータ・ブロックを前記ディスク・ドライブからバッファに順番に読み出すことによりメディア・プレイヤーが再生する方法であって、
前記コンピュータのメモリにメディア・キャッシュを提供するステップと、
前記メディア・プレイヤーがいずれかのデータ・ブロックを前記ディスク・ドライブから前記バッファに読み出すために、前記オペレーティング・システムが提供する関数を呼び出す機能を前記コンピュータに実行させるステップと、
前記関数の呼び出しに基づいて所定の前記メディア・ファイルのデータ・ブロックが呼び出されているか否かを前記コンピュータが判断するステップと、
前記所定のメディア・ファイルのデータ・ブロックが呼び出されていることに応答して前記データ・ブロックよりサイズの大きいデータを前記コンピュータが前記メディア・キャッシュに書き込むステップと、
前記メディア・キャッシュに書き込まれたデータを前記コンピュータが前記バッファに転送するステップと、
前記バッファに転送されたデータ・ブロックに対して前記メディア・プレイヤーが再生動作をする機能を前記コンピュータに実行させるステップと
を有する再生方法。
【請求項２】
前記メディア・キャッシュに書き込むステップが前記関数をフックして前記関数が前記データ・ブロックよりサイズの大きいデータをメディア・キャッシュに書き込むように引数を修正するステップを含む請求項１に記載の再生方法。
【請求項３】
前記判断するステップが、前記ディスク・ドライブからデータを読み出すためにオペレーティング・システムが提供する複数の関数の中から前記メディア・ファイルを読み出すために呼び出された関数を選択するステップを有し、前記引数を修正するステップが前記メディア・ファイルを読み出すために呼び出された関数だけを修正する請求項２に記載の再生方法。
【請求項４】
前記いずれかのデータ・ブロックが前記複数のデータ・ブロックの先頭データ・ブロックである請求項１〜請求項３のいずれかに記載の再生方法。
【請求項５】
前記メディア・キャッシュに書き込むステップが前記メディア・ファイルの全体を前記メディア・キャッシュに書き込むステップを含む請求項１〜請求項４のいずれかに記載の再生方法。
【請求項６】
前記メディア・キャッシュに書き込むステップが前記データ・ブロックのサイズよりも大きいデータ・クラスタを書き込むステップを含む請求項１〜請求項４のいずれかに記載の再生方法。
【請求項７】
前記データ・クラスタのサイズは前記データ・ブロックのサイズの整数倍である請求項６に記載の再生方法。
【請求項８】
前記メディア・プレイヤーは前記メディア・キャッシュに書き込まれた前記データ・クラスタが前記バッファに転送されたことに応答して再生動作を開始する機能を前記コンピュータに実行させる請求項６または請求項７に記載の再生方法。
【請求項９】
前記メディア・キャッシュに書き込むステップが前記データ・クラスタに続く前記データ・ブロックのサイズよりも小さい複数のデータ・フラグメントを書き込むステップを含む請求項６〜請求項８のいずれかに記載の再生方法。
【請求項１０】
前記データ・フラグメントのサイズは前記データ・ブロックのサイズの整数分の１倍で、前記バッファに転送するステップが前記データ・ブロックのサイズに合成された複数の前記データ・フラグメントを前記バッファに転送するステップを含む請求項９に記載の再生方法。
【請求項１１】
前記メディア・キャッシュに書き込むステップが前記データ・クラスタを読み出すスレッドとは異なるスレッドを各データ・フラグメントに対して生成して書き込むステップを含む請求項９または請求項１０に記載の再生方法。
【請求項１２】
落下を検知したときにディスク・ドライブに対するアクセスを停止する衝撃保護システムとオペレーティング・システムのキャッシュ機能を実現するＯＳキャッシュとを備える携帯式のコンピュータにおいてメディア・ファイルを構成する複数のデータ・ブロックを前記ディスク・ドライブからバッファに順番に読み出すことによりメディア・プレイヤーが再生する方法であって、
前記コンピュータのメモリにメディア・キャッシュを提供するステップと、
前記メディア・プレイヤーが再生リストを記録したリスト・ファイルを読み出すために、前記オペレーティング・システムが提供する関数を呼び出す機能を前記コンピュータに実行させるステップと、
前記関数の呼び出しに基づいて前記リスト・ファイルのリストが前記メディア・ファイルを含むか否かを前記コンピュータが判断するステップと、
前記リストが前記メディア・ファイルを含むと判断したときに、前記リストに含まれる前記メディア・ファイルを前記コンピュータが前記メディア・キャッシュに書き込むステップと、
前記メディア・キャッシュに書き込まれた前記メディア・ファイルを前記コンピュータが前記バッファに転送するステップと、
前記リストに含まれる前記メディア・ファイルの少なくとも一部が前記メディア・キャッシュから前記バッファに転送された後に前記メディア・プレイヤーが再生動作をする機能を前記コンピュータに実行させるステップと
を有する再生方法。
【請求項１３】
前記リスト・ファイルのリストが複数の前記メディア・ファイルを含み、前記メディア・キャッシュに書き込むステップが、各メディア・ファイルごとに独立したスレッドを生成して書き込むステップを含む請求項１２に記載の再生方法。
【請求項１４】
前記メディア・プレイヤーがいずれかのデータ・ブロックを前記バッファに読み出すために、オペレーティング・システムが提供する関数を呼び出す機能を前記コンピュータに実行させるステップと、
前記関数の呼び出しに基づいて先頭データ・ブロックが前記メディア・キャッシュにフィルされているか否かを前記コンピュータが判断するステップと、
前記先頭データ・ブロックが前記メディア・キャッシュにフィルされていると判断したときに前記コンピュータが前記メディア・キャッシュから前記バッファに前記先頭データ・ブロックを転送するステップと
を有する請求項１２または請求項１３に記載の再生方法。
【請求項１５】
携帯式コンピュータであって、
プロセッサと、
バッファが定義されたメイン・メモリと、
オペレーティング・システムとメディア・ドライバとメディア・プレイヤーとを格納する不揮発性記憶装置と、
前記メディア・プレイヤーが再生するメディア・ファイルを含む複数のファイルを格納するディスク・ドライブと、
落下を検知したときにアクセスを停止して前記ディスク・ドライブを衝撃から保護する衝撃保護システムと、
前記メディア・ファイルを記憶するメディア・キャッシュと、
前記オペレーティング・システムのキャッシュ機能を実現するＯＳキャッシュと
を有し、
前記メディア・ドライバと前記オペレーティング・システムとが協働して前記携帯式コンピュータに、
前記メディア・プレイヤーがいずれかのデータ・ブロックを前記バッファに読み出すための関数を呼び出す機能と、
前記関数の呼び出しに基づいて所定の前記メディア・ファイルのデータ・ブロックが呼び出されているか否かを前記コンピュータが判断する機能と、
前記所定のメディア・ファイルのデータ・ブロックが呼び出されていることに応答して前記データ・ブロックよりサイズの大きいデータを前記メディア・キャッシュに書き込む機能と、
前記メディア・キャッシュに書き込まれたデータを前記バッファに転送する機能と、
前記バッファに転送されたデータ・ブロックを前記メディア・プレイヤーが再生する機能とを実現させる
携帯式コンピュータ。
【請求項１６】
前記メディア・キャッシュに書き込む機能が前記メディア・ファイルの全体を書き込む機能を含む請求項１５に記載の携帯式コンピュータ。
【請求項１７】
前記メディア・キャッシュに書き込む機能が前記データ・ブロックのサイズよりも大きいデータ・クラスタを書き込む機能を含む請求項１５に記載の携帯式コンピュータ。
【請求項１８】
前記メディア・キャッシュに書き込む機能が前記データ・ブロックのサイズよりも小さい複数のデータ・フラグメントを書き込む機能を含む請求項１７に記載の携帯式コンピュータ。
【請求項１９】
前記再生する機能が前記データ・クラスタが前記メディア・キャッシュに書き込まれたことに応答して再生を開始する機能を含む請求項１７または請求項１８に記載の携帯式コンピュータ。
【請求項２０】
携帯式コンピュータであって、
プロセッサと、
バッファが定義されたメイン・メモリと、
オペレーティング・システムとメディア・ドライバとメディア・プレイヤーとを格納する不揮発性記憶装置と、
前記バッファにデータ・ブロックを読み出して前記メディア・プレイヤーが再生するメディア・ファイルを格納するディスク・ドライブと、
落下を検知したときにアクセスを停止して前記ディスク・ドライブを衝撃から保護する衝撃保護システムと、
前記メディア・ファイルを記憶するメディア・キャッシュと、
前記オペレーティング・システムのキャッシュ機能を実現するＯＳキャッシュと
を有し、
前記メディア・ドライバと前記オペレーティング・システムが協働して前記携帯式コンピュータに、
前記メディア・プレイヤーが再生リストを記録したリスト・ファイルを読み出すための関数を呼び出す機能と、
前記関数の呼び出しに基づいて前記リスト・ファイルのリストが前記メディア・ファイルを含むか否かを判断する機能と、
前記リストが前記メディア・ファイルを含むと判断したときに、前記リストに含まれる前記メディア・ファイルを前記メディア・キャッシュに書き込む機能と、
前記メディア・キャッシュに書き込まれた前記メディア・ファイルを前記バッファに転送する機能と、
前記リストに含まれる前記メディア・ファイルの少なくとも一部が前記メディア・キャッシュから前記バッファに転送された後に前記メディア・プレイヤーが再生をする機能とを実現させる
携帯式コンピュータ。
【請求項２１】
メディア・ファイルを構成する複数のデータ・ブロックをバッファに順番に読み出してメディア・プレイヤーが再生することができる携帯式コンピュータであって、
落下を検知したときにディスク・ドライブに対するアクセスを停止する衝撃保護システムと、
オペレーティング・システムのキャッシュ機能を実現するＯＳキャッシュと、
前記メディア・ファイルを記憶するメディア・キャッシュと、
前記メディア・プレイヤーがいずれかのデータ・ブロックを前記ディスク・ドライブから前記バッファに読み出すために、前記オペレーティング・システムが提供する関数を呼び出す手段と、
前記関数の呼び出しに基づいて所定の前記メディア・ファイルのデータ・ブロックが呼び出されているか否かを判断する手段と、
前記所定のメディア・ファイルのデータ・ブロックが呼び出されていることに応答して前記データ・ブロックよりサイズの大きいデータを前記メディア・キャッシュに書き込む手段と、
前記メディア・キャッシュに書き込まれたデータを前記バッファに転送する手段と、
前記バッファに転送されたデータ・ブロックに対して前記メディア・プレイヤーに再生動作をさせる手段と
を有する携帯式コンピュータ。
【請求項２２】
メディア・ファイルを構成する複数のデータ・ブロックをバッファに順番に読み出してメディア・プレイヤーが再生することができる携帯式コンピュータであって、
落下を検知したときにディスク・ドライブに対するアクセスを停止する衝撃保護システムと、
オペレーティング・システムのキャッシュ機能を実現するＯＳキャッシュと、
前記メディア・ファイルを記憶するメディア・キャッシュと、
前記メディア・プレイヤーが再生リストを記録したリスト・ファイルを読み出すために、前記オペレーティング・システムが提供する関数を呼び出す手段と、
前記関数の呼び出しに基づいて前記リスト・ファイルのリストが前記メディア・ファイルを含むか否かを判断する手段と、
前記リストが前記メディア・ファイルを含むと判断したときに、前記リストに含まれる前記メディア・ファイルを前記メディア・キャッシュに書き込む手段と、
前記メディア・キャッシュに書き込まれた前記メディア・ファイルを前記バッファに転送する手段と、
前記リストに含まれる前記メディア・ファイルの少なくとも一部が前記メディア・キャッシュから前記バッファに転送された後に前記メディア・プレイヤーに再生動作をさせる手段と
を有する携帯式コンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、音楽または動画などのメディア・ファイルを、衝撃保護システムを備えた携帯式コンピュータに搭載されたディスク・ドライブから読み出して中断のない再生をする技術に関する。
【背景技術】
【０００２】
ノートブック型パーソナル・コンピュータ（以下、ノートＰＣという。）には、音楽または動画ファイル（以下、メディア・ファイルという。）を再生するソフトウエア（以下、メディア・プレイヤーという。）が実装されることがある。メディア・ファイルはファイルのサイズが大きいため通常はノートＰＣに実装されたハード・ディスク・ドライブ（ＨＤＤ）または光学ディスク・ドライブ（ＯＤＤ）などのディスク・ドライブに格納されている。ノートＰＣでは、メモリやキャッシュなどのハードウエア資源をさまざまソフトウエアで共用しているため、メディア・プレイヤーがメディア・ファイルを再生するためにそれらを専有することはできない。
【０００３】
したがって、ノートＰＣに実装されるメディア・プレイヤーでは、メディア・ファイル全体を所定のサイズのデータ・ブロックに分割して、ディスク・ドライブからメイン・メモリに設けた比較的小さなバッファにそれらを順番に読み出しながら連続的に再生している。特許文献１は、キャッシュ・メモリをプログラム別にブロックに分割し、各ブロックを１つまたは複数のプログラムにより専用的にまたは共用して使用し、各ブロックとプログラムの対応付けをＣＰＵからの指令で制御する技術を開示する。
【０００４】
特許文献２は、情報外部ソースが受信したデータだけを記憶するストリーミング・データ専用のキャッシュを設けて外部ＤＲＡＭ上または他のシステム・メモリ上での帯域幅の問題を解決する技術を開示する。特許文献３は、メイン・プロセッサとサブ・プロセッサで構成される情報処理装置において各プロセッサが好適に連係動作をするように画像データをキャッシュに先読みする技術を開示する。
【０００５】
特許文献４は、ストリーミング・データを小データ部分に分割して専用のキャッシュに送ることでキャッシュ内での効率的なストリーミング・データを管理する技術を開示する。特許文献５はストリーミング・データの先頭部分が先頭キャッシュ部で満杯になったときに、残りの部分をリング・バッファ部に書き込むことで小容量メモリでもデータの途切れをなくすことのできる技術を開示する。
【特許文献１】特開昭６２−１４４２５７号公報
【特許文献２】特開２００３−９９３２４号公報
【特許文献３】特開２００６−３１４８０号公報
【特許文献４】特開２００４−２４６８９８号公報
【特許文献５】特開２００３−１２３３８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ノートＰＣは、自動車や航空機の中やユーザの膝の上で使用されることがあるため使用中に振動や落下による衝撃が加えられることがある。ＨＤＤは回転するディスク上を極わずかな間隔を空けてヘッド／スライダが浮上しながらディスクに対するデータの書き込みまたは読み取りが行われる。ヘッド／スライダがディスク上を浮上している間にノートＰＣに大きな衝撃や振動が加わるとヘッドとディスクが接触して記録済みのデータが破壊されたりディスクが損傷したりするため、ノートＰＣにはＨＤＤを保護するために衝撃保護システムを実装する場合がある。
【０００７】
衝撃保護システムは、ノートＰＣの落下を予測させる加速度や大きな振動を検知したときにヘッド／スライダをディスクの外周より外側に設けたランプ機構に退避させる。メディア・ファイルの再生中に衝撃保護システムが動作すると、一時的にディスク・ドライブからメイン・メモリへのメディア・ファイルの読み出しが中断する。その結果メイン・メモリにバッファリングされていたデータが枯渇してメディア・プレイヤーにデータが供給されなくなり音楽が途切れたり動画が一時的に停止したりするという問題が明らかになってきた。
【０００８】
一部のメディア・プレイヤーでは、メディア・ファイルをディスク・ドライブからすべてメイン・メモリに読み出すまでは再生しないようになっているが、利用できるメディア・ファイルのサイズが比較的小さい場合やバッファを専有できるような場合に限られるため、ノートＰＣにはこのような手法は採用されていない。また、ノートＰＣに実装されるオペレーティング・システム（ＯＳ）は、ＨＤＤから読み出すデータをメイン・メモリに設けたＲＡＭディスクにプリフェッチ（先読み）するキャッシュ機能を備える。しかし、ＲＡＭディスクの容量には制限があり、またＯＳのキャッシュ機能はＨＤＤから読み出すすべてのデータを対象にしているため、メディア・ファイルの再生中にメディア・ファイルがＲＡＭディスクにフィルされている保証はないため衝撃保護システムが作動したときには再生動作の中断が生ずることがある。
【０００９】
そこで本発明の目的は、携帯式コンピュータにおいて衝撃保護システムを備えたディスク・ドライブからメディア・ファイルを読み出して中断のない再生をする方法を提供することにある。さらに本発明の目的はそのような方法を実現する携帯式コンピュータおよびコンピュータ・プログラムを提供することにある。
【課題を解決するための手段】
【００１０】
本発明は、ディスク・ドライブに対する衝撃保護システムを備える携帯式コンピュータにおいてメディア・プレイヤーが再生動作をする際に生ずる新たな課題を解決する。メディア・プレイヤーはメディア・ファイルを複数のデータ・ブロックに分割してディスク・ドライブからバッファに順番に読み出して、携帯式コンピュータの他の多くのアプリケーションとハードウエア資源を共有しながら連続再生をするように構成されている。
【００１１】
メディア・プレイヤーは、いずれかのデータ・ブロックをディスク・ドライブからバッファに読み出すために、オペレーティング・システムが提供する関数を呼び出す。本発明にかかるメディア・ドライバは関数の呼び出しに応答してデータ・ブロックよりサイズの大きいデータをメディア・キャッシュに書き込む。そしてメディア・キャッシュからバッファに転送されたデータ・ブロックに対してメディア・プレイヤーが再生動作をすることにより、衝撃保護システムが動作しても再生の中断を防ぐことができるようになる。
【００１２】
最初にメディア・プレイヤーに読み出された関数をフックしてデータ・ブロックよりサイズの大きいデータをメディア・キャッシュに書き込むように引数を修正することでメディア・キャッシュに書き込むことができる。ディスク・ドライブからはメディア・ファイル以外のファイルも呼び出されるため、オペレーティング・システムが提供する複数の関数の中からメディア・ファイルを読み出すために呼び出された関数を選択して引数を修正することでメディア・キャッシュをメディア・ファイルの専用として利用できる。さらに、携帯式コンピュータにおけるメディア・ファイル以外のファイルの処理を変更する必要がなくなる。
【００１３】
メディア・キャッシュに書き込む契機となるデータ・ブロックを先頭データ・ブロックにすれば、メディア・ファイルの最初から中断しないで再生することができるようになる。メディア・ドライバは、メディア・キャッシュにメディア・ファイルの全体を書き込んでもよい。この場合は、それ以後衝撃保護システムが動作してディスク・ドライブが停止しても当該メディア・ファイルの再生動作はまったく影響を受けない。
【００１４】
メディア・ドライバは、メディア・キャッシュにメディア・ファイルをデータ・ブロックのサイズよりも大きいデータ・クラスタとデータ・ブロックのサイズより小さい複数のデータ・フラグメントに分割して書き込んでもよい。データ・クラスタからバッファにデータ・ブロックが転送されたことに応答してメディア・プレイヤーが再生動作を開始するようにすれば、データ・クラスタのサイズを調整して、ユーザがメディア・プレイヤーに再生の指示をしてから実際に再生が開始するまでの遅延時間を調整することができる。なお、データ・クラスタのサイズはデータ・ブロックのサイズよりは大きくメディア・ファイル全体のサイズよりは小さい。
【００１５】
データ・クラスタのサイズをデータ・ブロックのサイズの整数倍とし、データ・フラグメントのサイズをデータ・ブロックのサイズの整数分の１倍にすれば、メディア・キャッシュからバッファにデータ・ブロックの単位でデータを容易に転送することができる。データ・フラグメントをそれぞれ独立したスレッドで読み出すようにすれば、衝撃保護システムの動作の影響を少なくしてディスク・ドライブから、メディア・キャッシュに書き込むことができる。なお、データ・クラスタのサイズはデータ・ブロックのサイズよりは大きくメディア・ファイル全体のサイズよりは小さい。
【００１６】
メディア・プレイヤーがリスト・ファイルを提供する場合には、ユーザは最初にディスク・ドライブからリスト・ファイルを読み出して所望のメディア・ファイルを選択する。リスト・ファイルの読み出しは続いてメディア・ファイルが読み出される可能性が高いことを意味している。最初に、メディア・プレイヤーはリスト・ファイルを読み出すために、オペレーティング・システムが提供する関数を呼び出す。メディア・ドライバはリスト・ファイルのリストがメディア・ファイルを含むか否かを判断する。メディア・ドライバはリストがメディア・ファイルを含むと判断したときに、リストに含まれるメディア・ファイルをメディア・キャッシュに書き込む。リストに含まれるメディア・ファイルの少なくとも一部がメディア・キャッシュに書き込まれた後に前記メディア・プレイヤーが再生動作をする。
【発明の効果】
【００１７】
本発明により、携帯式コンピュータにおいて衝撃保護システムを備えたディスク・ドライブからメディア・ファイルを読み出して中断のない再生をする方法を提供することができた。さらに本発明によりそのような方法を実現する携帯式コンピュータおよびコンピュータ・プログラムを提供することができた。
【発明を実施するための最良の形態】
【００１８】
図１は、ノートＰＣ１０に実装されたハードウエアの構成を示す概略ブロック図である。ＣＰＵ１１は、ノートＰＣ１０の中枢機能を担う演算処理装置で、ＯＳ、ＢＩＯＳ、デバイス・ドライバ、あるいはアプリケーション・プログラムなどを実行する。メディア・プレイヤーの再生動作もＣＰＵ１１で実行される。ＣＰＵ１１は、ノース・ブリッジ１３およびノース・ブリッジ１３にさまざまなバスを経由して接続された各デバイスを制御する。ノース・ブリッジ１３は、メイン・メモリ１５へのアクセス動作を制御するためのメモリ・コントローラ機能や、ＣＰＵ１１と他のデバイスとの間のデータ転送速度の差を吸収するためのデータ・バッファ機能などを含む。
【００１９】
メイン・メモリ１５は、ＣＰＵ３１が実行するプログラムの読み込み領域、処理データを書き込む作業領域として利用される揮発性のＲＡＭである。メイン・メモリ１５には、図２に示すようにＯＳのキャッシュ機能を実現するＯＳキャッシュ領域５５、本発明のキャッシュ機能を提供するメディア・キャッシュ領域５３、およびメディア・プレイヤー１０３の再生データを記憶するバッファ領域５１を備える。なお、メディア・キャッシュ領域５３は、メイン・メモリ１５の一部としてではなく専用のメモリで構成してもよい。ビデオ・コントローラ１５はノース・ブリッジ１３に接続され、グラフィック・アクセラレータおよびＶＲＡＭを備えており、ＣＰＵ１１からの命令を受けて描画すべき画像ファイルのイメージを生成してＶＲＡＭに書き込み、ＶＲＡＭから読み出したイメージを画像データとしてＬＣＤ１６に送る。メディア・プレイヤーが再生する動画はＬＣＤ１６に表示される。
【００２０】
サウス・ブリッジ１７は、ノース・ブリッジ１３に接続され、さまざまな周辺入出力デバイスのインターフェースやＰＣＩバス、ＰＣＩ−Ｅｘｐｒｅｓｓバスのポートを備えている。サウス・ブリッジ１７には、オーディオ・コントローラ１９およびＨＤＤ２３が接続される。オーディオ・コントローラ１９は、サウス・ブリッジ１７を経由して受け取ったディジタル音声信号をアナログ音声信号に変換してスピーカ２１に送る。メディア・プレイヤーが再生する音声はスピーカ２１から出力される。ＨＤＤ２３には、ＯＳ、デバイス・ドライバ、アプリケーション、メディア・プレイヤー、メディア・ファイルなどの周知のプログラムの他に、本実施の形態にかかるソフトウエア・プログラムであるキャッシュ・コントローラ１０９およびメディア・ドライバ１１９（いずれも図２参照）を格納する。
【００２１】
さらにサウス・ブリッジ１７は、ＰＣＩバスまたはＬＰＣバス２５を介して、従来からノートＰＣ１０に使用されているレガシー・デバイス、あるいは高速なデータ転送を要求しないデバイスに接続される。ＬＰＣバス２５には、エンベデッド・コントローラ（ＥＣ）２７、Ｉ／Ｏコントローラ４３、およびＢＩＯＳを格納したフラッシュＲＯＭ４１などが接続されている。ＥＣ２７は、８〜１６ビットのＣＰＵ、ＲＯＭ、ＲＡＭなどで構成されたマイクロ・コンピュータであり、さらに複数チャネルのＡ／Ｄ入力端子、Ｄ／Ａ出力端子、タイマー、およびディジタル入出力端子を備えている。ＥＣ２７には、それらの入出力端子を介して加速度センサ２９および電源装置を制御するパワー・コントローラ３１が接続されており、ノートＰＣ１０の内部の動作環境の管理にかかるプログラムをＣＰＵ１１とは独立して実行させることができる。
【００２２】
加速度センサ２９は、ノートＰＣ１０の筐体に発生する加速度を検出してアナログ信号としてＥＣ２７に出力する。ＥＣ２７は、加速度センサ２９から受け取った加速度情報をディジタル信号に変換して内部のＲＡＭに記憶する。ＥＣ２７とパワー・コントローラ３１との間は、専用のバスであるＳＰＩ（Serial Peripheral Interface）によって接続される。
【００２３】
パワー・コントローラ３１には、ＤＣ−ＤＣコンバータ３３が接続される。ＤＣ−ＤＣコンバータ３３は、ＡＣ／ＤＣアダプタ３９またはバッテリ３５から供給される直流電力を、ノートＰＣ１０を動作させるために必要な複数の電圧に変換し、さらに電源モードに応じて定義された電力供給区分に基づいて各々のデバイスに電力を供給する。ＡＣ／ＤＣアダプタ３９は一次側が商用電源に接続されて交流電圧を直流電圧に変換し、二次側はノートＰＣ１０に対して着脱可能である。ＡＣ／ＤＣアダプタ３９はノートＰＣ１０に接続されると、ＤＣ−ＤＣコンバータ３３とバッテリィ３５を充電する充電器３７に電力を供給する。ノートＰＣ１０はモバイル環境で使用するときにはノートＰＣ１０に対するＡＣ／ＤＣアダプタ３９の接続を外してバッテリィ３５から電力を供給する。
【００２４】
Ｉ／Ｏコントローラ４３には、キーボードやマウスなどの入力デバイス４５が接続される。フラッシュＲＯＭ４１は不揮発性で記憶内容の電気的な書き替えが可能なメモリであり、システムの起動および管理に使われる基本プログラムであるシステムＢＩＯＳ、電源および筐体内の温度などを管理するソフトウエアである各種ユーティリティ、ノートＰＣ１０の起動時にハードウエアの試験や初期化を行うソフトウエアであるＰＯＳＴ（Power-On Self Test）などを格納する。
【００２５】
図２は、本実施の形態にかかるメディア・ファイルの読み出し方法を説明するためのブロック図である。図２のブロック図は、ＯＳとしてＷｉｎｄｏｗｓ（登録商標）を例示してメディア・ファイルの読み出しに関連する主要なソフトウエアとハードウエアだけを示している。ただし、本発明はＯＳがＷｉｎｄｏｗｓの場合だけに限定されるものではなく、本発明の思想の範囲内で他の周知のＯＳに適用することもできる。図２では、メディア・コントロール１０９、メディア・ドライバ１１９、およびメディア・キャッシュ領域５３以外は周知の要素である。ライン１０２より上側に記載されたソフトウエアはプロセッサ１１のユーザ・モードで動作し、下側に記載されたソフトウエアはカーネル・モードで動作する。
【００２６】
アプリケーション１０１およびメディア・プレイヤー１０３は、ユーザがＬＣＤ１６および入力デバイス４５を通じてアクセスすることでＨＤＤ２３に格納されたさまざまなファイルを読み出すことができる。アプリケーション１０１は、メディア・ファイル以外のファイルを処理し、メディア・プレイヤー１０３はメディア・ファイルを読み取って再生スピーカ２１およびＬＣＤ１６から音声または動画を出力する。メディア・プレイヤー１０３は、メディア・ファイルを再生する際にメイン・メモリ１５のバッファ領域５１にＦＩＦＯ方式またはリング・バッファ方式で同一サイズのデータ・ブロックを再生の順番に読み出して、再生データに中断が生じないように制御している。
【００２７】
ただし、本発明は異なるサイズのデータ・ブロックを再生の順番に読み出すメディア・プレイヤーに適用することもできる。メディア・ファイルは、そのファイル名の拡張子で特定することができる。たとえば、動画ファイルにはmpg / mpeg 、vob 、mp4、m4v 、m4a 、wmv 、asf / asx 、mov 、rm / ram 、3gp 、3g2 、flv 、mqv 、wvx などの拡張子が付される。また音楽ファイルには、wav (wave) 、mid (midi) 、mp3 、wma、aif 、mld 、kmf 、mmf 、oma、flac、m3u などの拡張子が付される。
【００２８】
Kernel32.dllは、ＷｉｎｄｏｗｓのサブシステムＤＬＬ（Dynamic Link Library）の一部であり、公開されているＷｉｎｄｏｗｓＡＰＩ関数を非公開のカーネル・モード・システム・サービスへの呼び出しに変換する。たとえば、アプリケーション１０１またはメディア・プレイヤー１０３がＨＤＤ２３からファイルをメイン・メモリ１５に読み出すときにはReadFile APIというアプリケーションに公開されている関数を読み出すと、それに応じて非公開のNtoskrnl.exeに実装されているNtReadFileという内部関数が呼び出されてＨＤＤ２３からデータが出力される。
【００２９】
Ntdll.dllは、サブシステムＤＬＬを使用するための関数を提供するサポート・ライブラリである。Ntdll.dllは、ユーザ・モードから呼び出すことができるインターフェース機能（System Service Dispatch Stub）と、サブシステムＤＬＬが使用するNtReadFile関数などの内部サポート関数で構成されている。割り込みディスパッチ・テーブル（ＩＤＴ）１１１は、ＯＳによりメイン・メモリ１５に展開され、アプリケーション１０１またはメディア・プレイヤー１０３がソフトウエア割り込みを行って所定のシステム・サービスに移行するためのアドレスを各エントリーに格納する。
【００３０】
たとえば、ＣＰＵ１１のＥＡＸレジスタにシステム・サービス番号を設定してエントリーのインデックスをＩＮＴ  ０ｘ２ｅ（１６進数）と指定すれば、そのエントリーに格納されたアドレスのシステム・サービスであるシステム・サービス・ディスパッチャ（ＳＳＤ）１１５を実行して、プロセッサ１１の制御をユーザ・モードからカーネル・モードに移行させることができる。
【００３１】
ＳＳＤ１１５は、Ntoskrnl.exeの一部であり、スレッドのユーザ・モード・スタックからカーネル・モード・スタックに呼び出し元コードの引数（パラメータともいう。）をコピーする。ＳＳＤ１１５はシステム・サービス・ディスパッチ・テーブル（ＳＳＤＴ）１１３のエントリーを参照して呼び出されたシステム・サービスを実行する。ＳＳＤＴ１１３には、システム・サービスのＩＤと対応するシステム・サービスを記述するコードの先頭アドレスが格納されている。たとえば、あるエントリーにはＩＤとしてNtReadFile関数を示す情報が格納され、アドレスとしてNtReadFile関数１１７の実際のコードを記憶しているメイン・メモリ１５上のアドレスが格納されている。NtReadFile関数１１７は、Ntoskrnl.exeの一部である。
【００３２】
メディア・ドライバ１１９の構成については図３を参照して後に説明する。メディア・コントロール１０９は、ＬＣＤ１６および入力デバイス４５を通じてユーザがメディア・ドライバ１１９に対するパラメータ設定をするユーザ・インターフェースを提供する。ユーザは、メディア・コントロールが作成したウインドウを通じてメディア・キャッシュ領域５３にフィルするメディア・ファイルの種類および読み出すデータのサイズなどを指定することができる。ファイル・システム１２３は、ＨＤＤ２３に記録されているデータを管理するためにＯＳが提供するソフトウエアである。ファイル・システム１２３は、ＦＡＴ（File Allocation Table）およびディレクトリを作成してＨＤＤ２３に関するファイルの記録、読み取り、削除、または移動などを管理する。
【００３３】
ＯＳキャッシュ・マネージャ１２１はＨＤＤ２３に対するアクセスのパフォーマンスを向上させるためにＯＳが提供するソフトウエアである。ＯＳキャッシュ・マネージャ１２１は、ＨＤＤ２３に対して、ReadFile API関数やWriteFile API関数が呼び出されたときに毎回ＨＤＤ２３にアクセスしないでも処理できるように、ＯＳキャッシュ領域５５にデータをプリフェッチしてフィルする。ＯＳキャッシュ・マネージャ１２１は、ノートＰＣ１０で実行されるすべてのソフトウエアからのＨＤＤ２３に対するアクセスを対象にして、独自のアルゴリズムに基づいてＯＳキャッシュ領域５５に対するファイルのフィルおよびフラッシュを管理する。なお、新たなデータをメディア・キャッシュ領域５３やＯＳキャッシュ領域にフィルしたり、その際に古いデータをフラッシュしたりすることをキャッシングという。
【００３４】
ＡＰＳドライバ１２５は、加速度センサ２９が検出した加速度信号に特別なアルゴリズムを適用して、ノートＰＣ１０に深刻な衝撃が発生することを予測したときに停止信号を生成しＨＤＤ２３に送る。ここにＡＰＳとは、ハードディスク・アクティブ・プロテクション・システム（Active Protection System）といわれるＨＤＤ２３に対する周知の衝撃保護システムであり、加速度センサ２９とＡＰＳドライバ１２５で構成される。停止信号を受け取ったＨＤＤ２３は、直前にディスク・ドライバ１２７を通じてＯＳから送られたコマンドの処理が完了するとヘッド／スライダをランプ機構に退避させて衝撃に備えることでデータおよびディスクを衝撃から保護する。ヘッド／スライダがランプ機構に退避している間はＨＤＤ２３にアクセスするＣＰＵ１１からのコマンドは実行されない。
【００３５】
ＡＰＳドライバ１２５は、メイン・メモリ１５にキューを展開し、停止信号が生成された後にＨＤＤ２３にアクセスするために送られてきたコマンドをキューイングし、停止信号が解除された後にキューイングされたコマンドをディスク・ドライバ１２７に送る。ディスク・ドライバ１２７は、ＨＤＤ２３の動作およびデータ転送を制御するためのソフトウエアである。
【００３６】
図３は、メディア・ドライバ１１９の主要な構成を示す機能ブロック図である。Ｉ／Ｏ制御部１５１は、外部と内部の各要素とのインターフェース機能を果たす。ファイル属性照会部１５３は、アプリケーション１０１またはメディア・プレイヤー１０３からReadFile API関数が呼び出されたときに、ファイル・システム１２３に対してNtReadFile関数に設定されたハンドル・ネームに対応するファイルがメディア・ファイルであるか否かをたとえばNtQuerySystemInformationという関数を発行して問い合わせる。
【００３７】
ファイル読み取り部１５５は、ReadFile API関数に対応するNtReadFile関数を実行する。ファイル読み取り部１５５は、メディア・ファイルに対してはメディア・プレイヤー１０３で指定された引数とは異なる引数を設定してNtReadFile関数を実行し、メディア・ファイル以外のファイルに対してはアプリケーション１０１で指定された引数を変更しないでNtReadFile関数を実行する。
【００３８】
ファイル読み取り部１５５は、ファイル属性照会部１５３が、ReadFile API関数で読み出されようとしているファイルがメディア・ファイルであると判断したときに、当該メディア・ファイルを分割してメディア・キャッシュ領域５３にフィルするためのシステム・スレッドを生成する。そのシステム・スレッドはユーザ・モード・スレッドとは異なりカーネル・モードだけで動作する特殊なスレッドである。さらに、ファイル読み取り部１５５は、ファイル属性照会部１５３が、ReadFile API関数で読み取られようとしているリスト・ファイルのリストがメディア・ファイルを含むと判断したときに、当該メディア・ファイルをメディア・キャッシュ領域５３にフィルするためのシステム・スレッドを生成する。
【００３９】
メディア・キャッシュ制御部１５７は、ファイル読み取り部１５５がＨＤＤ２３から読みとったメディア・ファイルをＦＩＦＯ方式またはリング・バッファ方式でメディア・キャッシュ領域５３にキャッシングする。メディア・キャッシュ制御部１５７は、ファイル読み取り部１５５がメディア・ファイルをデータ・ブロックよりもサイズの小さい複数のデータ・フラグメントに分割してＨＤＤ２３から読み出してメディア・キャッシュ領域５３にフィルしたときには、各データ・フラグメントをデータ・ブロックのサイズに合成する。
【００４０】
ＳＳＤＴ書き換え部１５９は、メディア・ドライバ１１９がＯＳと一緒にメイン・メモリ１５にロードされるときに、ＳＳＤＴ１１３におけるNtReadFile関数というＩＤに対応するアドレスをNtReadFile関数１１７のアドレスからメディア・ドライバ１１９のアドレスに書き換える。このようにＳＳＤＴ１１３のアドレスをＯＳがあらかじめ設定した関数のアドレスから別のコードのアドレスに書き換えることを、関数をフックするという。データ・ブロック転送部１６１は、メディア・プレイヤー１０３がバッファ領域１５に読み出すために呼び出したReadFile API関数で指定されたデータ・ブロックがメディア・キャッシュ領域５３にフィルされているか否かを判断して、フィルされている場合は当該データ・ブロックをバッファ領域５１に転送する。データ・ブロック転送部１６１はフィルされていないと判断したときは処理をファイル読み取り部１５５に渡し、ファイル読み取り部１５５は、NtReadFile関数を実行してＨＤＤ２３から本実施の形態にかかる方法でメディア・ファイルを読み出す。なお、図３に示したメディア・ドライバ１１９の構成は一例であり、当業者にとって明らかな範囲で同等の機能を実現できる他のいかなる構成を採用することもできる。
【００４１】
ここで、図２および図３に基づいて従来の方法によるメディア・プレイヤー１０３によるメディア・ファイルの再生動作を説明する。ＳＳＤＴ１１３には、ＳＳＤ１１５によりNtReadFile関数のＩＤが指定されると、点線で示すようにNtReadFile関数１１７が実行されるようにアドレスが設定されている。メディア・プレイヤー１０３は、メディア・ファイルを一定のサイズのデータ・ブロックに分割してバッファ領域５１に順番に読み出しながら再生動作を行う。このとき各データ・ブロックについてReadFile API関数を呼び出すと、ＯＳのカーネルにおいて対応するNtReadFile関数１１７が実行される。各ReadFile API関数に対しては、メディア・プレイヤー１０３により、読み出しにかかるデータ・ブロックのサイズ、メディア・ファイルの先頭位置からのオフセット値、および記憶するバッファ領域５１のアドレスなどが引数として設定される。
【００４２】
NtReadFile関数１１７は、各データ・ブロックに対して呼び出されたReadFile API関数に対応して連続的に実行され、ＡＰＳドライバ１２５が停止信号を生成していないときには、ＨＤＤ２３から順番にデータ・ブロックが読み出されてバッファ領域５１に記憶される。ＯＳキャッシュ・マネージャ１２１はメディア・プレイヤー１０３だけでなくアプリケーション全体に対してサービスを提供している。したがって、メディア・ファイルのデータ・ブロックはＯＳキャッシュ領域５５にフィルされている場合もあれば、一旦フィルされた後にフラッシュされている場合もある。ＯＳキャッシュ領域５５にフィルされているデータ・ブロックは、そこからバッファ領域５１に書き込まれる。したがって、ＯＳキャッシュ領域５５にデータ・ブロックがフィルされている限り、ＡＰＳドライバ１２５が停止信号を生成してもバッファ領域５１に供給されるデータが途切れることはない。
【００４３】
しかし、ＯＳキャッシュ領域５５はメディア・ファイルに対する専用のキャッシュではないため、ＨＤＤ２３にアクセスするアプリケーション１０１の数やデータ量により、ＯＳキャッシュ領域５５にフィルされるデータが競合すると、メディア・ファイルのデータ・ブロックはフラッシュされてしまう。そのときにＡＰＳドライバ１２７が停止信号を生成すると、ＨＤＤ２３が停止してバッファ領域５１にデータ・ブロックが供給されなくなり再生動作が中断する。
【００４４】
このような問題を解決するための本実施の形態にかかる方法を図２〜図５に基づいて説明する。図４は、本実施の形態にかかるメディア・ファイルの再生方法を説明する手順を示すフローチャートである。図５（Ａ）は、メディア・プレイヤー１０３が要求するメディア・ファイル２５０のデータの単位（データ・ブロック）を示し、図５（Ｂ）と図５（Ｃ）は、メディア・ドライバ１１９がメディア・キャッシュ領域５３にキャッシングするメディア・ファイル２５０の単位を示している。図５（Ａ）に示すようにメディア・プレイヤー１０３は、メディア・ファイル２５０をデータ・ブロック＃１〜＃ｎまでのｎ個の同一サイズのデータ・ブロックに分割してバッファ領域５１に読み出す。図５（Ｂ）は、メディア・ファイル２５０の全体をメディア・キャッシュ領域５３にフィルする例で、図５（Ｃ）はメディア・ファイル２５０をデータ・クラスタ＃１ｘとデータ・フラグメント＃２ｘ〜＃ｍｘに分割してメディア・キャッシュ領域５３にフィルする例を示す。
【００４５】
再生動作を開始する前に、ＯＳと一緒にメディア・コントロール１０９とメディア・ドライバ１１９がメイン・メモリ１５にロードされ、ＳＳＤＴ書き換え部１５９によりＳＳＤＴ１１３のNtReadFileというＩＤのメイン・メモリ１５上でのアドレスが、NtReadFile関数１１７の先頭アドレスからメディア・ドライバ１１９の先頭アドレスに書き換えられてフックされている。
【００４６】
ブロック２０１ではアプリケーション１０１またはメディア・プレイヤー１０３が、ファイル・システム１２３に対して、相互に独立してCreateFile API関数およびReadFile API関数を呼び出してＨＤＤ２３からのデータの読み出し要求を行っている。ＯＳキャッシュ・マネージャ１２１は、メディア・ドライバ１１９によるメディア・キャッシュ領域５３のキャッシングとは独立してＯＳキャッシュ領域５５に対するキャッシングを管理している。メディア・プレイヤー１０３は、メディア・ファイル２５０を複数のデータ・ブロックに分割して読み出すが、ブロック２０１ではその中の先頭データ・ブロック＃１の読み出し要求をしている。
【００４７】
ＳＳＤＴ１１３のアドレスは書き換えられているため、アプリケーション１０１またはメディア・プレイヤー１０３から呼び出されたReadFile API関数はすべてメディア・ドライバ１１９で実行される。メディア・プレイヤー１０３は、図５（Ａ）に示すようにメディア・ファイル２５０を先頭データ・ブロック＃１から最終データ・ブロック＃ｎまでのｎ個のデータ・ブロックに分割しそれぞれのデータ・ブロックに対してReadFile API関数を呼び出してバッファ領域５１に順番に書き込むようにＯＳに要求する。本実施の形態においては、このようなメディア・プレイヤーの標準的な動作を変更する必要はない。
【００４８】
ブロック２０３では、ファイル属性照会部１５３がCreateFile API関数で生成された先頭データ・ブロック＃１または他のファイルのハンドル・ネームに基づいて当該NtReadFile関数がメディア・ファイルを読み出しているか否かをファイル・システム１２３に問い合わせる。ファイル属性照会部１５３が、NtReadFile関数がメディア・ファイル以外の読み出しまたはメディア・コントロール１０９で設定されていないメディア・ファイルの読み出しを行うものであると判断したときは、ブロック２０５に移行しメディア・キャッシュ領域５３にプリフェッチしない通常の読み出しが行われる。
【００４９】
ブロック２０５では、ファイル読み取り部１５５が、アプリケーション１０１から呼び出されているReadFile API関数の引数には変更を加えないでNtReadFile関数を実行する。その結果ＡＰＳドライバ１２５が停止信号を生成していない限り、ファイル・システム１２３を通じて所定のファイルがメイン・メモリ１５の指定されたアドレスに書き込まれる。
【００５０】
ブロック２０３でファイル属性照会部１５３がメディア・ファイルであると判断したときはブロック２０７に移行する。ブロック２０７では、読み出しにかかるメディア・ファイル２５０の先頭データ・ブロック＃１がメディア・キャッシュ領域５３に存在するか否かをデータ・ブロック転送部１６１が判断する。先頭データ・ブロック＃１が存在する場合は、ブロック２１３に移行してデータ・ブロック転送部１６１がメディア・キャッシュ領域５３にフィルされている先頭データ・ブロック＃１をバッファ領域５１の指定されたアドレスに書き込むと、ブロック２１５でＯＳはメディア・プレイヤー１０３に書き込み完了を示すリターンを返送する。後にブロック２０９の手順で説明するように、先頭データ・ブロック＃１がメディア・キャッシュ領域５３に存在していることは、メディア・ファイル２５０全体または少なくともデータ・クラスタ＃１ｘが存在していることを意味する。
【００５１】
リターンを受け取ったメディア・プレイヤー１０３はブロック２１７で再生動作を開始する。先頭データ・ブロック＃１のリターンを受け取ったメディア・プレイヤー１０３はブロック２１９で、メディア・ドライバ１１９のキャッシング動作からは独立して、所定のタイミングで後続のデータ・ブロック＃２ないし＃ｎをバッファ領域５１に読み出すためのReadFile API関数を呼び出す。ここで一旦ブロック２０７の説明に戻る。ブロック２０７でデータ・ブロック転送部１６１が、先頭データ・ブロック＃１がメディア・キャッシュ領域５３に存在しないと判断した場合は、ブロック２０９でメディア・ドライバ１１９は、データのメディア・キャッシュ領域５３へのフィルを開始する。
【００５２】
メディア・キャッシュ領域５３へのフィルは、図５（Ｂ）または図５（Ｃ）のいずれかのデータ構造に基づいて行われる。メディア・キャッシュ領域５３のサイズが十分に大きい場合は、図５（Ｂ）のようにNtReadFile関数に対してそのような引数を設定してメディア・ファイル２５０の全体をメディア・キャッシュ領域５３にフィルすることができる。こうすれば、メディア・ファイル２５０を再生している間にＡＰＳドライバ１２５が停止信号を生成しても、バッファ領域５１にはメディア・キャッシュ領域５３からデータ・ブロックが供給されるので再生動作が中断することはない。
【００５３】
しかし、メディア・ファイルの全体をフィルする場合には、全体のフィルが終了した後に先頭データ・ブロック＃１がバッファ領域５１に書き込まれ、それに続いてリターンが返送されてからメディア・プレイヤー１０３が再生動作を開始するので、ユーザがメディア・プレイヤー１０３に対して再生のためのアクセスを開始してから再生を開始するまでの遅延時間が発生する。遅延時間を望まない場合またはメディア・キャッシュ領域５３のサイズが小さいためにメディア・ファイル２５０の全体をメディア・キャッシュ領域５３にフィルできない場合は、ファイル読み取り部１５５は、図５（Ｃ）に示すように、メディア・ファイル２５０をデータ・クラスタ＃１ｘとそれに続くデータ・フラグメント＃２ｘ〜＃ｍｘに分割してメディア・キャッシュ領域５３にフィルする。
【００５４】
ファイル読み取り部１５５は、データ・ブロック＃１を読み出すためのNtReadFile関数に対して、図５（Ｃ）に示すように先頭のデータ・クラスタ＃１ｘに対しては、データ・ブロックの整数倍のサイズを設定し、さらに、記憶する場所がメディア・キャッシュ領域５３の範囲となるように引数を設定してブロック２０９で実行する。図５（Ｃ）の例では、データ・クラスタ＃１ｘのサイズはデータ・ブロックの３倍に設定されている。再生を開始したあとにＡＰＳドライバ１２５が停止信号を生成することによる再生の中断を防ぐにはデータ・クラスタ＃１ｘのサイズはメディア・キャッシュ領域５３のサイズの範囲内でできるだけ大きいことが望ましい。データ・クラスタ＃１ｘのサイズがデータ・ブロックのサイズの整数倍であるため、データ・ブロック転送部１６１がメディア・キャッシュ領域５３にメディア・プレイヤー１０３から要求されたデータ・ブロックが存在すると判断したときには、データ・クラスタ＃１ｘからすべてのデータ・ブロックを抽出してバッファ領域５１に転送することができる。
【００５５】
ブロック２１３において、メディア・キャッシュ領域５３にフィルされたデータ・クラスタ＃１ｘから先頭データ・ブロック＃１がバッファ領域５１に転送されると、ブロック２１５でリターンが返され、メディア・プレイヤー１０３は再生動作を開始する。図５（Ｃ）のデータ構造でキャッシングする場合は、ブロック２１１で、データ・クラスタ＃１ｘに続くデータ・フラグメント＃２ｘ〜＃ｍｘのメディア・キャッシュ領域５３へのフィルが行われる。ファイル読み取り部１５５は、各データ・フラグメント＃２ｘ〜＃ｍｘに対して新たなシステム・スレッドを生成してそれらを順番にメディア・キャッシュ領域５３にブロック２０９の手順から独立してフィルする。
【００５６】
データ・フラグメント＃２ｘ〜＃ｍｘの各サイズはデータ・ブロックのサイズの、整数分の１倍になるように選定される。この例では、３分の１倍に設定している。各データ・フラグメントのサイズを、各データ・ブロックのサイズよりも小さくすると、ＡＰＳドライバ１２５が頻繁に停止信号の生成と解除を繰り返す可能性のある環境下で後続データの読み取出しを行うときに、ＨＤＤ２３からのデータ・フラグメントの読み出し動作が中断する可能性が低くなるため有利である。ただし、データ・クラスタ＃１ｘに続くデータをデータ・ブロックと同じサイズまたはそれより大きなサイズで読み出すことも可能である。
【００５７】
ファイル読み取り部１５５は、新たなシステム・スレッドにおいて引数にデータ・フラグメントのサイズを設定し、記憶場所にメディア・キャッシュ領域５３を設定したNtReadFile関数を順番に実行してファイル・システム１２３を経由してＨＤＤ２３から読みとった後続のデータ・フラグメント＃２ｘ〜＃ｍｘをメディア・キャッシュ領域５３にフィルする。NtReadFile関数は、データ・フラグメントごとにオフセット・ポインタを変更して生成および実行され、最終のデータ・フラグメント＃ｍｘまでフィルされた時点でブロック２１１の手順が終了する。
【００５８】
ここで注意すべき点は、データ・フラグメント＃２ｘ〜＃ｍｘのサイズは、メディア・プレイヤー１０３が要求するデータ・ブロック＃１〜＃ｎのサイズとは異なる点と、メディア・キャッシュ領域５３には、メディア・ファイル２５０以外の他のメディア・ファイルのデータ・フラグメントもフィルされる点である。さらに、データ・フラグメント＃２ｘ〜＃ｍｘはそれぞれ別スレッドで読み出されるため、メディア・キャッシュ領域５３にフィルされる順番と、NtReadFile関数が実行される順番とが一致するとは限らない。メディア・キャッシュ制御部１５７は、メディア・プレイヤー１０３が要求するデータ・ブロックのサイズごとにデータ・ブロック転送部１６１がバッファ領域５１にデータを転送するために、メディア・ファイルごとに各データ・フラグメントのエントリーのポインタをメディア・ファイル２５０の順番にリンクしてデータ・フラグメント＃２ｘ〜＃ｍｘをデータ・ブロックの単位に合成する。
【００５９】
ここでブロック２２１の説明に移る。ブロック２２１では、NtReadFile関数に設定された引数に基づいて、データ・ブロック転送部１６１が、データ・ブロック＃１に続くデータ・ブロック＃２をメディア・キャッシュ領域５３からバッファ領域５３に転送できるか否かを検査する。図５（Ｂ）に示した例では再生が開始される前にメディア・ファイル２５０の全体がメディア・キャッシュ領域５３にフィルされているので、データ・ブロック転送部１６１はすべてのデータ・ブロック＃１〜＃ｎをメディア・キャッシュ領域５３からバッファ領域５１に転送することができる。図５（Ｃ）に示した例では、再生が開始される前にデータ・ブロック＃１〜＃３がデータ・クラスタ＃１ｘとしてメディア・キャッシュ領域５３にフィルされているので、データ・ブロック＃２はメディア・キャッシュ領域５３から供給できることになる。この場合、データ・ブロック転送部１６１は、ブロック２２３でバッファ領域５１にメディア・プレイヤー１０３の要求に応じてデータ・ブロック＃２を書き込む。
【００６０】
ここで、データ・ブロック＃４は、データ・フラグメント＃２ｘ〜＃４ｘで構成されている。メディア・プレイヤー１０３によりデータ・ブロック＃４の読み出し要求が行われている場合には、データ・ブロック転送部１６１はメディア・キャッシュ領域５３にフィルされたデータ・フラグメント＃２ｘ〜＃４ｘのエントリーのポインタがリンクされてデータ・ブロック＃４が形成されているか否かを判断する。
【００６１】
データ・フラグメント＃２ｘ〜＃４ｘがすべてメディア・キャッシュ領域５３に存在し、データ・ブロック＃４を構成するためにリンクされている場合は、ブロック２２３に移行してデータ・ブロック転送部１６１によりバッファ領域５１にデータ・ブロック＃４が書き込まれる。メディア・キャッシュ領域５３にデータ・フラグメント＃２ｘ〜＃４ｘのいずれかが不足している場合はフィルされるまで待機する。この時点でデータ・ブロック＃４を構成するデータ・フラグメントが不足している理由は、長時間ＡＰＳドライバ１２５が停止信号を維持していることが考えられる。
【００６２】
しかし、データ・クラスタ＃１ｘはサイズが大きいため、所定の時間だけデータ・ブロック転送部１６１はメディア・キャッシュ領域５３にフィルされたデータ・クラスタ＃１ｘからバッファ領域５１に要求されたデータ・ブロック＃１〜＃３を順番に供給することができる。また、データ・フラグメント＃２ｘ〜＃ｍｘはデータ・ブロックよりサイズが小さいのでＡＰＳドライバ１２５の動作の影響を受けにくくなっているため、メディア・キャッシュ領域５３が枯渇することがなくなりメディア・プレイヤー１０３での連続再生は維持される。要求されたデータ・ブロックがバッファ領域５１に書き込まれると、ブロック２２５でＯＳからリターンがメディア・プレイヤー１０３に送られて、メディア・プレイヤー１０３は後続のデータ・ブロックを再生することが可能になる。
【００６３】
本実施の形態では、最初のデータ・ブロック＃１がメディア・プレイヤー１０３から読み出されたことを契機にして、メディア・ファイル２５０の全体またはデータ・クラスタ＃１ｘをメディア・キャッシュ領域５３にフィルしてから再生する例を説明したが、データ・ブロック＃１に続くいずれかのデータ・ブロックを契機にしてもよい。その場合は、当該データ・ブロック以降の再生動作において衝撃保護システムによる中断を防ぐことができるようになる。
【００６４】
つぎにメディア・プレイヤー１０３によるメディア・ファイルの他の再生方法を説明する。メディア・プレイヤーが扱うファイルの中には、再生リストを記録したリスト・ファイルが含まれることがある。ユーザは最初にリスト・ファイルを読み出して、リストのすべてのメディア・ファイルまたは選択したメディア・ファイルを順番に連続して再生することができる。本実施の形態では、リスト・ファイルが読み取られた時点でメディア・ファイルの再生を予測して、メディア・キャッシュ領域５３にプリフェッチしておくことにより、衝撃保護システムが作動しても再生動作が中断しない方法を提供する。
【００６５】
ブロック３０１ではメディア・プレイヤー１０３が、ファイル・システム１２３に対してCreateFile API関数およびReadFile API関数を呼び出してＨＤＤ２３からのリスト・ファイルの読み出し要求を行う。NtReadFile関数は、メディア・ドライバ１１９のロード時にフックされている。ブロック３０３では、ファイル属性照会部１５３がCreateFile API関数で生成されたリスト・ファイルのハンドル・ネームに基づいて当該読み出しのために実行されるNtReadFile関数がメディア・ファイルのリストを含むリスト・ファイルの読み出しであるか否かをファイル・システム１２３に問い合わせる。ファイル属性照会部１５３がリスト・ファイルのリストにメディア・ファイルを含まないと判断したときは、ブロック３０５に移行し通常のリスト・ファイルの読み出し動作が行われる。
【００６６】
ブロック３０３でファイル属性照会部１５３が、リスト・ファイルのリストがメディア・ファイルを含むと判断したときはブロック３０７およびブロック３１１に移行する。ブロック３１１では、ファイル読み取り部１５５がReadFile API関数に設定された引数を設定してNtReadFile関数を実行し、リスト・ファイルをバッファ領域５１に書き込みブロック３１３でＯＳがリターンをメディア・プレイヤー１０３に返送する。それ以後、ユーザはＬＣＤ１６に表示されたすべてのまたは選択したメディア・ファイルの再生を開始することができる。
【００６７】
ブロック３０７では、リスト・ファイルのリストに示されたすべてのメディア・ファイルがメディア・キャッシュ領域５３に存在するか否かをデータ・ブロック転送部１６１が判断する。すべてのメディア・ファイルが存在する場合は、ブロック３１５に移行する。ブロック３０７で、データ・ブロック転送部１６１がリスト・ファイルのリストに示されたすべてのメディア・ファイルまたはいくつかのメディア・ファイルがメディア・キャッシュ領域５３に存在しないと判断したときは、ブロック３０９に移行し、ファイル読み取り部１５５は新たなシステム・スレッドを生成してNtReadFile関数を実行し、不足するメディア・ファイルを順番にメディア・キャッシュ領域５３にフィルする。不足するメディア・ファイルがすべてフィルされるとブロック３１５に移行する。
【００６８】
ブロック３０７で、メディア・キャッシュ制御部１５７がリスト・ファイルのリストに示されたすべてのメディア・ファイルがメディア・キャッシュ領域５３にフィルされていると判断したときはブロック３１５に移行する。ブロック３１５では、メディア・プレイヤー１０３は再生のために複数のメディア・ファイルの連続的な読み出し要求を開始する。メディア・プレイヤー１０３はリスト・ファイルのリストに対して設定した各メディア・ファイルについて図５（Ａ）で示したようなデータ・ブロックごとにReadFile API関数を呼び出して順番に再生する動作を開始する。
【００６９】
ブロック３１７では、最初のメディア・ファイルの先頭データ・ブロック＃１をメディア・キャッシュ領域５３からバッファ領域５３に転送できるか否かをデータ・ブロック転送部１６１が検査する。データ・ブロック転送部１６１が転送可能であると判断したときはブロック３２１に移行してデータ・ブロック転送部１６１によりバッファ領域５１に先頭データ・ブロック＃１が書き込まれる。先頭データ・ブロック＃１の書き込みが終了するとＯＳはメディア・プレイヤー１０３にブロック３２３でリターンを返送し再生が開始される。以後、ブロック３１５に戻って、図４の手順にしたがってメディア・キャッシュ領域５３へのフィルと、そこからのバッファ領域５１へデータ・ロックの転送が繰り返される。すべてのデータ・ブロックの要求に対してメディア・キャッシュ領域５３からバッファ領域５１にデータが書き込まれるので、ＡＰＳドライバ１２５が停止信号を生成してＨＤＤ２３の動作が一時的に停止してもメディア・プレイヤー１０３の再生動作が中断することはない。
【００７０】
ブロック３１７で要求されたデータ・ブロックをメディア・キャッシュ領域５３から転送することができないときはブロック３１９に移行し、当該データ・ブロックを含むメディア・ファイルをメディア・キャッシュ領域５３にフィルするためのシステム・スレッドが生成されているか否かをファイル読み取り部１５５が判断する。すでにシステム・スレッドが生成されてNtReadFile関数が実行されている場合は、ブロック３１７に移行して待機する。まだシステム・スレッドが生成されていないときは、ブロック３０９に移行する。
【００７１】
本実施の形態によれば、図４の手順でも、また、図６の手順でもＯＳおよびメディア・プレイヤー１０３には変更を加えないで、メディア・ドライバ１１９を追加するだけで、衝撃保護システムを搭載するノートＰＣで中断のないメディア・ファイルの再生をすることができる。
【００７２】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
【図面の簡単な説明】
【００７３】
【図１】ノートＰＣ１０に実装されたハードウエアの構成を示す概略ブロック図である。
【図２】本実施の形態にかかるメディア・ファイルの読み出し方法を説明するブロック図である。
【図３】メディア・ドライバの主要な構成を示す機能ブロック図である。
【図４】本実施の形態にかかるメディア・ファイルの再生方法を説明する手順を示すフローチャートである。
【図５】メディア・プレイヤーが要求するメディア・ファイルのデータの単位とメディア・ドライバがキャッシングするメディア・ファイルの単位を説明する図である。
【図６】本実施の形態にかかるメディア・ファイルの他の再生方法を説明する手順を示すフローチャートである
【符号の説明】
【００７４】
５１…バッファ領域
５３…メディア・キャッシュ領域５３
５５…ＯＳキャッシュ領域
【図１】
0004634477.tif 000002
【図２】
0004634477.tif 000003
【図３】
0004634477.tif 000004
【図４】
0004634477.tif 000005
【図５】
0004634477.tif 000006
【図６】
0004634477.tif 000007