(57)【要約】【課題】ＣＰＵの負荷に合わせて同期制御の間隔を変更することにより、上記課題を解決したオーディオ再生装置を提供する。【解決手段】パーソナルコンピュータから送信されてくるオーディオデータをＵＳＢインタフェースで受信し、受信バッファにバッファする。この受信割り込みに同期して、再生バッファの残量をチェックし、この残量の増加・減少に応じてクロック発生回路１５が発生する再生クロックの周波数を制御するとともに、受信バッファにバッファしているオーディオデータを再生バッファに転送する。この再生クロックの周波数制御およびオーディオデータの転送の処理をＣＰＵの負荷に応じて受信割り込み１回毎から複数回毎に切り換える。これにより、全体のパフォーマンスを低下させることなく、可能な範囲で頻繁に同期制御を行うことができる。【選択図】  図２
2005292375.tif 000002
【特許請求の範囲】
【請求項１】
外部装置から所定の割込間隔で定期的に送信されてくるオーディオデータを受信する受信手段と、
前記受信手段が受信したオーディオデータをバッファするとともに、このオーディオデータを所定の再生クロックで読み出してアナログのオーディオ信号に変換する再生手段と、
制御手段と、を備え、
前記制御手段は、前記オーディオデータが送信されてくるタイミングに同期して、前記バッファの残量をチェックし、この残量が所定範囲を外れないように前記再生クロックの周波数を制御するクロック制御処理と、
自己の負荷を監視し、この負荷に応じて前記クロック制御処理を実行する間隔を前記割込間隔の１倍ないしｎ倍（ｎは正の整数）の間で切り換える制御間隔設定処理と、を実行するオーディオ再生装置。
【請求項２】
外部装置から所定の割込間隔で定期的に送信されてくるオーディオデータを所定の再生クロックで読み出してアナログのオーディオ信号に変換する再生手順と、
前記オーディオデータが送信されてくるタイミングに同期して、前記バッファの残量をチェックし、この残量が所定範囲を外れないように前記再生クロックの周波数を制御するクロック制御手順と、
ＣＰＵの負荷を監視し、この負荷に応じて前記クロック制御手順を実行する間隔を前記割込間隔の１倍ないしｎ倍（ｎは正の整数）の間で切り換える制御間隔設定手順と、
を有することを特徴とするクロック周波数制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、外部装置から入力されるオーディオデータを、外部装置と同期して再生するオーディオ再生装置およびクロック周波数制御方法に関するものである。
【背景技術】
【０００２】
パーソナルコンピュータとオーディオ再生装置をＵＳＢインタフェースで接続し、パーソナルコンピュータが発生または読み出したオーディオデータをオーディオ再生装置で再生するいわゆるＵＳＢオーディオが実用化されている。
【０００３】
パーソナルコンピュータとオーディオ再生装置は、それぞれ独立した別の装置であるため、それぞれが内部のクロックで動作する。両者のクロック周波数が完全に一致していることは稀であり、もしオーディオ再生装置のクロックがパーソナルコンピュータのクロックよりも遅ければ、オーディオ再生装置のバッファがオーバーフローしてしまい、もしオーディオ再生装置のクロックがパーソナルコンピュータのクロックよりも速ければ、オーディオ再生装置のバッファがアンダーランしてしまう。
【０００４】
このため、パーソナルコンピュータとオーディオ再生装置のクロックを同期させる必要があるが、ＵＳＢオーディオでは、一般的にオーディオ再生装置（デバイス）側の再生クロックを調節してパーソナルコンピュータ（ホスト）側に同期させる適応型の同期制御を行っている（たとえば特許文献１）。
【０００５】
特許文献１の装置は、コンピュータ１とオーディオ再生装置２をＵＳＢ１．１規格のケーブルで接続し、コンピュータ１からオーディオデータを受信する毎（１ｍ秒毎）に、バッファ（ＦＩＦＯ）の残量をチェックしてクロック周波数の制御を行うものである。
【特許文献１】特開平１３−３２０３５１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許文献１の装置は、ＵＳＢ１．１規格のインタフェースで接続しているため、ホストからデバイスへのデータ送信は、１ｍ秒毎であった。しかし、現在主流となりつつあるＵＳＢ２．０規格では、その８倍の１２５μ秒毎にホストからデバイスへデータ送信が行われる。
【０００７】
従来と同様にパーソナルコンピュータからオーディオデータが送信されてくる毎に、オーディオ再生装置において、バッファ残量チェックと再生クロックの制御を行えば、高精度のクロック周波数制御が可能になり、音質に良い影響を与えることは確かである。しかしながら、オーディオ再生装置のＣＰＵは、再生クロックの制御のみならず、表示制御など他のタスクを処理しなければならないため、１２５μ秒毎の再生クロック制御の負担が大きく、装置全体の動作性能（パフォーマンス）を低下させてしまうという問題点があった。
【０００８】
この発明は、ＣＰＵの負荷に合わせて同期制御の間隔を変更することにより、上記課題を解決したオーディオ再生装置およびクロック周波数制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
この発明は、外部装置から所定の割込間隔で定期的に送信されてくるオーディオデータを受信する受信手段と、前記受信手段が受信したオーディオデータをバッファするとともに、このオーディオデータを所定の再生クロックで読み出してアナログのオーディオ信号に変換する再生手段と、制御手段とを備え、前記制御手段は、前記オーディオデータが送信されてくるタイミングに同期して、前記バッファの残量をチェックし、この残量が所定範囲を外れないように前記再生クロックの周波数を制御するクロック制御処理と、自己の負荷を監視し、この負荷に応じて前記クロック制御処理を実行する間隔を前記割込間隔の１倍ないしｎ倍（ｎは正の整数）の間で切り換える制御間隔設定処理と、を実行することを特徴とする。
【００１０】
この発明は、外部装置から所定の割込間隔で定期的に送信されてくるオーディオデータを所定の再生クロックで読み出してアナログのオーディオ信号に変換する再生手順と、前記オーディオデータが送信されてくるタイミングに同期して、前記バッファの残量をチェックし、この残量が所定範囲を外れないように前記再生クロックの周波数を制御するクロック制御手順と、ＣＰＵの負荷を監視し、この負荷に応じて前記クロック制御手順を前記割込間隔の１倍ないしｎ倍（ｎは正の整数）の間で切り換える制御間隔設定手順と、を有することを特徴とする。
【００１１】
この発明では、外部装置から定期的に送信されてくるオーディオデータを受信して、これを所定の再生クロックで読み出してアナログのオーディオ信号に変換する。所定の再生クロックは、外部装置のクロックと同期させるべく周波数を設定するが、外部装置のクロックと完全に同期させることは困難である。そこで、オーディオデータを再生しながら、継続的にクロック周波数の制御を行う。再生クロックは、一般的に高周波の基本クロックを分周して発生し、分周比（分周カウンタのカウントアップ値）を変更することで周波数を調節するため、周波数制御が段階的であり、外部装置のクロック周波数と完全に一致させられない場合が多いからである。
【００１２】
クロック周波数の制御は、受信したオーディオデータを再生するまでバッファするバッファの残量をチェックし、残量が減少傾向であれば再生クロックが速すぎると判断し、残量が増加傾向であれば再生クロックが遅すぎると判断する。そして、この判断に基づいて再生クロックの周波数を制御する。たとえば、ＵＳＢ２．０の場合外部装置（ホスト）からオーディオ再生装置（デバイス）へ１２５μ秒毎に割り込みをかけてデータを送信するが、このデータの送信毎に再生クロックを制御していたのでは、ＣＰＵ負荷が大きい場合に装置全体のパフォーマンスが低下してしまう場合がある。
【００１３】
この発明では、ＣＰＵの負荷を監視し、負荷が大きいときは、その負荷に応じて再生クロックの制御間隔を伸ばすようにした。たとえば、ＵＳＢ２．０の場合、通常は、外部装置からデータが送られてきたときの割り込み（受信割り込み）１回毎（１２５μ秒毎）に再生クロックの制御を行っているが、ＣＰＵ負荷が大きいときは、その大きさに応じて２回毎（２５０μ秒毎）、４回毎（５００μ秒毎）、８回毎（１ｍ秒毎）に変更する。これにより、ＣＰＵの負荷に応じて可能な範囲で頻繁に再生クロックの制御を行うことができ、装置全体のパフォーマンスを低下させることなく音質の向上を図ることができる。
【発明の効果】
【００１４】
この発明によれば、ＣＰＵの負荷に応じて同期制御の間隔を動的に変化させることができるため、装置の総合的なパフォーマンスを高く保ちつつ、再生するオーディオ信号の音質を向上させることができる。
【発明を実施するための最良の形態】
【００１５】
図面を参照してこの発明の実施形態について説明する。
図１はこの発明が適用されるＵＳＢオーディオシステムの構成図である。このオーディオシステムは、コンピュータ１、オーディオ再生装置２、および両者を接続するＵＳＢケーブル３を有している。コンピュータ１は、オーディオデータを発生または読み出し、このデータをＵＳＢケーブル３を介してオーディオ再生装置２に送信する。オーディオ再生装置２は、このオーディオデータを受信してアナログのオーディオ信号に変換し、このオーディオ信号をスピーカ等を介して放音する。この実施形態では、コンピュータ１（ホスト）とオーディオ再生装置２（デバイス）は、ＵＳＢ２．０規格のインタフェースで接続されており、コンピュータ１からオーディオ再生装置２へのデータ転送割り込みは１２５μ秒毎に発生する。
【００１６】
デバイスであるオーディオ再生装置２は、ホストであるコンピュータ１と、互いのシステムクロックの誤差を補償してオーディオデータの転送と再生の同期をとるため、受信したデータをバッファするバッファの残量をチェックし、バッファ残量が減少傾向にあればクロック周波数を遅く（クロック周期を長く）制御し、バッファ残量が増加傾向にあればクロック周波数を速く（クロック周期を短く）制御する。
【００１７】
図２はオーディオ再生装置２の制御処理系のブロック図である。ＵＳＢインタフェース１０には、受信バッファ１１が接続されている。また、ＣＰＵ１２には、この受信バッファ１１および再生バッファ１３が接続されている。ＣＰＵ１２は、受信バッファ１１のデータを再生バッファ１３に転送する。再生バッファ１３に転送されたデータは、Ｄ／Ａコンバータ１４によって読み出され、アナログのオーディオ信号に変換される。Ｄ／Ａコンバータ１４による再生バッファ１３のデータ読み出しは、クロック発生回路１５が発生するクロック信号（サンプリングクロック）にしたがって行われる。クロック発生回路１５が発生するクロック信号の周波数（周期）は、ＣＰＵ１２によって、ホストであるコンピュータ１のクロックに同期するように制御される。
【００１８】
受信バッファはＦＩＦＯであり、ＵＳＢインタフェース１０がコンピュータ１から受信したオーディオデータを書き込み、ＣＰＵ１２が書き込まれた順にこのデータを読み出す。ＵＳＢインタフェース１０は、コンピュータ１からパケットを受信すると、このパケットに含まれている１フレーム分のオーディオデータを受信バッファ１１に書き込むとともに、ＣＰＵ１２に対して割り込み（受信割り込み）をかける。
【００１９】
ＣＰＵ１２は、ＵＳＢインタフェース１０から受信割り込みがあると、受信バッファ１１に書き込まれたオーディオデータを書き込み順に読み出して再生バッファ１３に転送する。この転送を行う前に、再生バッファ１３の残量をチェックし、その増減の程度に応じてクロック発生回路１５のクロック周波数を制御する。ＣＰＵ１２は、このクロック周波数制御およびデータ転送からなる「再生制御処理」を、通常は、上記受信割り込みがある毎（１２５μ秒毎）に実行するが、他のタスクの実行中で負荷が大きいときは、受信割り込み２回毎（２５０μ秒毎）、４回毎（５００μ秒毎）、８回毎（１ｍ秒毎）に制御間隔を広げて実行する。
【００２０】
図３を参照してこのオーディオ再生装置２におけるクロック周波数の制御について説明する。コンピュータ１側のクロックよりもオーディオ再生装置２の再生クロックが遅い場合には、再生バッファ１３の残量が徐々に増加してゆく。この状態で、バッファ残量が上限しきい値に達したとき、クロック周期（分周カウンタのカウントアップ値）を１減らしてクロック周波数を上昇させる。これにより、再生バッファ１３から読み出されるデータ量が増加することにより、再生バッファ１３の残量増加を解消する。
【００２１】
一方、コンピュータ１側のクロックよりもオーディオ再生装置２の再生クロックが速い場合には、再生バッファ１３の残量が徐々に減少してゆく。この状態で、バッファ残量が下限しきい値に達したとき、クロック周期（分周カウンタのカウントアップ値）を１増やしてクロック周波数を低下させる。これにより、再生バッファ１３から読み出されるデータ量が減少することにより、再生バッファ１３の残量減少を解消する。
【００２２】
なお、クロック周期（分周カウンタのカウントアップ値）を１増減しても再生バッファ１３の減少・減少が解消しないときは、さらに１増減するようにしてもよい。
【００２３】
図４を参照してＣＰＵの負荷算出および制御間隔設定動作について説明する。ＣＰＵ１２は、処理待ちタスクを順次または割り込みで処理するとともに、１００μ秒のタイマ割り込みを用いて、そのとき実行されているタスクを確認（記録）する動作を行う。１００回の割り込み（１０ｍ秒）毎に、１００回の割り込みタイミングにおいて、実際の処理を実行する（アイドルタスク以外の）タスクが何回確認されたかで負荷（負荷率（％））を算出する。すなわち、実際の処理を実行するタスクが確認された回数が負荷率（％）とされる。
【００２４】
１００回の割り込みで負荷率を算出することで、実際のタスクが確認された回数がそのままパーセントとなるようにしているが、１００回以外の確認回数で負荷率（％）を算出する場合には、実際のタスクが確認された回数を全確認回数で割って１００を乗じればよい。
【００２５】
同図（Ａ）は、タスク処理動作を示すフローチャートである。通常のタスクおよび割り込みタスク（再生制御処理を含む）は、この処理で実行される。処理待ちタスクがある場合または割り込みが発生した場合にこの処理が実行される。まず、そのタスクの起動処理を行う（ｓ１）。そして、このタスクの処理を実行する（ｓ２）。所定の処理を実行したのち、このタスクの終了処理を行う（ｓ３）。なお、このタスクが他のタスク（カレントタスク）に対して割り込みで実行される場合には、カレントタスク番号の保存と復帰が必要となり、その場合には、ｓ１の処理でカレントタスク番号を保存し、ｓ３の処理でカレントタスク番号を復帰させる。
【００２６】
図４（Ｂ）は、１００μ秒毎の負荷測定のためのタイマ割り込み処理を示すフローチャートである。割り込みが発生すると、この割り込みによって割り込まれたタスクであるカレントタスクの番号またはＩＤなどの固有の数字を保存する（ｓ５）。この固有の数字は１００回の割り込みについて（１０ｍ秒間）、配列として蓄積記憶される。この処理を１０ｍ秒間繰り返し、１０ｍ秒が経過すると（ｓ６）、上記配列に基づき実際のタスクの占める割合である負荷率を算出する（ｓ７）。そして、この負荷率が前回から変化しているかを判断し（ｓ８）、変化している場合には、この新たな負荷率で同図（Ｃ）に示す制御間隔テーブルを参照して制御間隔を決定し、この制御間隔係数Ｒを再生制御処理に指示して制御間隔を変更する（ｓ９）。
【００２７】
同図（Ｃ）は、制御間隔テーブルを示す図である。同図（Ｂ）の割り込み処理によって算出されたＣＰＵの負荷が１０％以下であった場合には、Ｒ＝１すなわち１２５μ秒に制御間隔（再生制御処理を実行する間隔）を設定する。ＣＰＵの負荷が１１％〜２０％であった場合には、Ｒ＝２すなわち２５０μ秒に制御間隔を設定する。ＣＰＵの負荷が２１％〜３０％であった場合には、Ｒ＝４すなわち５００μ秒に制御間隔を設定する。ＣＰＵの負荷が３１％以上であった場合には、Ｒ＝８すなわち１ｍ秒に制御間隔を設定する。
【００２８】
図５のフローチャートおよび図６、図７のオーディオデータの転送処理を説明する図を参照して、ＣＰＵ１２の再生制御処理を説明する。
図５のフローチャートにおいて、コンピュータ１からオーディオデータが送られてくると、まずこれを再生バッファ１３に転送する（ｓ１１）。所定量の転送が終了すると、次に受信バッファ１１に８フレーム分（８回の転送パケットで送られてくるデータ量）のオーディオデータを蓄積する（ｓ１２）。これだけデータが蓄積されたときオーディオの再生をスタートする（ｓ１３）。オーディオの再生は、Ｄ／Ａコンバータ１４が再生バッファ１３のオーディオデータを読み出してアナログ信号として出力する動作である。
【００２９】
最初は、再生制御を実行する時間的間隔である制御間隔Ｒを１に設定する（ｓ１４）。すなわち、コンピュータ１からオーディオデータの受信がある毎（１２５μ秒毎）に再生制御を行うように設定する。そして、受信割り込みの回数をカウント（ダウンカウント）するカウンタｉにＲ（最初は１）をセットする（ｓ１５）。
【００３０】
そして待機ルーチンで、受信割り込みの発生（ｓ１６）または、図４（Ｂ）の動作による制御間隔の変更の発生（ｓ２２）を監視する。
【００３１】
受信割り込みが発生すると（ｓ１６）、カウンタｉを１減算する（ｓ１７）。これにより、ｉ＝０になれば、再生制御のタイミングになったとして以下の処理を実行する。
【００３２】
まず、再生バッファ１３の残量をチェックする（ｓ１９）。この再生バッファ１３の残量に基づいて上述したクロック周波数の制御を行う（ｓ２０）。すなわち、再生バッファ１３の残量が上側しきい値よりも多い場合には、再生クロックの周期を１だけ短くし、再生バッファの１３の残量が下側しきい値よりも少ない場合には、再生クロックの周期を１だけ長くする。バッファ残量が上下しきい値の範囲であればクロック周期はそのままにする。こののち、Ｒフレーム分のデータを受信バッファ１１から再生バッファ１３に転送して（ｓ２１）、ｓ１５にもどる。
【００３３】
制御間隔の変更が通知された場合（ｓ２２）には、この変更通知に合わせてＲに１、２、４、８のいずれかを設定する（ｓ２３）。この設定変更は、その後の再生制御後のｓ１５の動作で反映される。
【００３４】
図６、図７を参照して受信バッファ１１から再生バッファ１３への転送について説明する。
図６は、５００μ秒毎に受信バッファ１１から再生バッファ１３へオーディオデータの転送を行っているときの状態を示している。受信バッファ１１に８フレーム分すなわち１０００μ秒（１ｍ秒）分のオーディオデータが蓄積されたのち、次の受信割り込みが発生したときに最初の５００μ秒分のデータを再生バッファ１３に向けて送信する。
【００３５】
一方、図７（Ａ）は、制御間隔を１２５μ秒（Ｒ＝１）から５００μ秒（Ｒ＝４）に変更したときのデータ転送動作を説明する図である。この図では、制御間隔が変更された次の受信割り込みタイミングにクロック周波数の制御を行ったのち４フレーム分のデータを送信し、以後、５００μ秒毎に同様の処理を行う。なお、制御間隔が１２５μ秒から５００μ秒に変更された最初の５００μ秒間は、同図点線に示すように、受信割り込み毎に（受信クロックの制御を行わず）１フレーム分ずつのオーディオデータの転送のみ行うようにしてもよい。
【００３６】
同図（Ｂ）は、制御間隔を５００μ秒（Ｒ＝４）から１２５μ秒（Ｒ＝１）に変更したときのデータ転送動作を説明する図である。制御間隔が変更されると、次の（５００μ秒毎の）制御タイミングに制御間隔を変更し、このとき再生バッファ１３の残量チェックおよび再生クロックの周波数制御を行うとともに、１フレーム分のみのオーディオデータを受信バッファ１１から再生バッファ１３に転送する。このように、制御間隔が短く変更されても、（長い制御間隔の）次の制御タイミングが到来するまで制御間隔を長いまま維持するのは、直前の制御タイミングにこの長い制御間隔（５００μ秒）分のデータを転送しているため、この長い制御間隔を経過しないと再生バッファ１３の残量が同期点まで減少しないためである。
【００３７】
この実施形態では、制御間隔係数Ｒ＝１、２、４、８と倍数で増加させるように制御しているが、制御間隔の変化はこのような倍数でなくてもよい。たとえば、Ｒ＝１、２、３、４と等差的に増加させてもよい。
【図面の簡単な説明】
【００３８】
【図１】この発明が適用されるＵＳＢオーディオシステムの構成図
【図２】同ＵＳＢオーディオシステムのオーディオ再生装置のブロック図
【図３】同オーディオ再生装置におけるバッファ残量に基づくクロック周波数制御を説明する図
【図４】同オーディオ再生装置の動作を示すフローチャート
【図５】同オーディオ再生装置の動作を示すフローチャート
【図６】同オーディオ再生装置におけるオーディオデータの転送を説明する図
【図７】同オーディオ再生装置におけるオーディオデータの転送を説明する図
【符号の説明】
【００３９】
１…コンピュータ
２…オーディオ再生装置
３…ＵＳＢケーブル
１０…ＵＳＢインタフェース
１１…受信バッファ
１２…ＣＰＵ
１３…再生バッファ
１４…Ｄ／Ａコンバータ
１５…クロック発生回路
【図１】
2005292375.tif 000003
【図２】
2005292375.tif 000004
【図３】
2005292375.tif 000005
【図４】
2005292375.tif 000006
【図５】
2005292375.tif 000007
【図６】
2005292375.tif 000008
【図７】
2005292375.tif 000009