(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-07-17
(54)【発明の名称】循環畳み込みのための適応係数およびサンプル除去
(51)【国際特許分類】
G10K 15/12 20060101AFI20240709BHJP
【FI】
G10K15/12
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023574623
(86)(22)【出願日】2022-05-11
(85)【翻訳文提出日】2023-12-04
(86)【国際出願番号】 US2022028666
(87)【国際公開番号】W WO2022260817
(87)【国際公開日】2022-12-15
(32)【優先日】2021-06-11
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2021-10-13
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】314015767
【氏名又は名称】マイクロソフト テクノロジー ライセンシング,エルエルシー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】イブラヒム,ジアド
(72)【発明者】
【氏名】カクルマリ,ラクシュミ ナラシンハ ラオ
(72)【発明者】
【氏名】ジャン,アンドリュー イ
【テーマコード(参考)】
5D208
【Fターム(参考)】
5D208AB19
(57)【要約】
リアルタイム・オーディオ処理の効率を改善するための、具体的には、リアルタイム・オーディオ信号を連続的に修正する効率を改善するための技術が開示される。メモリ帯域幅要件を低減することによって、およびリアルタイム・オーディオ信号を修正するために使用される処理の量を低減することによって、効率が改善される。いくつかの構成では、メモリ帯域幅要件は、周波数領域においてアクティブなサンプルを選択的に転送することによって、たとえば、ゼロまたはほぼゼロの振幅をもつサンプルの転送を回避することによって低減される。これは、特化したハードウェアがメイン・メモリからリアルタイムでサンプルを取り出すときに特に重要である。いくつかの構成では、オーディオ信号を修正するために必要とされる処理の量は、出力オーディオ信号に有意に影響を及ぼさない演算を省略することによって低減される。たとえば、サンプルの乗算は、サンプルのうちの少なくとも一方がゼロまたはほぼゼロの振幅を有するときに回避されうる。
【特許請求の範囲】
【請求項1】
効率的なリアルタイム・オーディオ処理のためのコンピュータ実装される方法であって、当該方法は:
最低周波数から最高周波数まで順序付けられた第1の複数の周波数サンプルを含むオーディオ信号ブロックを受領するステップと;
前記オーディオ信号ブロックと畳み込んで出力オーディオ信号を生成するためのインパルス応答ブロックを識別するステップであって、前記インパルス応答ブロックは、前記最低周波数から前記最高周波数まで順序付けられた第2の複数の周波数サンプルを含む、ステップと;
それより上では前記第1の複数の周波数サンプルの周波数サンプルが前記出力オーディオ信号に閾値量未満の音量を寄与するような第1の閾値周波数を識別するステップと;
それより上では前記第2の複数の周波数サンプルの周波数サンプルが前記出力オーディオ信号に前記閾値量未満の音量を寄与するような第2の閾値周波数を識別するステップと;
前記第2の複数の周波数サンプルのうち前記第2の閾値周波数より小さい周波数サンプルを、オーディオ処理デバイスにコピーするステップと;
前記第1の閾値周波数および前記第2の閾値周波数のうちの最小のものを最大周波数として識別するステップと;
前記最低周波数から前記最大閾値周波数まで、前記第1の複数の周波数サンプルからの周波数サンプルと前記第2の複数の周波数サンプルからの周波数サンプルとに対して、畳み込みを実行するステップと;
前記畳み込みの結果に基づいて前記出力オーディオ信号を生成するステップとを含む、
コンピュータ実装される方法。
【請求項2】
周波数サンプルが前記出力オーディオ信号に対して閾値量未満の音量を寄与するのは、その周波数サンプルが、ゼロであるか、またはゼロから定義された閾値以内である振幅を有するときである、請求項1に記載のコンピュータ実装される方法。
【請求項3】
前記インパルス応答ブロックは、複数のインパルス応答ブロックのうちの1つであり、前記第2の閾値周波数は、前記複数のインパルス応答ブロックのそれぞれについて識別され、前記最大閾値周波数は、前記複数のインパルス応答ブロックのそれぞれについて識別され、前記畳み込み演算は、前記複数のインパルス応答ブロックのそれぞれについて前記オーディオ信号ブロックに対して実行される、請求項1に記載のコンピュータ実装される方法。
【請求項4】
前記複数の応答ブロックのそれぞれについて識別された前記第2の閾値周波数は、事前計算され、削減テーブルに記憶される、請求項3に記載のコンピュータ実装される方法。
【請求項5】
前記複数のインパルス応答ブロックの周波数サンプルがメイン・メモリから前記オーディオ処理デバイスにコピーされる前に、前記削減テーブルがメイン・メモリから前記オーディオ処理デバイスにコピーされる、請求項4に記載のコンピュータ実装される方法。
【請求項6】
コンピュータ実行可能な命令が記憶されているコンピュータ可読記憶媒体であって、該命令は、オーディオ処理デバイスによって実行されると、該オーディオ処理デバイスに:
最低周波数から最高周波数まで順序付けられた第1の複数の周波数サンプルを含むオーディオ信号ブロックを受領するステップと;
前記オーディオ信号ブロックと畳み込んで出力オーディオ信号を生成するためのインパルス応答ブロックを識別するステップであって、前記インパルス応答ブロックは、前記最低周波数から前記最高周波数まで順序付けられた第2の複数の周波数サンプルを含む、ステップと;
それより上では前記第2の複数の周波数サンプルの周波数サンプルが前記出力オーディオ信号に閾値量未満の音量を寄与するような閾値周波数を識別するステップと;
前記第2の複数の周波数サンプルのうち前記閾値周波数より小さい周波数サンプルを受領するステップと;
前記最低周波数から前記閾値周波数まで、前記第1の複数の周波数サンプルからの周波数サンプルと前記第2の複数の周波数サンプルからの周波数サンプルとに対して、畳み込みを実行するステップと;
前記畳み込みの結果に基づいて前記出力オーディオ信号を生成するステップとを実行させるものである、
コンピュータ可読記憶媒体。
【請求項7】
個別の周波数サンプルは、該個別の周波数サンプルと前記第1の複数の周波数サンプルのうちの対応する周波数サンプルとに対して畳み込み演算を実行することから前記出力オーディオ信号への寄与を推定することによって、前記閾値量未満の音量を寄与すると判定される、請求項6に記載のコンピュータ可読記憶媒体。
【請求項8】
前記インパルス応答ブロックは、複数のインパルス応答ブロックのうちの1つであり、前記第2の閾値周波数は、前記複数のインパルス応答ブロックのそれぞれについて識別され、前記最大閾値周波数は、前記複数のインパルス応答ブロックのそれぞれについて識別され、前記畳み込み演算は、前記複数のインパルス応答ブロックのそれぞれについて前記オーディオ信号ブロックに対して実行される、請求項6に記載のコンピュータ可読記憶媒体。
【請求項9】
前記畳み込みは:
前記複数のインパルス応答ブロックのうちの各個別のインパルス応答ブロックについて、
その個別のインパルス応答ブロックの前記第2の閾値周波数より下の各個別の周波数について、
その個別のインパルス応答ブロックからのその個別の周波数サンプルを前記入力オーディオ・ブロックの前記対応する周波数サンプルと乗算し、
各周波数について前記乗算の結果を合計する
ことによって実行される、請求項8に記載のコンピュータ可読記憶媒体。
【請求項10】
前記閾値周波数は第2の閾値周波数であり、前記コンピュータ実行可能な命令は、前記オーディオ処理デバイスに:
それより上では前記第1の複数の周波数サンプルの周波数サンプルが閾値量未満の音量を前記出力オーディオ信号に寄与するような第1の閾値周波数を識別するステップと;
前記第1の閾値周波数および前記第2の閾値周波数のうちの最小値を最大周波数として識別するステップとをさらに実行させるものであり、
前記畳み込みは、前記最低周波数から前記最大閾値周波数まで実行される、
請求項6に記載のコンピュータ可読記憶媒体。
【請求項11】
少なくとも1つのプロセッサと;
コンピュータ実行可能な命令を記憶したコンピュータ可読記憶媒体と
を有するコンピューティング・デバイスであって、前記コンピュータ実行可能な命令は、前記少なくとも1つのプロセッサによって実行されると、前記コンピューティング・デバイスに:
最低周波数から最高周波数まで順序付けられた第1の複数の周波数サンプルを含む周波数領域のオーディオ信号ブロックを受領するステップと;
前記オーディオ信号ブロックと畳み込んで出力オーディオ信号を生成するためのインパルス応答ブロックを識別するステップであって、前記インパルス応答ブロックは、前記最低周波数から前記最高周波数まで順序付けられた第2の複数の周波数サンプルを含む、ステップと;
それより上では前記第2の複数の周波数サンプルの周波数サンプルが前記出力オーディオ信号に閾値量未満の音量を寄与するような閾値周波数を識別するステップと;
前記第2の複数の周波数サンプルのうち前記閾値周波数より小さい周波数サンプルを受領するステップと;
前記最低周波数から前記閾値周波数まで、前記第1の複数の周波数サンプルからの周波数サンプルと前記第2の複数の周波数サンプルからの周波数サンプルとに対して、畳み込みを実行するステップと;
前記畳み込みの結果に基づいて前記出力オーディオ信号を生成するステップとを実行させるものである、
コンピューティング・デバイス。
【請求項12】
前記閾値周波数は第2の閾値周波数であり、前記コンピュータ実行可能な命令は、前記オーディオ処理デバイスに:
それより上では前記第1の複数の周波数サンプルの周波数サンプルが閾値量未満の音量を前記出力オーディオ信号に寄与するような第1の閾値周波数を識別するステップと;
前記第1の閾値周波数および前記第2の閾値周波数のうちの最小値を最大周波数として識別するステップとをさらに実行させるものであり、
前記畳み込みは、前記最低周波数から前記最大閾値周波数まで実行される、
請求項11に記載のコンピューティング・デバイス。
【請求項13】
前記インパルス応答ブロックは、複数のインパルス応答ブロックのうちの1つであり、前記第2の閾値周波数は、前記複数のインパルス応答ブロックのそれぞれについて識別され、前記最大閾値周波数は、前記複数のインパルス応答ブロックのそれぞれについて識別され、前記畳み込み演算は、前記複数のインパルス応答ブロックのそれぞれについて前記オーディオ信号ブロックに対して実行される、請求項11に記載のコンピューティング・デバイス。
【請求項14】
前記複数の応答ブロックのそれぞれについて識別された前記第2の閾値周波数は、事前に計算され、削減テーブルに記憶される、請求項13に記載のコンピューティング・デバイス。
【請求項15】
前記複数のインパルス応答ブロックの周波数サンプルがメイン・メモリから前記オーディオ処理デバイスにコピーされる前に、前記削減テーブルがメイン・メモリから前記オーディオ処理デバイスにコピーされる、請求項14に記載のコンピューティング・デバイス。
【発明の詳細な説明】
【背景技術】
【0001】
オーディオは、ビデオ・ゲーム、電話会議、マルチメディアプレーヤーなどの多くのコンピューティング・アプリケーションに不可欠である。これらのアプリケーションは、しばしば、オーディオ信号を向上させ、操作し、または他の仕方で修正する。たとえば、電話会議アプリケーションは、異なる参加者の声を異なる位置に投影するために3次元オーディオを利用することによって、対面体験をより良好に再現することができる。ビデオ・ゲームは、エコー、こもり、または水中にいることなどの効果を追加することによって、現実感を高めることができる。マルチメディアプレーヤーは、最終的に音を生成する増幅器およびスピーカーに基づいて、オーディオ信号を調整することができる。しかしながら、これらの修正をオーディオ信号に適用することは、計算的に高価である。
【0002】
オーディオ信号を修正するための既存の技法は、特化したハードウェアを利用する。たとえば、ビデオ・ゲーム・コンソールは、ゲーム内環境に基づいてリアルタイムで異なるオーディオ効果を適用する特化したハードウェアを含んでいてもよい。しかしながら、ハードウェア加速を用いても、オーディオ信号を修正することのレイテンシーおよびスループットに影響を及ぼすメモリ帯域幅および処理制約条件がある。たとえば、ビデオ・ゲームが多数の効果を利用する場合、各効果を実行するために使用されるデータを特化したハードウェアにローカルに記憶することは、非現実的でありうる。これに対処するために、データは、しばしば、メイン・メモリから特化したハードウェアにリアルタイムで転送され、レイテンシーを増加させる。
【0003】
特化したオーディオ処理ハードウェアは、処理能力によっても制限されうる。いくつかのオーディオ処理システムは、高分解能オーディオ・フォーマットを修正するための、または複数の効果を同時に適用するための処理能力を有していないことがある。他のオーディオ処理システムは、計算集約的な修正を実行することができるが、品質、レイテンシー、または何らかの他の基準を犠牲にする。さらに他の特化したオーディオ処理ハードウェアは、ハードウェアのコスト、複雑さ、およびエネルギー消費を増加させる、より非効率的なアルゴリズムを補償するために、増加したハードウェア資源を用いて設計されうる。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本明細書でなされる開示が提示されるのは、これらおよび他の技術的課題に関する。本願で特許請求される主題は、何らかの欠点を解決する、または上述のような環境でのみ動作する実施形態に限定されない。むしろ、この背景は、本明細書に記載されるいくつかの実施形態が実施されうる1つの例示的な技術分野を示すために提供されるに過ぎない。
【課題を解決するための手段】
【0005】
リアルタイム・オーディオ処理の効率を改善するための、具体的には、リアルタイム・オーディオ信号を連続的に修正する効率を改善するための技術が開示される。メモリ帯域幅要件を低減することによって、およびリアルタイム・オーディオ信号を修正するために使用される処理の量を低減することによって、効率が改善される。いくつかの構成では、メモリ帯域幅要件は、周波数領域においてアクティブなサンプルを選択的に転送することによって、たとえば、ゼロまたはほぼゼロの振幅をもつサンプルの転送を回避することによって低減される。これは、特化したハードウェアがメイン・メモリからリアルタイムでサンプルを取り出すときに特に重要である。いくつかの構成では、オーディオ信号を修正するために必要とされる処理の量は、出力オーディオ信号に有意に影響を及ぼさない動作を省略することによって低減される。たとえば、サンプルの乗算は、サンプルのうちの少なくとも1つがゼロまたはほぼゼロの振幅を有するときに回避されうる。
【0006】
この概要は、以下で詳細な説明においてさらに説明される開示された技術のいくつかの側面の簡単な説明を簡略化された形で紹介するために提供される。この概要は、特許請求される主題の重要な特徴または本質的な特徴を特定することを意図しておらず、この概要が特許請求される主題の範囲を限定するために使用されることも意図していない。さらに、特許請求される主題は、本開示の任意の部分に記載される何らかのまたはすべての欠点を解決する実装に限定されない。
【図面の簡単な説明】
【0007】
【
図1】入力オーディオ信号をインパルス応答信号と畳み込みして出力オーディオ信号を生成することを示す。
【
図2】インパルス応答信号を時間領域から周波数領域に変換することを示す。
【
図4】入力オーディオ信号を時間領域から周波数領域に変換するためにフーリエ変換を適用することを示す。
【
図5】複数のインパルス応答ブロックを単一の入力オーディオ・ブロックに適用して出力オーディオ・ブロックを生成することを示す。
【
図6A】ハードウェア・オーディオ・プロセッサを有するコンピューティング・デバイスを示すブロック図である。
【
図6B】入力オーディオ・ブロックをローカル・メモリにロードした
図6Aのコンピューティング・デバイスを示すブロック図である。
【
図6C】メイン・メモリからローカル・メモリにインパルス応答ブロックをロードした
図6Aのコンピューティング・デバイスを示すブロック図である。
【
図6D】別の入力オーディオ・ブロックをロードし、メイン・メモリからインパルス応答ブロックの別のセットをロードした
図6Aのコンピューティング・デバイスを示すブロック図である。
【
図7】インパルス応答ブロックの多くのセットにおいて観察される周波数振幅のパターンを示す。
【
図8】それより下ではインパルス応答ブロックと入力オーディオ・ブロックがどちらもアクティブなサンプルを含む周波数を識別することを示す。
【
図9】入力オーディオ・ブロックの選択周波数の値に各インパルス応答ブロックからの対応する周波数の値を乗算することによって出力オーディオ・ブロックを計算することを示す。
【
図10】説明される実装形態による例示的な動作手順を示す流れ図である。
【
図11】本明細書に提示される技法および技術の諸側面を実装することが可能なコンピューティング・デバイスのためのコンピューティング・デバイス・アーキテクチャーを示すコンピュータ・アーキテクチャー図である。
【発明を実施するための形態】
【0008】
本明細書に開示される技術は、デジタル・オーディオ信号の処理における技術的な改善を提供する。上記で簡単に説明したように、リアルタイム・オーディオ信号に効果を追加すること、または他の仕方でリアルタイム・オーディオ信号を修正することは、メモリ帯域幅および処理集約的である。ますます複雑になるビデオ・ゲームおよびより高忠実度のオーディオ規格の要求が高まるにつれて、既存の技術に負担をかけてきた。また、コンピューティング・デバイスの電力消費および環境影響に対する関心が高まるにつれて、これらのデバイスの効率性を改善することへの関心が高まっている。この問題は、コンピューティング・デバイスによって生成されるオーディオ信号を修正するためにコンピューティング・デバイスを使用することに固有の問題に対処するので、ソフトウェアおよびコンピュータ・エンジニアリングの領域に特有である。
【0009】
この技術的課題、および潜在的には他の課題に対処するために、出力オーディオ信号に有意に影響を及ぼすデータが、メイン・メモリから特化したオーディオ処理ハードウェア・コンポーネントのローカル・メモリに転送されるべく選択される。同時に、出力オーディオ信号に有意に影響を与えないデータはスキップされ、メモリ帯域幅の使用を最適化する。
【0010】
処理パワーに対する制約条件は、いくつかの実施形態では、出力オーディオ信号に対してほとんどまたは全く影響を及ぼさないと予想される計算をスキップすることによって軽減されうる。たとえば、オーディオ畳み込み計算に含まれるときに、計算が出力オーディオ信号にほとんどまたは全く影響を与えないようにするサンプルが識別されうる。一例として、サンプルにゼロまたはほぼゼロの振幅を乗算する計算は、出力オーディオ信号にほとんどまたは全く影響を与えないので、これらの計算はスキップされうる。
【0011】
特定のサンプルに関わる計算が出力オーディオ信号に影響を及ぼすかどうかを推論するためにパターンが識別され、活用されうる。たとえば、入力ブロック内で、閾値周波数より上のサンプルは、ゼロまたはゼロに近い振幅を有する傾向がある。周波数領域において相続くブロック間で別のパターンが観察される――ブロックが右に行くほど、振幅は低くなり始め、より早くゼロに向かって収束する。これらのパターンに基づき、前記サンプルのインデックスに基づく諸サンプルについて、計算が省略されうる。これらの側面および他の諸側面に関するさらなる詳細は、いくつかの図に関して以下で提供される。
【0012】
図1は、インパルス応答信号104を入力オーディオ信号102に適用することを示す。その結果は、インパルス応答信号104によってエンコードされた効果を適用した入力オーディオ信号102を表す出力オーディオ信号106である。インパルス応答信号104は、リアルタイムまたはほぼリアルタイムで適用されうる。よって、インパルス応答信号104を適用する際のいかなる遅延も、オーディオ出力における遅延を引き起こすことがあり、それは、エンドユーザーのオーディオ体験を著しく劣化させることがある。
【0013】
入力オーディオ信号102は、ビデオ・ゲーム、オーディオ・シンセサイザー、または任意の他のタイプのコンピュータ生成オーディオによって生成されたオーディオを表しうる。入力オーディオ信号102は、たとえば、会議通話アプリケーションによって記録され、再生されたオーディオを表すこともできる。インパルス応答信号104の一例は、森林、大きな建物、車、または水中ダイビング中などの特定の環境において、オーディオがどのように体験されるかをエンコードする信号である。たとえば、ビデオ・ゲームは、アバターが仮想世界をナビゲートするときに足音を生成することができる。アバターが聖堂に入ると、ビデオ・ゲームは、足音が聖堂内で立てられたかのように思わせるインパルス応答信号104を適用することができる。アバターが聖堂を出る場合、聖堂内にあることのインパルス応答信号は、異なるインパルス応答信号で置き換えられてもよい。上述のように、ビデオ・ゲームに適用されるオーディオ効果は、インパルス応答信号104の一例に過ぎない。3Dオーディオを生成すること、特定のサウンドシステムのためにオーディオをカスタマイズすること、ピップ、ヒス、および他の不完全性を除去することなど、入力オーディオ信号102の他のリアルタイム修正が同様に考えられる。
【0014】
入力オーディオ信号102の各サンプル108は、その特定の時点で記録された(または生成された)音の振幅をエンコードする。よって、入力オーディオ信号102は、時間領域においてエンコードされると言われる。すなわち、x軸は時間を表し、y軸は音量を表す。図示されるように、振幅は、任意的に、-1と1との間の値に正規化されてもよい。
【0015】
インパルス応答信号104は、特定の環境における複数の音をサンプリングし、その環境にあることによって引き起こされる影響を単離することによって生成されうる。たとえば、聖堂内の複数の位置に設置された複数のマイクロフォンが、聖堂内で生成された音を記録するために使用されることができる。ひとたびある効果がインパルス応答信号としてエンコードされると、その効果は、その後、聖堂内の音をシミュレートするために任意のオーディオ信号に適用されうる。
【0016】
図2は、インパルス応答信号104を時間領域204から周波数領域212に変換することを示す。上述のように、時間領域204でエンコードされたオーディオは、異なる時点で一連の音サンプルとして記憶される。各サンプルの振幅は、その時点で録音された音の音量を示す。対照的に、周波数領域212は、音の各周波数がどれだけ記録されたかを記憶することによって音をエンコードする。時間を表す代わりに、周波数領域212におけるx軸は周波数を表し、左側で最低周波数で始まり、右に向かって増加する。周波数領域212において、各サンプルは、周波数のある範囲の音がどれだけ記録されたかを表しうる。たとえば、周波数領域は、各サンプルが全周波数範囲の1/512から記録された音の量を表すように、記録された周波数を512の区間に分割してもよい。
【0017】
インパルス応答信号104は、ブロック202A、202B、202Cなどに分割され、各ブロックは、インパルス応答信号104の一部からの信号データを含む。次いで、フーリエ変換206がブロック202に個別に適用され、インパルス応答ブロック208を生成する。具体的には、フーリエ変換206が時間領域204内の各ブロック202に適用されて、周波数領域212内の対応するブロック208を生成する。当業者は、フーリエ変換がインパルス応答ブロックの実数値および虚数値の諸セットを生成するが、簡潔のため、それらはインパルス応答ブロック208の単一のセットと呼ばれることを理解するであろう。
【0018】
当業者は、高速フーリエ変換(FFT)がこれらの変換を実行する好ましい方法であるが、同様の結果を達成する任意の技法も考えられることを理解するであろう。FFTが利用される場合、各ブロックのサイズ、すなわち各ブロック内のサンプル数は、2の累乗であり、一般的な値は512および1024である。
【0019】
いくつかの構成では、周波数領域への変換は、前もって行われ、レイテンシーを改善しうる。たとえば、インパルス応答信号104は、コンパイル時、アプリケーション・ロード時、またはリアルタイム使用のために要求される前の任意の他の時に、ブロック202に分割され、インパルス応答ブロック208に変換されうる。
【0020】
図3は、インパルス応答ブロック208の諸側面を示す。いくつかの構成では、ブロック208Aに示されたサンプルの振幅は、周波数範囲内のオーディオの量を示す。具体的には、
図2に関連して上述したように、各ブロック208は区間に分割され、そのそれぞれは、周波数の範囲を表す。たとえば、ブロック208Aが最低周波数302と最高周波数304との間の512個のサブセクションに分割される場合、ブロック208Aの各サンプル308の振幅は、全周波数範囲の1/512内の音の量を示す。
【0021】
図4は、入力オーディオ信号104のブロック402を時間領域204から周波数領域212に変換するためにフーリエ変換206を適用することを示す。その結果は、入力オーディオ信号104のブロック404であり、ブロック402によって表される期間の間の異なる周波数における音の量を示す周波数サンプル408を含む。周波数は、順序付けられ、最低周波数410から最高周波数412までの範囲に及ぶ。いくつかの構成では、リアルタイム・オーディオは、一度に1ブロック生成される。たとえば、入力オーディオ信号102は、ビデオ・ゲーム・コンソールによって一度に1ブロックずつ生成されてもよい。ブロック402によって表されるオーディオが周波数領域におけるブロック404に変換されると、インパルス応答ブロック208が、効果または他の修正を加えるために適用されうる。
【0022】
図5は、単一の入力オーディオ・ブロック404にいくつかのインパルス応答ブロック208を適用して出力オーディオ信号104のブロック506を生成することを示す。インパルス応答ブロック208、入力オーディオ・ブロック404、および出力オーディオ・ブロック506はすべて、周波数領域においてエンコードされる。これは、畳み込み(インパルス応答ブロックを入力オーディオ・ブロックに適用した結果をもたらす数学的演算)が乗算を用いて実行されることを許容し、時間領域において畳み込みを適用するために必要とされるであろう、より時間のかかる演算を回避する。
【0023】
動作502に示されるように、各インパルス応答ブロック208について、オーディオ・プロセッサは、各サンプルの振幅を、入力オーディオ・ブロック404の対応する周波数のサンプルの振幅と乗算する。動作504に示されるように、結果として得られる積は、周波数毎に合計され、ブロック506の周波数振幅として記憶される。このアルゴリズムの1つの例示的な実装を、擬似コードで以下に示す:
blockSize = 512; //または1024または2の他の何らかの累乗
impulseResponseBlockCount = 200; //たとえば20から1000
for (b=0; b < impulseResponseBlockCount; b++)
{
LoadToHardware(impulseResponse[b], blockSize * 2 * sizeof(float));
}
for (b=0; b < impulseResponseBlockCount; b++)
{
for ( index = 0; index < blockSize; index++)
{
Output[index].real += impulseResponse[b][index].real * input[index].real;
Output[index].imaginary += impulseResponse[b][index].imaginary * input[index].imaginary;
}
}
【0024】
示されるように、このアルゴリズムは、「blockSize」を定義する。これは、ブロック当たりのサンプルの数、すなわち、ブロックによって表される期間について音データをエンコードするために使用される周波数区間の数である。アルゴリズムはまた、インパルス応答がいくつのブロックを有するかを示す「impulseResponseBlockCount」、たとえば200を定義する。より多くのブロックをもつインパルス応答は、より長い期間にわたって持続する。たとえば、長いエコー効果は、1000ブロックを有するインパルス応答によって表されてもよく、これは、10秒のエコーを表すことができる。上記に示されたブロック・サイズおよびブロック数は、例示の目的で選択されており、限定するものではない。他の値も同様に考えられる。
【0025】
アルゴリズムの第1のループは、各インパルス応答ブロック208について「LoadToHardware」を呼び出し、これは、事前計算されたブロックをメイン・メモリから、オーディオ・プロセッサによって使用可能なローカル・メモリにコピーする。このロード動作は、入力オーディオ信号104のブロック404ごとに1回、たとえば1秒当たり88回実行されうるので、長いロード時間は、オーディオ処理のレイテンシーおよびスループットに悪影響を及ぼしうる。
【0026】
第2のループは、次いで、各インパルス応答ブロック208について畳み込み演算を逐次反復的に実行する。各インパルス応答ブロック208について、ネストされたループは、各サンプルの振幅に、入力オーディオ・ブロックにおける対応する周波数のサンプルの振幅を乗算する。これらの乗算の結果は、周波数毎に累積され、出力ブロック506のサンプルの振幅として記憶される。周波数領域212に存在する出力ブロック506は、次いで、所望の音を生成するために増幅器およびスピーカーに送信される前に時間領域に変換されうる。
【0027】
図6Aは、ハードウェア・オーディオ・プロセッサ604を有するコンピューティング・デバイス600を示すブロック図である。コンピューティング・デバイス600はまた、中央処理装置および任意の他のドメイン固有のプロセッサによって使用されうるメイン・メモリ602を含む。ハードウェア・オーディオ・プロセッサ604は、ライブ・オーディオ信号に効果を適用するか、または他の仕方でライブ・オーディオ信号を修正するときにオーディオ・プロセッサ608によって利用されるローカル・メモリ606を含む。
【0028】
上述のように、ハードウェア・オーディオ・プロセッサ604のローカル・メモリ606は、現在実行中のアプリケーションによって必要とされるインパルス応答ブロック208のすべてのセットを記憶するのに十分なほど大きくないことがある。いくつかの構成では、インパルス応答ブロック614は、インパルス応答ブロック208が効果を生成するためにオーディオ・プロセッサ608によって使用される間にそれらが記憶されるローカル・メモリ606の領域である。インパルス応答ブロック領域614は、1つまたは2つのセットのインパルス応答ブロック208を記憶するのに十分な大きさでありうる。これらの事例では、入力オーディオ・ブロック領域616にロードされたすべての入力オーディオ・ブロック404は、メモリ・バス610を通じてメイン・メモリ602から取り出されたインパルス応答ブロック208の対応するセットを有しうる。
【0029】
図6Bは、入力オーディオ・ブロック404をローカル・メモリ606の入力オーディオ・ブロック領域616Aにロードした
図6Aのコンピューティング・デバイス600を示すブロック図である。
【0030】
図6Cは、メイン・メモリ602からローカル・メモリ606の領域614Aにインパルス応答ブロック208をロードした
図6Aのコンピューティング・デバイス600を示すブロック図である。いくつかの構成では、インパルス応答ブロック領域614Aにロードされたインパルス応答ブロック208のセットは、メイン・メモリ602の領域612に記憶された事前計算されたインパルス応答ブロックのうちの1つを表しうる。ハードウェア・オーディオ・プロセッサ604は、アバターが移動している地形などのゲーム内コンテキストに基づいて、事前計算されたインパルス応答ブロック208の特定の諸セットをロードすることができる。
【0031】
図6Dは、別の入力オーディオ・ブロック404を入力オーディオ・ブロック領域616Bにロードし、別のセットのインパルス応答ブロック208をインパルス応答ブロック領域614Bにロードした
図6Aのコンピューティング・デバイス600を示すブロック図である。これは、メモリ・バス610を介してインパルス応答ブロックをロードすることの逐次反復的な性質を示す。
【0032】
図7は、インパルス応答ブロック208の多くのセットにおいて観察される振幅のパターンを示す。幅広い音の配列について観察された1つのパターンは、ブロックのエネルギーの大部分、すなわち、高い振幅を有するサンプルの大部分が、最も低い諸周波数、すなわち、ブロックの左側の諸サンプルによって表される周波数において見出されるということである。しばしば、振幅は、周波数が増加するにつれて減少する、すなわち、右に進む間に振幅が減少する。また、右に進むとき、ゼロまたはほぼゼロの振幅をもつサンプルに到達することがありうる。このサンプルのインデックスは、閾値710の右側のサンプルもゼロまたはほぼゼロの振幅を有するような閾値710でありうる。この閾値インデックスがブロック・サイズより小さい場合、この閾値710を超えるサンプルを送信せず、処理しないことによって効率を改善する機会がある。
【0033】
たとえば、ブロック208Kが512個の周波数を含む場合、周波数インデックス200における閾値は、閾値を超える312個の周波数、すなわち、ゼロまたはゼロに近い振幅を有する312個の周波数を残し、これらは、出力オーディオ信号に有意に寄与しない。出力オーディオ信号に有意に寄与するブロックのサンプルは、「アクティブなサンプル」と呼ばれてもよい。たとえば、ブロック208Kは、アクティブなサンプル708Kを有する。
【0034】
ブロックがゼロまたはゼロに近い振幅をもつサンプルを全く有していない場合、ブロック全体が使用可能である。たとえば、ブロック208Aは、ブロック全体にまたがる使用可能な諸サンプル708Aを有する。
【0035】
もう一つの観察されるパターンは、各相続くブロック208について、閾値インデックスが、前のブロックよりも、ブロックの、より左に見出されることである。すなわち、前記インデックスは、左のブロックよりも小さい値を有する。これは、より高い周波数の音がより早く消える傾向があり、そのため、時間とともに、より高い周波数を表すサンプルの振幅が、より低い周波数のサンプルよりも早くゼロに向かう傾向があるという事実のためである。
【0036】
いくつかの構成では、閾値は、入力信号振幅閾値検出器618によって識別され、入力信号振幅閾値検出器310は、最後のサンプル304(最高周波数をもつサンプル)から開始して最初のサンプル302に向かって、すなわち右から左に、入力オーディオ・ブロックのサンプルを走査するハードウェア・コンポーネントである。この検出は、入力オーディオ信号102のブロックが生成され、処理のために周波数領域に変換された後に、リアルタイムで実行されうる。入力信号振幅閾値検出器618は、閾値インデックスを、振幅がゼロまたはほぼゼロではないインデックスとして識別しうる。前記パターンに基づいて、閾値よりさらに左のサンプルの振幅は、ゼロまたはほぼゼロではない可能性が高い。
【0037】
たとえば、ユーザー定義された閾値は、サンプルがゼロまたはゼロに近いとは考えられない振幅を決定しうる。この量を調整することによって、エンドユーザーは、ゼロまたはほぼゼロであると考えられるサンプルの数を低減することによって、処理時間およびメモリ帯域幅を犠牲にして、音質を改善することができる。極端な場合、ユーザーは、ゼロの振幅をもつサンプルのみが除外されることを要求することによって、すなわち、閾値がゼロでない振幅を有する第1のサンプルとして識別されることによって、無損失オーディオ品質を要求してもよい。同様に、エンドユーザーは、サンプルが閾値として識別される前にサンプルが有していなければならない振幅を増加させることによって、オーディオ品質を犠牲にして処理効率を改善することができる。
【0038】
2つの最適化が論じられた。すなわち、閾値インデックスを超えるサンプルを除外することによってメイン・メモリ602から転送されるインパルス応答ブロック・サンプルの数を低減することと、閾値によって除外されないインパルス応答ブロック・サンプルに対して畳み込み演算を実行するだけとすることである。
図8は、第3の最適化を示している。すなわち、それを下回るとインパルス応答ブロックと入力オーディオ・ブロックがどちらもアクティブなサンプルを含む周波数を識別し、閾値よりも高い任意の周波数に対する畳み込み演算を除外することである。この最適化は、入力オーディオ・ブロック404自体に同じ観察を適用する。すなわち、ゼロまたはゼロに近い振幅をもつ任意のサンプルは、出力オーディオ信号に有意に寄与せず、スキップされうる。
【0039】
図示されるように、
図8は、同じ入力オーディオ・ブロック404と比較されている3つのインパルス応答ブロック(208A、F、およびN)を示す。入力オーディオ・ブロック404は、閾値周波数810を有し、その閾値周波数を超えると、周波数サンプルは、出力オーディオ信号に有意に寄与しないほど振幅が十分に小さくなる。閾値周波数810は、アプリケーションによって生成されたリアルタイム・オーディオ信号からハードウェア・オーディオ・デバイスによってリアルタイムで計算されうる。
【0040】
「最小周波数発見」機能は、インパルス応答ブロック208と入力オーディオ・ブロック404の両方がアクティブなサンプルを有する最小インデックス、すなわち、インパルス応答ブロック208と入力オーディオ・ブロック404の両方が出力オーディオ信号に有意に寄与するのに十分な大きさのサンプルを有する最大周波数を発見する。アクティブなサンプル808A、808F、および808Nは、識別された周波数を超えるサンプルを除去した後のインパルス応答ブロック208A、208F、および208Nの振幅を示す。インパルス応答ブロック208Aは、全体にわたってアクティブなサンプルを有するが、入力オーディオ・ブロック404は、周波数の最も低い5分の3にわたってアクティブなサンプルを有するだけである。よって、アクティブなサンプル808Aは、ゼロまたはほぼゼロの入力オーディオ・ブロック404からの値と乗算される周波数のサンプルを除いて、そのサンプルの最も低い5分の3を含む。同様に、インパルス応答ブロック208Fのアクティブなサンプル808Fは、入力オーディオ・ブロック404を修正するために使用されるインパルス応答ブロック208Fの周波数の部分を示す。
【0041】
インパルス応答ブロック208Nの場合、制限要因はもはや入力オーディオ・ブロック404ではなく、インパルス応答ブロック208N自体である。入力応答ブロック208Nは、周波数の最初の8分の1にわたって使用可能なデータを有するだけである。アクティブなサンプル808Nは、インパルス応答ブロック208Nの全体にわたって延在する。
【0042】
図9は、入力オーディオ・ブロック404の選択周波数の振幅に、各インパルス応答ブロック208からの対応する周波数の振幅を乗算することによって、出力オーディオ・ブロック506を計算することを示す。動作902に示されるように、閾値周波数インデックスまでの周波数のみが、ブロック404の対応する周波数に乗算される。スキップされる周波数ごとに、2つの浮動小数点乗算演算が節約される――1つは実部について、1つは虚部についてである。動作904に示されるように、動作902の結果の周波数ごとの総和が計算される。入力オーディオ信号を修正する計算資源は、使用可能な結果を生じた乗算の結果だけを加算ことによってさらに低減される。よって、スキップされる乗算は、浮動小数点加算も節約する。
一つの例示的実装を擬似コードで以下に示す。
blockSize = 512; //または1024、または2の他の何らかの累乗
impulseResponseBlockCount = 200; //たとえば20から1000
LoadImpulseResponseReductionTable(reductionTable)
for (b=0; b < impulseResponseBlockCount; b++)
{
LoadToHardware(impulseResponse[b], reductionTable[b] * 2 * sizeof(float));
}
for (b=0; b < impulseResponseBlockCount; b++)
{
reducedBlockSize = min(reductionTable[b], activeInputBlockSize);
for (index = 0; index < reducedBlockSize; index++)
{
Output[index].real += impulseResponse[b][index].real * input[index].real;
Output[index].imaginary += impulseResponse[b][index].imaginary * input[index].imaginary;
}
}
【0043】
このコードは、
図5に関連して上述したコードと同様であるが、ここで開示される最適化のいくつかを示すように更新されている。「LoadImpulseResponseReductionTable(reductionTable)」は、閾値インデックスのテーブルである「reductionTable」をロードする。インパルス応答の各ブロック208について1つのインデックスがある。これらの値は、事前計算されてもよい。次いで、各ブロックについて、「LoadToHardware(impulseResponse[b],reductionTable[b]*2*sizeof(float));」文は、ブロックごとの閾値インデックスを使用して、各ブロックについてロードされるサンプルの数を制限する。特に、
図5に関連して上述した擬似コードにおいて行われたように常に「blockSize」個のサンプル、たとえば512サンプルをロードする代わりに、「reductionTable[b]」個のサンプル、すなわち「reductionTable」のb番目のインデックスに位置する数がロードされる。「reductionTable[b]」に格納されたインデックスを超えるサンプルは、各ブロック「b」についてゼロまたはほぼゼロの振幅を有すると想定される。
【0044】
「reducedBlockSize=min(reductionTable[b],activeInputBlockSize);」文は、入力オーディオ信号ブロック404においてゼロまたはほぼゼロの振幅を有する周波数をやはり除外することによって、畳み込みにどのサンプルを含めるかをさらに制限することを示す。activeInputBlockSizeは、現在の入力ブロックに基づいてリアルタイムで入力信号振幅閾値検出器618によって計算されうる。
【0045】
図10は、説明される実装による例示的な動作手順1000を示す流れ図である。手順1000は、動作1002で始まり、フーリエ変換206が、時間領域204内のインパルス応答ブロック202を周波数領域212内のインパルス応答ブロック208に変換する。
【0046】
手順1000は動作1004に進み、ハードウェア・オーディオ・プロセッサ604は、入力オーディオ信号102のブロックをローカル・メモリ606にロードする。
【0047】
手順1000は動作1006に進み、ハードウェア・オーディオ・プロセッサ604は、時間領域204にある入力オーディオ信号102のブロック402を、周波数領域212にある入力オーディオ信号ブロック404に変換する。
【0048】
手順1000は、動作1008に進み、ハードウェア・オーディオ・プロセッサ604は、ブロック毎周波数閾値710までのインパルス応答ブロック208をロードする。
【0049】
手順1000は、動作1010に進み、各インパルス応答ブロック208について、それを下回るとインパルス応答ブロックおよび入力オーディオ・ブロックがアクティブなサンプルを有するような閾値周波数が識別される。このプロセスは、
図8に関連して上述されている。
【0050】
手順1000は、動作1012に進み、各インパルス応答ブロック208について、およびそのインパルス応答ブロックの閾値周波数710を下回る各周波数について、ハードウェア・オーディオ・プロセッサ604は、サンプルの値に、入力オーディオ・ブロック404からの対応するサンプルの値を乗算する。
【0051】
手順1000は、動作1014に進み、ここで、各周波数について、ハードウェア・オーディオ・プロセッサ604は、その周波数に関連する積を合計する。
【0052】
手順1000は動作1016に進み、ハードウェア・オーディオ・プロセッサ604は、周波数領域212において出力オーディオ・ブロック506を生成する。出力オーディオ・ブロック506のサンプルの振幅は、動作1014において計算された対応する周波数に関連する積の和に基づく。
【0053】
例解された諸方法は、いつでも終了することができ、その全体を実行する必要はないことを理解されたい。方法の一部またはすべての動作、および/または実質的に同等の動作は、以下に定義されるように、コンピュータ記憶媒体上に含まれるコンピュータ可読命令の実行によって実行されることができる。本明細書および特許請求の範囲で使用される「コンピュータ可読命令」という用語およびその変形は、本明細書では、ルーチン、アプリケーション、アプリケーションモジュール、プログラムモジュール、プログラム、コンポーネント、データ構造、アルゴリズムなどを含むように広汎に使用される。コンピュータ可読命令は、単一プロセッサまたはマルチプロセッサシステム、ミニコンピュータ、メインフレームコンピュータ、パーソナルコンピュータ、ハンドヘルドコンピューティングデバイス、マイクロプロセッサベースのプログラマブル消費者電子製品、それらの組み合わせなどを含む、さまざまなシステム構成上で実装できる。
【0054】
よって、本明細書に記載された論理動作は、(1)コンピューティングシステム上で実行されるコンピュータ実装された工程またはプログラムモジュールのシーケンスとして、および/または(2)コンピューティングシステム内の相互接続された機械論理回路または回路モジュールとして実装されることを理解されたい。この実装は、コンピューティングシステムの性能および他の要件に依存する選択の問題である。よって、本明細書に記載された論理動作は、状態、動作、構造デバイス、行為、またはモジュールとさまざまに呼ばれる。これらの動作、構造デバイス、工程、およびモジュールは、ソフトウェア、ファームウェア、特殊目的のデジタル論理、およびそれらの任意の組み合わせで実装されうる。
【0055】
たとえば、説明された方法の動作は、アプリケーション、コンポーネント、および/または回路を備えることができるシステムコンポーネントによって少なくとも部分的に実装されるものとして本明細書で説明される。いくつかの実施形態では、システムコンポーネントは、動的リンクライブラリ(DLL)、静的リンクライブラリ、アプリケーションプログラミングインターフェース(API)によって生成される機能性、コンパイルされたプログラム、インタープリットされたプログラム、スクリプト、または任意の他の実行可能な命令のセットを含む。データは、一つまたは複数のメモリコンポーネント内のデータ構造に記憶されうる。データは、データ構造へのリンクまたは参照をアドレス指定することによって、データ構造から取り出すことができる。
【0056】
図10は
図1~
図9の構成要素を参照するが、説明される方法の動作は多くの他の仕方でも実装されうることが理解されうる。たとえば方法は、少なくとも部分的に、別のリモートコンピュータのプロセッサまたはローカル回路によって実装されうる。加えて、方法の動作のうちの一つまたは複数は、代替的または追加的に、単独でまたは他のソフトウェアモジュールとともに動作するチップセットによって少なくとも部分的に実装されうる。本明細書で開示される技法を提供するのに適した任意のサービス、回路、またはアプリケーションが、本明細書で説明される動作において使用されうる。
【0057】
図11は、本明細書に提示される技法および技術の諸側面を実装することが可能なコンピューティング・デバイスのためのコンピューティングデバイスアーキテクチャーを示すコンピュータ・アーキテクチャー図である。
図11に示されるコンピュータ・アーキテクチャーは、従来のサーバーコンピュータ、ワークステーション、デスクトップコンピュータ、ラップトップ、タブレット、ビデオゲームシステム、デバイス(ウェアラブル、自動車、ホームオートメーション等)に組み込まれたコンピュータまたは処理システム、または他のコンピューティング・デバイス等のシステムの諸側面を示し、本明細書に提示されるソフトウェアコンポーネントのうちのいずれかを実行するために利用されうる。たとえば、
図11に示されるコンピュータ・アーキテクチャーは、上述のソフトウェアコンポーネントのいずれかを実行するために利用されてもよい。
【0058】
コンピュータ・アーキテクチャーは、多数のコンポーネントまたはデバイスがシステムバスまたは他の電気通信経路によって接続されうるプリント回路基板であるベースボード1102または「マザーボード」を含む。例示的な一実施形態では、一つまたは複数の中央処理装置(CPU)1104が、チップセット1106との関連で動作する。CPU 1104は、コンピュータ・アーキテクチャーの動作に必要な算術演算および論理演算を実行する標準的なプログラマブルプロセッサであってもよい。
【0059】
CPU 1104は、状態を区別し、変化させるスイッチング素子の操作を通じて、1つの離散的な物理的状態から次の状態に遷移することによって動作を実行する。スイッチング素子は、一般に、フリップフロップなどの2つのバイナリ状態のうちの1つを維持する電子回路と、論理ゲートなどの一つまたは複数の他のスイッチング素子の状態の論理的組み合わせに基づいて出力状態を提供する電子回路とを含みうる。これらの基本的なスイッチング素子は、レジスタ、加算器-減算器、算術論理ユニット、浮動小数点ユニット等を含む、より複雑な論理回路を作成するために組み合わされてもよい。
【0060】
チップセット1106は、CPU 1104と、ベースボード1102上の残りのコンポーネントおよびデバイスとの間のインターフェースを提供する。チップセット1106は、コンピュータ・アーキテクチャーにおいてメイン・メモリとして使用されるRAM 602へのインターフェースを提供してもよい。チップセット1106は、さらに、コンピューティング・デバイスを起動し、さまざまなコンポーネントおよびデバイス間で情報を転送するのを助ける基本ルーチンを記憶するための、リードオンリメモリ(ROM)1110または不揮発性RAM(NVRAM)などのコンピュータ可読記憶媒体へのインターフェースを提供してもよい。ROM 1110またはNVRAMは、本明細書に記載の実施形態によるコンピュータ・アーキテクチャーの動作に必要な他のソフトウェアコンポーネントも記憶することができる。
【0061】
コンピュータ・アーキテクチャーは、ローカルエリアネットワークなどのネットワーク1114を通じてリモートコンピューティングデバイスおよびコンピュータシステムへの論理接続を使用して、ネットワーク接続された環境で動作することができる。チップセット1106は、ギガビット・イーサネット(登録商標)アダプターなどのネットワークインターフェースコントローラ(NIC)1188を通じてネットワーク接続性を提供する機能を含んでいてもよい。NIC 1188は、ネットワーク1114を通じてコンピュータ・アーキテクチャーを他のコンピューティング・デバイスに接続することができる。複数のNIC 1188がコンピュータ・アーキテクチャー内に存在し、コンピュータを他のタイプのネットワークおよびリモートコンピュータシステムに接続してもよいことを理解されたい。ネットワークは、コンピュータ・アーキテクチャーが、リモートコンピュータ1101などのリモートサービスおよびサーバーと通信することを許容する。理解されるように、リモートコンピュータ1101は、任意のコンピューティング・デバイスであってもよい。
【0062】
コンピュータ・アーキテクチャーは、コンピューティング・デバイスのための不揮発性記憶装置を提供する大容量記憶装置1126に接続されてもよい。大容量記憶装置1126は、システムプログラム、アプリケーションプログラム、他のプログラムモジュールおよびデータ(本明細書でより詳細に説明された)を記憶することができる。大容量記憶装置1126は、チップセット1106に接続された記憶コントローラ1115を通じてコンピュータ・アーキテクチャーに接続されてもよい。大容量記憶装置1126は、一つまたは複数の物理的記憶ユニットから構成されてもよい。記憶コントローラ1115は、シリアルアタッチドSCSI(SAS)インターフェース、シリアルアドバンストテクノロジーアタッチメント(SATA)インターフェース、ファイバーチャネル(FC)インターフェース、またはコンピュータと物理的な記憶ユニットを物理的に接続し、それらの間でデータを転送するための他のタイプのインターフェースを通じて、物理的な記憶ユニットとインターフェースしうる。また、大容量記憶装置1126、他の記憶媒体、および記憶コントローラ1115は、マルチメディアカード(MMC)コンポーネント、eMMCコンポーネント、セキュアデジタル(SD)コンポーネント、PCI Expressコンポーネントなどを含みうることも理解されたい。
【0063】
コンピュータ・アーキテクチャーは、記憶されている情報を反映するように物理的な記憶ユニットの物理的状態を変換することによって、大容量記憶装置1126上にデータを記憶することができる。物理的状態の特定の変換は、この説明の種々の実装では、さまざまな要因に依存しうる。そのような要因の例は、物理的な記憶ユニットを実装するために使用される技術、大容量記憶装置1126が一次記憶として特徴付けられるか、二次記憶として特徴付けられるか、などを含みうるが、それらに限定されない。
【0064】
たとえば、コンピュータ・アーキテクチャーは、磁気ディスクドライブユニット内の特定の位置の磁気特性、光記憶ユニット内の特定の位置の反射特性または屈折特性、あるいはソリッドステート記憶ユニット内の特定のキャパシタ、トランジスタ、または他の離散的コンポーネントの電気特性を変更するために、記憶コントローラ1115を通じて命令を発行することによって、大容量記憶装置1126に情報を記憶することができる。本説明の範囲および趣旨から逸脱することなく、物理媒体の他の変換が可能であり、前述の例は、この説明を容易にするためにのみ提供される。コンピュータ・アーキテクチャーは、さらに、物理的な記憶ユニット内の一つまたは複数の特定の位置の物理的状態または特性を検出することによって、大容量記憶装置1126から情報を読み取ることができる。
【0065】
上述の大容量記憶装置1126に加えて、コンピュータ・アーキテクチャーは、プログラムモジュール、データ構造、または他のデータなどの情報を記憶し、取り出すために、他のコンピュータ可読媒体にアクセスすることができる。オペレーティングシステム1127、事前計算されたインパルス応答ブロック、および他のモジュールは、大容量記憶装置1126に記憶されたデータおよびソフトウェアとして示されているので、これらの構成要素および/または他のモジュールは、少なくとも部分的に、コンピュータ・アーキテクチャーの他のコンピュータ可読記憶媒体に記憶されうることを理解されたい。本明細書に含まれるコンピュータ可読媒体の説明は、ソリッドステートドライブ、ハードディスク、またはCD-ROMドライブなどの大容量記憶装置を指すが、コンピュータ可読媒体は、コンピュータ・アーキテクチャーによってアクセスされうる任意の利用可能なコンピュータ記憶媒体または通信媒体でありうることが当業者によって理解されるべきである。
【0066】
通信媒体は、搬送波または他のトランスポート機構などの変調されたデータ信号内のコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを含み、任意の送達媒体を含む。「変調されたデータ信号」という用語は、その信号において情報をエンコードするような仕方で変更または設定されたその特性の一つまたは複数を有する信号を意味する。限定ではなく例として、通信媒体は、有線ネットワークまたは直接有線接続などの有線媒体、ならびに音響、RF、赤外線、および他の無線媒体などの無線媒体を含む。上記のいずれかの組み合わせも、コンピュータ可読媒体の範囲内に含まれるべきである。
【0067】
限定ではなく例として、コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するための任意の方法または技術で実装された揮発性および不揮発性、リムーバブルおよび非リムーバブルな媒体を含むことができる。たとえば、コンピュータ媒体は、RAM、ROM、EPROM、EEPROM、フラッシュメモリ、または他のソリッドステートメモリ技術、CD-ROM、デジタル多用途ディスク(DVD)、HD-DVD、BLU-RAY、または他の光記憶、磁気カセット、磁気テープ、磁気ディスク記憶、または他の磁気記憶デバイス、あるいは所望の情報を格納するために使用でき、コンピュータ・アーキテクチャーによってアクセスされることができる任意の他の媒体を含むが、これらに限定されない。特許請求の範囲の目的のためには、「コンピュータ記憶媒体」、「コンピュータ可読記憶媒体」という句、およびそれらの変形は、波もしくは信号自体および/または通信媒体を含まない。
【0068】
大容量記憶装置1126は、コンピュータ・アーキテクチャーの動作を制御するために利用されるオペレーティングシステム1127を記憶してもよい。一実施形態によれば、オペレーティングシステムは、ゲームオペレーティングシステムを含む。別の実施形態によれば、オペレーティングシステムは、MICROSOFT社からのWINDOWS(登録商標)オペレーティングシステムを含む。さらなる実施形態によれば、オペレーティングシステムは、それぞれの製造業者から入手可能なUNIX(登録商標)、ANDROID(登録商標)、またはiOSオペレーティングシステムを含みうる。他のオペレーティングシステムも利用されうることを理解されたい。大容量記憶装置1126は、上述の他のソフトウェアコンポーネントおよびデータのいずれかなどの、コンピュータ・アーキテクチャーによって利用される他のシステムまたはアプリケーションプログラムおよびデータを記憶することができる。大容量記憶装置1126は、本明細書で具体的に特定されていない他のプログラムおよびデータも記憶しうる。
【0069】
ある実施形態では、大容量記憶装置1126または他のコンピュータ可読記憶媒体は、コンピュータ・アーキテクチャーにロードされると、コンピュータを汎用コンピューティングシステムから、本明細書に記載された実施形態を実装することができる特殊目的のコンピュータに変換するコンピュータ実行可能命令をエンコードされる。これらのコンピュータ実行可能命令は、上述のように、CPU 1104が状態間をどのように遷移するかを指定することによって、コンピュータ・アーキテクチャーを変換する。ある実施形態によれば、コンピュータ・アーキテクチャーは、該コンピュータ・アーキテクチャーによって実行されると、
図10および他の図に関して上述したさまざまなルーチンを実行するコンピュータ実行可能命令を記憶するコンピュータ可読記憶媒体へのアクセスを有する。コンピューティング・デバイスは、本明細書に記載される他のコンピュータ実装される動作のいずれかを実行するためのコンピュータ可読記憶媒体をも含みうる。
【0070】
コンピュータ・アーキテクチャーは、キーボード、マウス、マイクロフォン、ヘッドセット、タッチパッド、タッチスクリーン、電子スタイラス、画像処理およびジェスチャー認識デバイス、または任意の他のタイプの入力デバイスなどのいくつかの入力デバイスからの入力を受領し、処理するための一つまたは複数の入力/出力コントローラ1116をも含んでいてもよい。入力/出力コントローラ1116は、入力/出力デバイス1125と通信する。入力/出力コントローラ1116は、コンピュータモニター、フラットパネルディスプレイ、デジタルプロジェクター、プリンター、プロッター、または他のタイプの出力デバイスなどのディスプレイに出力を提供することができる。入力/出力コントローラ1116は、マイクロフォン、スピーカー、ゲームコントローラ、および/またはオーディオデバイスなどの他のデバイスとの入力通信を提供することができる。
【0071】
コンピュータ・アーキテクチャーは、一つまたは複数のビデオ出力1118、たとえば、モニターまたは他のディスプレイアダプター上にグラフィックスおよび他のメディアを生成することができるビデオカードアダプターも含むことができる。
【0072】
コンピュータ・アーキテクチャーは、コプロセッサ、フィールドプログラマブルゲートアレイ、特定用途向け集積回路、またはハードウェア・オーディオ・プロセッサ604などの他の特殊目的のハードウェアも含みうる。ハードウェア・オーディオ・プロセッサは、メイン・メモリ602と通信するローカル・メモリを含んでいてもよい。
【0073】
前の諸セクションで説明したプロセス、方法、およびアルゴリズムのそれぞれは、一つまたは複数のコンピュータまたはコンピュータプロセッサによって実行されるコードモジュールにおいて具現され、それによって完全にまたは部分的に自動化されうる。コードモジュールは、ハードドライブ、ソリッドステートメモリ、光ディスクなどの任意のタイプの非一時的コンピュータ可読媒体またはコンピュータ記憶デバイスに記憶されうる。プロセスおよびアルゴリズムは、部分的または全体的に、特定用途向け回路で実装されてもよい。開示されたプロセスおよびプロセスステップの結果は、たとえば、揮発性または不揮発性記憶装置などの任意のタイプの非一時的コンピュータ記憶に、永続的にまたは別の仕方で記憶されてもよい。
【0074】
上述のさまざまな特徴およびプロセスは、互いに独立して使用されてもよく、またはさまざまな方法で組み合わされてもよい。すべての可能な組み合わせおよびサブコンビネーションは、本開示の範囲内にはいることが意図される。加えて、ある種の方法またはプロセスブロックは、いくつかの実装では省略されうる。本明細書に記載された方法およびプロセスは、任意の特定の順序に限定されず、それに関連するブロックまたは状態は、適切な他の順序で実行されうる。たとえば、記載されたブロックまたは状態は、具体的に開示された順序以外の順序で実行されてもよく、または複数のブロックまたは状態が単一のブロックまたは状態に組み合わされてもよい。例示的なブロックまたは状態は、直列に、並列に、または何らかの他の仕方で実行されうる。ブロックまたは状態は、開示された例示的な実施形態に追加されてもよく、またはそこから除去されてもよい。本明細書に記載された例示的なシステムおよび構成要素は、記載されたものとは異なるように構成されてもよい。たとえば、開示された例示的な実施形態に対して、要素が追加され、削除され、または再配置されてもよい。
【0075】
また、さまざまなアイテムが、使用されている間にメモリ内または記憶上に記憶されるものとして示されており、これらのアイテムまたはその一部は、メモリ管理およびデータ完全性の目的のためにメモリと他の記憶デバイスとの間で転送されうることも理解されよう。あるいはまた、他の実施形態では、ソフトウェアモジュールおよび/またはシステムの一部または全部は、別のデバイス上のメモリ内で実行され、コンピュータ間通信を介して、図示される諸コンピューティングシステムと通信してもよい。さらに、いくつかの実施形態では、システムおよび/またはモジュールの一部または全部は、一つまたは複数の特定用途向け集積回路(AS IC)、標準集積回路、コントローラ(たとえば、適切な命令を実行することによって、マイクロコントローラおよび/または組み込みコントローラを含む)、フィールドプログラマブルゲートアレイ(FPGA)、複合プログラマブル論理デバイス(CPLD)などを含むが、これらに限定されないファームウェアおよび/またはハードウェアで少なくとも部分的になど、他の仕方で実装または提供されてもよい。よって、本発明は、他のコンピュータシステム構成を用いて実施されてもよい。
【0076】
特に「できる」、「できた」、「かもしれない」、「…うる」、「たとえば」などの本明細書で使用される条件付き言辞は、特にそうでないことを明記しない限り、または他の仕方で使用される文脈内で理解されない限り、一般に、ある種の実施形態がある種の特徴、要素および/またはステップを含むが、他の実施形態は含まないことを伝えることを意図されている。よって、そのような条件付き言辞は、特徴、要素、および/またはステップが、一つまたは複数の実施形態に何らかの形で必要とされること、あるいは一つまたは複数の実施形態が、これらの特徴、要素、および/またはステップが任意の特定の実施形態において含まれるかまたは実行されるべきかを、作成者の入力またはプロンプトを用いて、または用いずに判断するための論理を必ず含むことを含意することは、一般に意図されていない。「有する」、「含む」、「もつ」などの用語は、同義であり、包含的に、オープンエンド式に使用され、追加の要素、特徴、工程、動作などを除外しない。また、「または」という用語は、その包含的な意味で(その排他的な意味ではなく)使用され、よって、たとえば、要素のリストを接続するために使用されるとき、「または」という用語は、リスト内の要素の1つ、いくつか、またはすべてを意味する。
【0077】
本明細書に提示される開示は、以下の条項に鑑みて考慮されうる。
〔条項1〕
効率的なリアルタイム・オーディオ処理のためのコンピュータ実装される方法であって、最低周波数(410)から最高周波数(412)まで順序付けられた第1の複数の周波数サンプル(408)を含むオーディオ信号ブロック(404)を受領するステップと;前記オーディオ信号ブロック(404)と畳み込んで出力オーディオ信号(106)を生成するためのインパルス応答ブロック(208)を識別するステップであって、前記インパルス応答ブロック(208)は、前記最低周波数(410)から前記最高周波数(412)まで順序付けられた第2の複数の周波数サンプル(308)を含む、ステップと;それより上では前記第1の複数の周波数サンプル(408)の周波数サンプルが前記出力オーディオ信号(106)に閾値量未満の音量を寄与するような第1の閾値周波数(810)を識別するステップと;それより上では前記第2の複数の周波数サンプル(308)の周波数サンプルが前記出力オーディオ信号(106)に閾値量未満の音量を寄与するような第2の閾値周波数(710)を識別するステップと;前記第2の複数の周波数サンプル(308)のうち前記第2の閾値周波数(810)より小さい周波数サンプルを、オーディオ処理デバイス(608)にコピーするステップと;前記第1の閾値周波数(810)および前記第2の閾値周波数(710)のうちの最小のものを最大周波数(808)として識別するステップと;前記最低周波数(410)から前記最大閾値周波数(808)まで、前記第1の複数の周波数サンプル(408)からの周波数サンプルと前記第2の複数の周波数サンプル(308)からの周波数サンプルとに対して、畳み込み(902)を実行するステップと;前記畳み込み(902)の結果に基づいて前記出力オーディオ信号(106)を生成するステップとを含む、方法。
〔条項2〕
周波数サンプルが前記出力オーディオ信号に対して閾値量未満の音量を寄与するのは、その周波数サンプルが、ゼロであるか、またはゼロから定義された閾値以内である振幅を有するときである、条項1に記載のコンピュータ実装される方法。
〔条項3〕
前記インパルス応答ブロックは、複数のインパルス応答ブロックのうちの1つであり、前記第2の閾値周波数は、前記複数のインパルス応答ブロックのそれぞれについて識別され、前記最大閾値周波数は、前記複数のインパルス応答ブロックのそれぞれについて識別され、前記畳み込み演算は、前記複数のインパルス応答ブロックのそれぞれについて前記オーディオ信号ブロックに対して実行される、条項1に記載のコンピュータ実装される方法。
〔条項4〕
前記複数の応答ブロックのそれぞれについて識別された前記第2の閾値周波数は、事前計算され、削減テーブルに記憶される、条項3に記載のコンピュータ実装される方法。
〔条項5〕
前記複数のインパルス応答ブロックの周波数サンプルがメイン・メモリから前記オーディオ処理デバイスにコピーされる前に、前記削減テーブルがメイン・メモリから前記オーディオ処理デバイスにコピーされる、条項4に記載のコンピュータ実装される方法。
〔条項6〕
前記第1の閾値周波数は、前記オーディオ処理デバイスによってリアルタイムで計算される、条項1に記載のコンピュータ実装される方法。
〔条項7〕
前記オーディオ信号ブロックおよび前記インパルス応答ブロックは、周波数サンプルがある周波数範囲内で記録された音の量を識別する周波数領域において、エンコードされる、条項1に記載のコンピュータ実装される方法。
〔条項8〕
コンピュータ実行可能な命令が記憶されているコンピュータ可読記憶媒体(606)であって、該命令は、オーディオ処理デバイス(608)によって実行されると、該オーディオ処理デバイス(608)に:最低周波数(410)から最高周波数(412)まで順序付けられた第1の複数の周波数サンプル(408)を含むオーディオ信号ブロック(404)を受領するステップと;前記オーディオ信号ブロック(404)と畳み込んで出力オーディオ信号(106)を生成するためのインパルス応答ブロック(208)を識別するステップであって、前記インパルス応答ブロック(208)は、前記最低周波数(410)から前記最高周波数(412)まで順序付けられた第2の複数の周波数サンプル(308)を含む、ステップと;それより上では前記第2の複数の周波数サンプル(308)の周波数サンプルが前記出力オーディオ信号(106)に閾値量未満の音量を寄与するような閾値周波数(710)を識別するステップと;前記第2の複数の周波数サンプル(308)のうち前記閾値周波数(710)より小さい周波数サンプルを受領するステップと;前記最低周波数(410)から前記閾値周波数(710)まで、前記第1の複数の周波数サンプル(408)からの周波数サンプルと前記第2の複数の周波数サンプル(308)からの周波数サンプルとに対して、畳み込み(902)を実行するステップと;前記畳み込み(902)の結果に基づいて前記出力オーディオ信号(106)を生成するステップとを実行させるものである、コンピュータ可読記憶媒体。
〔条項9〕
個別の周波数サンプルは、該個別の周波数サンプルと前記第1の複数の周波数サンプルのうちの対応する周波数サンプルとに対して畳み込み演算を実行することから前記出力オーディオ信号への寄与を推定することによって、前記閾値量未満の音量を寄与すると判定される、条項8に記載のコンピュータ可読記憶媒体。
〔条項10〕
前記個別の周波数サンプルは、該周波数サンプルがゼロであるか、またはゼロから定義された閾値範囲内である振幅を有するとき、前記閾値量未満の音量を前記出力オーディオ信号に寄与する、条項9に記載のコンピュータ可読記憶媒体。
〔条項11〕
前記コンピュータ実行可能な命令は、前記オーディオ処理デバイスに:アプリケーションによって生成された入力オーディオ信号を受領するステップであって、前記入力オーディオ信号は時間領域においてエンコードされている、ステップと;フーリエ変換を適用することによって、前記入力オーディオ信号の少なくとも一部分を前記オーディオ信号ブロックに変換するステップとをさらに実行させるものである、条項8に記載のコンピュータ可読記憶媒体。
〔条項12〕
前記インパルス応答ブロックは、複数のインパルス応答ブロックのうちの1つであり、前記第2の閾値周波数は、前記複数のインパルス応答ブロックのそれぞれについて識別され、前記最大閾値周波数は、前記複数のインパルス応答ブロックのそれぞれについて識別され、前記畳み込み演算は、前記複数のインパルス応答ブロックのそれぞれについて前記オーディオ信号ブロックに対して実行される、条項8に記載のコンピュータ可読記憶媒体。
〔条項13〕
前記畳み込みは:前記複数のインパルス応答ブロックのうちの各個別のインパルス応答ブロックについて、その個別のインパルス応答ブロックの前記第2の閾値周波数より下の各個別の周波数について、その個別のインパルス応答ブロックからのその個別の周波数サンプルを前記入力オーディオ・ブロックの前記対応する周波数サンプルと乗算し、各周波数について前記乗算の結果を合計することによって実行される、条項12に記載のコンピュータ可読記憶媒体。
〔条項14〕
前記閾値周波数は第2の閾値周波数であり、前記コンピュータ実行可能な命令は、前記オーディオ処理デバイスに:それより上では前記第1の複数の周波数サンプルの周波数サンプルが閾値量未満の音量を前記出力オーディオ信号に寄与するような第1の閾値周波数を識別するステップと;前記第1の閾値周波数および前記第2の閾値周波数のうちの最小値を最大周波数として識別するステップとをさらに実行させるものであり、前記畳み込みは、前記最低周波数から前記最大閾値周波数まで実行される、条項8に記載のコンピュータ可読記憶媒体。
〔条項15〕
少なくとも1つのプロセッサ(608)と;コンピュータ実行可能な命令を記憶したコンピュータ可読記憶媒体(606)とを有するコンピューティング・デバイス(600)であって、前記コンピュータ実行可能な命令は、前記少なくとも1つのプロセッサ(608)によって実行されると、前記コンピューティング・デバイスに:最低周波数(410)から最高周波数(412)まで順序付けられた第1の複数の周波数サンプル(408)を含む周波数領域のオーディオ信号ブロック(404)を受領するステップと;前記オーディオ信号ブロック(404)と畳み込んで出力オーディオ信号(106)を生成するためのインパルス応答ブロック(208)を識別するステップであって、前記インパルス応答ブロック(208)は、前記最低周波数(410)から前記最高周波数(412)まで順序付けられた第2の複数の周波数サンプル(308)を含む、ステップと;それより上では前記第2の複数の周波数サンプル(308)の周波数サンプルが前記出力オーディオ信号(106)に閾値量未満の音量を寄与するような閾値周波数(710)を識別するステップと;前記第2の複数の周波数サンプル(308)のうち前記閾値周波数(710)より小さい周波数サンプルを受領するステップと;前記最低周波数(410)から前記閾値周波数(710)まで、前記第1の複数の周波数サンプル(408)からの周波数サンプルと前記第2の複数の周波数サンプル(308)からの周波数サンプルとに対して、畳み込み(902)を実行するステップと;前記畳み込み(902)の結果に基づいて前記出力オーディオ信号(106)を生成するステップとを実行させるものである、コンピューティング・デバイス。
〔条項16〕
前記閾値周波数は第2の閾値周波数であり、前記コンピュータ実行可能な命令は、前記オーディオ処理デバイスに:それより上では前記第1の複数の周波数サンプルの周波数サンプルが閾値量未満の音量を前記出力オーディオ信号に寄与するような第1の閾値周波数を識別するステップと;前記第1の閾値周波数および前記第2の閾値周波数のうちの最小値を最大周波数として識別するステップとをさらに実行させるものであり、前記畳み込みは、前記最低周波数から前記最大閾値周波数まで実行される、条項15に記載のコンピューティング・デバイス。
〔条項17〕
周波数サンプルは、該周波数サンプルがゼロであるか、またはゼロから定義された閾値範囲内である振幅を有するとき、前記閾値量未満の音量を前記出力オーディオ信号に寄与する、条項16に記載のコンピューティング・デバイス。
〔条項18〕
前記インパルス応答ブロックは、複数のインパルス応答ブロックのうちの1つであり、前記第2の閾値周波数は、前記複数のインパルス応答ブロックのそれぞれについて識別され、前記最大閾値周波数は、前記複数のインパルス応答ブロックのそれぞれについて識別され、前記畳み込み演算は、前記複数のインパルス応答ブロックのそれぞれについて前記オーディオ信号ブロックに対して実行される、条項15に記載のコンピューティング・デバイス。
〔条項19〕
前記複数の応答ブロックのそれぞれについて識別された前記第2の閾値周波数は、事前に計算され、削減テーブルに記憶される、条項18に記載のコンピューティング・デバイス。
〔条項20〕
前記複数のインパルス応答ブロックの周波数サンプルがメイン・メモリから前記オーディオ処理デバイスにコピーされる前に、前記削減テーブルがメイン・メモリから前記オーディオ処理デバイスにコピーされる、条項19に記載のコンピューティング・デバイス。
【0078】
ある種の例示的実施形態を説明してきたが、これらの実施形態は、例として提示したものであり、本願に開示される発明の範囲を限定することは意図していない。よって、前述の説明のどの部分も、何らかの特定の特徴、特性、ステップ、モジュール、またはブロックが必要または不可欠であることを含意することは意図していない。実際、本稿に記載される新規な方法およびシステムは、多様な他の形で具現されることが可能であり、さらに、本稿に開示される発明の精神から逸脱することなく、さまざまな省略、置き換え、変更を行うことができる。添付の特許請求の範囲およびそれらの等価物は、本明細書に開示された発明のうちのいくつかの範囲および精神にはいるような形態または修正をカバーすることが意図されている。
【国際調査報告】