(57)【要約】【課題】割り込み信号が多発すると、データ転送効率が低下する。【解決手段】ＣＰＵ１０とオーディオ処理ユニット２０とがバスで結合された情報処理装置を提供する。オーディオ処理ユニット２０は、オーディオデータを一時的に保持するリングバッファ３０を有し、オーディオデータの入出力処理を行う。割り込み信号生成部２６は、リングバッファ３０内のあるバッファからオーディオデータが出力され、そのバッファが空きになると、バッファ空き信号を生成し、オーディオのサンプリング周波数に応じてバッファ空き信号を間引いた上で割り込み信号線を介してＣＰＵ１０に供給する。ＣＰＵ１０は、バッファ空き信号を受け取ると、リングバッファ３０の空きバッファにオーディオデータを書き込むためのＤＭＡ転送命令を発行する。【選択図】図２
2008077174.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサとオーディオ処理ユニットがバスで結合された情報処理装置であって、
前記オーディオ処理ユニットは、
外部に出力するオーディオデータを一時的に蓄積するための複数のバッファを含むリングバッファと、
前記リングバッファ内のあるバッファからデータが出力され、そのバッファが空き状態になったことを示す割り込み信号を、前記外部に出力するオーディオデータのサンプリング周波数に応じて間引いた上で前記プロセッサに供給する割り込み信号生成部とを含み、
前記プロセッサは、前記割り込み信号を受け取った場合に、前記リングバッファ内の空き状態のバッファにオーディオデータを書き込むためのデータ転送命令を発行することを特徴とする情報処理装置。
【請求項２】
プロセッサとオーディオ処理ユニットがバスで結合された情報処理装置であって、
前記オーディオ処理ユニットは、
外部から入力されるオーディオデータを一時的に蓄積するための複数のバッファを含むリングバッファと、
前記リングバッファ内のあるバッファにデータが入力され、そのバッファがフル状態になったことを示す割り込み信号を、前記外部から入力されるオーディオデータのサンプリング周波数に応じて間引いた上で前記プロセッサに供給する割り込み信号生成部とを含み、
前記プロセッサは、前記割り込み信号を受け取った場合に、前記リングバッファ内のフル状態のバッファからオーディオデータを読み出すためのデータ転送命令を発行することを特徴とする情報処理装置。
【請求項３】
前記割り込み信号生成器は、前記サンプリング周波数が大きいほど、前記割り込み信号を間引く割合を高くすることを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記サンプリング周波数の候補毎に前記割り込み信号の間引き割合が異なる複数の間引きモードの中から、現在処理中のオーディオデータのサンプリング周波数に応じた間引きモードを選択して、前記割り込み信号生成部の間引き割合を設定するモード設定部をさらに含むことを特徴とする請求項１から３のいずれかに記載の情報処理装置。
【請求項５】
前記リングバッファを構成するバッファのサイズは、前記サンプリング周波数の候補の内、最も低いサンプリング周波数のオーディオデータの１ブロック分を格納する容量に設定されることを特徴とする請求項１から４のいずれかに記載の情報処理装置。
【請求項６】
プロセッサにバス結合されるオーディオ処理装置であって、
外部に出力するオーディオデータを一時的に蓄積するための複数のバッファを含むリングバッファと、
前記リングバッファ内のあるバッファからオーディオデータが出力され、そのバッファが空き状態になったことを示す割り込み信号を、前記外部に出力するオーディオデータのサンプリング周波数に応じて間引いた上で前記プロセッサに供給する割り込み信号生成部とを含み、
前記割り込み信号を受け取った前記プロセッサによるデータ転送命令により、前記リングバッファ内の空き状態のバッファにオーディオデータが書き込まれることを特徴とするオーディオ処理装置。
【請求項７】
プロセッサにバス結合されるオーディオ処理装置であって、
外部から入力されるオーディオデータを一時的に蓄積するための複数のバッファを含むリングバッファと、
前記リングバッファ内のあるバッファにオーディオデータが入力され、そのバッファがフル状態になったことを示す割り込み信号を、前記外部から入力されるオーディオデータのサンプリング周波数に応じて間引いた上で前記プロセッサに供給する割り込み信号生成部とを含み、
前記割り込み信号を受け取った前記プロセッサによるデータ転送命令により、前記リングバッファ内のフル状態のバッファからオーディオデータが読み出されることを特徴とするオーディオ処理装置。
【請求項８】
プロセッサと入出力処理ユニットがバスで結合された情報処理装置であって、
前記入出力処理ユニットは、
外部に出力するデータを一時的に蓄積するための複数のバッファを含むリングバッファと、
前記リングバッファ内のあるバッファからデータが出力され、そのバッファが空き状態になったことを示す割り込み信号を、前記外部に出力するデータの出力速度に応じて間引いた上で前記プロセッサに供給する割り込み信号生成部とを含み、
前記プロセッサは、前記割り込み信号を受け取った際、前記リングバッファ内の空き状態のバッファにデータを書き込むためのデータ転送命令を発行することを特徴とする情報処理装置。
【請求項９】
プロセッサと入出力処理ユニットがバスで結合された情報処理装置であって、
前記入出力処理ユニットは、
外部から入力されるデータを一時的に蓄積するための複数のバッファを含むリングバッファと、
前記リングバッファ内のあるバッファにデータが入力され、そのバッファがフル状態になったことを示す割り込み信号を、前記外部から入力されるデータの入力速度に応じて間引いた上で前記プロセッサに供給する割り込み信号生成部とを含み、
前記プロセッサは、前記割り込み信号を受け取った際、前記リングバッファ内のフル状態のバッファからデータを読み出すためのデータ転送命令を発行することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、データの入出力処理装置、特にオーディオデータの入出力処理を行うオーディオ処理装置および情報処理装置に関する。
【背景技術】
【０００２】
ゲーム機などの情報処理装置では、ＣＰＵ（Cetnral Processing Unit）が画像やオーディオのデータを頻繁にメインメモリに読み書きする。ＣＰＵの負荷を軽減するため、メインメモリと、オーディオやビデオなどの入出力装置との間のデータ転送はＤＭＡ（Direct Memory Access）転送によって行われる。ＤＭＡ転送は、ＣＰＵを介することなく、メインメモリと入出力装置の間のデータの転送を高速に実行する方法である。
【０００３】
入出力装置内のバッファに蓄積されたデータが消費されると、メインメモリと入出力装置の間で新たにデータ転送が必要になる。入出力装置はバッファが空き状態またはフル状態になると、ＣＰＵに対して割り込み信号を送り、割り込み信号を受け取ったＣＰＵは、ＤＭＡ転送命令を発行して、メインメモリと入出力装置の間で新たなデータのやりとりを行う。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
割り込みを用いてＤＭＡ転送を行うシステムにおいては、ＣＰＵへの割り込みが発生する度に、ＣＰＵは割り込み処理を行わなければならないため、割り込みが多いほどＣＰＵの負荷が増大する。また、複数の割り込み信号が１本の割り込み信号線を競合して利用する場合は、割り込み信号が同時に発生すると、割り込み信号の伝搬に遅延が生じる。このように、割り込み信号が多数発生する状況では、割り込み信号の伝搬や処理に時間がかかり、割り込み信号が発生してから割り込み信号が伝搬し、割り込み処理が終わるまでの時間、すなわちレイテンシが長くなり、ＤＭＡ転送命令の発行が遅延し、データ転送処理の効率が低下する。
【０００５】
本発明はこうした課題に鑑みてなされたものであり、その目的は、割り込み信号の発生頻度を減らしてデータ転送効率を上げることのできるデータ転送技術を提供することにある。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明のある態様の情報処理装置は、プロセッサとオーディオ処理ユニットがバスで結合された情報処理装置であって、前記オーディオ処理ユニットは、外部に出力するオーディオデータを一時的に蓄積するための複数のバッファを含むリングバッファと、前記リングバッファ内のあるバッファからデータが出力され、そのバッファが空き状態になったことを示す割り込み信号を、前記外部に出力するオーディオデータのサンプリング周波数に応じて間引いた上で前記プロセッサに供給する割り込み信号生成部とを含む。前記プロセッサは、前記割り込み信号を受け取った場合に、前記リングバッファ内の空き状態のバッファにオーディオデータを書き込むためのデータ転送命令を発行する。
【０００７】
本発明の別の態様もまた、情報処理装置である。この装置は、プロセッサとオーディオ処理ユニットがバスで結合された情報処理装置であって、前記オーディオ処理ユニットは、外部から入力されるオーディオデータを一時的に蓄積するための複数のバッファを含むリングバッファと、前記リングバッファ内のあるバッファにデータが入力され、そのバッファがフル状態になったことを示す割り込み信号を、前記外部から入力されるオーディオデータのサンプリング周波数に応じて間引いた上で前記プロセッサに供給する割り込み信号生成部とを含む。前記プロセッサは、前記割り込み信号を受け取った場合に、前記リングバッファ内のフル状態のバッファからオーディオデータを読み出すためのデータ転送命令を発行する。
【０００８】
本発明のさらに別の態様もまた、情報処理装置である。この装置は、プロセッサと入出力処理ユニットがバスで結合された情報処理装置であって、前記入出力ユニットは、外部に出力するデータを一時的に蓄積するための複数のバッファを含むリングバッファと、前記リングバッファ内のあるバッファからデータが出力され、そのバッファが空き状態になったことを示す割り込み信号を、前記外部に出力するデータの出力速度に応じて間引いた上で前記プロセッサに供給する割り込み信号生成部とを含む。前記プロセッサは、前記割り込み信号を受け取った際、前記リングバッファ内の空き状態のバッファにデータを書き込むためのデータ転送命令を発行する。
【０００９】
本発明のさらに別の態様もまた、情報処理装置である。この装置は、プロセッサと入出力処理ユニットがバスで結合された情報処理装置であって、前記入出力ユニットは、外部から入力されるデータを一時的に蓄積するための複数のバッファを含むリングバッファと、前記リングバッファ内のあるバッファにデータが入力され、そのバッファがフル状態になったことを示す割り込み信号を、前記外部から入力されるデータの入力速度に応じて間引いた上で前記プロセッサに供給する割り込み信号生成部とを含む。前記プロセッサは、前記割り込み信号を受け取った際、前記リングバッファ内のフル状態のバッファからデータを読み出すためのデータ転送命令を発行する。
【００１０】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造、記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１１】
本発明によれば、割り込み信号の発生頻度を低減し、データ転送効率を上げることができる。
【発明を実施するための最良の形態】
【００１２】
図１は、実施の形態に係る情報処理装置１００の構成図である。ＣＰＵ１０、メインメモリ１２、ＤＭＡコントローラ１４、オーディオ処理ユニット２０がバス５０で結合されている。
【００１３】
ＣＰＵ１０は、マルチプロセッサや、複数のプロセッサコアを１つのパッケージに集積したマルチコアプロセッサであってもよい。オーディオ処理ユニット２０は、ＣＰＵ１０その他の構成と内部バスで接続される形態でＣＰＵ１０と一体化されて実装されてもよく、ＰＣＩ（Peripheral Components Interconnect）バスなどの周辺機器接続バスで接続されるサウンドカードとして実装されてもよい。
【００１４】
オーディオ処理ユニット２０は、オーディオデータを一時的に保持するリングバッファ３０を有し、オーディオデータの入出力処理を行う。リングバッファ３０は、オーディオ入力用とオーディオ出力用にそれぞれ別個に設けられている。
【００１５】
オーディオ出力の場合、出力用のリングバッファ３０内のオーディオデータがＤ／Ａ変換器４２によりアナログ信号に変換され、アンプ４３で増幅され、スピーカ４６から出力される。オーディオ入力の場合、マイクロホン４４に入力されたアナログ信号がアンプ４１で増幅され、Ａ／Ｄ変換器４０によりデジタル信号に変換され、入力用のリングバッファ３０に蓄積される。
【００１６】
ここではＤＭＡコントローラ１４を独立したユニットとして描いているが、ＣＰＵ１０内にＤＭＡコントローラ１４を設けてもよく、オーディオ処理ユニット２０内にＤＭＡコントローラ１４を設けてもよい。
【００１７】
オーディオ処理ユニット２０とＣＰＵ１０の間には割り込み信号線が設けられ、オーディオ処理ユニット２０は、バッファ空き（Buffer Empty）、バッファフル（Buffer Full）などの各種の割り込み信号を割り込み信号線を介してＣＰＵ１０に送信することができる。割り込み信号線は、バッファ空き信号、バッファフル信号毎に設けられてもよく、複数の割り込み信号線上の割り込み信号の論理和をとり、１本の割り込み信号線を通して割り込み信号の論理和をＣＰＵ１０に送信する構成でもよい。
【００１８】
オーディオ出力の処理の流れを簡単に説明する。ＣＰＵ１０によって処理されたオーディオデータは、メインメモリ１２に格納される。ＤＭＡコントローラ１４は、ＣＰＵ１０のＤＭＡ転送命令にしたがって、メインメモリ１２に格納されたオーディオデータをリングバッファ３０内の空きバッファへＤＭＡ転送する。
【００１９】
オーディオ処理ユニット２０は、リングバッファ３０に格納されたオーディオデータを読み出し、オーディオのサンプリング周波数に合わせたタイミングでＤ／Ａ変換器４２に出力する。リングバッファ３０の読み出し中のバッファからオーディオデータが出力されてバッファが空き状態になると、オーディオ処理ユニット２０は、バッファ空き信号を生成して、割り込み信号線を介してＣＰＵ１０に供給する。
【００２０】
バッファ空き信号を受け取ったＣＰＵ１０は、メインメモリ１２の転送元アドレスとリングバッファ３０の転送先アドレスを指定したＤＭＡ転送命令をＤＭＡコントローラ１４に発行する。ＤＭＡコントローラ１４はＣＰＵ１０から発行されたＤＭＡ転送命令にしたがって、メインメモリ１２に格納されたオーディオデータをリングバッファ３０の空きバッファにＤＭＡ転送する。このようにして、ＣＰＵ１０が生成するオーディオデータがオーディオ処理ユニット２０に逐次渡され、Ｄ／Ａ変換器４２を経てスピーカ４６から出力される。
【００２１】
次に、オーディオ入力の処理の流れを簡単に説明する。マイクロホン４４から入力されるオーディオ信号はＡ／Ｄ変換器４０によりデジタルデータに変換され、リングバッファ３０内の空きバッファに蓄積される。空きバッファが一杯になると、オーディオ処理ユニット２０は、バッファフル信号（バッファフィルド（Buffer Filled）信号とも呼ばれる）を生成して、割り込み信号線を介してＣＰＵ１０に供給する。
【００２２】
バッファフル信号を受け取ったＣＰＵ１０は、リングバッファ３０の転送元アドレスとメインメモリ１２の転送先アドレスを指定したＤＭＡ転送命令をＤＭＡコントローラ１４に発行する。ＤＭＡコントローラ１４はＣＰＵ１０からのＤＭＡ転送命令にしたがって、リングバッファ３０内のフル状態になったバッファに蓄積されたオーディオデータをメインメモリ１２にＤＭＡ転送する。このようにして、マイクロホン４４から入力されたオーディオ信号がＡ／Ｄ変換器４０を経てリングバッファ３０に蓄積され、オーディオ処理ユニット２０からＣＰＵ１０に逐次渡され、処理される。
【００２３】
オーディオ出力の際、オーディオ処理ユニット２０からＣＰＵ１０へ割り込み信号線を介してバッファ空き信号が送られる。オーディオのサンプリング周波数が大きくなると、バッファからオーディオデータが読み出される速度が上がり、バッファ空き信号の発生頻度が高くなる。
【００２４】
バッファ空き信号が多発すると、割り込み信号線で伝送されるその他の割り込み信号との間で競合が起こり、割り込み信号の伝搬に遅延が発生する。また、ＣＰＵ１０は多数の割り込み信号を処理しなければならないから、ＣＰＵ１０の負荷が高くなり、割り込み処理に時間がかかるようになる。そのため、割り込み信号が発生されてからＣＰＵ１０がその割り込み信号を受け取り、割り込み処理が終わるまでにかかる時間、すなわち割り込み信号の処理レイテンシが長くなる。その結果、ＣＰＵ１０によるＤＭＡ転送命令の発行が遅延し、空きバッファへのオーディオデータの書き込みが遅延し、バッファのアンダーフローが起きて、オーディオの出力が途切れることとなり、オーディオの再生品質が低下する。
【００２５】
オーディオ入力の際も、同様の問題が発生する。オーディオ処理ユニット２０からＣＰＵ１０へ割り込み信号線を介してバッファフル信号が送られる。オーディオのサンプリング周波数が大きくなると、バッファへオーディオデータが書き込まれる速度が上がり、バッファフル信号の発生頻度が高くなり、バッファフル信号の処理レイテンシが長くなる。その結果、ＣＰＵ１０によるＤＭＡ転送命令の発行が遅延し、バッファからのオーディオデータの読み出しが遅延し、バッファのオーバーフローにより、オーディオの入力ができなくない状態となり、オーディオデータが欠落する。
【００２６】
そこで、オーディオ処理ユニット２０からＣＰＵ１０へのバッファ空き信号またはバッファフル信号の発生頻度を抑えるために、オーディオ処理ユニット２０は、これらの割り込み信号を間引きした上でＣＰＵ１０に供給する。
【００２７】
図２は、オーディオ処理ユニット２０の詳細な構成図である。同図は機能に着目したブロック図を描いており、これらの機能ブロックはハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現することができる。
【００２８】
オーディオ処理ユニット２０は、間引きモード設定部２２、入出力周期設定部２４、２６、リングバッファ３０、バッファ状態保持部３２、およびデータ入出力部３４を含む。リングバッファ３０は、オーディオ出力用とオーディオ入力用に分けて別個に設けられるが、同図では説明の簡単のため、リングバッファ３０を一つだけ描いている。
【００２９】
まず、オーディオ出力の場合における各構成の動作を説明する。オーディオ処理ユニット２０は、ＣＰＵ１０が現在処理しているオーディオのサンプリング周波数に関する情報を受け取る。間引きモード設定部２２は、出力されるオーディオのサンプリング周波数に応じた間引きモードを設定し、設定した間引きモードの情報を割り込み信号生成部２６に与える。
【００３０】
たとえば、オーディオのサンプリング周波数の候補として、４８ｋＨｚ、９６ｋＨｚ、１９２ｋＨｚがあるとする。４８ｋＨｚは、音楽ＤＶＤの再生やゲームアプリケーションにおけるサウンドの再生などで用いられるサンプリング周波数である。１９２ｋＨｚは、ＤＶＤに記録された高画質の映像のオーディオの再生などで用いられるサンプリング周波数である。４８ｋＨｚを「基本サンプリング周波数」と呼び、９６ｋＨｚを「２倍サンプリング周波数」と呼び、１９２ｋＨｚを「４倍サンプリング周波数」と呼ぶ。
【００３１】
この場合、間引きモードとして、基本サンプリング周波数、２倍サンプリング周波数、４倍サンプリング周波数に対応して、１−モード、１／２−モード、１／４−モードがそれぞれ設けられる。これらの間引きモードは、割り込み信号を間引きする割合が異なる。１−モードは、割り込み信号を間引きしないモードである。１／２−モードは、割り込み信号を２回に１回の割合で残して、残りは間引きするモードである。１／４−モードは、割り込み信号を４回に１回の割合で残して、残りは間引きするモードである。
【００３２】
このように、間引きモード設定部２２は、オーディオサンプリング周波数が、１倍、２倍、４倍と増えるにしたがって、割り込み信号の数が１倍、１／２倍、１／４倍に減るように、割り込み信号を間引く割合を増やしていく。
【００３３】
リングバッファ３０は、複数の固定長のバッファの配列において、先頭のバッファと末尾のバッファをつなげて環状に形成したデータ構造をもち、特に２つのバッファの場合は、ダブルバッファと呼ばれる。
【００３４】
リングバッファ３０は、データの読み出し位置を示す読み出しポインタと、データの書き込み位置を示す書き込みポインタをもつ。書き込みポインタが読み出しポインタよりも先行しており、読み出しポインタが示す位置から書き込みポインタが示す位置までの領域に有効なデータ、すなわち読み出し待ちのデータが格納されている。リングバッファ３０内のあるバッファからデータの読み出しが終わると、そのバッファは空き状態になる。バッファ状態保持部３２は、リングバッファ３０を構成する各バッファの空き状態を保持する。
【００３５】
割り込み信号生成部２６は、バッファ状態保持部３２に保持されたバッファの空き状態を参照して、リングバッファ３０内のあるバッファが空き状態になると、バッファ空き信号を発生させ、間引きモード設定部２２により設定された間引きモードでバッファ空き信号を間引きした上で、割り込み信号線を介してＣＰＵ１０にバッファ空き信号を与える。
【００３６】
ＣＰＵ１０は、バッファ空き信号を受け取ると、次に転送すべきオーディオデータブロックが格納されたメインメモリ１２の先頭アドレスを転送元アドレスとし、リングバッファ３０内の空きバッファの先頭アドレスを転送先アドレスとするＤＭＡ転送命令をＤＭＡコントローラ１４に与える。ＤＭＡコントローラ１４は、メインメモリ１２の転送元アドレスからリングバッファ３０の転送先アドレスへオーディオデータブロックを転送する。これにより、リングバッファ３０内の空きバッファには新たなオーディオデータブロックが格納される。
【００３７】
入出力周期設定部２４は、出力されるオーディオのサンプリング周波数に応じた出力周期を設定し、クロックにしたがってデータ入出力部３４に対してデータの出力タイミングを通知する。データ入出力部３４は、入出力周期設定部２４により通知された出力タイミングにしたがって、リングバッファ３０のバッファからオーディオデータブロックを読み出してＤ／Ａ変換器４２に供給する。データ入出力部３４によりリングバッファ３０の内のバッファからのオーディオデータブロックの読み出しが完了すると、そのバッファは空き状態になる。
【００３８】
次に、オーディオ入力の場合の各構成の動作を説明する。オーディオ入力の場合、データの流れが逆方向になるだけで、各構成の動作は基本的に同じであるから、簡単に説明する。
【００３９】
間引きモード設定部２２は、入力されるオーディオのサンプリング周波数に応じた間引きモードを設定し、設定した間引きモードの情報を割り込み信号生成部２６に与える。
【００４０】
バッファ状態保持部３２は、入力用のリングバッファ３０内の各バッファのフル状態を保持しており、割り込み信号生成部２６は、リングバッファ３０内のあるバッファにオーディオデータが書き込まれ、フル状態となったとき、バッファフル信号を発生させ、間引きモード設定部２２により設定された間引きモードでバッファフル信号を間引きした上で、割り込み信号線を介してＣＰＵ１０にバッファフル信号を与える。
【００４１】
入出力周期設定部２４は、入力されるオーディオのサンプリング周波数に応じた入力周期を設定し、クロックにしたがってデータ入出力部３４に対してデータの入力タイミングを通知する。データ入出力部３４は、入出力周期設定部２４により通知された入力タイミングにしたがって、Ａ／Ｄ変換器４０から供給されるオーディオデータブロックをリングバッファ３０内の空きバッファに書き込む。データ入出力部３４によりリングバッファ３０内の空きバッファへのオーディオデータの書き込みが完了すると、そのバッファはフル状態になる。
【００４２】
ＣＰＵ１０は、バッファフル信号を受け取ると、リングバッファ３０内のフル状態にあるバッファの先頭アドレスを転送元アドレスとし、オーディオデータブロックを格納すべきメインメモリ１２の領域の先頭アドレスを転送先アドレスとするＤＭＡ転送命令をＤＭＡコントローラ１４に与える。ＤＭＡコントローラ１４は、リングバッファ３０の転送先アドレスからメインメモリ１２の転送元アドレスへオーディオデータブロックを転送する。これにより、リングバッファ３０内のフル状態のバッファからオーディオデータブロックが読み出され、ＣＰＵ１０に渡される。
【００４３】
以下、図２の割り込み信号生成部２６によるバッファ空き信号またはバッファフル信号の間引き処理について、詳しく説明する。割り込み信号の間引き処理の必要性を理解するのを助けるため、まず、間引き処理をしない場合に生じる問題を図３〜図５を参照して説明する。その後、図６を参照して、割り込み信号の間引き処理を説明する。なお、オーディオ出力とオーディオ入力では、データの流れが反対方向である点を除けば、間引き処理については同じであるから、以下では、オーディオ出力の場合のバッファ空き信号の間引き処理について説明する。
【００４４】
図３（ａ）〜（ｃ）は、サンプリング周波数毎に異なるサイズのダブルバッファを設けた場合を説明する図である。図３（ａ）に示すように、基本サンプリング周波数の場合、一つのオーディオデータブロックを格納可能なサイズのバッファを２つ設けてダブルバッファを構成する。
【００４５】
データ入出力部３４は、基本サンプリング周波数に応じた速度で第１バッファＡから１ブロック分のオーディオデータを読み取る。１ブロック分のオーディオデータが読み出されるのにかかる時間を「１単位時間」と呼ぶ。１単位時間の経過後、第１バッファＡが空き状態になり、第１割り込み信号Ｓ１が発生する。
【００４６】
第１割り込み信号Ｓ１を受け取ったＣＰＵ１０は、第１バッファＡに新たなオーディオデータブロックを書き込む。一方、データ入出力部３４は、第２バッファＢから次の１ブロック分のオーディオデータを読み出す。１単位時間が経過して第２バッファＢが空きバッファになると、第２割り込み信号Ｓ２が発生し、第２割り込み信号Ｓ２を受け取ったＣＰＵ１０は、第２バッファＢに新たなオーディオデータブロックを書き込み、データ入出力部３４は第１バッファＡに戻って、１ブロック分のオーディオデータを読み出す。このようにしてバッファＡとバッファＢを交互に切り替えながら、オーディオデータブロックの読み出しと書き込みが行われる。
【００４７】
オーディオデータの１ブロックが３２サンプルからなるとすると、基本サンプリング周波数は４８ｋＨｚであるから、１ブロックのオーディオデータを読み出すのにかかる時間、すなわち１単位時間は、（１／４８０００）×３２＝６６７マイクロ秒である。
【００４８】
２倍サンプリング周波数の場合も同様に、図３（ｂ）に示すように、１ブロック分のオーディオデータを格納可能なサイズのバッファを２つ設けてダブルバッファを構成する。サンプリング周波数が２倍であるから、１ブロック内のサンプル数が２倍になり、必要なバッファサイズは２倍になる。バッファサイズが２倍になっても、データ入出力部３４は２倍の速度でデータを読み出すから、第１バッファＡから１ブロック分のオーディオデータが読み出されるのにかかる時間は、基本サンプリング周波数のときと同じ１単位時間である。
【００４９】
サンプリング周波数が９６ｋＨｚのオーディオデータの１ブロックは６４サンプルからなるので、１ブロックのオーディオデータを読み出すのにかかる時間、すなわち１単位時間は、（１／９６０００）×６４＝６６７マイクロ秒であり、基本サンプリング周波数の場合と同じである。
【００５０】
２倍サンプリング周波数に応じた速度で第１バッファＡから１ブロック分のオーディオデータが読み出され、１単位時間の経過後、第１バッファＡが空き状態になった時点で、第１割り込み信号Ｓ１が発生する。第２バッファＢから次の１ブロック分のオーディオデータが読み出され、１単位時間の経過後、第２バッファＢが空きバッファになると、第２バッファ空き割り込み信号Ｓ２が発生する。
【００５１】
このように、２倍サンプリング周波数に合わせてバッファサイズを２倍にしたダブルバッファを用いると、割り込み信号の発生頻度は同じであり、１単位時間毎に１ブロックのオーディオデータブロックが読み出されて割り込み信号が発生する。
【００５２】
４倍サンプリング周波数の場合は、図３（ｃ）に示すように、２つのバッファＡ、Ｂのサイズは基本サンプリング周波数の場合に比べて４倍になり、同様に、１単位時間毎に割り込み信号が発生する。
【００５３】
図３（ａ）〜（ｃ）に示すように、サンプリング周波数が大きくなっても、サンプリング周波数に応じてバッファのサイズを大きくすれば、割り込み信号の発生頻度は変化しないので、割り込み信号が多発する状況を回避することができる。しかしながら、サンプリング周波数毎に異なるバッファサイズのダブルバッファを設けるのは、ハードウェアの規模が大きくなり、製造コストがかかるというデメリットがある。
【００５４】
そこで、実装すべきメモリの容量を抑えるために、単一のリングバッファを設けて、異なるサンプリング周波数のオーディオデータのバッファリングに共用することが考えられる。異なるサンプリング周波数で一つのリングバッファを共用する場合、リングバッファを構成する各バッファのサイズをどのサンプリング周波数に合わせるかが問題となる。一つは、バッファのサイズを基本サンプリング周波数に合わせる方法であり、図４で説明する。もう一つは、バッファのサイズを４倍サンプリング周波数に合わせる方法であり、図５で説明する。
【００５５】
図４（ａ）〜（ｃ）は、リングバッファを構成する各バッファのサイズを基本サンプリング周波数に合わせた場合を説明する図である。リングバッファは８個のバッファを含み、各バッファは、基本サンプリング周波数のオーディオデータを１ブロック分（３２サンプル）だけ格納できるサイズである。
【００５６】
このリングバッファに基本サンプリング周波数のオーディオデータをバッファリングする場合、図４（ａ）に示すように、８個のバッファの内、先頭の２つのバッファＡ、Ｂを循環させて用いてもよく、残りの６個のバッファを含めて、８個のバッファを循環させて用いてもよい。第１バッファＡに格納された１ブロック分のオーディオデータが１単位時間で読み出されると、第１割り込み信号Ｓ１が発生し、次に第２バッファＢに格納された１ブロック分のオーディオデータが１単位時間で読み出され、第２割り込み信号Ｓ２が発生する。
【００５７】
このリングバッファに２倍サンプリング周波数のオーディオデータをバッファリングする場合、図４（ｂ）に示すように、８個のバッファの内、４つのバッファを用い、最初の２つのバッファＡ１、Ａ２をまとめて第１バッファとして扱い、次の２つのバッファＢ１、Ｂ２をまとめて第２バッファとして扱い、第１バッファと第２バッファを循環させてバッファリングする。図４（ａ）の場合と同様、残りの４つのバッファも用いてもよい。
【００５８】
データ入出力部３４は、第１バッファ（バッファＡ１、Ａ２）に格納された１ブロック分のオーディオデータを１単位時間で読み出すが、最初の０．５単位時間経過したところで、バッファＡ１が空きバッファになり、第１割り込み信号Ｓ１が発生し、さらに０．５単位時間経過したところで、バッファＡ２が空きバッファになり、第２の割り込み信号Ｓ２が発生する。
【００５９】
しかし、第１割り込み信号Ｓ１の発生時には、まだ２倍サンプリング周波数のオーディオデータを１ブロック分格納できるサイズのバッファ領域が空き状態になっていないため、ＣＰＵ１０は新たなオーディオデータブロックの転送を開始することはできない。そこで、ＣＰＵ１０は、第１割り込み信号Ｓ１を受け取ってもそれを無視し、１単位時間経過後に発生する第２割り込み信号Ｓ２を受け取ってから新たなオーディオデータブロックを第１バッファ（空きバッファＡ１、Ａ２）に転送する。
【００６０】
データ入出力部３４が次の１ブロック分のオーディオデータを第２バッファ（バッファＢ１、Ｂ２）から１単位時間で読み出すときも同様に、０．５単位時間経過したところで、第３割り込み信号Ｓ３が発生し、さらに０．５単位時間経過したところで、第４割り込み信号Ｓ４が発生する。プロセッサは第３割り込み信号Ｓ３は無視し、第４割り込み信号Ｓ４を受けてから、新たなオーディオデータブロックを第２バッファ（空きバッファＢ１、Ｂ２）に転送する。
【００６１】
このように、リングバッファを構成する各バッファのサイズが基本サンプリング周波数に合わされている場合、２倍サンプリング周波数のオーディオデータをバッファリングすると、０．５単位時間毎に割り込み信号が発生し、２回の内、１回の割り込み信号は無駄なトラフィックとなる。０．５単位時間は、１ブロック６４サンプルの半分である３２サンプル分のデータが読み出される時間であり、（１／９６０００）×３２＝３３３マイクロ秒である。
【００６２】
同様に、４倍サンプリング周波数の場合、図４（ｃ）に示すように、４つのバッファＡ１、Ａ２、Ａ３、Ａ４をまとめて第１バッファとして扱い、次の４つのバッファＢ１、Ｂ２、Ｂ３、Ｂ４をまとめて第２バッファとして扱い、第１バッファと第２バッファをダブるバッファとして利用することになる。
【００６３】
データ入出力部３４が第１バッファ（４つのバッファＡ１〜Ａ４）に格納された１ブロック分のオーディオデータを１単位時間で読み出す間に、０．２５単位時間経過したところで、バッファＡ１が空きバッファになり、第１割り込み信号Ｓ１が発生し、その後、０．２５単位時間経過する毎に、バッファＡ２〜Ａ４が空きバッファになり、第２〜第４割り込み信号Ｓ２〜Ｓ４が発生する。
【００６４】
このように、基本サンプリング周波数に合わせたサイズのバッファからなるリングバッファを４倍サンプリング周波数のオーディオデータのバッファリングに流用すると、０．２５単位時間毎に割り込み信号が発生し、４回の内、３回の割り込み信号は無駄なトラフィックとなる。０．２５単位時間は、１ブロック１２８サンプルの１／４である３２サンプル分のデータが読み出される時間であり、（１／１９２０００）×３２＝１６７マイクロ秒である。１６７マイクロ秒毎にバッファ空き割り込み信号が発生すると、割り込み信号線で他の割り込み信号との競合が起こる確率が高くなったり、ＣＰＵ１０での割り込み信号の処理負荷が増大し、割り込み信号の処理レイテンシーに著しい影響を与える。
【００６５】
図４（ａ）〜（ｃ）で説明したように、基本サンプリング周波数に合わせたサイズのバッファから構成されるリングバッファを２倍サンプリング周波数や４倍サンプリング周波数のオーディオデータのバッファリングに用いると、無駄な割り込み信号が発生する。そこで、リングバッファを構成するバッファのサイズを大きくし、４倍サンプリング周波数に合わせ、割り込み信号の発生頻度を抑えることも考えられるが、その場合は別の問題が発生する。
【００６６】
図５（ａ）〜（ｃ）は、リングバッファを構成する各バッファのサイズを４倍サンプリング周波数に合わせた場合を説明する図である。リングバッファは２個のバッファを含み、各バッファは、４倍サンプリング周波数のオーディオデータを１ブロック分（１２８サンプル）だけ格納できるサイズである。
【００６７】
このリングバッファに基本サンプリング周波数のオーディオデータをバッファリングする場合、図５（ａ）に示すように、各バッファＡ、Ｂに４ブロック分のオーディオデータが格納される。第１バッファＡ内の４ブロック分のオーディオデータを読み出すまでに４単位時間がかかる。４ブロック分の読み出しが完了してから第１バッファＡが空き状態になり、第１割り込み信号Ｓ１が発生し、ＣＰＵ１０によるデータ転送が開始される。データ入出力部３４が次の４ブロック分のオーディオデータを第２バッファＢから読み出している間に、ＣＰＵ１０は新たな４ブロック分のオーディオデータを第１バッファＡに書き込むことになる。
【００６８】
このリングバッファを用いると、割り込み信号が４単位時間毎にしか発生しないため、ＣＰＵ１０は、４単位時間が経過するまでは新たなオーディオブロックの書き込みを開始することができない。言い換えれば、データ入出力部３４は、常に４単位時間古いオーディオデータをバッファから読み出して出力していることになる。１単位時間が６６７マイクロ秒のとき、４単位時間は２．６７ミリ秒に当たるから、ゲーム、チャット、テレビ会議などのリアルタイムアプリケーションにおいて、２．６７ミリ秒も古いオーディオが再生される状況では、リアルタイム性のニーズに十分に応えることができない。
【００６９】
このリングバッファに２倍サンプリング周波数のオーディオデータをバッファリングする場合、図５（ｂ）に示すように、各バッファＡ、Ｂに２ブロック分のオーディオデータが格納される。第１バッファＡ内の２ブロックを読み出すまでに２単位時間がかかる。２ブロック分の読み出しが完了し、第１バッファＡが空き状態になってから、第１割り込み信号Ｓ１が発生するため、常に２単位時間だけ古いオーディオデータが再生されることになる。
【００７０】
このリングバッファに４倍サンプリング周波数のオーディオデータをバッファリングする場合は、図５（ｃ）に示すように、各バッファＡ、Ｂに１ブロック分のオーディオデータが格納され、１単位時間毎に割り込み信号Ｓ１、Ｓ２が発生するから、当然、１単位時間以上の遅れは生じない。
【００７１】
このように、リングバッファの各バッファのサイズを４倍サンプリング周波数に合わせたサイズまで大きくすると、割り込み信号の発生頻度は抑えられるが、これを基本サンプリング周波数や２倍サンプリング周波数のオーディオデータのバッファリングに用いると、割り込み信号の発生が不足し、バッファの更新頻度が落ちてリアルタイム性が損なわれる。
【００７２】
以上の課題の認識のもと、本実施の形態では、リングバッファのバッファサイズは基本サンプリング周波数に合わせておく一方で、割り込み信号をサンプリング周波数に応じて間引きすることにより、リアルタイム性を犠牲にせずに、かつ、割り込み信号の多発によるレイテンシ増加を回避する。図６（ａ）〜（ｃ）を参照して、本実施の形態に係る割り込み信号の間引き処理を説明する。
【００７３】
図６（ａ）〜（ｃ）に示すように、本実施の形態のリングバッファ３０は、図４（ａ）〜（ｃ）と同様に、８個のバッファを含み、各バッファは、基本サンプリング周波数のオーディオデータを１ブロック分（３２サンプル）だけ格納できるサイズである。リングバッファ３０に、基本サンプリング周波数、２倍サンプリング周波数、４倍サンプリング周波数のオーディオデータをバッファリングする方法は、図４（ａ）〜（ｃ）で説明した通りである。
【００７４】
リングバッファ３０に基本サンプリング周波数のオーディオデータがバッファリングされる場合、図６（ａ）に示すように、各バッファＡ、Ｂに保持された１ブロックのオーディオデータが１単位時間で読み出され、各バッファＡ、Ｂが空き状態になると、割り込み信号Ｓ１、Ｓ２が発生する。基本サンプリング周波数の場合、間引きモード設定部２２は、間引きモードを「１−モード」に設定するため、これらの割り込み信号Ｓ１、Ｓ２は間引きされることなく、ＣＰＵ１０に供給される。
【００７５】
リングバッファ３０に２倍サンプリング周波数のオーディオデータがバッファリングされる場合、間引きモード設定部２２は、間引きモードを「１／２−モード」に設定する。図６（ｂ）に示すように、最初の２つのバッファＡ１、Ａ２に保持された１ブロック分のオーディオデータが１単位時間で読み出され、０．５単位時間毎に割り込み信号Ｓ１、Ｓ２が発生する点は、図４（ｂ）と同じであるが、割り込み信号生成部２６は、０．５単位時間経過後に発生する第１割り込み信号Ｓ１は間引きし、１単位時間経過後の第２割り込み信号Ｓ２だけを抜き出してＣＰＵ１０に供給する。次の２つのバッファＢ１、Ｂ２についても同様に、第３割り込み信号Ｓ３は間引きされ、第４割り込み信号Ｓ４だけがＣＰＵ１０に供給される。
【００７６】
このように、割り込み信号生成部２６は、１／２−モードでは、２回の内、１回の割り込み信号だけを抜き取って、実際の割り込み信号としてＣＰＵ１０に供給する。この間引き処理により、ＣＰＵ１０からは、２つのバッファＡ１、Ａ２に分かれているのではなく、１ブロック６４サンプル分を格納する１つのバッファがあるように見える。すなわち、ＣＰＵ１０からは図３（ｂ）のようにバッファサイズが２倍になっているかのように見え、実際の割り込み信号は１単位時間毎に発生するから、割り込み信号線に無駄なトラフィックが発生しない。
【００７７】
リングバッファ３０に４倍サンプリング周波数のオーディオデータがバッファリングされる場合、間引きモード設定部２２は、間引きモードを「１／４−モード」に設定する。図６（ｃ）に示すように、最初の４つのバッファＡ１〜Ａ４に保持された１ブロック分のオーディオデータが１単位時間で読み出され、０．２５単位時間毎に割り込み信号Ｓ１〜Ｓ４が発生する点は、図４（ｃ）と同じであるが、割り込み信号生成部２６は、０．２５単位時間毎に発生する第１〜第３割り込み信号Ｓ１〜Ｓ３は間引きし、１単位時間経過後の第４割り込み信号Ｓ４だけを抜き出してＣＰＵ１０に供給する。次の４つのバッファＢ１〜Ｂ４についても同様に、０．２５単位時間毎に発生する割り込み信号Ｓ５〜Ｓ７は間引きされ、１単位時間経過後の割り込み信号Ｓ８だけがＣＰＵ１０に供給される。
【００７８】
このように、割り込み信号生成部２６は、１／４−モードでは、４回の内、１回の割り込み信号だけを抜き取って、実際の割り込み信号としてＣＰＵ１０に供給する。この間引き処理により、ＣＰＵ１０からは、図３（ｃ）のようにあたかもバッファサイズが４倍になっているように見え、割り込み信号は１単位時間毎にしか発生しない。
【００７９】
この間引き処理を実行するために、たとえば、４倍サンプリング周波数の場合、３ビットのバイナリカウンタを用いて、バッファ空きの割り込み信号を受けるたびに、１つずつバイナリカウンタの値を更新し、下位２ビットがともに１になるときだけ、割り込み信号を許可し、それ以外はキャンセルするロジック回路を組めば、４回に１回の割合で割り込み信号を抜き出してＣＰＵ１０に供給することができる。２倍サンプリング周波数の場合、２ビットのバイナリカウンタを用いて、下位１ビットが１になるときだけ、割り込み信号を出力するロジック回路を組めば、２回に１回の割合で割り込み信号を抜き出してＣＰＵ１０に供給することができる。
【００８０】
以上述べたように、本実施の形態によれば、オーディオバッファが空き状態またはフル状態になった際の割り込み信号をサンプリング周波数に応じて間引きすることにより、種々のサンプリング周波数のオーディオデータを出力または入力する場合でも、割り込み信号の無駄な発生をなくし、割り込み信号の多発によるデータ転送効率の低下を回避することができる。
【００８１】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。そのような変形例を説明する。
【００８２】
上記の実施の形態では、オーディオデータの入出力を例に説明したが、本発明はオーディオに限らず、他の種類のデータの入出力にも適用することができる。たとえば、汎用処理を実行するプロセッサと、専用処理、たとえば外部デバイスとの入出力処理を実行するコプロセッサとがバス結合したシステムにおいて、プロセッサとコプロセッサの間でデータを転送して処理することがある。コプロセッサからプロセッサへ割り込み信号線を介して割り込み信号が発生し、割り込み信号の処理レイテンシが問題になる。このような場合にも本発明の間引き処理により、コプロセッサにおけるデータブロックの入出力速度に応じて、バッファ空きまたはバッファフルの割り込み信号を間引きしてプロセッサに与えることで、割り込み信号のトラフィックを減らし、データ転送効率の低下を防ぐことができる。
【図面の簡単な説明】
【００８３】
【図１】実施の形態に係る情報処理装置の構成図である。
【図２】図１のオーディオ処理ユニットの詳細な構成図である。
【図３】サンプリング周波数毎に異なるサイズのダブルバッファを設けた場合を説明する図である。
【図４】リングバッファを構成する各バッファのサイズを基本サンプリング周波数に合わせた場合を説明する図である。
【図５】リングバッファを構成する各バッファのサイズを４倍サンプリング周波数に合わせた場合を説明する図である。
【図６】本実施の形態に係る割り込み信号の間引き処理を説明する図である。
【符号の説明】
【００８４】
１０  ＣＰＵ、  １２  メインメモリ、  １４  ＤＭＡコントローラ、  ２０  オーディオ処理ユニット、  ２２  間引きモード設定部、  ２４  入出力周期設定部、  ２６  割り込み信号生成部、  ３０  リングバッファ、  ３２  バッファ状態保持部、  ３４  データ入出力部、  ４０  Ａ／Ｄ変換器、  ４２  Ｄ／Ａ変換器、  ４４  マイクロホン、  ４６  スピーカ、  ５０  バス、  １００  情報処理装置。
【図１】
2008077174.tif 000003
【図２】
2008077174.tif 000004
【図３】
2008077174.tif 000005
【図４】
2008077174.tif 000006
【図５】
2008077174.tif 000007
【図６】
2008077174.tif 000008