(57)【要約】【課題】  オーディオ処理オブジェクトによるアクセス違反時の回復を提供する。【解決手段】  オペレーティングシステムを、カーネルのパーティションと、論理的に独立した下位パーティションを有するオーディオサブシステムのパーティションとに論理的に分離する。オーディオアプリケーションが、オーディオサブシステムを実行することにより第１のオーディオデータストリームを生成する。第１のオーディオデータストリームを処理するプロセスのコンテクストを第１の下位パーティションに保存する。そのプロセスによる第１のオーディオデータストリームの処理は、第２の下位パーティションで行われる。プロセスがアクセス違反を犯すと、第１の下位パーティションからその保存されたコンテクストをオーディオサブシステムで復元することによってそのプロセスを回復する。【選択図】  図１
2004288196.tif 000002
【特許請求の範囲】
【請求項１】
オーディオデバイスドライバによって駆動されるオーディオデバイスで出力されるオーディオデータストリームに対して行われるグローバルオーディオ効果（ＧＦＸ）のためのオーディオ処理オブジェクト（ＡＰＯ）をオペレーティングシステムが実行することを求める要求を受け取るステップであって、
前記オペレーティングシステムは、入力バッファと、ループバッファと、サービスコンテクストおよびグローバルオーディオエンジンを含む論理的に独立したコンテクストとを有するオーディオサブシステムを含むステップと、
前記サービスコンテクストに、前記入力バッファ、前記グローバルオーディオエンジン、および前記ループバッファのコンテクストを保存するステップと、
前記グローバルオーディオエンジンを作動させて前記入力バッファ中のオーディオデータストリームに前記ＡＰＯを用いてデジタル信号処理を行い、前記ループバッファ中にデジタル信号処理（ＤＳＰ）オーディオデータストリームを形成するステップと、
前記ループバッファ内の前記ＤＳＰオーディオデータストリームを、前記オーディオデバイスを駆動する前記オーディオデバイスドライバに入力するステップと、
前記ＡＰＯが終了するか、または前記ＡＰＯによるアクセス違反が生じると、前記サービスコンテクストにそれぞれのために保存されている前記コンテクストを用いて、前記入力バッファ、前記グローバルオーディオエンジン、および前記ループバッファそれぞれを復元するステップと、
前記グローバルオーディオエンジンで前記ＡＰＯの実行を随意的に再開するステップと
を含むことを特徴とする方法。
【請求項２】
前記ＡＰＯの終了または前記ＡＰＯによるアクセス違反は前記サービスコンテクストによって検出されることを特徴とする請求項１に記載の方法。
【請求項３】
前記入力バッファのコンテクストは、前記入力バッファに結びついたアドレスおよびデータ構造を含み、
前記グローバルオーディオエンジンのコンテクストは、前記グローバルオーディオエンジンに結びついたアドレスおよびデータ構造を含み、
前記ループバッファのコンテクストは、前記ループバッファに結びついたアドレスおよびデータ構造を含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記ＡＰＯによりアクセス違反が行なわれると、前記方法はさらに、
前記ＡＰＯによるアクセス違反の回数を表すカウンタを増分するステップと、
前記カウンタが所定の上限を超えると、診断を出力し、前記グローバルオーディオエンジンにおける前記ＡＰＯの実行の再開を禁止するステップと
を含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記オペレーティングシステムはさらに、複数の前記グローバルオーディオエンジンに対応するための複数の前記ループバッファを含み、
各前記グローバルオーディオエンジンは、対応する前記ループバッファに１つの前記ＤＳＰオーディオデータストリームを出力して、対応する前記オーディオデバイスを駆動する対応する前記オーディオデバイスドライバに入力を送ることを特徴とする請求項１に記載の方法。
【請求項６】
前記オペレーティングシステムはさらに、対応する前記オーディオデバイスで再生（レンダー）されるオーディオデータストリームをそれぞれが含む複数の前記入力バッファを備え、
各前記グローバルオーディオエンジンは１つの前記入力バッファに対応することを特徴とする請求項５に記載の方法。
【請求項７】
各前記入力バッファは、少なくとも１つの前記オーディオデバイスについてのオーディオサービスを前記オペレーティングシステムに要求するオーディオアプリケーションから対応する前記オーディオデータストリームを受け取ることを特徴とする請求項６に記載の方法。
【請求項８】
前記オーディオデバイスドライバによって駆動される前記オーディオデバイスで前記ＤＳＰオーディオデータストリームを再生（レンダー）するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記オペレーティングシステムは、
カーネルのパーティションと、
前記サービスコンテクストの下位パーティション、および
前記グローバルオーディオエンジンの下位パーティション
を含む分離された複数の下位パーティションを有する前記オーディオサブシステムのパーティションと
を含む複数の独立したパーティションを有するメモリ内にあることを特徴とする請求項１に記載の方法。
【請求項１０】
前記複数の独立したパーティションはさらに、ＡＰＯを実行して前記オーディオデータストリームを前記入力バッファに出力するローカルエンジンを有する処理コンテクストのパーティションを含むことを特徴とする請求項９に記載の方法。
【請求項１１】
前記入力バッファの前記オーディオデータストリームは、前記オーディオデバイスでそれぞれが再生される複数のオーディオアプリケーションからのオーディオデータを含み、
前記グローバルオーディオエンジンは、前記複数のオーディオアプリケーションからのオーディオデータをミキシングして、前記ループバッファ中に前記ＤＳＰオーディオデータストリームを形成することを特徴とする請求項１０に記載の方法。
【請求項１２】
前記ＧＦＸは、残響・反響効果、オーディオ歪み効果、スピーカ補償効果、マルチバンドオーディオイコライザ効果からなるグループから選択されることを特徴とする請求項１に記載の方法。
【請求項１３】
前記コンピューティングシステムによって実行されるときに請求項１に記載の方法を実施するコンピュータ可読命令を有することを特徴とする１つまたは複数のコンピュータ可読媒体。
【請求項１４】
オーディオデバイスドライバによって駆動されるオーディオデバイスで出力されるオーディオデータストリームに対して行われるグローバルオーディオ効果（ＧＦＸ）のためのオーディオ処理オブジェクト（ＡＰＯ）をオペレーティングシステムが実行することを求める要求をオーディオアプリケーションから受け取るステップであって、前記オペレーティングシステムは、
カーネルと、
入力バッファおよびループバッファを有するオーディオサブシステムと
を含むメモリ中に個別のパーティションを有し、
前記メモリ中の前記オーディオサブシステムのパーティションは、
サービスコンテクストと、
前記ＡＰＯを実行するグローバルオーディオエンジンと
を含む個々別々の下位パーティションを有するステップと、
前記入力バッファ、前記ループバッファ、および前記グローバルオーディオエンジンに結びついたアドレスおよびデータ構造を前記サービスコンテクストに保存するステップと、
前記グローバルオーディオエンジンを作動させて
前記入力バッファ中のオーディオデータストリームに前記ＡＰＯでデジタル信号処理を行って、デジタル信号処理（ＤＳＰ）オーディオデータストリームを形成し、
前記ＤＳＰオーディオデータストリームを前記ループバッファに出力するステップと、
前記ＤＳＰオーディオデータストリームを再生する前記オーディオデバイスを駆動する前記オーディオデバイスドライバに前記ループバッファ中の前記ＤＳＰオーディオデータストリームを入力するステップと、
前記ＡＰＯが終了するかまたは前記ＡＰＯによりアクセス違反が行われると、
前記サービスコンテクストに保存されている前記入力バッファのアドレスおよびデータ構造を用いて前記入力バッファを復元するステップと、
前記サービスコンテクストに保存されている前記グローバルオーディオエンジンのアドレスおよびデータ構造を用いて前記グローバルオーディオエンジンを復元するステップと、
前記サービスコンテクストに保存されている前記ループバッファのアドレスおよびデータ構造を用いて前記ループバッファを復元するステップと、
前記グローバルオーディオエンジンで前記ＡＰＯの実行を随意的に再開するステップと
を含むことを特徴とする方法。
【請求項１５】
前記ＡＰＯの終了または前記ＡＰＯによるアクセス違反は前記サービスコンテクストによって検出されることを特徴とする請求項１４に記載の方法。
【請求項１６】
前記メモリ中の前記オーディオサブシステムのパーティションはさらに、ＡＰＯを実行して前記オーディオデータストリームを前記入力バッファに出力するローカルエンジンを有する処理コンテクストのための独立した下位パーティションを含むことを特徴とする請求項１４に記載の方法。
【請求項１７】
前記入力バッファ内の前記オーディオデータストリームは、前記オーディオデバイスでそのそれぞれが再生される複数のオーディオアプリケーションからのオーディオデータを含み、
前記グローバルオーディオエンジンは、前記複数のオーディオアプリケーションからの前記オーディオデータをミキシングして、前記ループバッファ中に前記ＤＳＰオーディオデータストリームを形成することを特徴とする請求項１６に記載の方法。
【請求項１８】
前記入力バッファは、前記プロセスコンテクストのパーティションと前記グローバルオーディオエンジンのパーティションとで共有される前記メモリ中の前記オーディオサブシステムのパーティション内に論理的に位置し、
前記ループバッファは、前記グローバルオーディオエンジンのパーティションと前記カーネルのパーティションとで共有される前記メモリ中の前記オーディオサブシステムのパーティションの内に論理的に位置していることを特徴とする請求項１４に記載の方法。
【請求項１９】
前記ＡＰＯによりアクセス違反が行なわれると、前記方法はさらに、
前記ＡＰＯによるアクセス違反の回数を表すカウンタを増分するステップと、
前記カウンタが所定の上限を超えると、診断を出力し、前記グローバルオーディオエンジンにおける前記ＡＰＯの実行の再開を禁止するステップと
を含むことを特徴とする請求項１４に記載の方法。
【請求項２０】
前記オペレーティングシステムはさらに、対応する複数の前記グローバルオーディオエンジンのための複数の前記ループバッファを含み、
各前記グローバルオーディオエンジンは、対応する前記ループバッファに１つの前記ＤＳＰオーディオデータストリームを出力して、対応する前記オーディオデバイスを駆動する対応する前記オーディオデバイスドライバに入力を送ることを特徴とする請求項１４に記載の方法。
【請求項２１】
前記オペレーティングシステムはさらに、対応する前記オーディオデバイスにより再生されるオーディオデータストリームをそれぞれが含む複数の前記入力バッファを備え、
各前記グローバルオーディオエンジンは、１つの前記入力バッファに対応することを特徴とする請求項２０に記載の方法。
【請求項２２】
各前記入力バッファは、少なくとも１つの前記オーディオデバイスについてのオーディオサービスを前記オペレーティングシステムに要求する対応する前記オーディオアプリケーションから対応する前記オーディオデータストリームを受け取ることを特徴とする請求項２１に記載の方法。
【請求項２３】
コンピューティングシステムによって実行されるときに請求項１４に記載の方法を実施するコンピュータ可読命令を有することを特徴とする１つまたは複数のコンピュータ可読媒体。
【請求項２４】
論理的に独立したパーティションにあるカーネルとオーディオサブシステムとを含むコンピュータ実行可能オペレーティングシステムであって、前記オーディオサブシステムは、入力バッファと、オーディオデバイスを駆動するデバイスドライバと通信するループバッファとを有し、かつ前記オーディオサブシステムは、
前記入力バッファ中のオーディオデータストリームに行われるグローバルオーディオ効果（ＧＦＸ）のためのオーディオ処理オブジェクト（ＡＰＯ）を実行して、前記デバイスドライバによって駆動される前記オーディオデバイスで再生される前記ループバッファ中のオーディオデータストリームを形成するグローバルオーディオエンジンと、
前記入力バッファ、前記グローバルオーディオエンジン、および前記ループバッファのコンテクストを保存するサービスコンテクストと、
を含む論理的に独立した複数の下位パーティションをも含み、
前記グローバルオーディオエンジンで実行中の前記ＡＰＯが終了するか、または前記ＡＰＯによりアクセス違反が行われると、
前記サービスコンテクストにそれぞれのために保存されている前記コンテクストを用いて、前記入力バッファ、前記グローバルオーディオエンジン、および前記ループバッファのそれぞれを復元し、
前記グローバルオーディオエンジンにおける前記ＡＰＯの実行が随意的に再開することを特徴とするコンピュータ実行可能オペレーティングシステム。
【請求項２５】
前記入力バッファのコンテクストは、前記入力バッファに結びついたアドレスおよびデータ構造を含み、
前記グローバルオーディオエンジンのコンテクストは、前記グローバルオーディオエンジンに結びついたアドレスおよびデータ構造を含み、
前記ループバッファのコンテクストは、前記ループバッファに結びついたアドレスおよびデータ構造を含むことを特徴とする請求項２４に記載のコンピュータ実行可能オペレーティングシステム。
【請求項２６】
前記ＡＰＯによりアクセス違反が行なわれると、
前記ＡＰＯによるアクセス違反の回数を表すカウンタが増分され、
前記カウンタが所定の上限を超えると、診断が出力され、前記グローバルオーディオエンジンにおいて前記ＡＰＯの実行が禁止されることを特徴とする請求項２４に記載のコンピュータ実行可能オペレーティングシステム。
【請求項２７】
前記オペレーティングシステムはさらに、対応する複数の前記グローバルオーディオエンジンのための複数の前記ループバッファを含み、
各前記グローバルオーディオエンジンは、対応する前記ループバッファに１つの前記ＤＳＰオーディオデータストリームを出力して、対応する前記オーディオデバイスを駆動する対応する前記オーディオデバイスドライバに入力を送ることを特徴とする請求項２４に記載のコンピュータ実行可能オペレーティングシステム。
【請求項２８】
前記オペレーティングシステムはさらに、対応する前記オーディオデバイスで再生されるオーディオデータストリームをそれぞれが含む複数の前記入力バッファを備え、
各前記グローバルオーディオエンジンは１つの前記入力バッファに対応することを特徴とする請求項２７に記載のコンピュータ実行可能オペレーティングシステム。
【請求項２９】
各前記入力バッファは、少なくとも１つの前記オーディオデバイスについてのオーディオサービスを前記オペレーティングシステムに要求するオーディオアプリケーションから対応する前記オーディオデータストリームを受け取ることを特徴とする請求項２８に記載のコンピュータ実行可能オペレーティングシステム。
【請求項３０】
前記複数の論理的に独立したパーティションはさらに、ＡＰＯを実行して前記入力バッファにオーディオデータストリームを出力するローカルエンジンを有する処理コンテクストのためのパーティションを含むことを特徴とする請求項２４に記載のコンピュータ実行可能オペレーティングシステム。
【請求項３１】
前記入力バッファは、前記オーディオデバイスでそのそれぞれが再生される複数のオーディオアプリケーションからのオーディオデータを格納し、
前記グローバルオーディオエンジンは、前記複数のオーディオアプリケーションからのオーディオデータをミキシングして、前記ループバッファ内にオーディオデータを形成することを特徴とする請求項２４に記載のコンピュータ実行可能オペレーティングシステム。
【請求項３２】
オペレーティングシステムのカーネルと、
前記オペレーティングシステムのオーディオサブシステムと
を含む論理的に独立した複数のパーティションを格納する手段であって、前記オーディオサブシステムは、
入力バッファ、およびオーディオを再生する手段を駆動する手段と通信するループバッファと
サービスコンテクストおよびグローバルオーディオエンジンを含む論理的に独立した複数の下位パーティションと
を含む手段と；
前記オーディオサブシステムを実行させて、
前記入力バッファ、前記グローバルオーディオエンジン、および前記ループバッファのコンテクストを前記サービスコンテクストに保存し、
前記入力バッファ内のオーディオデータストリームにグローバルオーディオ効果（ＧＦＸ）を生成するオーディオ処理オブジェクト（ＡＰＯ）を実行して、前記オーディオデバイスを駆動する手段によって駆動されるオーディオを再生する手段で再生される前記ループバッファ中のオーディオデータストリームを形成する手段と；
前記グローバルオーディオエンジンで実行中の前記ＡＰＯによりアクセス違反が行なわれると、
前記サービスコンテクストにそれぞれのために個別に保存されている前記コンテクストを使用して前記入力バッファ、前記グローバルオーディオエンジン、および前記ループバッファのそれぞれを復元し、
前記グローバルオーディオエンジンにおいて前記ＡＰＯの実行を再開する手段と
を含むことを特徴とする装置。
【請求項３３】
前記入力バッファのコンテクストは、前記入力バッファに結びついたアドレスおよびデータ構造を含み、
前記グローバルオーディオエンジンのコンテクストは、前記グローバルオーディオエンジンに結びついたアドレスおよびデータ構造を含み、
前記ループバッファのコンテクストは、前記ループバッファに結びついたアドレスおよびデータ構造を含むことを特徴とする請求項３２に記載の装置。
【請求項３４】
前記ＡＰＯによりアクセス違反が行なわれると、前記再開する手段は、
前記ＡＰＯによるアクセス違反の回数を表すカウンタを増分し、
前記カウンタが所定の上限を超えると、診断を出力し、前記グローバルオーディオエンジンにおける前記ＡＰＯの実行の再開を禁止する
ことを特徴とする請求項３２に記載の装置。
【請求項３５】
前記オーディオサブシステムはさらに、対応する複数の前記グローバルオーディオエンジンのための複数の前記ループバッファを含み、
各前記グローバルオーディオエンジンは、対応する前記ループバッファに１つの前記オーディオデータストリームを出力して、対応する前記オーディオを再生する手段を駆動する対応する前記手段に入力を送ることを特徴とする請求項３２に記載の装置。
【請求項３６】
前記オーディオサブシステムはさらに、対応する前記オーディオを再生する手段で再生されるオーディオデータストリームをそのそれぞれが含む複数の前記入力バッファを備え、
各前記グローバルオーディオエンジンは１つの前記入力バッファに対応することを特徴とする請求項３５に記載の装置。
【請求項３７】
各前記入力バッファは、少なくとも１つの前記オーディオを再生する手段についてのオーディオサービスを前記オペレーティングシステムに要求するオーディオアプリケーションから対応する前記オーディオデータストリームを受け取ることを特徴とする請求項３６に記載の装置。
【請求項３８】
前駆オーディオサブシステムの前記複数の論理的に独立した下位パーティションはさらに、ＡＰＯを実行して前記オーディオデータストリームを前記入力バッファに出力するローカルエンジンを有する処理コンテクストのための下位パーティションを含むことを特徴とする請求項３２に記載の装置。
【請求項３９】
前記入力バッファ内の前記オーディオデータストリームは、前記オーディオを再生する手段でそのそれぞれが再生される複数のオーディオアプリケーションからのオーディオデータを含み、
前記グローバルオーディオエンジンは、前記複数のオーディオアプリケーションからのオーディオデータをミキシングして、前記ループバッファ中に前記オーディオデータストリームを形成することを特徴とする請求項３８に記載の装置。
【請求項４０】
第１のオーディオデータストリームを生成するオーディオアプリケーションを実行し、かつカーネルのためのパーティションと、論理的に独立した下位パーティションを有するオーディオサブシステムのためのパーティションとに論理的に分離されたオペレーティングシステムを実行するプロセッサを含み、
前記オーディオサブシステムを用いて前記第１のオーディオデータストリームを処理するプロセスが、前記プロセスを第２の前記下位パーティションで実行する前に第１の前記下位パーティションに保存されたコンテクストを有し、
それにより前記プロセスがアクセス違反を犯すと、前記第１の下位パーティションから前記プロセスのコンテクストを復元することにより前記プロセスを回復することを特徴とするコンピューティングシステム。
【請求項４１】
前記プロセスの前記保存されたコンテクストは、前記オーディオサブシステム内で前記保存されたコンテクストを復元することにより前記プロセスを回復するのに十分なアドレスおよびデータ構造の情報を含むことを特徴とする請求項４０に記載のコンピューティングシステム。
【請求項４２】
前記プロセッサは、前記第１のオーディオデータストリームが出力されるところの第１のオーディオデバイスとは異なる第２のオーディオデバイスに出力される第２のオーディオデータストリームを生成する第２のオーディオアプリケーションを実行し、
前記プロセスの前記アクセス違反および回復は、
前記第２のオーディオアプリケーションの実行にも、
前記第２のオーディオデバイスに出力される前記第２のオーディオデータストリームにも
影響しないことを特徴とする請求項４０に記載のコンピューティングシステム。
【請求項４３】
オペレーティングシステムおよび複数のオーディオアプリケーションを実行するプロセッサと、
前記複数のオーディオアプリケーションと同時に使用して、前記オペレーティングシステムへ伝達するオーディオデータを個別に生成する複数のマルチメディア読み取りデバイスと、
個々のオーディオデバイスドライバによって駆動され、前記オペレーティングシステムへ伝達された前記オーディオデータを再生する複数のオーディオデバイスと、
前記複数のオーディオアプリケーションおよび前記オペレーティングシステムのための記憶機構とを備え、
前記オペレーティングシステムが、カーネルとオーディオサブシステムとを含む複数の論理的に独立したパーティションを有し、前記オーディオサブシステムが、
プロセスコンテクストと、
サービスコンテクストと、
グローバルオーディオエンジンと
を含む複数の論理的に独立した下位パーティションと、
前記プロセスコンテクストおよび前記グローバルオーディオエンジンと通信する入力バッファと、
前記オーディオデバイスの１つを駆動する前記オーディオデバイスドライバの１つと通信するループバッファと
を含み、
前記プロセッサが、前記オペレーティングシステムと前記オーディオアプリケーションの１つとを実行して、
前記入力バッファ、前記グローバルオーディオエンジン、および前記ループバッファのコンテクストを前記サービスコンテクストに保存し、
オーディオデータストリームとして前記入力バッファに出力するために前記プロセスコンテクストに入力するオーディオデータを１つの前記オーディオアプリケーションから生成し、
前記入力バッファ内の前記オーディオデータストリームにグローバルオーディオ効果（ＧＦＸ）を生成するオーディオ処理オブジェクト（ＡＰＯ）を実行して、前記オーディオデバイスドライバの１つによって駆動されるオーディオデバイスの１つで再生されるオーディオデータストリームを前記ループバッファ内に形成し、
前記グローバルオーディオエンジンで実行中の前記ＡＰＯによりアクセス違反が行なわれると、
前記サービスコンテクストにそのそれぞれのために個別に保存されているコンテクストを用いて、前記入力バッファ、前記グローバルオーディオエンジン、および前記ループバッファそれぞれを復元し、
前記グローバルオーディオエンジンにおいて前記ＡＰＯの実行を再開することを特徴とするコンピューティングシステム。
【請求項４４】
カーネルのパーティションと、論理的に独立した下位パーティションを有するオーディオサブシステムのパーティションとに論理的に分離されたオペレーティングシステムを実行することにより、第１のオーディオデータストリーミングを生成することをオーディオアプリケーションに求める処理をする第１のコードセグメントと、
第１の前記下位パーティションに、前記第１のオーディオデータストリームを処理するプロセスのためのコンテクストを保存する第２のコードセグメントと、
第２の前記下位パーティションで前記プロセスを用いて前記第１のオーディオデータストリームを処理する第３のコードセグメントと
を含み、
前記プロセスがアクセス違反を犯すと、前記オーディオサブシステム内に前記第１の下位パーティションから前記保存されたコンテクストを復元することにより、前記プロセスを回復することを特徴とするコンピュータ可読媒体。
【請求項４５】
前記プロセスのための前記保存されたコンテクストは、前記オーディオサブシステム内に前記保存されたコンテクストを復元することにより前記プロセスを回復するのに十分なアドレスおよびデータ構造の情報を含むことを特徴とする請求項４４に記載のコンピュータ可読媒体。
【請求項４６】
前記オペレーティングシステムを実行することにより第２のオーディオデータストリームを生成することを求めるオーディオアプリケーションに要求することを処理する第４のコードセグメントをさらに含み、前記第２のオーディオデータストリームは、第１のオーディオデータストリームが出力される第１のオーディオデバイスとは異なる第２のオーディオデバイスに出力されるように命令され、前記プロセスの前記アクセス違反および回復は、
前記第２のオーディオアプリケーションの実行による前記第２のオーディオデータストリームの生成にも
前記第２のオーディオデバイスに出力される前記第２のオーディオデータストリームにも
影響しないことを特徴とする請求項４４に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にはストリーミングオーディオの処理に関し、より詳細には、ストリーミングオーディオの処理中のオーディオ処理オブジェクトによるアクセス違反からの障害回復に関する。
【背景技術】
【０００２】
ストリーミングオーディオデータの記録と再生にパーソナルコンピュータ（ＰＣ）などのコンピューティングシステムを使用することが増えている。ＰＣは、いくつかのオーディオ、ビデオ、およびマルチメディアのアプリケーションが同時に実行される１タイプのメディアサーバとして使用することができ、各アプリケーションは、ＰＣのオペレーティングシステム（ＯＳ）を使用する。メディアサーバとしてのＰＣの一例として、以下のような同時の使用のシナリオを考えられたい。ＰＣ上のＤＶＤプレーヤを使用する第１のメディアプレーヤアプリケーション（ＭＰ）によってデジタルビデオディスクが再生されている。ネットワーク電話技術のためのリアルタイム通信アプリケーション（ＲＴＣ）でＶｏｉｃｅ  ｏｖｅｒ  Ｉｎｔｅｒｎｅｔプロトコルのためにマイクロフォンが使用されている。ネットワーク電話技術では、個々のコンピューティングシステムのユーザは、電話ユーザが回路交換網を通じて別の電話ユーザと話すのとほとんど同様に、パケット交換網を通じて別のユーザの１人と互いに話をする。ユーザがＰＣと対話する時には、ＯＳによってシステムの音声が生成される。ビデオオンデマンドアプリケーション（ＶＯＤ）がストリーミングマルチメディアとしてＰＣによって実行されており、ケーブルまたは衛星ＴＶ放送システムを介して受信されている。音楽ディスク（例えばＣＤ）が、ＰＣのＣＤ−ＲＯＭドライブを使用する第２のメディアプレーヤアプリケーションの実行によって再生されている。別のユーザがＰＣでビデオゲームをやっており、対応するゲームアプリケーションが、ユーザとゲームアプリケーションの対話に基づいてオーディオデータストリームを生成している。１つまたは複数のグローバルオーディオ効果アプリケーション（ＧＦＸ）もまたＰＣで実行することができる。ＧＦＸの例には、残響・反響（リバーブ）効果アプリケーション、オーディオ歪み効果アプリケーション、１つまたは複数のスピーカで再生（レンダー）されるストリーミングオーディオデータのデジタル信号処理（ＤＳＰ）によって行われるスピーカ補償アプリケーション、マルチバンドオーディオイコライザアプリケーションを含み、マルチバンドオーディオイコライザアプリケーションは、オーディオデバイス（例えばサウンドカード）と協働してＰＣユーザが各種の事前設定（例えばコンサートホール、ロック、クラシックなど）のためにオーディオデバイスからのオーディオ出力を調整することを可能にするユーザインタフェース（ＵＩ）を提示できるように実行し、また１つまたは複数のオーディオドライバによって駆動される１つまたは複数のオーディオデバイスに出力される１つまたは複数のオーディオデータストリームにＤＳＰを行うその他のＧＦＸが含まれる。
【０００３】
上記の例に挙げたアプリケーションは他のオーディオビジュアルアプリケーションと同様に、不完全な書き方の場合に、実行で障害が発生し、アプリケーションがアボート（中断）する可能性がある。そのようなアプリケーションの障害により、コンピュータクラッシュの別名で知られるＰＣのＯＳの深刻な障害が生じる恐れがあり、その場合はＰＣ自体が動作を停止してしまう。コンピュータクラッシュは、そのアプリケーションが書かれたコードに非常に深刻なソフトウェアバグが現れる可能性がある。ＯＳにオーディオデバイスへの出力を要求するオーディオアプリケーションの例では、バグの結果としてアクセス違反が起こる可能性がある。ＯＳのカーネル（例えばスケジューリングサービス）のメモリと、ＯＳ中でオーディオを処理するために使用するメモリは、互いから完全に分離することになっている。アクセス違反は、オーディオアプリケーションが、常駐していないメモリへのアクセスを行う（すなわちメモリアクセスが適正ではない、あるいは許可されない）時に発生する。通例、アクセス違反は、オーディオアプリケーションが、カーネルモードで動作しているオーディオデバイスドライバを有する時に発生する。オーディオアプリケーションがＯＳのカーネル空間またはオーディオデバイスドライバへのアクセス違反を行うと、そのアクセス違反によりコンピュータクラッシュが生じる可能性がある。
【０００４】
ＯＳのカーネルが元の状態のまま保たれる限り、クラッシュしたオーディオアプリケーションによってカーネルが不安定になることはない。むしろ、そのオーディオアプリケーションだけが動作を停止し、再起動させなければならない。しかし、カーネルのアクセス違反は、カーネルが不安定になり、回復が不可能な致命的エラーが生じる可能性がある。Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム環境では、青い画面に表示される診断によってＰＣのユーザにコンピュータクラッシュが通知される。そのため、用語「死のブルースクリーン（ＢＳＯＤ：Ｂｌｕｅ  Ｓｃｒｅｅｎ  ｏｆ  Ｄｅａｔｈ）」が慣例的に使用されている。ＢＳＯＤがユーザに表示されると、ＰＣを再起動あるいはブート（起ち上げ）する以外に回復法がない。
【０００５】
ＰＣをメディアサーバとして使用することの特有の損失は、実行中の数個のオーディオおよびオーディオビジュアルアプリケーションのうちのただ１つにソフトウェアバグがある場合に生じる。ソフトウェアバグは、ＰＣから再生されているオーディオに様々な程度の混乱や中断や破壊を生じさせる。最も軽度の混乱では、バグのあるアプリケーションによって生成されるオーディオデータストリームだけが影響を受ける。より高い程度の混乱では、すべてのオーディオデバイスが影響を受け、恐らくは動作を停止し、すなわち、すべてのオーディオデバイスへの全体的なオーディオ再生が中止されることになる。さらに深刻なシナリオでは、オーディオアプリケーションの１つにあるソフトウェアバグによりコンピュータクラッシュが引き起こされ、それによりＯＳが再ロードされるまでＰＣ上のすべてのアクティビティが停止せざるを得なくなる。ＯＳの再ロードには数分間を要する。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述の点から鑑みて、当該技術分野において、コンピューティングシステム上で実行されるある程度のオーディオアプリケーションのオーディオ要求を満たし、同時に、オーディオアプリケーションを隔離して、実行中のそのアプリケーションの障害により全域的なオーディオ再生の停止と、コンピュータクラッシュが生じないようにしたＯＳを提供することは有利となるであろう。
【課題を解決するための手段】
【０００７】
本発明の一実施態様では、オペレーティングシステムのシステムオーディオサービスが、オーディオアプリケーションのコンテクストを保存・保持し、オーディオアプリケーションの処理に障害が発生してもその処理を回復することができる。本発明の別の実施態様では、コンピューティングシステムが、第１のオーディオデータストリームを生成するオーディオアプリケーションを実行するプロセッサを有する。このプロセッサは、カーネルのためのパーティションとオーディオサブシステムのためのパーティションとに論理的に分離されたオペレーティングシステムを実行する。オーディオサブシステムは、論理的に独立した下位パーティションに分離される。オーディオサブシステムを用いて第１のオーディオデータストリームを処理するためのプロセス（例えばオーディオ処理オブジェクト）は、第２の下位パーティションでプロセスを実行する前に第１の下位パーティションに保存・保持されたコンテクストを有する。プロセスがアクセス違反を犯すと、そのプロセスのコンテクストを第１の下位パーティションからリストア（復活、復元）することによってそのプロセスが回復される。保存・保持されたプロセスのコンテクストは、オーディオサブシステム中で保存・保持されたコンテクストをリストアすることによってそのプロセスを回復するのに十分なアドレスおよびデータ構造の情報を含む。プロセッサが、第１のオーディオデータストリームが出力される第１のオーディオデバイスとは異なる第２のオーディオデバイスに出力される第２のオーディオデータストリームを生成するオーディオアプリケーションを実行する場合、アクセス違反もプロセスの回復も、第２のデータデバイスによって出力されるオーディオに影響しない。
【発明を実施するための最良の形態】
【０００８】
以下、添付図面を参照して本発明の好ましい実施形態について詳細に説明するが、この開示および図の全体に渡って同様の構成要素および機能を同じ参照符号で参照する。１００番台の参照符号は初めに図１に現れる機能を指し、２００番台の参照符号は最初に図２に現れる機能を指し、３００番台の参照符号は、最初に図３に現れる機能を指す。以下、同様である。
【０００９】
複数のオーディオデバイスとそれらを駆動するアプリケーションドライバが、メディアサーバとして使用中のコンピューティングシステムとコミュニケーションを取り合うことができる。従って、コンピューティングシステムは、複数のオーディオデバイスに同時にオーディオを送信することができる。コンピューティングシステムのオペレーティングシステム（ＯＳ）は、カーネルと、オペレーティングシステムの多数のサブシステムのちょうど１つのサブシステムである内蔵オーディオサブシステムの両方を有する。アプリケーションの１つまたは複数は、オーディオデバイスの１つを対象とするすべてのオーディオに対するグローバル効果（ＧＦＸ）を有するオーディオ処理オブジェクト（ＡＰＯ）を実行するようにオーディオサブシステムに要求を行う。例として、ＧＦＸ  ＡＰＯは、残響・反響（リバーブ）効果、歪み効果、スピーカ補償効果、あるいは他のデジタル信号処理（ＤＳＰ）効果などが可能である。
【００１０】
オーディオサブシステムは、ＯＳのカーネルをオーディオデバイスドライバから隔離し、また互いに他から隔離する。サンドボックス技法の１つであるこの隔離により、アクセス違反を犯すことなどによりオーディオアプリケーションに障害が発生した時の回復が可能になることを保証する。この隔離により、実行中のすべてのアプリケーションからのすべてのオーディオが停止するのではなく、障害の起こったアプリケーションからのオーディオだけが停止するようになる。この分離はまた、アクセス違反がコンピューティングシステムをクラッシュさせず、ブート（例えばブートストラップ）動作が回避されることも保証する。障害のあるアプリケーションは再起動させ、オーディオの生成を続行することができる。ユーザは、アプリケーションの障害からは瞬間的なオーディオの損失のみを経験する。コンピューティングシステムのユーザによって知覚されるオーディオの損失は、障害が発生したアプリケーションのオーディオに限られ、音声が途切れる時間の長さについては変化する。
【００１１】
一実施形態では、２人のユーザが１台のパーソナルコンピュータ（ＰＣ）をメディアサーバとして使用することができ、ここで、第１のユーザはＰＣのＤＶＤプレーヤでＤＶＤの映画を再生し、映画からの音声は、第１のスピーカセットで再生するために第１のサウンドカードで処理される。第２のユーザは、ＰＣのＣＤリーダを使用してコンパクトディスク（ＣＤ）上の歌を再生している。第２のユーザについては、その再生は、ＰＣのマザーボードと通信する第２のサウンドカードと通信する第２のスピーカセットで再生される。第２のサウンドカードは、オーディオデバイスドライバによって駆動される。歌の再生は、ＰＣ上でメディアプレーヤアプリケーションを実行することによって行われる。メディアプレーヤアプリケーションは、歌の再生によって生成されたオーディオデータストリームに関してＧＦＸ  ＡＰＯを呼び出す。このＧＦＸ  ＡＰＯに、アクセス違反を犯すなどによりその実行中に障害を発生させるソフトウェアバグがもしある場合には、第２のユーザは、障害からの回復中に例えば５秒間の音声の損失を経験することになる。その回復中には、コンピュータを再起動する必要はなく、第１のユーザはＤＶＤの映画の再生中に音声の損失を経験しない。ＧＦＸ  ＡＰＯが再ロードされ、オーディオサブシステムは、歌を再生するために中断した箇所にオーディオを戻す。再ロードされたＧＦＸ  ＡＰＯは引き続き実行して、第２のサウンドカードを用いて第２のスピーカセットで再生されるオーディオデータストリームを処理する。そのＰＣを使用してオーディオの再生をしていた他のオーディオデバイスがある場合、そのオーディオはアクセス違反によっても回復によっても失われない。
【００１２】
図１に、ＰＣ１２４がメディアサーバとして使用されている環境１００を示す。図１には何人かの人を示すが、それぞれの者は１つまたは複数のスピーカ１０６から再生されるオーディオを聴いている。ＰＣ１２４は、ＰＣ１２４をメディアサーバとして使用する者のためにオーディオを含むマルチメディアを再生するＡ−Ｖ部１２２に、デジタルビデオディスク（ＤＶＤ）リーダやコンパクトディスク（ＣＤ）リーダなどの携帯メディアリーダを有する。ＰＣ１２４は、Ａ−Ｖ部１２２の携帯メディアリーダから読み出される携帯メディアを再生する複数のマルチメディアアプリケーションを実行している。オーディオデータは、オペレーティングシステム（Ｏ／Ｓ）１１４と通信する入力部１２０に通信される。そのようなマルチメディアアプリケーションの１つは、例えば米国ワシントン州レッドモンド所在のマイクロソフト社から提供されるＷｉｎｄｏｗｓ（登録商標）  Ｍｅｄｉａ  Ｐｌａｙｅｒソフトウェアであるとしてよい。
【００１３】
ＰＣ１２４のＯ／Ｓ１１４は、各自の対応するドライバ１０４（１〜Ｎ）を通じて各種のオーディオデバイス１０２（１〜Ｎ）と通信する出力部１１２を有する。例として、オーディオデバイス１０２は、２チャンネルのサウンドカード、一対のユニバーサルシリアルバス（ＵＳＢ）スピーカ、ネットワークスピーカ（ＴＣＰ／ＩＰスピーカ）、あるいは１つまたは複数チャンネルのサウンド出力に対応できる他のデバイスである。例えば、１つのオーディオデバイス１０２は、ＰＣ１２４がデジタルデータをアナログ音声に変換することによりスピーカ１０６の１つで音声を再生することを可能にする、ＰＣ１２４のマザーボードに搭載された拡張ボードであるサウンドカードとすることができる。オーディオデバイス１０２は、オーディオデータの再生（render)またはキャプチャ（記録）に使用することができる。例えば、オーディオデバイス１０２は、ＰＣ１２４に接続されたマイクロフォン１０６（ｋ−１）から入力される音声を記録するために使用することができ、またディスクに記憶された音声を操作するために使用することができる。１人の者が１つまたは複数のスピーカ１０６（ｋ）を聴きながらマイクロフォン１０６（ｋ−１）に話しているのが描かれている。オーディオは、Ｏ／Ｓ１１４の動作を通じて再生およびキャプチャされる。ネットワーク電話の環境では、マイクロフォン１０６（ｋ−１）はスピーカ１０６（ｋ）と共に使用することができ、各ＰＣがリアルタイム通信アプリケーション（ＲＴＣ）を実行していれば、人はネットワークを通じて別のＰＣのユーザに話しかけるためにマイクロフォン１０６（ｋ−１）に話す。Ｏ／Ｓ１１４は、論理的に独立したパーティションを含み、このパーティションはオーディオサブシステム１１６とカーネル１１８である。カーネル１１８は、オペレーティングシステム１１４のスケジューリングサービスである。オーディオコンポーネント１１６は、下記で図２に関して説明するように各種のソフトウェアコンポーネントを含むことができる。
【００１４】
図１のＯ／Ｓ１１４の一実装を図２に示し、ここでは環境２００は、オーディオデバイスドライバ２１４によって駆動されるオーディオデバイスによって音声を再生することを可能にする。図２の太線は、Ｏ／Ｓ１１４が線２２０で定義される２つの論理的に独立したパーティションを有し、オーディオサブシステム１１６が、太線２２０〜２２４で範囲が規定される３つの論理的に独立した下位パーティションを有することを表すことを意図している。Ｏ／Ｓ１１４の２つの論理的に独立したパーティションは、線２２０で区切ったカーネル１１８とオーディオサブシステム１１６である。各パーティションは、ユーザモードでは各自のアドレス空間を有し、他の各々から、そして実行中の他のアプリケーションから完全に隔離されている。同様に、各下位パーティションも、ユーザモードではそれ自体のアドレス空間を有し、各他のパーティションと実行中の他のアプリケーションから完全に隔離される。３つの下位パーティションはすべてユーザモードではカーネル１１８の上位にあり、それ故いずれか１つの下位パーティションがクラッシュした場合、ＰＣ１２４は致命的なエラーを生じることなく作動し続ける。ここで使用する用語「コンテクスト」とは、プロセスに関連するメモリ中のアドレス空間と、そのプロセスに関連するデータ構造とを意味するものとし、オペレーティングシステムはプロセスを正しく実行するためにそのデータ構造を必要とする。
【００１５】
環境２００では、実線の矢印で、オーディオサブシステム１１６を制御する命令の流れを示す。環境２００中の破線の矢印は、オーディオデータストリームの流れを示す。オーディオサブシステム１１６中の３つの論理的に独立した下位パーティションは、プロセスコンテクスト２７０、サービスコンテクスト２７２、およびグローバルオーディオエンジン２７４である。グローバルオーディオエンジン２７４は、オーディオデバイスドライバ２１４によって駆動されるオーディオデバイスハードウェアと同期させることができる。同期させると、グローバルオーディオエンジン２７４は、適切な時点にループバッファ２１２にデータを注入（ｐｕｍｐ）する。同期したデータ注入により、オーディオデバイスドライバ２１４によって駆動されるオーディオデバイスは、適切な時点にループバッファ（looped buffer）２１２からオーディオデータストリームを読み出すことができる。
【００１６】
オーディオアプリケーション２０２がプロセスコンテクスト２７０で実行される。プロセスコンテクスト２７０は、オーディオサブシステム１１６で実行される各オーディオアプリケーション２０２につき別々のアドレス空間を有する。そのため、各オーディオアプリケーション２０２の実行は、別のオーディオアプリケーション（図示せず）に影響しない。プロセスコンテクスト２７０は、オーディオアプリケーション２０２のオーディオデータストリームの処理を行う。オーディオアプリケーション２０２により各ウェイクアップ（覚醒）期間に行われるオーディオデータ処理の量、速度、および頻度に起因して、オーディオアプリケーション２０２のソフトウェア中のエラーは頻繁に生じる可能性がある。
【００１７】
線２２０と２２２で区切ったプロセスコンテクスト２７０は、サービスコンテクスト２７２によってサービスまたは管理される。プロセスコンテクスト２７０は、一般的なアプリケーションプロセスコンテクストで実行されるクライアント（またはアプリケーション）空間を表す。オーディオアプリケーション２０２は、プロセスコンテクスト２７０のローカル効果エンジン（ＬＦＸ）によって処理できるオーディオデータストリームを生成し、データストリームは入力バッファ２０８に出力される。入力バッファ２０８は、プロセスコンテクスト２７０とグローバルオーディオエンジン２７４のインタフェースに当たる。換言すると、入力バッファ２０８は、プロセスコンテクスト２７０で動作するローカルアプリケーションからの出力を格納する。図２には、プロセスコンテクスト２７０に１つのオーディオアプリケーション２０２しか示していないが、オーディオサブシステム１１６は、サブシステム１１６のプロセスコンテクスト２７０について複数のオーディオアプリケーションをサポートできることを意図している。
【００１８】
サービスコンテクスト２７２は、オーディオサブシステム１１６中に線２２２と２２４で範囲を規定する。サービスコンテクスト２７２は、ＰＣ１２４のブート時にＯ／Ｓ１１４がロードされた時、またはユーザがログオンまたはログオフする時に存在するオーディオサブシステム１１６の一コンポーネントである。サービスコンテクスト２７２は、オーディオサブシステム１１６のサービスへのアクセス権を得るためにどのオーディオアプリケーションも必要とするアプリケーションプログラムインタフェース（ＡＰＩ）を含む。サービスコンテクスト２７２は、システムオーディオサービスで実行されるポリシー（指針）やシステムグラフサービスなどのグローバルなオーディオサービス空間を表す。サービスコンテクスト２７２は、プロセスコンテクスト２７０による処理がクラッシュした後も残存する。
【００１９】
グローバルオーディオエンジン２７４は、グローバルオーディオエンジン２７４がループバッファ２１２を通じて通信する対象のオーディオデバイスドライバ２１４によって駆動されるオーディオデバイス（図示せず。例えばサウンドカード）のプロキシ（代理）である。グローバルオーディオエンジン２７４は、各グローバルオーディオエンジンの処理空間につき１つのプロセスを表し、ここで各グローバルオーディオエンジンの処理空間は、どれか１つの特定のオーディオデバイスについてのすべてのオーディオデータを処理する役割を担う。また、オーディオサブシステム１１６のグローバルオーディオエンジン２７４は、それぞれがオーディオデータストリームを生成する個々のオーディオまたはマルチメディアアプリケーションへの複数の接続を混ぜ合わせることにより、単一のオーディオデバイスを仮想化することができる。そのように仮想化すると、グローバルオーディオエンジン２７４は、混成したオーディオデータストリームを、単一のオーディオデバイスへの１つのオーディオデータストリームとして与えることができる。このようなことなので、多数の同時に実行されるすべてのアプリケーションが、それらすべてが共有する同一のオーディオデバイスに全部出力を行うことができる。また、グローバルオーディオエンジン２７４は、ＰＣ１２４がメディアサーバとして使用されている時に、複数のオーディオデバイスが同時に機能することを可能にする。
【００２０】
入力バッファ２０８のオーディオデータストリームは、グローバルオーディオエンジン２７４への入力として使用することができる。グローバルオーディオエンジン２７４は、オーディオデバイスドライバ２１４によって駆動されるオーディオデバイスで出力されるオーディオデータストリームへのグローバル効果（ＧＦＸ）を有するオーディオ処理オブジェクト（ＡＰＯ）を行う。このようなことなので、グローバルオーディオエンジン２７４は、入力バッファ２０８中のオーディオデータストリームをミキシングおよび／または処理することができ、ここで入力バッファ２０８は、複数のオーディオアプリケーションからのオーディオデータストリームを格納するために使用される。入力バッファ２０８中でオーディオデータストリームをミキシングおよび／または処理した結果、単一のミキシングされたオーディオデータストリームがループバッファ２１２に出力される。ループバッファ２１２は、オーディオデバイスドライバ２１４への入力のためにグローバルオーディオエンジン２７４とのインタフェースをとる。そのようなことなので、ループバッファ２１２はグローバルオーディオエンジン２７４からの出力を格納するために使用することができ、オーディオデバイスドライバ２１４への入力として使用することができる。
【００２１】
環境２００のオーディオサブシステム１１６は、各グローバルオーディオエンジン２７４につき１つのプロセスを提供する。そして、各グローバルオーディオエンジン２７４は、対応するオーディオデバイスドライバとのインタフェースを介して、個々のオーディオデバイスについてのすべてのオーディオデータストリームの処理を順繰りに担当する。図２には１つのオーディオデバイスについて１つのオーディオデバイスドライバ２１４のみを示すが、オーディオサブシステム１１６は、複数のオーディオデバイスと各自のオーディオデバイスドライバをサポートできることを意図している。
【００２２】
前述の内容を参照すると、オーディオアプリケーション２０２、グローバルオーディオエンジン２７４によって実行されるＧＦＸ  ＡＰＯ、およびオーディオデバイスドライバ２１４はそれぞれ、オーディオデバイスでオーディオデータストリームを再生するために環境２００のオーディオサブシステム１１６によって使用される、サードパーティ（別企業）から提供可能なソフトウェアを表すことができる。したがって、環境２００は、環境２００のオーディオサブシステム１１６が常駐しているＰＣ１２４を利用する顧客に対してオーディオソフトウェアを革新し、提供するサードパーティに場と市場を提供する。
【００２３】
図２に示す環境２００では、Ｏ／Ｓ１１４のコンポーネントは、欠陥のあるサードパーティソフトウェアの実行によって引き起こされるアクセス違反の結果生じる問題から隔離されている。サンドボックスとしても知られるこの隔離は、オーディオサブシステム１１６の下位パーティション２７０および２７４におけるオーディオデータストリームが処理されているコンテクストを保存することによって達成される。一具体例では、グローバルオーディオエンジン２７４のコンテクストだけをサービスコンテクスト２７２によって保存する。例えばアクセス違反などによりグローバルオーディオエンジン２７４がクラッシュした場合、そのクラッシュは、プロセスコンテクスト２７０にもオーディオアプリケーション２０２にも影響を及ぼさない。オーディオアプリケーション２０２がクラッシュした場合、オーディオサブシステム１１６では何もその影響を受けない。サービスコンテクスト２７２がクラッシュした場合は、オーディオサブシステム１１６全体がクラッシュする。
【００２４】
グローバルオーディオエンジンの回復
グローバルオーディオエンジン２７４でＧＦＸ  ＡＰＯの処理中にアクセス違反などにより障害が発生した場合は、サービスコンテクスト２７２に保存されていたその処理のコンテクストを使用して処理を回復することができる。回復の後、サービスコンテクスト２７２に保存されているそのプロセスの保存されたコンテクストに従ってオーディオデータストリームの処理を再開することができる。オーディオサブシステム１１６によって行われるこのオーディオ要求へのサービスは、カーネル２７６からサンドボックスされている。このサンドボックスにより、システム全体にわたる障害が防止される。ローカルおよびグローバルの処理アプリケーションの障害などが原因でクラッシュあるいは障害が発生するアプリケーションは、自動的に回復して処理を再開することができる。
【００２５】
ローカルおよびグローバル両方の処理コンテクストの保存は、処理の機構をそれ自体のアドレス空間に入れることによって達成することができる。換言すると、プロセスコンテクスト２７０で生じるローカルオーディオエンジンの処理ルーチンのコンテクストを、グローバルオーディオエンジン２７４の処理ルーチンのコンテクストが保存されたアドレスとは別のアドレスに保存する。プロセスのアドレス空間は、そのプロセスのコンテクストが保存されるアドレスとは別である。処理の機構をコンテクストの機構のアドレスとは別のそれ自身のアドレス空間に入れると、その処理の機構がクラッシュする可能性がある一方で、コンテクストの機構は損なわれない状態を保つ。オーディオサブシステム１１６とは論理的に分離したカーネル１１８も損なわれないままである。そのため、クラッシュが起こった場合には、１つのオーディオアプリケーションについてのローカルな処理のみ、または１つのオーディオデバイスについてのグローバルな処理のみが終了することに限定される。クラッシュが発生してもＰＣ１２４に対しては障害を引き起こさず、したがって、障害が発生した場合にはオーディオ再生の再開のために必要とされるシステムの再起動またはリブート（再起動）が回避される。クラッシュの後には、オーディオの再生を再開するために、ＰＣ１２４のＯ／Ｓ１１４を再起動するのではなく、処理の機構を再起動させることができる。一部の実施では、コンテクストを保存して、障害の発生した処理を再始動させることを意図している。
【００２６】
次いで、メディアプレーヤアプリケーションがオーディオデータを再生している実施の一例として、オーディオデータストリームのグローバルなオーディオの処理中に生じた障害からの回復の一例を説明する。このオーディオデータは、バグがあるサードパーティソフトウェアのオーディオ処理オブジェクト（ＡＰＯ）を使用してグローバルオーディオ効果（ＧＦＸ）をかけられている。このＧＦＸ  ＡＰＯソフトウェアは、グローバルオーディオエンジン２７４でオーディオデータストリームを処理するデジタル信号処理アプリケーションである。環境２００は、グローバルオーディオエンジン２７４で行われている処理の、コンテクストのサービスコンテクスト２７２への保存（例えば記憶）を調整する。そのため、グローバルオーディオエンジン２７４中のＧＦＸ  ＡＰＯのアドレス空間とデータ構造をサービスコンテクスト２７２に記憶する。最終的に、グローバルオーディオエンジン２７４で実行されるＧＦＸ  ＡＰＯのバグがアクセス違反を行う。このアクセス違反により、グローバルオーディオエンジン２７４中の処理が順にクラッシュを引き起こされる。このクラッシュの結果、オーディオデバイスドライバ２１４を介してオーディオデバイスで再生されていたオーディオがある時間にわたって停止する。この時間中、環境２００は、クラッシュからの回復を調整する。
【００２７】
回復は、グローバルオーディオエンジン２７４中で行われていたＧＦＸ  ＡＰＯの処理のコンテクストを復元することによって実現される。コンテクストは、そのコンテクストが保存されていたサービスコンテクスト２７２から回復される。したがって、復元する保存されたコンテクストは、コンテクスト入力バッファ２０８のコンテクスト、グローバルオーディオエンジン２７４のＧＦＸ  ＡＰＯの処理のコンテクスト、およびループバッファ２１２のコンテクストである。サービスコンテクスト２７２から各コンテクストが復元されると、グローバルオーディオエンジン２７４のＧＦＸ  ＡＰＯの処理を継続することができる。コンテクストの復元後、オーディオデバイスドライバ２１４を介してオーディオデバイスでオーディオの再生を続行することができる。コンピューティングシステムを使用している顧客には、グローバルオーディオエンジン２７４中におけるＧＦＸ  ＡＰＯの保存されたコンテクストを回復することによりＧＦＸ  ＡＰＯを再ロードする時に短いオーディオの損失（例えば５秒間）を耳にする。次いで、オーディオは、オーディオが途切れたほぼその箇所に戻り、再開する。各オーディオデバイスのオーディオは、環境２００により他のオーディオデバイスのオーディオから隔離されているので、他のオーディオデバイスはいずれも、ＧＦＸ  ＡＰＯのクラッシュによりオーディオを損失しない。
【００２８】
クラッシュからの回復中には、グローバルオーディオエンジン２７４によるオーディオデータの処理により、オーディオデバイスドライバ２１４によってサービスされているオーディオデバイスへのオーディオストリーミングまたは当該デバイスからのオーディオストリーミングがすべて停止する。しかし、各オーディオアプリケーション２０２は、クラッシュが発生したことを気が付かない。オーディオデバイスのオーディオグラフ（audio graph）の構造を維持する役割を負うサービスコンテクスト２７２は別のサービスコンテクストで動作するので、予めコンテクストを保存していたことによりクラッシュの後にサービスコンテクスト２７２を使用してグローバルオーディオエンジン２７４のコンテクストを復元することができる。サービスコンテクスト２７２は、オーディオデバイスドライバ２１４の状態（すなわち開始したか、停止したか）と、異なるプロセスコンテクストを識別する下位パーティション間で使用される共有バッファ（例えば入力バッファ２０８、ループバッファ２１２）とをコントロールしている。サービスコンテクスト２７２は、各自の下位パーティションにある入力バッファ２０８、ループバッファ２１２、およびグローバルオーディオエンジン２７４を再接続する。オーディオアプリケーション２０２は、クラッシュにトランスペアレント（透過的）に（例えば、クラッシュあるいはアクセス違反が発生しなかったかのように）動作を続けることができる。
【００２９】
一実施では、サービスコンテクスト２７２は、任意のサードパーティＧＦＸ  ＡＰＯソフトウェアがクラッシュした回数を追跡し続けることができる。その回数が所定の閾値を超えると、ユーザに対する診断またはその他のダイアログをユーザインタフェース（ＵＩ）に出力することができる。また、そのＧＦＸ  ＡＰＯを使用不可にするか、ユーザに対して警告をＵＩに出力した後に再び使用可能にすることもできる。ＵＩに診断を出力し、グローバルオーディオエンジン２７４でサードパーティのＧＦＸ  ＡＰＯソフトウェアの実行を再開しないなど、多数のアクセス違反とその後の回復については他の「階層（ｔｉｅｒｅｄ）」方式を採用することができる。アクセス違反後の回復の階層方式は、欠陥のあるグローバル効果コンポーネントを急停止させ、使用を中止する際に過度の反復が回避される点で有用である可能性がある。
【００３０】
オーディオアプリケーション２０２に関しては、グローバルオーディオエンジン２７４によるオーディオデータの処理中に生じるクラッシュは、オーディオアプリケーション２０２の動作と実行に対して透過的である。むしろ、オーディオアプリケーション２０２は、プロセスコンテクスト２７０とグローバルオーディオエンジン２７４間のパーティション境界上に位置する入力バッファ２０８への出力のためにプロセスコンテクスト２７０への入力をし続ける。それから、サービスコンテクスト２７２を使用してコンテクストを復元し、グローバルオーディオエンジン２７４の自動的な回復を行うが、一方でオーディオアプリケーション２０２は、ＧＦＸ  ＡＰＯのクラッシュに気づかないままでいる。
【００３１】
バッファ２０８、２１２はグローバルオーディオエンジン２７４の処理がクラッシュした後もなお生存しているので、オーディオデバイスドライバ２１４およびループバッファ２１２の状態を復元することができる。その処理がクラッシュした後にサービスコンテクスト２７２がグローバルオーディオエンジン２７４での処理をセットアップする際、サービスコンテクスト２７２は、バッファ２０８、２１２のアドレスを知らなければならない。これにより、新しいグローバルエンジン２７４がバッファ２０８、２１２に接続し、グローバルオーディオエンジン２７４のクラッシュもバッファ２０８、２１２のアドレスも知らないオーディオアプリケーション２０２からオーディオデータを受け取り続けられる。もっと正確に言えば、サービスコンテクスト２７２は、バッファ２０８、２１２をオブジェクトとして維持して、それによりサービスコンテクスト２７２がグローバルオーディオエンジン２７４を回復する時にそれらのバッファをグローバルオーディオエンジン２７４内に設定できるようにする。サービスコンテクスト２７２は、バッファ２０８、２１２を特定のオーディオデバイスについてのオーディオアプリケーション２０２からの入力として使用すべきことを指示する命令を、回復されたグローバルオーディオエンジン２７４に渡す。グローバルオーディオエンジン２７４がクラッシュした時、復元されたグローバルオーディオエンジン２７４は、サービスコンテクスト２７２からループバッファ２１２のアドレスを取得する。アクセス違反後、オーディオデバイスドライバ２１４はなお実行中であることが可能であり、ループバッファ２１２はなお存在することができる。
【００３２】
上述の説明は、サービスコンテクスト２７２にコンテクストを保存することにより、グローバルオーディオエンジン２７４中でクラッシュしたＧＦＸ  ＡＰＯから自動的に回復する例を提示したものである。サービスコンテクスト２７２にコンテクストを保存することにより、１つのみのオーディオデバイスへのオーディオが、ＰＣ１２４をリブート（再起動）するのに必要な時間に比べて短い時間のみしか途切れないように確実になる。ソフトウェア開発者は、ここに開示するオーディオサブシステム１１６で動作するＧＦＸ  ＡＰＯを提供することができ、そのＧＦＸ  ＡＰＯはなおクラッシュする可能性はあるが、すべてのオーディオデバイスを停止させる、あるいはＯＳ１１４全体をクラッシュさせることはない。コンテクストがサービスコンテクスト２７２に保存されている限り、ＧＦＸ  ＡＰＯはなお回復させることができる。オーディオサブシステム１１６は、各オーディオデバイス（例えば、サウンドカード、ＵＳＢスピーカなど）に対応するグローバルオーディオエンジン２７４を備え、それによりグローバルオーディオエンジン２７４は、それ自身のコンテクストで動作し、サービスコンテクスト２７２内に保存されることができる。そのためオーディオサブシステム１１６はフォールト・トレランス（障害に強い機能）があり、クラッシュ／ハングアップ（フリーズ）に対して堅牢であり、グローバルオーディオエンジン２７４によるＧＦＸ  ＡＰＯでのオーディオデータの処理中に発生するクラッシュから回復することができる。
【００３３】
各オーディオデバイスは、環境２００に見られるアーキテクチャに従って、独立したプロセスコンテクストに区分することができる。そのため、１つの特定のオーディオデバイスのためにグローバルオーディオエンジン２７４で処理することによりグローバルオーディオ効果として実行されるクラッシュが発生しやすい（crash-prone）ソフトウェアは、別のオーディオデバイスにためのグローバルオーディオエンジンでのオーディオデータの処理に影響を与えない。さらに、処理中のグローバル効果のコードにあるバグのためにグローバルオーディオエンジン２７４における処理がクラッシュした時には、自動的な回復を実現することができる。この回復が可能なのは、オーディオデバイスのグローバル状態がサービスコンテクスト２７２に保存されているからである。したがって、クラッシュしたＧＦＸ  ＡＰＯを回復させ、入力バッファ２０８に再接続させることができる。
【００３４】
一般に、グローバルオーディオエンジン２７４における処理中に発生したクラッシュからの回復は、あるオーディオデバイスへのオーディオデータストリームを生成するすべてのアプリケーションからのその対応するオーディオデバイスへのオーディオを停止させる。可能な限りクラッシュに対する耐性を持たせるために、各オーディオデバイスのグローバルオーディオエンジン２７４は、それ自身のコンテクストで動作することができ、そのコンテクストは、オーディオサブシステム１１６の論理的に別個のサービスコンテクスト２７２に保存されている。
【００３５】
図３に、グローバルオーディオエンジンで実行されるＧＦＸ  ＡＰＯによるアクセス違反から回復するプロセス３００を示す。図２〜３を参照すると、プロセス３００はブロック３０２で開始し、ここでサービスコンテクスト２７２が入力バッファ２０８およびループバッファ２１２のコンテクスト（例えば、アドレスおよびデータ構造）を保存する。ブロック３０４で、オーディオデータストリームに対してＧＦＸを生成するＡＰＯを起動する。オーディオデータストリームは、オーディオデバイスドライバ２１４によって駆動されるオーディオデバイスで再生される。プロセス３００はブロック３０６に進み、サービスコンテクスト２７２がグローバルオーディオエンジン２７４内のＧＦＸ  ＡＰＯのコンテクストを保存する。ブロック３０６の後、プロセス３００はブロック３０８に進み、ＧＦＸ  ＡＰＯを開始する。グローバルオーディオエンジン２７４における実行はブロック３１０で継続し、ここでグローバルオーディオエンジン２７４は、ＧＦＸ  ＡＰＯを実行して入力バッファ２０８のオーディオデータストリームにデジタル信号処理を行う。この処理の出力は、他のローカルプロセスからのミキシングされたオーディオデータストリームを含むことができ、ループバッファ２１２に移される。ループバッファ２１２中のこのミキシングしたオーディオデータストリームは、グローバルオーディオエンジン２７４による処理に応じたグローバル効果を有する。
【００３６】
ブロック３１２で、ＧＦＸ  ＡＰＯが終了するか、またはアクセス違反を起こす。ブロック３１４で、サービスコンテクスト２７２がその終了またはアクセス違反を検出し、入力バッファ２０８およびループバッファ２１２のコンテクストを復元する。ブロック３１６で、アクセス違反が発生したかどうかについて問い合わせを行う。それが発生していない場合は、プロセス３００はブロック３０４に進む。それが発生している場合はプロセス３００はブロック３１８に進み、そのＧＦＸ  ＡＰＯのクラッシュカウンタを増分する。ブロック３２０で、クラッシュカウンタが所定の閾値を超えたかどうかについてクラッシュカウンタを問い合わせる。それが超えている場合は診断３２２ａを表示し、プロセス３００はブロック３２２ｂに進んで、クラッシュの発生しやすいそのＧＦＸ  ＡＰＯなしでグローバルオーディオエンジン２７４を再起動する。ＧＦＸ  ＡＰＯのクラッシュカウンタが所定の閾値を超えない場合は、プロセス３００はブロック３０４に戻る。
【００３７】
プロセスコンテクストの回復
オーディオデータストリームのローカル（局所）の処理中に発生した障害からは回復を行うことができる。例えば、図２にオーディオアプリケーション２０２として示したメディアプレーヤアプリケーションは、プロセスコンテクスト２７０中の局所効果オーディオ処理オブジェクト（ＬＦＸ  ＡＰＯ）による処理のためにオーディオデータストリームを渡す。ＬＦＸ  ＡＰＯには、実行されるとアクセス違反を起こす（例えば、コード中にバグのある）欠陥のあるプログラミングコードセグメントがあるとする。プロセスコンテクスト２７０でＬＦＸ  ＡＰＯを実行する前に、環境２００のオーディオサブシステム１１６は、プロセスコンテクスト２７０で行われている処理のコンテクストのサービスコンテクスト２７２への保存（例えば記憶）を調整する。最終的に、ＬＦＸ  ＡＰＯ内のバグによりソフトウェアがアクセス違反を引き起こされる。そのアクセス違反により、次にプロセスコンテクスト２７０における処理がクラッシュを引き起こされる。このクラッシュの結果、入力バッファ２０８に再生されていたオーディオがある時間にわたって停止する。そのため、オーディオデバイスドライバ２１４を介してオーディオデバイスで再生されるオーディオに断絶が生じる。その時間中、環境２００はクラッシュからの回復を調整する。
【００３８】
プロセスコンテクスト２７０におけるＬＦＸ  ＡＰＯのクラッシュからの回復は、プロセスコンテクスト２７０での処理のコンテクストを復元することによって実現される。サービスコンテクスト２７２からコンテクストが復元されると、オーディオアプリケーション２０２の実行を再開することができ、それによるプロセスコンテクスト２７０のＬＦＸ  ＡＰＯの処理を続行することができる。ローカルの処理が続行すると、オーディオデータストリームを入力バッファ２０８に出力することができ、オーディオデバイスドライバ２１４の動作を介してオーディオデバイスで音声が再開することができる。オーディオアプリケーション２０２は環境２００により他のオーディオアプリケーションの環境から分離されているので、他のオーディオアプリケーションはクラッシュしない。
【００３９】
処理コンテクスト２７０によるＬＦＸ  ＡＰＯの処理中のクラッシュにより、オーディオアプリケーション２０２から入力バッファ２０８が切り離される。処理コンテクスト２７０の処理中に発生したクラッシュ後に残っているオーディオデータストリームがあれば、それを整理（ｃｌｅａｎ  ｕｐ）する必要がある。クラッシュが発生すると、サービスコンテクスト２７２にそのクラッシュを通知することができる。そのように通知されると、サービスコンテクスト２７２は、クラッシュ後に残っているオーディオデータストリームを打ち切ることができる。残っているオーディオデータストリームを整理するために、サービスコンテクスト２７２は、プロセスコンテクスト２７０によるオーディオデータの処理のために作成されたリストを維持することができる。このリストをサービスコンテクスト２７２によって使用して、残っているオーディオデータストリームを持つプロセスコンテクスト２７０の終了（または他のそのようなプロセスコンテクストの終了）を待機するスレッドを中止（ｌｅａｖｅ）することができる。
【００４０】
プロセスコンテクスト２７０による処理がクラッシュした場合、サービスコンテクスト２７２は、プロセスコンテクスト２７０による処理から開かれていたすべてのオーディオデータストリームを停止し、閉じることになる。オーディオアプリケーション２０２がクラッシュした場合は、オーディオデバイスドライバ２１４によって駆動されるオーディオデバイスも、グローバルオーディオエンジン２７４も影響を受けない。より正確にいえば、オーディオデータは、他のアプリケーションから、オーディオデバイスドライバ２１４によって駆動されるオーディオデバイス、またはグローバルオーディオエンジン２７４に依然としてストリーミングされることができる。ただし、プロセスコンテクスト２７０でのクラッシュにより、入力バッファ２０８はプロセスコンテクスト２７０から切り離される。そのため、入力バッファ２０８のオーディオデータを使用することができなくなる。プロセスコンテクスト２７０による処理がクラッシュしたことをサービスコンテクスト２７２が検出すると、入力バッファ２０８への各接続が閉じられるか、またはアロケーションが解消される。一実施では、オーディオアプリケーション２０２は自動的には回復されない。もっと正確に言えば、オーディオアプリケーション２０２は、必要な場合にはユーザにより再開させることができる。
【００４１】
図４に、プロセスコンテクスト２７０で実行中のローカル効果（ＬＦＸ）オーディオ処理オブジェクト（ＡＰＯ）によるアクセス違反から回復するプロセス４００を示す。図２および４を参照すると、プロセス４００はブロック４０２で開始し、ここでオーディオデータストリーム上にＬＦＸを生成するＡＰＯが起動される。このオーディオデータストリームは、オーディオデバイスドライバ２１４によって駆動されるオーディオデバイスによって再生されるものである。ブロック４０４で、サービスコンテクスト２７２が、入力バッファ２０８およびループバッファ２１２のコンテクスト（例えば、アドレスとデータ構造）を保存する。ブロック４０６で、処理コンテクスト２７０でＬＦＸ  ＡＰＯの実行を開始する。ブロック４０８で、プロセスコンテクスト２７０が入力バッファ２０８に出力し、グローバルオーディオエンジン２７４が入力バッファ２０８から入力を得る。グローバルオーディオエンジン２７４は、入力バッファ２０８からのオーディオデータストリームをミキシングし、ミキシングしたオーディオデータストリームをループバッファ２１２に出力する。ブロック４１０で、ＬＦＸ  ＡＰＯが終了するか、またはアクセス違反を起こす。ブロック４１２で、サービスコンテクスト２７２がその終了またはアクセス違反を検出し、入力バッファ２０８を削除する。
【００４２】
個々のコンピューティングシステムの各種のオペレーティングシステムは、特にそのオペレーティングシステムがオーディオデータのキャプチャ（捕まえること）と再生の組み合わせのためのオーディオサービスを提供し、そのオペレーティングシステムがマルチスレッド型かつマルチタスク方式であれば、前述の実施から利益を得ることができる。例示的な現在のオペレーティングシステムには、米国カリフォルニア州クパチーノ（Ｃｕｐｅｒｔｉｎｏ）所在のアップルコンピュータ社から提供されるＭａｃ（マック）ＯＳ（バージョン１０およびそれ以下）、米国カリフォルニア州マウンテンビュー所在のＢｅ社開発のＢｅＯＳ、米国ワシントン州レドモンド所在のマイクロソフト社から提供されるＷｉｎｄｏｗｓ（ウインドウズ）（登録商標）ＯＳ、およびフリーソフトウエア（無料配布）のＬｉｎｕｘ（リナックス）（登録商標）ＯＳが含まれる。さらに、本発明の開示からの利益は、アクセス違反を行うか、あるいはその他の原因でオペレーティングシステムの正常な動作を停止させる可能性のあるサードパーティプログラムを、非トラステッド（非承認）メディアアプリケーションに実行させることを許容する任意のマルチスレッド型オペレーティングシステムによって実現することができる。例えば、ここで検討するオペレーティングシステムは、オーディオ信号を変えるためにグローバルなコンテクストで使用できるオーディオ処理効果を行う非トラステッド（非承認）サードパーティメディアアプリケーションのために、拡張可能なメディア処理システムを備えている。特定のオーディオデバイスにサービスするオペレーティングシステムのオーディオシステムの一部をクラッシュさせることなく、不完全な書き方のコードあるいは悪意のあるコードを実行することができる。各種の実施で、クラッシュの回避は、プロセスなどの、オペレーティングシステム中の保護機構を使用して、オーディオサブシステムを論理的に分離したパーティションに区分することによって実現される。このプロセスは、不完全な書き方のコードによるオペレーティングシステムへの影響を最小に抑える。そのプロセスの実行のために、そのプロセスに結びついたアドレス空間およびデータの構造がオペレーティングシステムによって使用される。そのため、オペレーティングシステムは、メモリ保護の形、およびプロセス（またはスレッド）として表すことができるコンテクスト保護の形で、分離した処理コンテクスト中でそのプロセスを実行する。
【００４３】
例示的なコンピューティングシステム環境
図５に、ここに開示するリアルタイム通信アプリケーション（ＲＴＣ）およびメディアプレーヤアプリケーション（ＭＰ）を含むアプリケーションを完全または部分的に実装することが可能なコンピューティング環境５００の一例を示す。例示的コンピューティング環境５００は、コンピューティングシステムの一例に過ぎず、このネットワークアーキテクチャの使用または機能性の範囲について何らの制限を示唆することを意図するものではない。また、コンピューティング環境５００は、例示的コンピューティング環境５００に図示する構成要素の１つまたは組み合わせに関連する依存性または必要性を有するものとも解釈すべきでない。
【００４４】
このコンピュータおよびネットワークアーキテクチャは、多数の他の汎用または特殊目的のコンピュータシステム環境または構成を用いて実施することができる。使用に適する可能性があるよく知られるコンピューティングシステム、環境、および／または構成の例には、これらに限定しないが、パーソナルコンピュータ、サーバコンピュータ、シンクライアント、シッククライアント、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な消費者家電製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、ゲーム機、上述のシステムまたはデバイスを含む分散コンピューティング環境などがある。
【００４５】
アプリケーション（ＲＴＣおよびＭＰを含む）は、コンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令に概ね即して説明することができる。一般に、プログラムモジュールには、特定タスクを行うか、特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。アプリケーション（ＲＴＣおよびＭＰを含む）は、通信ネットワークを通じてリンクされた遠隔の処理装置によってタスクを行う分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、メモリ記憶装置を含むローカルおよびリモート両方のコンピュータ記憶媒体にプログラムモジュールを置くことができる。
【００４６】
コンピュータ環境５００は、コンピュータ５０２の形態の汎用コンピューティングシステムを含む。コンピュータ５０２の構成要素には、これらに限定しないが、１つまたは複数のプロセッサあるいは処理装置５０４、システムメモリ５０６、およびプロセッサ５０４を含む各種のシステム構成要素をシステムメモリ５０６に結合するシステムバス５０８が含まれる。
【００４７】
システムバス５０８は、各種のバスアーキテクチャの任意のものを使用したメモリバスまたはメモリコントローラ、ペリフェラルバス、アクセラレーテッドグラフィックポート、およびプロセッサバスまたはローカルバスを含む数タイプのバス構造の１つまたは複数を表す。このアーキテクチャの例には、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、およびメザニンバスとも称されるＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔｓ）バスが含まれる。
【００４８】
コンピュータシステム５０２は通例各種のコンピュータ可読媒体を含む。その媒体は、コンピュータ５０２がアクセスすることができる任意の利用可能媒体でよく、揮発性および不揮発性の媒体、取り外し可能および取り外し不能媒体が含まれる。システムメモリ５０６は、ランダムアクセスメモリ（ＲＡＭ）５１０などの揮発性メモリ、および／または読み取り専用メモリ（ＲＯＭ）５１２などの不揮発性メモリの形態のコンピュータ記憶媒体を含む。起動時などにコンピュータ５０２内の要素間の情報転送を助ける基本ルーチンを含む基本入出力システム（ＢＩＯＳ）５１４は、ＲＯＭ５１２に記憶される。ＲＡＭ５１０は通例、処理装置５０４から即座にアクセス可能な、かつ／または現在処理装置５０４によって操作中のデータおよび／またはプログラムモジュールを含む。
【００４９】
コンピュータ５０２は、この他の取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータ記憶媒体も含むことができる。例として、図５には、取り外し不能、不揮発性の磁気媒体（図示せず）の読み書きを行うハードディスクドライブ５１６、取り外し可能、不揮発性の磁気ディスク５２０（例えば「フロッピー（登録商標）ディスク」）の読み書きを行う磁気ディスクドライブ５１８、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、他の光学媒体などの取り外し可能、不揮発性の光ディスク５２４の読み書きを行う光ディスクドライブ５２２を示す。ハードディスクドライブ５１６、磁気ディスクドライブ５１８、および光ディスクドライブ５２２はそれぞれ、１つまたは複数のデータ媒体インタフェース５２５によってシステムバス５０８に接続される。あるいは、ハードディスクドライブ５１６、磁気ディスクドライブ５１８、および光ディスクドライブ５２２は、ＳＣＳＩインタフェース（図示せず）によってシステムバス５０８に接続することもできる。
【００５０】
ドライブとそれに結びついたコンピュータ記憶媒体は、コンピュータ５０２のコンピュータ可読命令、データ構造、プログラムモジュール、およびその他のデータの不揮発性の記憶を提供する。この例では、ハードディスク５１６、取り外し可能磁気ディスク５２０、および取り外し可能光ディスク５２４を挙げるが、磁気カセットまたは他の磁気記憶装置、フラッシュメモリカード、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光学ストレージ、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、ＥＥＰＲＯＭ（電気的に消去可能なプログラム可能読み取り専用メモリ）など、データを記憶することができ、コンピュータからのアクセスが可能な他のタイプのコンピュータ可読媒体もこの例示的コンピューティングシステムおよび環境を実施するために利用できることを理解されたい。
【００５１】
ハードディスク５１６、磁気ディスク５２０、光ディスク５２４、ＲＯＭ５１２、および／またはＲＡＭ５１０には任意数のプログラムモジュールを記憶することができ、これには、例えばオペレーティングシステム５２６、１つまたは複数のアプリケーションプログラム５２８、他のプログラムモジュール５３０、およびプログラムデータ５３２が含まれる。これらオペレーティングシステム５２６、１つまたは複数のアプリケーションプログラム５２８、他のプログラムモジュール５３０、およびプログラムデータ５３２（またはこれらの何らかの組み合わせ）はそれぞれ、ここに開示するＲＴＣおよび／またはＭＰの一実施形態を含むことができる。オペレーティングシステム５２６は、オーディオのキャプチャ（捕捉）および再生のサービスを含むことができ、メディアアプリケーションは、グローバルなオーディオ出力のシステム全体にわたるミキシング（混合）を信号処理のために得ることができる。
【００５２】
コンピュータシステム５０２は、通信媒体として識別される各種のコンピュータ可読媒体を含むことができる。通信媒体は通例は、搬送波または他の搬送機構などの変調データ信号にコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを実施し、任意の情報伝達媒体を含む。
【００５３】
用語「変調データ信号」とは、信号中に情報を符号化する形でその特性の１つまたは複数を設定または変化させた信号を意味する。例として、通信媒体には、配線ネットワークまたは直接配線接続などの配線媒体と、音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体が含まれるが、これらに限定しない。上記の媒体のいずれの組み合わせもコンピュータ可読媒体の範囲に含めるべきである。
【００５４】
ユーザは、キーボード５３４、およびポインティングデバイス５３６（「マウス」など）などの入力装置を通じてコンピュータ５０２にコマンドと情報を入力することができる。マイクロフォン５３５を使用して、音声入力を渡すための音声認識処理を施すことが可能な音声コマンドを入力することができる。他の入力装置５３８（図示せず）としては、ジョイスティック、ゲームパッド、衛星受信アンテナ、シリアルポート、スキャナなどが考えられる。これらおよびその他の入力装置は、システムバス５０８に結合された入出力インタフェース５４０を通じて処理装置５０４に接続するが、パラレルポート、ゲームポート、あるいはユニバーサルシリアルバス（ＵＳＢ）など他のインタフェースおよびバス構造によって接続することも可能である。
【００５５】
モニタ５４２または他タイプの表示装置も、ビデオインタフェース５４４などのインタフェースを介してシステムバス５０８に接続することができる。入出力インタフェース５４０には、サウンドカード、内蔵型（すなわちオンボードの）サウンドカードなどが含まれる。１つまたは複数のスピーカ５３７が、入出力インタフェース５４０と通信することができる。モニタ５４２以外に、他の出力周辺装置には、入出力インタフェース５４０を介してコンピュータ５０２に接続できるプリンタ５４６などの構成要素が含まれる。
【００５６】
コンピュータ５０２は、リモートコンピューティングデバイス５４８など１つまたは複数のリモートコンピュータへの論理接続を使用するネットワーク環境で動作することができる。例として、リモートコンピューティングデバイス５４８は、パーソナルコンピュータ、携帯型コンピュータ、サーバ、ルータ、ネットワークコンピュータ、ピアデバイス、あるいはその他の一般的なネットワークノードなどである。図には、リモートコンピューティングデバイス５４８は、コンピュータシステム５０２との関連でここに記載する要素および機能を多くまたはすべてを含むことができる携帯型コンピュータとして示している。
【００５７】
コンピュータ５０２とリモートコンピュータ５４８間の論理接続は、ローカルエリアネットワーク（ＬＡＮ）５５０および一般的なワイドエリアネットワーク（ＷＡＮ）５５２として図示している。このようなネットワーキング環境は、オフィス、企業内のコンピュータネットワーク、イントラネット、およびインターネットに一般的に見られる。ＬＡＮネットワーキング環境で実施する場合、コンピュータ５０２はネットワークインタフェースまたはアダプタ５５４を介してローカルネットワーク５５０に接続される。ＷＡＮネットワーキング環境で使用する場合、コンピュータ５０２は通例、インターネットなどのワイドネットワーク５５２を通じて通信を確立するためのモデム５５６またはその他の手段を含む。モデム５５６はコンピュータ５０２の内部にあっても外部にあってもよく、入出力インタフェース５４０または他の適切な機構を介してシステムバス５０８に接続することができる。図のネットワーク接続は例示的なものであり、コンピュータ５０２と５４８の間に通信リンクを確立する他の手段を使用できることは理解されよう。
【００５８】
コンピューティング環境５００で説明したようなネットワーク環境では、コンピュータ５０２との関連で図示したプログラムモジュールまたはその一部をリモートのメモリ記憶装置に記憶することができる。例えば、リモートアプリケーションプログラム５５８がリモートコンピュータ５４８のメモリ装置に常駐している。説明のために、アプリケーションプログラムおよびオペレーティングシステムなど他の実行可能プログラムコンポーネントは、ここでは別々のブロックとして図示しているが、そのようなプログラムおよびコンポーネントは、様々な時に、コンピュータシステム５０２の異なる記憶コンポーネントに常駐し、コンピュータのデータプロセッサによって実行されることは理解されよう。
【００５９】
本発明について、構造的特徴および／または方法論的ステップを具体的に説明したが、特許請求の範囲に規定する本発明は、必ずしもここに記載する特定の特徴またはステップに限定されないことを理解されたい。それらの特徴およびステップは、特許権を請求する本発明を実施する好ましい形態としてここに開示する。
【図面の簡単な説明】
【００６０】
【図１】複数の場所にいる複数のユーザに対してオーディオをサービスするメディアサーバとしてコンピューティングシステムを使用する環境における例示的なコンピューティングシステムを示す図である。
【図２】オーディオデバイス用のドライバと通信するオペレーティングシステムを有するコンピューティングシステムでオーディオアプリケーションを実行する実施例を示す図である。
【図３】オペレーティングシステムのオーディオサブシステムが、オーディオドライバによって駆動されるオーディオデバイスで再生されるオーディオデータストリームに対してグローバル効果（ＧＦＸ）を生成するオーディオ処理オブジェクト（ＡＰＯ）を実行する要求に応え、ＧＦＸ  ＡＰＯによるアクセス違反後に、予め保存しておいたコンテクストを使用してオーディオサブシステムの各種コンテクストを復元するプロセスを説明する流れ図である。
【図４】オペレーティングシステムのオーディオサブシステムが、オーディオドライバによって駆動されるオーディオデバイスで再生されるオーディオデータストリームに対してローカルオーディオ効果（ＬＦＸ）を生成するオーディオ処理オブジェクト（ＡＰＯ）を実行する要求に応え、ＬＦＸ  ＡＰＯによるアクセス違反後に、予め保存しておいたコンテクストを使用してオーディオサブシステムの各種コンテクストを復元するプロセスを説明する流れ図である。
【図５】ここに記載するコンピューティングシステム、ソフトウェアアプリケーション、方法、およびシステムを完全に、または部分的に実施することが可能なコンピューティング環境の一例を示す図である。
【符号の説明】
【００６１】
１００、２００  環境
１０２  オーディオデバイス
１０４  ドライバ
１０６  スピーカ（マイクロフォン）
１１２  出力部
１１４、５２６  オペレーティングシステム
１１６  オーディオサブシステム
１１８、２７６  カーネル
１２０  入力部
１２２  Ａ−Ｖ部
１２４  ＰＣ
２０２  オーディオアプリケーション
２０８  入力バッファ
２１２  ループバッファ
２１４  デバイスドライバ
２７０  プロセスコンテクスト
２７２  サービスコンテクスト
２７４  オーディオエンジン
５００  コンピューティング環境
５０２  コンピュータ
５０４  処理装置
５０６  システムメモリ
５０８  システムバス
５１０  ＲＡＭ
５１２  ＲＯＭ
５１４  ＢＩＯＳ
５１６  ハードディスクドライブ
５１８  磁気ディスクドライブ
５２０  磁気ディスク
５２２  光ディスクドライブ
５２４  光ディスク
５２５  データメディアインタフェース
５２８、５５８  アプリケーションプログラム
５３０  プログラムモジュール
５３２  プログラムデータ
５３４  キーボード
５３５  マイクロフォン（音声Ｉ／Ｏ）
５３６  ポインティングデバイス（マウス）
５３８  入力装置（他のデバイス）
５４０  入出力インタフェース
５４２  モニタ
５４４  ビデオインタフェース
５４６  プリンタ
５４８  リモートコンピューティングデバイス
５５０  ＬＡＮ
５５２  ＷＡＮ
５５４  ネットワークアダプタ
５５６  モデム
５５８  リモートアプリケーションプログラム
【図１】
2004288196.tif 000003
【図２】
2004288196.tif 000004
【図３】
2004288196.tif 000005
【図４】
2004288196.tif 000006
【図５】
2004288196.tif 000007