(57)【特許請求の範囲】
【請求項１】
複数のコンテンツが連結されたデータストリームを受信する受信手段と、
前記受信されたデータストリームを前記コンテンツごとに区分する区分手段と、
前記区分された各コンテンツを順次再生する再生手段と、
前記受信されたデータストリームを受け取って一時的に保持し、前記再生手段に出力するバッファ手段と、
前記バッファ手段に保持されている前記データストリームのデータ量を検出する検出手段と、
前記検出手段の検出結果に基づいて、前記再生手段が前記各コンテンツを再生する間隔を調整する調整手段とを備え、
前記データストリーム内の各コンテンツは複数のフレームを含み、
前記バッファ手段は、前記調整手段の指定に応じて前記複数のフレームを受け取り又は出力する複数のバッファを含み、
前記区分手段は、前記受信手段が前記各コンテンツの先頭フレームを受信したか否かを判断し、
前記検出手段は、各バッファの前記データ量を検出し、
前記調整手段はさらに、
前記受信手段が前記コンテンツの先頭フレームを受信したとき、前記複数のバッファのうちフレームを出力中のバッファのデータ量が、所定の下限値未満であるか否かを判断する第１の判断手段と、
前記フレームを出力中のバッファのデータ量が前記下限値未満であるとき、前記データを出力中のバッファと異なる他のバッファを、前記コンテンツの先頭フレーム及びそれ以降に受信されるフレームを受け取る受取バッファに指定する受取指定手段と、
前記複数のバッファのうちフレームを受け取り中のバッファのデータ量が、前記下限値を超えたとき、前記データを受け取り中のバッファを、前記フレームを前記再生手段に順次出力する出力バッファに指定する出力指定手段とを含むことを特徴とするストリーム再生装置。
【請求項２】
請求項１に記載のストリーム再生装置であってさらに、
再生クロックを生成するクロック生成手段を備え、
前記再生手段は、前記再生クロックに応答して前記フレームに基づくコンテンツを再生し、
前記調整手段はさらに、
前記出力バッファが前記受取バッファと同じバッファであるとき、前記出力バッファのデータ量に基づいて、前記再生クロックの周波数を調整するよう前記クロック生成手段に指令することを特徴とするストリーム再生装置。    
【請求項３】
請求項１に記載のストリーム再生装置であって、
前記出力指定手段は、前記フレームを受け取り中のバッファのデータ量が、前記下限値よりも大きい所定の基準値を超えたとき、前記データを受け取り中のバッファを、前記出力バッファに指定することを特徴とするストリーム再生装置。
【請求項４】
請求項１に記載のストリーム再生装置であって、
前記調整手段はさらに、
前記受信手段が前記コンテンツの先頭フレームを受信したとき、前記フレームを出力中のバッファのデータ量が前記下限値よりも大きい所定の上限値を超えているか否かを判断する第２の判断手段を含み、
前記受取指定手段はさらに、前記データ量が前記上限値を超えているとき、前記フレームを出力中のバッファと異なる他のバッファを、前記受取バッファに指定し、
前記調整手段はさらに、
前記出力指示手段が出力バッファを指定したとき、出力バッファに指定されたバッファと異なる他のバッファが保持するフレームを消去する消去手段を含むことを特徴とするストリーム再生装置。
【請求項５】
請求項１〜４のいずれかに記載のストリーム再生装置の各手段としてコンピュータを機能させる、ストリーム再生プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データストリームを再生するストリーム再生装置に関し、さらに詳しくは、ネットワークを介してストリーミング配信されたデータストリームを再生するストリーム再生装置、サーバとストリーム再生装置とを備えたストリーミングシステム、及び、コンピュータに実装されるストリーム再生プログラムに関する。
【背景技術】
【０００２】
最近、地上波デジタル放送に代表されるように、放送施設からストリーミング配信される符号化データストリームを一般家庭内の受信装置で受信し、再生するシステムが提供されている。地上波デジタル放送は無線によるストリーミング配信を実現している。
【０００３】
一方、インターネット等のネットワークを介したリアルタイムストリーミング配信技術も開示されている。ネットワークを介したストリーミング配信では、データストリームを構成するパケットの到達レートが不安定になる、いわゆる遅延ゆらぎ（ジッタ）が発生する。受信装置がデータストリームを再生している最中に、遅延ゆらぎが生じてパケットの到達が遅れた場合、受信装置内にバッファリングされたデータストリームが枯渇する場合がある。このとき、再生中のコンテンツは途中で途切れてしまう。
【０００４】
このような再生中のコンテンツの途切れを防止するため、サンプルレートコンバータを利用したり、ＰＬＬ（位相同期回路）の分周逓倍比を変更したりする方法がある。しかしながら、これらの方法は、コンテンツの再生レートを変更するため、再生音が聴感上変化してしまう。特に、複数の異なる曲を連続してストリーミング配信する場合、再生音が変化するのは好ましくない。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−２８５１７０号公報
【特許文献２】特開平７−１８４１９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、複数のコンテンツが連結したデータストリームをストリーム再生するとき、各コンテンツの途中で再生が途切れるのを防止するストリーム再生装置を提供することである。
【課題を解決するための手段】
【０００７】
本発明によるストリーム再生装置は、受信手段と、区分手段と、再生手段と、バッファ手段と、検出手段と、調整手段とを備える。受信手段は、複数のコンテンツが連結されたデータストリームを受信する。区分手段は、受信されたデータストリームをコンテンツごとに区分する。再生手段は、区分された各コンテンツを順次再生する。バッファ手段は、受信されたデータストリームを受け取って一時的に保持し、再生手段に出力する。検出手段は、バッファ手段に保持されているデータストリームのデータ量を検出する。調整手段は、検出手段の検出結果に基づいて、再生手段が各コンテンツを再生する間隔を調整する。
【０００８】
本発明によるストリーム再生装置は、データストリームをコンテンツごとに区分する。また、バッファ手段に保持されたデータ量を検出し、検出結果に応じて、コンテンツを再生する間隔を調整する。たとえば、バッファ手段に保持されるデータ量が少なければ、コンテンツを再生する間隔を広げる。このため、コンテンツの再生途中で、バッファ手段が保持するデータが枯渇し、再生が途切れるのを防止できる。
【０００９】
好ましくは、調整手段は、検出されたデータ量が基準データ量よりも少ない場合、基準データ量と検出されたデータ量との差分に基づいて調整時間を決定する。再生手段は、コンテンツの再生を完了してから決定された調整時間が経過したとき、次のコンテンツを再生する。
【００１０】
ストリーム再生装置は、基準データ量に対して受信手段のデータ量が少ないとき、調整時間を設定する。そして、コンテンツの再生が完了してから調整時間が経過するまで次のコンテンツを再生しない。そのため、調整時間中に受信手段に保持されるデータ量が増加し、コンテンツの再生中にデータが枯渇することによる再生の途切れを防止できる。
【００１１】
好ましくは、調整手段はさらに、検出されたデータ量が基準データ量よりも多い場合、基準データ量と検出されたデータ量との差分に基づいてデータ削除量を決定する。再生手段は、各コンテンツの先頭又は末尾からデータ削除量分のデータを除いた部分を再生する。
【００１２】
ストリーム再生装置は、基準データ量に対して受信手段のデータ量が多いとき、データ削除量を決定し、各コンテンツの先頭又は末尾からデータ削除量分のデータを削除する。これにより、バッファ手段が溢れる（オーバーフローする）のを抑制できる。また、コンテンツの先頭又は末尾は、無音であったり無映像である場合が多いため、これらのデータを削除しても、ユーザに与える違和感は少ない。
【００１３】
好ましくは、データストリーム内の各コンテンツは複数のフレームを含む。また、バッファ手段は、複数のバッファを含む。複数のバッファは、調整手段の指定に応じて複数のフレームを受け取り又は出力する。区分手段は、受信手段が各コンテンツの先頭フレームを受信したか否かを判断する。検知手段は、各バッファのデータ量を検出する。
【００１４】
調整手段はさらに、第１の判断手段と、受取指定手段と、出力指定手段とを含む。第１の判断手段は、受信手段がコンテンツの先頭フレームを受信したとき、複数のバッファのうちフレームを出力中の出力バッファのデータ量が、所定の下限値未満であるか否かを判断する。受取指定手段は、フレームを出力中のバッファのデータ量が下限値未満であるとき、データを出力中のバッファと異なる他のバッファを、コンテンツの先頭フレーム及びそれ以降に受信されるフレームを受け取る受取バッファに指定する。出力指定手段は、複数のバッファのうちフレームを受け取り中のバッファのデータ量が、下限値を超えたとき、データを受け取り中のバッファを、複数のフレームを順次出力する出力バッファに指定する。
【００１５】
フレームを出力中のバッファのデータ量が下限値未満である場合、ストリーム再生装置が受けるデータ量が、再生されるデータ量よりも少ない。そのため、ストリーム再生装置は、次のコンテンツの先頭フレーム及びそれ以降のフレームを、現在フレームを出力中のバッファと異なる他のバッファに入力する。そして、次のコンテンツの先頭フレーム以降のフレームを受け取って保持するバッファのデータ量が下限値を超えるまで、フレームを出力しない。以上の構成により、コンテンツの再生が完了した後、次のコンテンツが再生されるまでの間、調整時間が挿入される。調整時間の挿入により、データの枯渇に起因してコンテンツが再生途中で途切れるのを防止できる。
【００１６】
好ましくは、ストリーム再生装置はさらに、クロック生成手段を備える。クロック生成手段は、再生クロックを生成する。再生手段は、再生クロックに応答して、フレームに基づくコンテンツを再生する。調整手段はさらに、出力バッファが受取バッファと同じバッファであるとき、出力バッファのデータ量に基づいて、再生クロックの周波数を調整するようクロック再生手段に指令する。
【００１７】
この場合、フレームを出力するバッファのデータ量に応じて、再生クロックが調整される。そのため、再生手段のコンテンツの再生速度が微調整される。その結果、バッファ内のデータが枯渇したり、バッファがオーバーフローしたりするのを抑制でき、コンテンツが再生途中で途切れるのを抑制できる。
【００１８】
好ましくは、出力指定手段は、フレームを受け取り中のバッファのデータ量が、下限値よりも大きい所定の基準値を超えたとき、データを受け取り中のバッファを、出力バッファに指定する。
【００１９】
この場合、バッファの切り替え回数を抑えることができる。そのため、コンテンツの連続再生回数を増加することができる。
【００２０】
好ましくは、調整手段はさらに、第２の判断手段を含む。第２の判断手段は、受信手段がコンテンツの先頭フレームを受信したとき、フレームを出力中のバッファのデータ量が下限値よりも大きい所定の上限値を超えているか否かを判断する。受取指定手段はさらに、データ量が上限値を超えているとき、フレームを出力中のバッファと異なる他のバッファを受取バッファに指定する。調整手段はさらに、消去手段を含む。消去手段は、出力指示手段が出力バッファを指定したとき、出力バッファに指定されたバッファと異なる他のバッファが保持するフレームを消去する。
【００２１】
フレームを出力中のバッファのデータ量が上限値を超える場合、ストリーム再生装置が受けるデータ量が、再生されるデータ量よりも多い。消去手段により、現在再生中のコンテンツの末尾のデータを削除した後、次のコンテンツを再生するため、バッファ手段がオーバーフローするのを抑制できる。また、コンテンツの末尾部分は、無音であったり無映像である場合が多いため、削除してもユーザに与える違和感は小さい。
【００２２】
好ましくは、各フレームは、コンテンツごとに規定された時刻管理情報を含む。区分手段は、受信手段が受信したフレームから時刻管理情報を読み出して、フレームが先頭フレームか否かを判断する。
【００２３】
この場合、データストリームからコンテンツを容易に区分できる。
【００２４】
本発明によるストリーミングシステムは、サーバと、サーバと接続されるストリーム再生装置とを備える。サーバは、配信手段を備える。配信手段は、複数のコンテンツを連結したデータストリームをストリーミング配信する。ストリーム再生装置は、上述の構成を備える。また、本発明によるストリーム再生プログラムは、上述のストリーム再生装置をコンピュータに実現する。
【発明の効果】
【００２５】
複数のコンテンツが連結したデータストリームをストリーム再生するとき、各コンテンツの途中で再生が途切れるのを防止するストリーム再生装置を提供することができる。
【図面の簡単な説明】
【００２６】
【図１】本発明の実施の形態によるストリーミングシステムの構成を示す機能ブロック図である。
【図２】図１中のストリーミングサーバから配信されるデータストリームのデータ構造を示す図である。
【図３】図１中のストリーム再生装置の構成を示す機能ブロック図である。
【図４】図１中のストリーム再生装置のハードウェア構成を示すブロック図である。
【図５】図３に示すストリーム再生装置の区分動作の詳細を示すフロー図である。
【図６】図３に示すストリーム再生装置の調整指示動作の詳細を示すフロー図である。
【図７】図３に示すストリーム再生装置の再生動作の詳細を示すフロー図である。
【図８】本発明の第２の実施の形態によるストリーム再生装置の構成を示す機能ブロック図である。
【図９】図８に示すストリーム再生装置の区分動作の詳細を示すフロー図である。
【図１０】本発明の第３の実施の形態によるストリーム再生装置の構成を示す機能ブロック図である。
【図１１】図１０に示すストリーム再生装置の動作を示す模式図である。
【図１２】図１１に続く、ストリーム再生装置の動作を示す模式図である。
【図１３】図１２に続く、ストリーム再生装置の動作を示す模式図である。
【図１４】図１３に続く、ストリーム再生装置の動作を示す模式図である。
【図１５】図１１〜図１４と異なる、ストリーム再生装置の動作の他の例を示す模式図である。
【図１６】図１５に続く、ストリーム再生装置の動作を示す模式図である。
【図１７】図１６に続く、ストリーム再生装置の動作を示す模式図である。
【図１８】図１０に示すストリーム再生装置の区分動作の詳細を示すフロー図である。
【図１９】図１０に示すストリーム再生装置の受取指定動作の詳細を示すフロー図である。
【図２０】図１０に示すストリーム再生装置の出力指定動作の詳細を示すフロー図である。
【図２１】本発明の第４の実施の形態によるストリーム再生装置の構成を示す機能ブロック図である。
【図２２】図２１に示したストリーム再生装置のクロック調整動作の詳細を示すフロー図である。
【図２３】バッファ特定情報テーブルのデータ構成を示す図である。
【発明を実施するための形態】
【００２７】
以下、図面を参照し、本発明の実施の形態を詳しく説明する。図中同一又は相当部分には同一符号を付してその説明は繰り返さない。
［第１の実施の形態］
［全体構成］
図１を参照して、本実施の形態によるストリーミングシステムは、ストリーム再生装置１と、ストリーミングサーバ２とを備える。ストリーミングサーバ２は、たとえば、放送施設に設置され、曲配信サービスを運営する会社で管理される。一方、ストリーム再生装置１は、たとえば、曲配信サービスの利用を契約したユーザの家庭内に設置される。
ストリーミングサーバ２は、ハードディスクドライブ（ＨＤＤ）２１と、データストリーム生成部２２と、配信部２３とを備える。
ＨＤＤ２１は、複数のコンテンツファイルを蓄積する。本実施の形態では、コンテンツファイルを曲ファイルとして説明する。なお、コンテンツは、曲であってもよいし、映像であってもよい。また映像と音声を含んでもよい。
ＨＤＤ２１に蓄積された各曲ファイルは、ＭＰＥＧ２、ＭＰＥＧ４、ＭＰ３等の符号化されたファイルである。以降、符号化された曲ファイルを符号化曲ファイルという。符号化曲ファイルは、複数のフレームで構成される。符号化曲ファイル内の各フレームは、そのフレームをいつ再生すべきかを示す時刻管理情報（以下、タイムスタンプという）を含む。たとえば、タイムスタンプは、符号化曲ファイル内における当該フレームの再生時刻を示す。ストリーム再生装置１は、ストリーミングサーバ２から符号化曲ファイルを受信したとき、符号化曲ファイル内のフレームのタイムスタンプに基づいて、フレームを順次デコードして出力する。つまり、ストリーム再生装置１は、タイムスタンプに基づいてフレームを順次再生する。
【００２８】
ストリーミングサーバ２内のデータストリーム生成部２２は、ＨＤＤ２１から複数の符号化曲ファイルを抽出し、抽出された複数の符号化曲ファイルを連結してデータストリームを作成する。図２に、データストリーム生成部２２で生成されたデータストリームの一例を示す。図２に示すように、データストリームＤＳは、複数の符号化曲ファイルＭＦが連結して構成される。また、各符号化曲ファイルＭＦは、複数のフレームＦＲを含む。以降、複数のフレームＦＲのうち、先頭のフレームＦＲを先頭フレームとよぶ。
【００２９】
配信部２３は、生成されたデータストリームをストリーミング配信する。上述のとおり、ストリーミングサーバ２が放送局に設置される場合、放送局は、曲のリクエストをストリーム再生装置１のユーザから受け付ける。そして、リクエストされた複数の曲ファイルがＨＤＤ２１から抽出され、データストリーム生成部２２により、データストリームが作成される。作成されたデータストリームは、ネットワーク３を介してストリーム再生装置１にストリーミング配信される。
【００３０】
ストリーム再生装置１は、ネットワーク３を介してストリーミングサーバ２に接続される。ストリーム再生装置１は、上述のとおり、たとえば、ユーザの家庭内に設置される。ストリーム再生装置１は、ストリーミングサーバ２からストリーミング配信されるデータストリームを受信し、ストリーム再生する。具体的には、ストリーム再生装置１は、配信されたデータストリームをバッファに一時的に保持し（バッファリング）、保持されたデータストリームを読み出して、データストリームを構成する各符号化曲ファイルを連続してデコードし、出力する。
【００３１】
ストリーム再生装置１はさらに、バッファリングされたデータストリームが枯渇しないように、または、バッファが溢れない（オーバーフローしない）ように、再生される曲ファイルの再生間隔（曲間）を調整する。
【００３２】
図３を参照して、ストリーム再生装置１は、受信部１０と、受信バッファ１１と、区分部１２と、検出部１３と、調整部１７と、再生部１８とを備える。
【００３３】
受信部１０は、ストリーミングサーバ２からストリーム配信されるデータストリームを受信する。より具体的には、データストリームを構成する複数のフレームを順次受信する。受信バッファ１１は、受信されたデータストリームを受信部１０から受け取り、一時的に保持する。つまり、受信バッファ１１は、受信されたデータストリームをバッファリングする。そして、受信バッファ１１は、保持しているデータストリーム内の複数のフレームを、区分部１２を介して再生部１８に順次出力する。
【００３４】
再生部１８は、デコーダ１４と、デコードバッファ１５と、データ編集部１６とを備える。デコーダ１４は、第１デコーダ１４１と第２デコーダ１４２とを含む。第１デコーダ１４１及び第２デコーダ１４２は、符号化曲ファイルをデコードする。
【００３５】
区分部１２は、受信バッファ１１から連続して出力される複数のフレームを符号化曲ファイルごとに区分する。具体的には、区分部１２は、フレーム内のタイムスタンプを読み出す。そして、読み出されたタイムスタンプに基づいて、符号化曲ファイルの先頭フレームを特定する。要するに、区分部１２は、受信バッファ１１から連続して出力されるフレームのうち、各コンテンツの先頭フレームを特定することにより、コンテンツを区分する。
【００３６】
区分部１２はさらに、符号化曲ファイルの先頭フレームを特定したとき、先頭フレームから、出力先のデコーダを変更する。たとえば、区分部１２が、受信バッファ１１から出力されたフレームを第１デコーダ１４１に出力している最中に、新たな符号化曲ファイルの先頭フレームを特定したとき、区分部１２は、フレームの出力先を第１デコーダ１４１から第２デコーダ１４２に切り替える。そして、特定された先頭フレーム及び先頭フレーム以降に受信バッファ１１にバッファリングされたフレームを第２デコーダ１４２に順次出力する。要するに、区分部１２は、符号化曲ファイルごとに、出力先のデコーダを切り替える。
【００３７】
再生部１８内のデコードバッファ１５は、第１デコードバッファ１５１と第２デコードバッファ１５２とを含む。第１デコードバッファ１５１は、第１デコーダ１４１によりデコードされた曲ファイルをバッファリングする。第２デコードバッファ１５２は、第２デコーダ１４２によりデコードされた曲ファイルをバッファリングする。
【００３８】
第１及び第２デコードバッファは、順番に、バッファリングされた曲ファイルを出力する。具体的には、第１デコードバッファ１５１が曲ファイルを出力した後、第２デコードバッファ１５２が曲ファイルを出力する。曲ファイルの出力のタイミングは、調整部１７により決定される。
【００３９】
検出部１３は、受信バッファ１１にバッファリングされたデータストリーム（複数のフレーム）のデータ量を、所定期間ごとに検出する。
【００４０】
調整部１７は、検出部１３の検出結果に基づいて、再生部１８から出力される曲ファイルの曲間を調整する。具体的には、調整部１７は、検出部１３により検出されたデータ量（以下、検出データ量という）を基準データ量Ｖｒｅｆ１と比較する。ここで、基準データ量Ｖｒｅｆ１は、通常再生時に、再生される曲が再生途中で途切れたり、受信バッファ１１が溢れたり（オーバーフロー）しない、理想的なデータ量である。
【００４１】
検出データ量が基準データ量Ｖｒｅｆ１未満である場合、ストリーム再生装置１がストリーミングサーバ２から受信するデータ量よりも、ストリーム再生装置１が再生するデータ量の方が多い。以降、この状態を「受信データ過少状態」という。この場合、調整部１７は、再生される曲の曲間を調整する。具体的には、調整部１７は、検出データ量と基準データ量Ｖｒｅｆとの差分に基づいて調整時間を決定する。そして、データ編集部１６に決定された調整時間分の曲間を設けるよう指示する。
【００４２】
データ編集部１６は、調整部１７の指示に基づいて、曲ファイルの出力間隔（曲間）を調整する。具体的には、曲ファイルの出力を完了した後、決定された調整時間分の無音データを生成して出力する。そして、調整時間分の無音データを出力した後、次の曲ファイルを出力する。要するに、受信データ過少状態のときは、曲間を広く設けることで、受信バッファ１１が枯渇するのを抑制する。そのため、再生中の曲の途中でフレームが枯渇し音切れ発生するのを防止できる。
【００４３】
一方、検出データ量が基準データ量Ｖｒｅｆ１よりも多い場合、ストリーム再生装置１がストリーミングサーバ２から受信するデータ量が、ストリーム再生装置１が再生するデータ量よりも多い。この状態を「受信データ過多状態」という。この場合、調整部１７は、検出データ量と基準データ量Ｖｒｅｆ１との差分に基づいてフレーム削除量を決定する。そして、再生部１８に、各デコードバッファ１５１及び１５２にバッファリングされる曲ファイルの先頭又は末尾から決定されたフレーム削除量分のフレームを削除して曲を再生するよう指示する。
【００４４】
データ編集部１６は、調整部１７の指示に基づいて、各曲ファイルの先頭又は末尾からフレーム削除量分のフレームを除いて出力する。要するに、受信データ過多状態のときは、各曲ファイルの先頭又は末尾のフレームを除いて再生することで、受信バッファ１１がオーバーフローするのを抑制する。曲ファイルの先頭及び末尾のフレームの多くは、無音データである。そのため、先頭又は末尾フレームを除いても、ユーザに違和感を与えにくい。
【００４５】
上述の各構成１０〜１８は、図４に示すハードウェア構成により実現される。ストリーム再生装置１は、ＣＰＵ１０１と、メモリ１０２と、ハードディスクドライブ（ＨＤＤ）１０３と、通信部１０４とを備え、これらはバス１０５で相互に接続される。たとえば、ＨＤＤ１０３に格納されたストリーム再生プログラムをメモリ１０２に読み出し、読み出された曲再生プログラムをＣＰＵ１０１で実行することにより、ストリーム再生装置１の各構成１０〜１８が実現される。
【００４６】
［動作］
以下、フロー図を用いてストリーム再生装置１の動作を詳述する。
【００４７】
ストリーム再生装置１の動作は、大きく次の３つに分けられる。１つ目は、区分部１２が、受信部１０で連続して受信されるフレームを曲ファイルごとに区分する動作（区分動作）である。２つ目は、受信バッファ１１のデータ量に基づいて、調整部１７が、再生曲の曲間の調整、又は、再生曲の一部の削除を指示する動作（調整指示動作）である。３つ目は、調整部１７の指示に応じて、再生部１８が曲を再生する動作（再生動作）である。以下、区分動作、調整指示動作及び再生動作について説明する。
【００４８】
［区分動作］
図５を参照して、ストリーム再生装置１内の区分部１２は、受信バッファ１１からフレームＦＲ（ｎ）を受信する（Ｓ１）。受信バッファ１１は、受信部１０から受けたフレーム順に、フレームＦＲ（ｎ）を出力する。続いて、区分部１２は、フレームＦＲ（ｎ）に含まれるタイムスタンプＴ（ｎ）を読み出す（Ｓ２）。そして、読み出されたタイムスタンプＴ（ｎ）に基づいて、ステップＳ１で受信したフレームＦＲ（ｎ）が、新たな符号化曲ファイルの先頭フレームか否かを判断する（Ｓ３）。一般的に、曲ファイルの先頭フレームのタイムスタンプは、初期値の「０」である。そのため、区分部１２は、タイムスタンプを参照することで、曲ファイルの先頭フレームを特定できる。
【００４９】
また、一般的に、あるフレームのタイムスタンプに、そのフレームの再生時間を加算すれば、次のフレームのタイムスタンプとなる。つまり、同じ曲ファイル内のフレームでは、先頭から順にタイムスタンプが徐々に増加する。そして、連続するフレームのタイムスタンプの差分は、所定の数値範囲内となる。一方、ある曲の末尾のフレームのタイムスタンプと、次の曲の先頭のフレームのタイムスタンプとの差分は、同一曲ファイル内の連続するフレームのタイムスタンプの差分よりもはるかに大きい。そのため、フレームＦＲ（ｎ）のタイムスタンプと、フレームＦＲ（ｎ−１）のタイムスタンプとの差分を算出し、算出された差分が所定値よりも大きい場合、フレームＦＲ（ｎ）を先頭フレームと判断してもよい。
【００５０】
ステップＳ３での判断の結果、フレームＦＲ（ｎ）が先頭フレームではない場合（Ｓ３でＮＯ）、フレームＦＲ（ｎ）は、以前に区分部１２を通過したフレームと同じ曲ファイルに属する。そのため、区分部１２は、指定されているデコーダ（以下、指定デコーダという）にフレームＦＲ（ｎ）を出力する。指定デコーダの識別情報（指定デコーダ情報）は、メモリ１０２に格納されている。区分部１２は、指定デコーダ情報に基づいて指定デコーダを特定し、特定された指定デコーダにフレームＦＲ（ｎ）を出力する（Ｓ５）。以下、指定デコーダを第１デコーダ１４１として、説明を続ける。
【００５１】
ステップＳ３での判断の結果、フレームＦＲ（ｎ）が新たな曲ファイルの先頭フレームである場合（Ｓ３でＹＥＳ）、区分部１２は、指定デコーダを第１デコーダ１４１から第２デコーダ１４２に切り替える（Ｓ４）。具体的には、区分部１２は、指定デコーダ情報を第１デコーダ１４１の識別情報から第２デコーダ１４２の識別情報に変更する。そして、変更された指定デコーダ情報に基づいて、第２デコーダ１４２に先頭フレームＦＲ（ｎ）を出力する（Ｓ５）。
【００５２】
以上の工程により、区分部１２は、ストリーム再生装置１が受信したデータストリームを、複数の符号化曲ファイルに区分する。区分部１２は、さらに、ある符号化曲ファイルと、その符号化曲ファイルの次に受信した新たな符号化曲ファイルとを、それぞれ異なるデコーダ１４１及び１４２に出力する。各デコーダ１４１及び１４２は、それぞれ符号化曲ファイルをデコードし、デコードされた曲ファイルを別々のデコードバッファ（１５１及び１５２）に格納する。
【００５３】
［調整指示動作］
調整部１７は、受信バッファ１１が保持しているデータ量に基づいて、再生曲の曲間の調整を指示したり、再生曲の先頭又は末尾のフレームの削除を指示する。
【００５４】
図６を参照して、調整部１７は、所定時間ΔＴごとに、調整指示動作を実行する（Ｓ１１）。所定時間ΔＴが経過したとき（Ｓ１１でＹＥＳ）、調整部１７は、検出部１３に受信バッファ１１が保持するデータ量を要求する（Ｓ１２）。検出部１３は、調整部１７からの要求を受け、受信バッファ１１のデータ量を検出する。そして、検出されたデータ量（検出データ量）Ｖｄｅｔを調整部１７に通知する。
【００５５】
調整部１７は検出データ量Ｖｄｅｔを取得する（Ｓ１３）。続いて、調整部１７は、式（１）に基づいて、検出データ量Ｖｄｅｔと基準データ量Ｖｒｅｆ１との差分ΔＶを求める（Ｓ１４）。
【００５６】
ΔＶ＝Ｖｄｅｔ−Ｖｒｅｆ１  （１）
なお、基準データ量Ｖｒｅｆ１は予めメモリ１０２に格納されている。
【００５７】
調整部１７はさらに、ステップＳ１４で算出された差分ΔＶを利用して、式（２）で示される調整時間ΔＡＤＪを算出する（Ｓ１５）。
【００５８】
ΔＡＤＪ＝ΔＶ(bit)／圧縮ビットレート(bps)／曲ファイル再生数  （２）
ここで、「曲ファイル再生数」とは、所定期間ΔＴ内に再生される曲ファイル数である。例えば、所定期間ΔＴが６０分であり、曲ファイルの平均再生時間が４分である場合、曲ファイル再生数を「１５」とする。曲ファイル再生数は、予めメモリ１０２に格納されていてもよい。また、調整部１７が、所定期間ΔＴ内で実際に再生された曲ファイル数をカウントしたものを用いてもよい。また、式（２）で求めた値に１以上の係数αを乗じたものを調整時間ΔＡＤＪとしてもよい。算出された調整時間ΔＡＤＪはメモリ１０２に格納される。
【００５９】
続いて、調整部１７は、ステップＳ１５で算出された調整時間ΔＡＤＪが０よりも大きいか否かを判断する（Ｓ１６及びＳ１７）。調整時間ΔＡＤＪが０よりも小さいとき（Ｓ１６でＹＥＳ）、調整部１７は、データ編集部１６に、曲間に調整時間ΔＡＤＪ分の無音データを挿入するよう指示する（Ｓ１８）。具体的には、メモリ１０２内に格納されている指示情報を、挿入を示す指示（以下、挿入指示という）に設定する。調整時間ΔＡＤＪが０よりも小さい場合、検出データ量Ｖｄｅｔが基準データ量Ｖｒｅｆ１よりも少ない。つまり、ストリーム再生装置１は、受信データ過少状態である。そのため、調整部１７は、再生曲に曲間を設けて、再生中の曲が途中で途切れないようにする。
【００６０】
一方、調整時間ΔＡＤＪが０よりも大きい場合（Ｓ１６でＮＯ、Ｓ１７でＹＥＳ）、調整部１７は、データ編集部１６に、再生曲の先頭又は末尾を調整時間ΔＡＤＪ分だけ除いて出力するよう指示する（Ｓ１９）。具体的には、メモリ１０２内に格納されている指示情報を、削除を示す指示（以下、削除指示という）に設定する。調整時間ΔＡＤＪが０よりも大きい場合、検出データ量Ｖｄｅｔが基準データ量Ｖｒｅｆ１よりも多い。つまり、ストリーム再生装置１は、受信データ過多状態である。そのため、調整部１７は、曲の先頭又は末尾フレームを除いて再生することで、受信バッファ１１がオーバーフローするのを抑制する。調整時間ΔＡＤＪが０である場合（Ｓ１６及びＳ１７でＮＯ）、受信バッファのデータ量は、基準データ量Ｖｒｅｆ１と同じであり、理想的なデータ量である。そのため、調整部１７は、メモリ１０２内の指示情報を、曲ファイルをそのまま再生することを示す指示（以下、通常再生指示）に設定する。
【００６１】
［再生動作］
再生部１８は、調整部１７の指示に応じて曲を再生する。
【００６２】
図７を参照して、再生部１８内のデータ編集部１６は、２つのデコードバッファ１５１及び１５２のうち、デコードされた曲ファイルを読み出すデコードバッファ（以下、出力バッファという）を特定する。ここでは、出力バッファが第１デコードバッファ１５１であるとして説明を続ける。データ編集部１６は、第１デコードバッファ１５１からデコードされた曲ファイルを読み出す（Ｓ３１）。出力バッファに関する情報（出力バッファ情報）は、メモリ１０２に格納されている。出力バッファが第１デコードバッファ１５１である場合、出力バッファ情報は第１デコードバッファ１５１を示す。
【００６３】
第１デコードバッファ１５１から曲ファイルのフレームを全て読み出し終えたとき（Ｓ３２でＹＥＳ）、データ編集部１６は、出力バッファを第１デコードバッファ１５１から第２デコードバッファ１５２に切り替える（Ｓ３３）。これにより、データ編集部１６は、次の曲ファイルを出力する準備ができる。このとき、メモリ１０２内の出力バッファ情報は、第２デコードバッファ１５２に変更される。
【００６４】
続いて、データ編集部１６は、メモリ１０２から指示情報を読み出す（Ｓ３４）。指示情報が挿入指示の場合（Ｓ３５でＹＥＳ）、データ編集部１６は、調整時間ΔＡＤＪ分の長さの無音データを生成し、出力する（Ｓ３６）。無音データを出力した後、データ編集部１６は、ステップＳ３１に戻って出力バッファ（ステップＳ３３で新たに指定された第２デコードバッファ１５２）から曲ファイルを読み出して出力する。要するに、曲間に調整時間ＡＤＪ分の無音データを挿入する。これにより、再生部１８は、曲ファイルの再生を完了してから調整時間ΔＡＤＪが経過した後に、次の曲ファイルの再生を開始する。
【００６５】
一方、ステップＳ３４で読み出した指示情報が削除指示の場合（Ｓ３５でＮＯ、Ｓ３７でＹＥＳ）、出力バッファ（ここでは第２デコードバッファ１５２）内の曲ファイルのうち、先頭から調整時間ΔＡＤＪ分の複数のフレーム又は末尾から調整時間ΔＡＤＪ分の複数のフレームを特定する（Ｓ３８）。そして、ステップＳ３１に戻って曲ファイルを読み出すとき、ステップＳ３８で特定されたフレームを除いた部分を読み出して出力する（Ｓ３１）。これにより、再生部１８は、曲ファイルの先頭又は末尾の一部を除いて再生する。曲ファイルの先頭部分及び末尾部分は無音部分である場合が多い。そのため、先頭部分又は末尾部分のフレームを除いて再生しても、ユーザは違和感なく聴くことができる。また、受信バッファ１１がオーバーフローするのを抑制できる。
【００６６】
なお、指示情報が通常再生指示である場合（Ｓ３５及びＳ３７でＮＯ）、データ編集部１６は、無音データを挿入したり、曲ファイルの先頭又は末尾部分のうち調整時間ΔＡＤＪ分の複数のフレームを特定したりすることなく、出力デコーダから曲ファイルを読み出して外部に出力する（Ｓ３１）。
【００６７】
以上、ストリーム再生装置１は、受信バッファ１１のデータ量を所定期間ごとに検出し、検出されたデータ量Ｖｄｅｔと基準データ量Ｖｒｅｆ１との差分に基づいて、受信データ過少状態か受信データ過多状態かを判断する。そして、受信データ過少状態のとき、曲間に調整時間を挿入することで、再生曲が途中で途切れるのを防ぐ。一方、受信データ過多状態のとき、各曲の先頭又は末尾フレームの一部を除いて再生することをで、受信バッファ１１がオーバーフローするのを防ぐ。
【００６８】
なお、図６中のステップＳ１６及び１７では、調整部１７は、調整時間ΔＡＤＪが０より大きいか否かに基づいて、指示内容を決定した。しかしながら、たとえば、調整時間ΔＡＤＪが０を含む所定の範囲内である場合、調整部１７は指示情報を通常再生指示としてもよい。要するに、検出データ量Ｖｄｅｔが基準データ量Ｖｒｅｆ１から所定の範囲内であれば、無音時間の挿入及びフレームの削除を指示しなくてもよい。
【００６９】
［第２の実施の形態］
第１の実施の形態では、ストリーム再生装置１は、２つのデコーダ（第１デコーダ１４１、第２デコーダ）と２つのデコードバッファ（第１デコードバッファ１５１、第２デコードバッファ１５２）を備えたが、デコーダの処理能力が高い場合、デコーダ及びデコードバッファは１つでもよい。
【００７０】
図８を参照して、第２の実施の形態によるストリーム再生装置２０は、１つのデコーダ１４３と、１つのデコードバッファ１５３とを備える。その他の構成はストリーム再生装置１と同じである。
【００７１】
ストリーム再生装置２０は、第１の実施の形態と同様に、区分動作と、調整指示動作と、再生動作とを実行する。このうち、調整指示動作は第１の実施の形態と同じである。また、再生動作は、図７中のステップＳ３３を除いたステップを実行する。以下、区分動作について説明する。
【００７２】
［区分動作］
図９を参照して、区分部１２は、第１の実施の形態と同様に、受信バッファ１１から出力されるデータストリームを符号化曲ファイルごとに区分する。ただし、ストリーム再生装置２０のデコーダ及びデコードバッファは１つだけ（デコーダ１４３及びデコードバッファ１５３）である。そのため、区分部１２は、デコードバッファ１５３が曲ファイルの出力を完了するまで、新たな符号化曲ファイルのフレームの出力を停止する。要するに、区分部１２は、デコードバッファ１５３が曲ファイルの出力を完了するごとに、新たな符号化曲ファイルをデコーダ１４３に出力する。これにより、複数の曲ファイルのフレームがデコードバッファ１５３内に混在するのを防ぐ。
【００７３】
図９を参照して、ステップＳ１〜Ｓ３までの動作は図４と同じである。区分部１２が、新たな符号化曲ファイルの先頭フレームを受けたとき（Ｓ３でＹＥＳ）、区分部１２は、そのフレームの出力を停止する（Ｓ７）。そして、デコードバッファ１５３が保持している曲ファイルのフレームを全て出力し終えた後（Ｓ８でＹＥＳ）、ステップＳ７で止めていたフレームデータの出力を開始する（Ｓ６）。調整部１７は、デコードバッファ１５３が全てのフレームを出力し終えたか否かを監視する。そして、デコードバッファ１５３が全てのフレームを出力し終えたとき、調整部１７は、区分部１２に出力完了通知を出力する。区分部１２は、出力完了通知を受けたとき（Ｓ８でＹＥＳ）、フレームの出力を開始する（Ｓ６）。以上の動作により、区分部１２は、曲ファイルごとに区分することができる。
【００７４】
［第３の実施の形態］
図１０を参照して、第３の実施の形態によるストリーム再生装置３０は、受信部３１と、区分部３２と、第１バッファ３３と、第２バッファ３４と、検出部３５と、調整部３６と、再生部３８とを備える。再生部３８は、デコーダ３７を含む。
【００７５】
本実施の形態では、２つのバッファ３３及び３４を配置する。検出部３５は、第１バッファ３３及び第２バッファ３４が蓄積するデータ量を求め、求めたデータ量をメモリ１０２に格納する。
【００７６】
調整部３６は、メモリ１０２に格納されたデータ量に基づいて、区分部３２から出力されたフレームの受け取り先となるバッファ（以下、受取バッファという）、及び、デコーダ３７に出力されるデータの出力元となるバッファ（以下、出力バッファという）を指定する。
【００７７】
調整部３６は、制御部３６１と、受取指定部３６２と、出力指定部３６３とを含む。制御部３６１は、検出部３５により検出された第１バッファ３３及び第２バッファ３４のデータ量が所定の基準値よりも大きいか否か判断し、判断結果に基づいて、受取指定部３６２及び出力指定部３６３に指示を出力する。
【００７８】
受取指定部３６２は、第１及び第２バッファ３３、３４のうち、受信部３１が受けたフレームの受取先となるバッファ（受取バッファ）を指定する。出力指定部３６３は、第１及び第２バッファ３３、３４のうち、デコーダ３７にフレームを出力するバッファ（出力バッファ）を指定する。
【００７９】
［動作］
ストリーム再生装置３０内の区分部３２は、受信部３１から受けたデータストリームを、曲ファイルごとに区分する（区分動作）。検出部３５は、第１及び第２バッファ３３、３４のデータ量を検出する。調整部３６は、検出されたデータ量に基づいて、区分部３２から出力されるフレームを受け取って保持する受取バッファを指定する。また、検出されたデータ量に基づいて、フレームをデコーダ３７に出力する出力バッファを指定する。このとき、調整部３６は、デコーダによりデコードされて外部に出力される曲ファイルが、曲の途中で途切れないように、受取及び出力バッファを指定する（調整動作）。
【００８０】
上述のストリーム再生装置３０の動作を模式図を用いて説明する。図１１を参照して、調整部３６は、初めに、第１バッファ３３を受取バッファに指定する。そのため、区分部３２から出力されたフレームは第１バッファ３３に入力され、保持される。第１バッファ３３のデータ量は、検出部３５により検出される。検出された第１バッファ３３のデータ量が基準値Ｖｒｅｆ２を超えたとき、調整部３６は、第１バッファ３３を出力バッファに指定する。これにより、第１バッファ３３は、保持しているフレームをデコーダ３７に順次出力する（図１１参照）。
【００８１】
［受信データ過少状態でのストリーム再生装置の動作］
区分部３２が新たな符号化曲ファイルの先頭フレームを受けたとき、調整部３６は、第１バッファ３３のデータ量を確認する。このとき、図１２に示すように、第１バッファ３３のデータ量が下限値Ｖｍｉｎ未満であると仮定する。このとき、調整部３６は、受取バッファを第１バッファ３３から第２バッファ３４に切り替える。つまり、第２バッファ３４を新たな受取バッファに指定する。
【００８２】
データ量が下限値Ｖｍｉｎ未満である場合、ストリーム再生装置３０が受けるデータ量よりも、再生されるデータ量の方が多い。つまり、ストリーム再生装置３０は、受信データ過少状態である。この場合、第１バッファ３３にフレームを継続してバッファリングし続ければ、デコーダ３７に出力すべきフレームが、再生曲の途中で枯渇する。そのため、ストリーム再生装置３０から出力される曲は、曲の途中で音切れする。このような再生曲の音切れを防止するため、調整部３６は、受取バッファを切り替える。
【００８３】
新たな曲ファイルのフレームが第２バッファ３４にバッファリングされている最中に、図１３に示すように、第１バッファ３３に保持されていた全てのフレームがデコーダ３７に出力される。このとき、１曲分の曲ファイルの出力が完了する。
【００８４】
調整部３６はさらに、第２バッファ３４のデータ量を所定期間ごとに確認し、第２バッファ３４のデータ量が基準値Ｖｒｅｆ２を超えたか否かを判断する。そして、データ量が基準値Ｖｒｅｆ２を超えるまで、調整部３６は、第２バッファ３４からフレームを出力しない。調整部３６が第２バッファ３４からフレームを出力しない間、デコーダ３７はデコード処理を行わない。そのため、この間、ストリーム再生装置３０は無音状態となる。
【００８５】
図１４に示すように、第２バッファ３４のデータ量が基準値Ｖｒｅｆ２を超えたとき、調整部３６は、第２バッファ３４を出力バッファに指定する。出力バッファに指定された第２バッファ３４は、デコーダ３７にフレームを出力する。このとき、ストリーム再生装置３０は、新たな曲を再生する。要するに、ストリーム再生装置３０が、受信データ過少状態であるとき、曲の再生が完了してから次の曲が再生されるまでの間、無音の調整時間が挿入される。曲間に調整時間を設けることにより、再生曲が再生途中で途切れるのを防止できる。
【００８６】
［受信データ過多状態でのストリーム再生装置の動作］
受信データ過多状態の場合のストリーム再生装置３０の動作は以下のとおりである。第１バッファ３３がフレームを受信しながら、デコーダ３７にフレームを出力している最中に、区分部３２が新たな曲の先頭フレームを受信したと仮定する。このとき、調整部３６は、第１バッファ３３のデータ量を確認する。確認した結果、図１５に示すように、データ量が上限値Ｖｍａｘを超えるとき、調整部３６は、第２バッファ３４を受取バッファに指定する。つまり、受取バッファを第１バッファ３３から第２バッファ３４に切り替える。これにより、第２バッファ３４が先頭フレーム及びそれ以降のフレームを受け取って保持する。
【００８７】
続いて、調整部３６は、受取バッファである第２バッファ３４のデータ量を監視する。図１６に示すように、第２バッファ３４のデータ量が基準値Ｖｒｅｆ２を超えたとき、調整部３６は、第２バッファ３４を出力バッファに指定する。その結果、図１７に示すように、第２バッファ３４は、保持しているフレームをデコーダ３７に順次出力する。調整部３６はさらに、第２バッファ３４を出力バッファに指定したとき、他のバッファ（第１バッファ３３）に残存するデータを削除する。たとえば、図１６に示すように、第２バッファ３４のデータ量が基準値Ｖｒｅｆ２を超えたとき、第１バッファ３３にはまだデータが残存していると仮定する。この場合、調整部３６は、第２バッファ３４を出力バッファに指定するとともに、第１バッファ３３に残存するデータを削除する（図１７参照）。そのため、第１バッファ３３に蓄積されていた曲ファイルの末尾部分のデータは出力されず、カットされる。この場合、曲の末尾部分は再生がカットされるが、曲の末尾部分は無音である場合が多い。そのため、再生曲の途中で音切れが発生するよりも、ユーザに与える違和感を抑えることができる。
【００８８】
以上のとおり、ストリーム再生装置３０は、２つのバッファ３３及び３４のデータ量を所定の基準値（Ｖｍａｘ、Ｖｒｅｆ２、Ｖｍｉｎ）と比較する。そして、比較結果に基づいて、受取バッファ及び出力バッファを指定する。これにより、ストリーム再生装置３０は、受信データ過少状態の時には曲間に調整時間を挿入し、再生曲の途中で音切れが発生するのを抑制する。また、受信データ過多状態の時には曲ファイルの末尾データを削除して、再生曲の途中で音切れが発生するのを防止する。なお、下限値Ｖｍｉｎは基準値Ｖｒｅｆ２と同じであってもよい。以下、フロー図を用いてストリーム再生装置３０の動作の詳細を説明する。
【００８９】
［区分動作］
図１８を参照して、ステップＳ１〜Ｓ３の動作は、図４と同じである。つまり、区分部３２は、フレームＦＲ（ｎ）からタイムスタンプＴ（ｎ）を読み出し、タイムスタンプＴ（ｎ）に基づいて、新たな曲ファイルの先頭フレームを特定する。これにより、データストリームを曲ファイルごとに区分できる。
【００９０】
区分部３２は、受信部３１が受信したフレームが先頭フレームであると判断したとき（Ｓ３でＹＥＳ）、調整部３６に区分通知を出力する（Ｓ９）。
【００９１】
［調整動作］
調整部３６は、区分部３２から区分通知を受けるごとに受取バッファの指定を判断する受取指定動作と、受取バッファのデータ量が基準値Ｖｒｅｆ２を超えるごとに出力バッファの指定を判断する出力指定動作とを実行する。以下、受取指定動作及び出力指定動作について説明する。
【００９２】
［受取指定動作］
調整部３６は、区分部３２から区分通知を受けるごとに、受取指定動作を実行する。図１９を参照して、調整部３６内の制御部３６１は、区分通知を受けたとき（Ｓ６１でＹＥＳ）、現在フレームをデコーダ３７に出力している出力バッファのデータ量を読み出す（Ｓ６２）。出力バッファを特定するための情報（出力バッファ特定情報）はメモリ１０２に格納されている。出力バッファが第１バッファ３３である場合、出力バッファ特定情報は、第１バッファ３３を示す。各バッファ３３、３４のデータ量は、検出部３５により所定期間ごとに検出され、メモリ１０２に格納される。制御部３６１は、区分通知を受けたとき、出力バッファ特定情報に基づいて出力バッファを特定し、特定された出力バッファのデータ量をメモリ１０２から読み出す。以下、出力バッファを第１バッファ３３と仮定して説明する。なお、調整部３６が区分通知を受けるとき、通常は、出力バッファに指定されているバッファは、区分部３２からフレームを受け取っている。つまり、出力バッファに指定されているバッファは、同時に受取バッファにも指定されている。そのため、第１バッファ３３は、フレームを受け取って保持し、かつ、フレームをデコーダ３７に出力している。
【００９３】
制御部３６１は、ステップＳ６２で読み出した第１バッファ３３のデータ量が所定範囲内の量か否かを判断する（Ｓ６３及びＳ６４）。
【００９４】
ステップＳ６３で判断の結果、データ量が下限値Ｖｍｉｎ未満である場合（Ｓ６３でＹＥＳ）、ストリーム再生装置３０は、受信データ過少状態である。そのため、調整部３６は、受取バッファを切り替える（Ｓ６５、図１２参照）。具体的には、制御部３６１は、メモリ１０２に格納された、受取バッファを特定するための情報（受取バッファ特定情報）を第２バッファ３４に変更する。そして、受取指定部３６２に、区分部３２から受けたフレームを第２バッファ３４に出力するよう指示する。受取指定部３６２は、制御部３６１からの指示を受け、新たな曲ファイルの先頭フレーム及びそれ以降に受信部３１で受信されたフレームを、第２バッファ３４に出力する。これにより、第２バッファ３４が受取バッファとして、新たな曲ファイルのフレームをバッファリングする。
【００９５】
一方、ステップＳ６２で読み出された第１バッファ３３のデータ量が上限値Ｖｍａｘを超えている場合（Ｓ６３でＮＯ、Ｓ６４でＹＥＳ）、ストリーム再生装置３０は、受信データ過多状態である。そのため、調整部３６は、受取バッファを切り替え（Ｓ６５）、第２バッファ３４に先頭フレーム及びそれ以降のフレームを出力する（Ｓ６６）。
【００９６】
要するに、調整部３６は、ストリーム再生装置３０が受信データ過少状態又は受信データ過多状態と判断したとき、受取バッファを切り替える。
【００９７】
［出力指定動作］
続いて、調整部３６の出力指定動作について説明する。図２０を参照して、調整部３６は、所定期間ごとに出力指定動作を実行する。調整部３６内の制御部３６１は、まず、メモリ１０２に格納された受取バッファ特定情報を用いて、受取バッファを特定する（Ｓ７１）。特定された受取バッファが第２バッファ３４であるとして説明を続ける。
【００９８】
制御部３６１は、受取バッファである第２バッファ３４のデータ量を読み出す（Ｓ７２）。そして、読み出されたデータ量が基準値Ｖｒｅｆ２よりも大きいか否かを判断する（Ｓ７３）。データ量が基準値Ｖｒｅｆ２よりも小さい場合（Ｓ７３でＮＯ）、調整部３６は出力指定動作を終了する。つまりこの場合、出力バッファは切り替わらない。
【００９９】
一方、ステップＳ７３での判断の結果、データ量が基準値Ｖｒｅｆ２を超えた場合（Ｓ７３でＹＥＳ）、制御部３６１は、出力バッファの指定を検討する（Ｓ７４〜Ｓ７６）。
【０１００】
制御部３６１はまず、現在の出力バッファを特定する（Ｓ７４）。ストリーム再生装置３０は、出力バッファを特定するための情報（以下、出力バッファ特定情報という）を、受取バッファ特定情報と同様に、メモリ１０２に格納している。制御部３６１は、メモリ１０２から出力バッファ特定情報を読み出し、出力バッファを特定する。
【０１０１】
出力バッファを特定した後、制御部３６１は、出力バッファが、受取バッファと同じ第２バッファ３４か否かを判断する（Ｓ７５）。ステップＳ７４で特定された出力バッファが第１バッファ３３である場合、出力バッファ（第１バッファ３３）は、受取バッファ（第２バッファ３４）と異なる（Ｓ７５でＮＯ）。そのため、制御部３６１は、出力バッファを第１バッファ３３から第２バッファ３４に切り替える（Ｓ７６、図１４及び図１７参照）。換言すれば、制御部３６１は、出力バッファ特定情報を第１バッファ３３から第２バッファ３４に変更し、第２バッファ３４を出力バッファに指定する。
【０１０２】
制御部３６１は、出力バッファを第２バッファ３４に指定するよう出力指定部３６３に指示する。出力指定部３６３は、第２バッファ３４のデータを受け取り、デコーダ３７に出力する。これにより、第２バッファ３４が出力バッファとして、デコーダ３７にフレームを出力する。
【０１０３】
制御部３６１はさらに、出力バッファではないバッファ（ここでは、第１バッファ３３）に残存する全てのフレームを削除する（Ｓ７７）。ストリーム再生装置３０が受信データ過多状態である場合、ステップＳ７７の動作により、第１バッファ３３に残存したフレームを消去する（図１７参照）。
【０１０４】
以上の動作により、ストリーム再生装置３０が受信データ過少状態である場合（図１２）、調整部３６は、第１バッファ３３が蓄積された全てのフレームを出力し終えても、第２バッファ３４にフレームが所定量（Ｖｒｅｆ２より多い量）バッファリングされるまでフレームをデコーダ３７に出力しない。この間、デコーダ３７はフレームを受け取らないため、デコード処理を停止する。その結果、無音期間が発生する。調整部３６は、第２バッファ３４が、再生曲の途中で音切れが発生しない程度に十分なデータ量（Ｖｒｅｆ２より多い量）を蓄積した後、第２バッファ３４を出力バッファに指定して、第２バッファ３４のデータをデコーダ３７に出力する。要するに、ストリーム再生装置３０が受信データ過少状態のとき、調整部３６は、曲間に無音の調整時間を挿入することで、再生曲の途中で音切れが発生するのを抑制する。
【０１０５】
また、ストリーム再生装置３０が受信データ過多状態である場合、ステップＳ７７の動作により、先に出力された曲ファイルの末尾をカットして、次曲ファイルを出力する。これにより、バッファがオーバーフローするのを防ぐことができる。また、曲の末尾部分は無音である場合が多いため、曲の途中で音切れが発生するよりも、ユーザに与える違和感を抑えることができる。
【０１０６】
上述の第３の実施の形態では、下限値Ｖｍｉｎと基準値Ｖｒｅｆ２とを異なる値としたが、下限値Ｖｍｉｎと基準値Ｖｒｅｆ２とは同じ値であってもよい。より具体的には、図２０に示す出力指定動作中のステップＳ７３において、制御部３６１は、受取バッファのデータ量が下限値Ｖｍｉｎを超えたか否かを判断し、その判断結果に基づいて、出力バッファを指定してもよい。要するに、下限値Ｖｍｉｎと基準値Ｖｒｅｆ２とは、第１及び第２バッファ３３、３４のデータ量が、再生曲の再生途中で音切れが発生しない程度のデータ量となるような基準であればよい。
【０１０７】
なお、基準値Ｖｒｅｆ２が下限値Ｖｍｉｎに近づくほど、バッファの切り替え回数（指定変更回数）が増加する。そのため、曲の再生が完了するごとに、曲間に調整時間が挿入される。基準値Ｖｒｅｆ２と下限値Ｖｍｉｎとの差が大きいほど、バッファの切り替え回数は低減される。つまり、曲が連続再生される機会が増加し、曲が再生されるごとに曲間に調整時間が挿入されるのを抑制できる。
【０１０８】
また、第３の実施の形態では、受信データ過少状態のとき、バッファからフレームを出力しない間（すなわち、調整時間中）、デコーダ３７はデコード処理を行わないとしたが、調整時間中に、無音データがデコーダ３７に挿入されてもよい。
【０１０９】
［第４の実施の形態］
第３の実施の形態では、第１バッファ３３及び第２バッファ３４を用いて曲間に調整時間を挿入して、曲の途中で音切れするのを抑制した。第４の実施の形態によるストリーム再生装置ではさらに、第１及び第２バッファ３３，３４がバッファリングするデータ量に基づいて、再生クロックを調整する。
【０１１０】
図２１を参照して、第４の実施の形態によるストリーム再生装置４０は、ストリーム再生装置３０と比較して、再生部３８に代えて、再生部３９とクロック生成部３９３とを備える。他の構成はストリーム再生装置３０と同じである。
【０１１１】
再生部３９は、デコーダ３７と、デジタルオーディオインタフェース部（Digital Audio Interface：以下、ＤＡＩという）３９１と、デジタルアナログ変換部（Digital Analog Converter：以下ＤＡＣという）３９２とを備える。なお、ＤＡＩ３９１、ＤＡＣ３９２及びクロック生成部３９３はいずれもハードウェアである。
【０１１２】
再生部３９は、再生クロックに応答して、第１及び第２バッファ３３、３４から送信されたフレームに基づくコンテンツを再生する。
【０１１３】
より具体的には、デコーダ３７は、第１及び第２バッファ３３、３４からフレームを受け、デコードする。ＤＡＩ３９１は、デコードされたデジタル信号をデコーダ３７から受け取る。そして、再生クロックに応じた出力速度で、受け取ったデータを出力する。ＤＡＣ３９２は、ＤＡＩ３９１から送信されたデジタル信号をアナログ信号に変換して、外部に出力する。
【０１１４】
クロック生成部３９３は、ＤＡＩ３９１に出力される再生クロック（信号）を生成する。具体的には、クロック生成部３９３は、制御部３６１からの指令に応答して、生成される再生クロックの周波数を調整する。
【０１１５】
制御部３６１は、出力バッファが受取バッファと同じバッファであるとき、出力バッファに指定されたバッファのデータ量を監視する。そして、データ量に基づいて、クロック生成部３９３に対して再生クロックの周波数を調整するよう指示する。
【０１１６】
具体的には、出力バッファのデータ量が少な過ぎるとき、つまり、受信データ過少状態のとき、再生クロックの周波数を下げるようクロック生成部３９３に指示する。クロック生成部３９３は、指示に応じて再生クロックの周波数を下げる。ＤＡＩ３９１は、再生クロックに応答して、データの出力速度を下げる。以上の結果、曲の再生途中で音切れが発生するのを抑制できる。
【０１１７】
一方、出力バッファのデータ量が多すぎるとき、つまり、受信データ過多状態のとき、制御部３６１は、再生クロックの周波数を上げるようクロック生成部３９３に指示する。クロック生成部３９３は、指示に応じて再生クロックの周波数を上げるため、ＤＡＩ３９１は、データの出力速度を上げる。その結果、出力バッファがオーバーフローするのを抑制できる。
【０１１８】
このような再生クロックの調整処理は、受信バッファと出力バッファとが同じバッファを指定している時間が長い場合に有効である。このような場合として、たとえば、ライブ音声の再生や、再生時間の長い曲ファイルの再生等が考えられる。
【０１１９】
ストリーム再生装置４０の動作の詳細を説明する。ストリーム再生装置４０は、第３の実施の形態と同じ動作（区分動作及び調整動作）を実行し、かつ、以下に説明するクロック調整動作も実行する。
【０１２０】
［クロック調整動作］
制御部３６１は、所定時間ごとにクロック調整動作を実行する。図２２を参照して、制御部３６１はまず、出力バッファ及び受取バッファを特定する（Ｓ１０１）。具体的には、制御部３６１は、メモリ１０２内に格納されたバッファ特定情報を読み出す。図２３にメモリ１０２に格納されたバッファ特定情報テーブルの一例を示す。バッファ特定情報テーブルには、上述の受取指定動作で決定された受取バッファ特定情報と出力指定動作により決定された出力バッファ特定情報とを含む。制御部３６１は、出力バッファ特定情報に基づいて出力バッファを特定し、受取バッファ特定情報に基づいて受取バッファを特定する。
【０１２１】
続いて、制御部３６１は、受取バッファと出力バッファとが同じバッファであるか否かを判断する（Ｓ１０２）。受取バッファと出力バッファとが同じバッファである場合（Ｓ１０２でＹＥＳ）、図１４や図１７に示すように、一方のバッファ（ここでは第２バッファ３４）が区分部３２からデータを受け取り、かつ、デコーダ３７にデータを出力しており、他方のバッファ（ここでは第１バッファ）のデータ量は０となっている。このとき、制御部３６１は再生クロックの調整を行う（Ｓ１０３〜Ｓ１１３）。以下、出力バッファ及び受取バッファが第２バッファ３４であると仮定して説明を続ける。
【０１２２】
制御部３６１はまず、出力バッファである第２バッファ３４が蓄積するデータ量Ｖｄｅｔをメモリ１０２から読み出す（Ｓ１０３）。検知部３５は所定期間ごと第１バッファ３３及び第２バッファ３４が蓄積するデータ量を検知し、メモリ１０２に保存する。制御部３６１は、第２バッファ３４のデータ量Ｖｄｅｔをメモリ１０２から読み出す。
【０１２３】
続いて、制御部３６１は、クロック調整レベルＣＬをメモリ１０２から読み出す（Ｓ１０４）。クロック調整レベルＣＬは、基準レベルであるＤｅｆａｕｌｔレベル、再生クロックの周波数がＤｅｆａｕｌｔレベルよりも低い状態であるＬｏｗレベル、再生クロックの周波数がＤｅｆａｕｌｔレベルよりも高い状態であるＨｉｇｈレベル、の３種類が存在し、現在設定されているクロック調整レベルＣＬがメモリ１０２に格納されている。制御部３６１は、メモリ１０２に格納されているクロック調整レベルＣＬを読み出す。
【０１２４】
続いて、制御部３６１は、ステップＳ１０３で読み出されたデータ量Ｖｄｅｔに応じて、クロック調整レベルＣＬを再設定する（Ｓ１０５〜Ｓ１１３）。
【０１２５】
［Ｖｄｅｔ＜Ｖｍｉｎである場合］
初めに、制御部３６１は、データ量Ｖｄｅｔが下限値Ｖｍｉｎ未満か否かを判断する（Ｓ１０５）。データ量Ｖｄｅｔが下限値Ｖｍｉｎ未満であるとき（Ｓ１０５でＹＥＳ）、第２バッファ３４は、受信データ過少状態である。そのため、このまま再生を継続すれば、第２バッファ３４で蓄積されるデータ量が曲の再生途中で枯渇し、音切れが発生する。そのため、制御部３６１は、クロック調整レベルＣＬをＬｏｗレベルに設定するようクロック生成部３９３に指令する（Ｓ１０９）。
【０１２６】
制御部３６１から指令を受けたクロック生成部３９３は、クロック調整レベルＣＬ＝Ｌｏｗレベルに対応した周波数の再生クロックを生成し、ＤＡＩ３９１に出力する。Ｌｏｗレベルに対応した再生クロックの周波数は、Ｄｅｆａｕｌｔレベルよりも低い。そのため、ＤＡＩ３９１からのデータの出力速度はＤｅｆａｕｌｔレベルと比較して遅くなる。要するに、曲の再生速度が若干遅くなる。その結果、第２バッファ３４内のデータの枯渇を抑制でき、音切れの発生を防止する。なお、制御部３６１は、クロック生成部３９３への指示の後、現在のクロック調整レベルＣＬを「Ｌｏｗレベル」としてメモリ１０２に保存する。
【０１２７】
［Ｖｍｉｎ＜Ｖｄｅｔ＜Ｖｒｅｆ２である場合］
データ量Ｖｄｅｔが下限値Ｖｍｉｎよりも大きく、かつ、基準値Ｖｒｅｆ２未満である場合（Ｓ１０５でＮＯ、Ｓ１０６でＹＥＳ）、制御部３６１は、ステップＳ１０４で読み出されたクロック調整レベルＣＬがＨｉｇｈレベルであるか否かを判断する（Ｓ１１０）。そして、Ｈｉｇｈレベルである場合（Ｓ１１０でＹＥＳ）、クロック調整レベルＣＬをＤｅｆａｕｌｔレベルとするようクロック生成部３９１に指令する（Ｓ１１１）。クロック調整レベルＣＬがＨｉｇｈレベルであれば、データ量Ｖｄｅｔが下限値Ｖｍｉｎ以上であるものの、第２バッファ３４のデータ量が減少する可能性が高い。そのため、クロック調整レベルＣＬをＨｉｇｈレベルからＤｅｆａｕｌｔレベルに戻す。制御部３６１から指令を受けたクロック生成部３９３は、再生クロックの周波数を低下し、Ｄｅｆａｕｌｔレベルに戻す。その結果、ＤＡＩ３９１から出力されるデータの出力速度は低下する。
【０１２８】
なお、ステップＳ１０５で読み出されたクロック調整レベルＣＬがＬｏｗレベル、又はＤｅｆａｕｌｔレベルである場合（Ｓ１１０でＮＯ）、制御部３６１はクロック調整レベルＣＬを変更せずに維持する。第２バッファ３４のデータ量が枯渇するおそれがないからである。
【０１２９】
［Ｖｒｅｆ２＜Ｖｄｅｔ＜Ｖｍａｘである場合］
データ量Ｖｄｅｔが基準値Ｖｒｅｆ２よりも大きく、かつ、上限値Ｖｍａｘ未満である場合（Ｓ１０５でＮＯ、Ｓ１０６でＮＯ、ステップＳ１０７でＹＥＳ）、制御部３６１は、ステップＳ１０４で読み出されたクロック調整レベルＣＬがＬｏｗレベルであるか否かを判断する（Ｓ１１２）。
【０１３０】
Ｌｏｗレベルである場合（Ｓ１１２でＹＥＳ）、制御部３６１は、クロック調整レベルＣＬをＤｅｆａｕｌｔレベルとするようクロック生成部３９１に指令し、指令したクロック調整レベルＣＬ（Ｄｅｆａｕｌｔレベル）をメモリ１０２に格納する（Ｓ１１４）。
【０１３１】
データ量Ｖｄｅｔが基準値Ｖｒｅｆ２よりも大きい場合、クロック生成部３９３がＬｏｗレベルの再生クロックを生成し続ければ、第２バッファ３４のデータ量がオーバーフローする可能性がある。そこで、制御部３６１は、クロック調整レベルＣＬをＤｅｆａｕｌｔレベルに戻す。これにより、再生クロックの周波数が高くなり、ＤＡＩ３９１のデータ出力速度が上がる。その結果、第２バッファ３４がオーバーフローするのを防止できる。
【０１３２】
なお、ステップＳ１０４で読み出されたクロック調整レベルＣＬがＨｉｇｈレベル、又はＤｅｆａｕｌｔレベルである場合（Ｓ１１２でＮＯ）、制御部３６１はクロック調整レベルＣＬを変更せずに維持する。
【０１３３】
［Ｖｄｅｔ＞Ｖｍａｘである場合］
データ量Ｖｄｅｔが上限値Ｖｍａｘよりも大きい場合（Ｓ１０５〜Ｓ１０７でＮＯ）、第２バッファ３４は受信データ過多状態であり、このまま再生を継続すれば、第２バッファ３４がオーバーフローする。そのため、制御部３６１は、クロック調整レベルＣＬをＨｉｇｈレベルに設定するようクロック生成部３９３に指令し、指令したクロック調整レベルＣＬ（Ｈｉｇｈレベル）をメモリ１０２に格納する（Ｓ１０８）。
【０１３４】
制御部３６１から指示を受けたクロック生成部３９３は、再生クロックの周波数をＨｉｇｈレベルに調整する。その結果、ＤＡＩ３９１からのデータ出力速度が上がり、第２バッファ３４のオーバーフローが抑制される。
【０１３５】
以上のとおり、本実施の形態では、第３の実施の形態の動作に加え、受信バッファと出力バッファとが同じバッファである場合に、出力バッファのデータ量Ｖｄｅｔに応じて再生クロックの周波数を調整する。そのため、ライブ音声データや再生時間が長い曲のように、所定の間隔で曲間を設けることが出来ないデータの再生時であっても、データの出力速度を調整することで、音切れの発生を抑制できる。
【０１３６】
なお、ステップＳ１０２で判断の結果、出力バッファが受取バッファと異なる場合（ｓ１０２でＮＯ）、図１２で示されるように、曲間を設けるために、新たな曲の先頭フレームから出力バッファと別個のバッファにデータがバッファリングされている。この場合、曲間に無音の調整時間を設けることができるため、再生クロックを調整しなくてよい。そのため、クロック調整レベルＣＬをＤｅｆａｕｌｔレベルにするようクロック生成部３９３に指令し、Ｄｅｆａｕｌｔレベルをメモリ１０２に格納する（Ｓ１１４）。
【０１３７】
以上の実施の形態では、クロック調整レベルを３段階（Ｈｉｇｈ、Ｄｅｆａｕｌｔ、Ｌｏｗ）としたが、クロック調整レベルの段階は３段階以上であってもよい。
【０１３８】
また、本実施の形態では、再生クロックによりＤＡＩ３９１のデータ出力速度を調整したが、再生クロックによりデコーダ３７から出力されるデータの出力速度を調整してもよいし、ＤＡＣ３９２から出力される信号の出力速度を調整してもよい。要するに、再生クロックは、再生部３９から出力されるコンテンツの再生速度を調整する。
【０１３９】
上述の実施の形態では、区分部は、タイムスタンプを用いて、曲ファイルの先頭フレームを判別したが、区分部は、他の方法により、曲ファイルを区分してもよい。たとえば、各フレームが曲ファイル固有の識別情報（ファイルＩＤ）を含むメタデータを有する場合、ファイルＩＤを用いて曲ファイルを区分してもよい。
【０１４０】
以上、本発明の実施の形態を説明したが、上述した実施の形態は本発明を実施するための例示に過ぎない。よって、本発明は上述した実施の形態に限定されることなく、その趣旨を逸脱しない範囲内で上述した実施の形態を適宜変形して実施することが可能である。
【産業上の利用可能性】
【０１４１】
本発明は例えばストリーム再生装置に好適に適用され得る。
【符号の説明】
【０１４２】
１，２０，３０，４０  ストリーム再生装置
２  ストリーミングサーバ
１０，３１  受信部
１１  受信バッファ
１２，３２  区分部
１３，３５  検出部
１４，３７  デコーダ
１５  デコードバッファ
１６  データ編集部
１７，３６  調整部
１８，３８，３９  再生部
２２  データストリーム生成部
２３  配信部
３３  第１バッファ
３４  第２バッファ
１０２  メモリ
３６１  制御部
３６２  受取指定部
３６３  出力指定部
３９１  、デジタルオーディオインタフェース部
３９２  デジタルアナログ変換部
３９３  クロック生成部
【図１】
0005229516.tif 000002
【図２】
0005229516.tif 000003
【図３】
0005229516.tif 000004
【図４】
0005229516.tif 000005
【図５】
0005229516.tif 000006
【図６】
0005229516.tif 000007
【図７】
0005229516.tif 000008
【図８】
0005229516.tif 000009
【図９】
0005229516.tif 000010
【図１０】
0005229516.tif 000011
【図１１】
0005229516.tif 000012
【図１２】
0005229516.tif 000013
【図１３】
0005229516.tif 000014
【図１４】
0005229516.tif 000015
【図１５】
0005229516.tif 000016
【図１６】
0005229516.tif 000017
【図１７】
0005229516.tif 000018
【図１８】
0005229516.tif 000019
【図１９】
0005229516.tif 000020
【図２０】
0005229516.tif 000021
【図２１】
0005229516.tif 000022
【図２２】
0005229516.tif 000023
【図２３】
0005229516.tif 000024