(57)【要約】  【課題】  複数地点の送信装置から送信されたパケットの遅延揺らぎ吸収を各送信装置ごとに独立して行い、サンプリング時間単位で最適な遅延に制御し、サンプリング時間単位の精度でミキシングを行うことが可能なリアルタイムミキシング処理装置及びその方法並びにそのプログラム及び情報記憶媒体を提供する。  【解決手段】  受信パケットから抽出したフレームに含まれる複数のサンプリングデータをサンプリング時間単位で音声データバッファ114に格納するときに、ミキシング処理対象となるサンプリングデータが格納されている読み出しアドレス領域の最終アドレスよりもサンプリング時間の倍数となる所定の余裕時間経過後に読み出される書き込み開始アドレスを先頭とする所定の書き込み可能アドレス領域に、受信パケットから抽出したフレームに含まれる複数のサンプリングデータをサンプリング時間単位で格納する。【選択図】  図１
2004343738.tif 000002
【特許請求の範囲】
【請求項１】
連続した信号を所定の第１周期毎に切り取り、該切り取った信号を前記第１周期よりも短いサンプリング時間毎にサンプリングして得られた複数のサンプリングデータを含むフレームを生成すると共に該フレーム毎に、該フレームを含むパケットを生成して順次送信する送信装置から通信網を介して前記パケットを受信し、前記受信したパケットに含まれる前記フレームを抽出して該フレームに含まれるサンプリングデータに対して時間経過に伴って所定の第２周期分ずつ読み出し処理を行うリアルタイム処理装置において、
受信したパケットを処理するパケット処理手段とデータ読み出し処理手段とを備え、
前記パケット処理手段は、
パケットを受信するパケット受信処理手段と、
パケットを受信した時刻を取得して保持する手段と、
前記受信したパケットから前記フレームを抽出して前記サンプリングデータを取得するデータ取得手段と、
サンプリング単位でアドレスを割り当てて前記サンプリングデータを記憶すると共に時間の経過に伴ってデータの読み出しアドレスがサンプリング単位で連続して変化するバッファと、
読み出し処理対象となる読み出しアドレスに対応した時刻を保持する手段と、
読み出し処理対象となる読み出しアドレスに対応した時刻と前記パケットを受信した時刻との差の時間をサンプリング数に換算して前記読み出し処理対象となる読み出しアドレスに加算し、さらに該加算結果に所定の余裕時間をサンプリング数に変換した値を加算して前記バッファにおける書き込みアドレスを決定し、該アドレスに前記受信パケットに含まれていたサンプリングデータを書き込むデータ書込処理手段とを有し、
前記データ読み出し処理手段は、
前記バッファの前記読み出しアドレス領域に書き込まれているサンプリングデータを読み出すデータ読み出し手段を有する
ことを特徴とするリアルタイム処理装置。
【請求項２】
前記読み出し処理対象となる読み出しアドレスに対応した時刻は、読み出し処理が現在の読み出しアドレスに移動した時刻である
ことを特徴とする請求項１に記載のリアルタイム処理装置。
【請求項３】
前記読み出し処理対象となる読み出しアドレスに対応した時刻は、読み出し処理が現在の読み出しアドレスに移動する予定だった理想的な処理時刻である
ことを特徴とする請求項１に記載のリアルタイム処理装置。
【請求項４】
前記データ読み出し手段が前記バッファの読み出しアドレス領域からサンプリングデータを読み出した後に該読み出しアドレス領域に書き込まれているサンプリングデータを消去する手段を備え、
前記データ書き込み手段は、前記バッファに書き込まれているサンプリングデータが存在しないときに、前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定する手段を有する
ことを特徴とする請求項１乃至請求項３の何れかに記載のリアルタイム処理装置。
【請求項５】
前記パケットは前記フレームに含まれる先頭のサンプリングデータが生成された時刻に対応した値を有するタイムスタンプを含み、
前記データ書込処理手段は、前記タイムスタンプと前記パケットの受信時刻とに基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定する手段を有する
ことを特徴とする請求項１乃至請求項４の何れかに記載のリアルタイム処理装置。
【請求項６】
前記データ読み出し手段が前記バッファからの読み出しアドレス領域からサンプリングデータを読み出した後に該読み出しアドレス領域に書き込まれているサンプリングデータを消去する手段を備え、
前記データ書込処理手段は、前記バッファに書き込まれているサンプリングデータが存在するときに、該バッファに書き込まれているサンプリングデータに対応するタイムスタンプと受信パケットのタイムスタンプと前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータ毎にデータの書き込みアドレスを決定する手段を有する
ことを特徴とする請求項１乃至請求項４の何れかに記載のリアルタイム処理装置。
【請求項７】
前記データ書き込み処理手段は、
相対的なデータ書き込みアドレス位置の計算の基準となる基準アドレス値と、該基準アドレス値に対応した基準タイムスタンプ値とを保持する手段と、
前記基準アドレス値と、前記決定したバッファにおける書き込みアドレスとの距離サンプルをサンプル数で表した値を、受信パケットのタイムスタンプから差し引いて基準タイムスタンプ値を求める手段と、
受信パケットのフレームをバッファに書き込む毎に次のパケットのフレーム書き込みに使用するために基準タイムスタンプを計算しておき、データがバッファ上に存在するときは、受信したパケットに含まれるタイムスタンプを基準タイムスタンプに加えることで当該受信パケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定する手段とを有する
ことを特徴とする請求項１乃至請求項６の何れかに記載のリアルタイム処理装置。
【請求項８】
前記バッファは、リングバッファで構成され、
前記データ書き込み処理手段は、
アドレス計算の基準となる基準アドレス値と、基準アドレス値に対応するリングバッファ上のアドレスを保持する手段と、
基準アドレス値との相対値により実際のリングバッファ上のアドレスを決定してサンプリングデータを書き込む手段とを有する
ことを特徴とする請求項１乃至請求項７の何れかに記載のリアルタイム処理装置。
【請求項９】
前記データ書込処理手段は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段を有する
ことを特徴とする請求項１乃至請求項８の何れかに記載のリアルタイム処理装置。
【請求項１０】
前記データ書込処理手段は、
読み出し処理対象となる読み出しアドレス領域に対して書き込みが重ならないアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段を有する
ことを特徴とする請求項９に記載のリアルタイム処理装置。
【請求項１１】
前記書き込み可能アドレス領域の先頭アドレスを求める手段は、
読み出し処理対象となる読み出しアドレス領域が現在位置に移動した時刻と、現在時刻との差を、前記第２周期に相当する読み出し処理対象処理時間間隔から差し引いた処理待ち時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも多い場合には、読み出し処理対象となる現在の読み出しアドレス領域の最終アドレスよりも１サンプル後のアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、
前記処理待ち時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも少ない場合には、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも前記第２周期＋１サンプルだけ後のアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段を有する
ことを特徴とする請求項１０に記載のリアルタイム処理装置。
【請求項１２】
前記書き込み可能アドレス領域の先頭アドレスを求める手段は、
読み出し処理対象となる読み出しアドレス領域が現在位置に移動する予定だった理想的な処理時刻と、現在時刻との差の時間を第２周期に相当する時間で割った商と余りを求め、余りに相当する時間を前記第２周期に相当する時間から引いた時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも多い場合には、前記読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも１サンプル分後のアドレスに対して、前記第２周期の時間と前記求めた商を掛け合わせた時間をサンプルに変換したサンプル数分のアドレスを加えて得られたアドレスを前記書き込み可能アドレスの先頭アドレスとして求め、
前記余りに相当する時間を前記第２周期に相当する時間から引いた時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも少ない場合には、前記読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも１サンプル分後のアドレスに対して、前記第２周期の時間と前記求めた商＋１を掛け合わせた時間をサンプルに変換したサンプル数分のアドレスを加えて得られたアドレスを前記書き込み可能アドレスの先頭アドレスとして求める手段を有する
ことを特徴とする請求項１０に記載のリアルタイム処理装置。
【請求項１３】
前記データ書き込み手段は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段と、
前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、前記書き込み対象となるサンプリングデータの書き込みアドレスを前記書き込み可能アドレス領域内のアドレスに変換して前記書き込み対象のサンプリングデータを前記バッファに書き込む手段を備えている
ことを特徴とする請求項１乃至請求項１２の何れかに記載のリアルタイム処理装置。
【請求項１４】
前記データ書込処理手段は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段と、
前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、
読み出し処理対象となる読み出しアドレスに対応した時刻と前記パケットを受信した時刻との差の時間をサンプリング数に換算して前記読み出し処理対象となる読み出しアドレスに加算し、さらに該加算結果に所定の余裕時間をサンプリング数に変換した値を加算して前記バッファにおける書き込みアドレスを前記書き込み対象となるサンプリングデータの前記書き込み可能アドレス領域内のアドレスに決定し、該アドレスに前記受信パケットに含まれていたサンプリングデータを書き込む手段を備えている
ことを特徴とする請求項１３に記載のリアルタイム処理装置。
【請求項１５】
前記データ書込処理手段は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段と、
前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、前記所定の余裕時間を増加させる余裕時間増加手段とを備えている
ことを特徴とする請求項１４に記載のリアルタイム処理装置。
【請求項１６】
前記余裕時間増加手段は、前記所定の余裕時間を、所定の最大余裕時間を超えては増加させない
ことを特徴とする請求項１５に記載のリアルタイム処理装置。
【請求項１７】
前記データ書込処理手段は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段と、
前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以前に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、前記書き込み対象となるサンプリングデータのうち、前記書き込み可能アドレス領域内のアドレスに書き込むべきサンプリングデータのみを前記バッファに書き込む手段とを備えている
ことを特徴とする請求項１乃至請求項１６の何れかに記載のリアルタイム処理装置。
【請求項１８】
前記データ書込処理手段は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の最終アドレスとして求める手段を有する
ことを特徴とする請求項１乃至請求項１７の何れかに記載のリアルタイム処理装置。
【請求項１９】
前記データ書込処理手段は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の最終アドレスとして求める手段と、
前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータの少なくとも一部が、前記書き込み可能アドレス領域の最終アドレス以降に書き込まれるべきデータであるとき、前記書き込み対象となるサンプリングデータの書き込みアドレスを前記書き込み可能アドレス領域内のアドレスに変換して前記書き込み対象のサンプリングデータを前記バッファに書き込む手段とを備えている
ことを特徴とする請求項１８に記載のリアルタイム処理装置。
【請求項２０】
前記データ書込処理手段は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の最終アドレスとして求める手段と、
前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記書き込み可能アドレス領域の最終アドレス以降に書き込まれるべきデータであるとき、
前記バッファの書き込み可能アドレス領域の先頭アドレスから書き込み可能アドレス領域の最終アドレスまでのサンプリングデータを全て消去し、
前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定する手段とを有する
ことを特徴とする請求項１９に記載のリアルタイム処理装置。
【請求項２１】
前記データ書込処理手段は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段と、
前記書き込み可能アドレス領域の先頭アドレス以前に読み出されるアドレスにデータが書き込まれておらず、且つ、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスが、前記バッファに書き込まれている最初のサンプリングデータ以前に書き込まれるべきアドレスであるとき、
前記バッファに書き込まれている最初のサンプリングデータの先頭アドレスから前記受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスを差し引いて得られたサンプル数を、シフト量として算出し、
前記バッファに既に書き込まれているサンプリングデータの最終アドレスに対して前記シフト量を加えたアドレスが、前記書き込み可能領域の最終アドレスを超えないアドレスであるとき、
前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定し、且つ、前記バッファに既に書き込まれているサンプリングデータを、前記受信したパケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスに対して前記シフト量を加えたアドレス位置に移動する手段とを有する
ことを特徴とする請求項１乃至請求項２０の何れかに記載のリアルタイム処理装置。
【請求項２２】
前記データ書込処理手段は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段と、
前記書き込み可能アドレス領域の先頭アドレス以前に読み出されるアドレスにデータが書き込まれておらず、且つ、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスが、前記バッファに書き込まれている最初のサンプリングデータ以前に書き込まれるべきアドレスであるとき、
前記バッファに書き込まれている最初のサンプリングデータの先頭アドレスから前記受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスを差し引いて得られたサンプル数を、シフト量として算出し、
前記バッファに既に書き込まれているサンプリングデータの最終アドレスに対して前記シフト量を加えたアドレスが、前記書き込み可能領域の最終アドレスを超えるアドレスであるとき、
前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームのサンプリングデータのうち、前記書き込み可能アドレス領域の先頭アドレス以降に書き込まれるべきサンプリングデータのみを前記バッファに書き込む手段を有する
ことを特徴とする請求項１乃至請求項２０の何れかに記載のリアルタイム処理装置。
【請求項２３】
前記第２周期に相当する時間が経過する毎に読み出し処理対象となる読み出しアドレスを前記第２周期サンプルだけ移動する手段は、
前記第２周期に相当する時間の経過を待つ処理を精度の補償されない休止命令を用いて実現する場合に、
前記読み出し処理を次に開始すべき時刻を読み出し処理開始目標時刻となして、装置起動直後に前記読み出し処理開始目標時刻を現在時刻に設定して保持する手段と、
前記読み出し処理の実行を開始した時刻を読み出し処理開始時刻として、該読み出し処理開始時刻から前記保持されている読み出し処理開始目標時刻を差し引いた時間を誤差時間として算出する手段と、
前記読み出し処理開始時刻に前記第２周期に相当する時間を加算すると共に該加算結果の時刻から前記誤差時間を差し引いた時刻を新たな読み出し処理開始目標時刻として設定して保持する手段と、
前記読み出し処理を終了した時刻を読み出し処理終了時刻とし、前記保持している読み出し処理開始目標時刻から前記読み出し処理終了時刻を差し引いた時間を前記休止時間となして前記処理休止命令を実行する手段とを備えている
ことを特徴とする請求項１乃至請求項２２の何れかに記載のリアルタイム処理装置。
【請求項２４】
前記算出した休止時間が負の値のときは、前記休止命令の実行を中止する手段を備えた
ことを特徴とする請求項２３に記載のリアルタイム処理装置。
【請求項２５】
前記算出した休止時間が負の値であり、前記休止時間の絶対値が所定の許容最大値以上になったときに、前記休止命令の実行を中止し、読み出し処理対象となる読み出しアドレスを前記休止時間の絶対値に相当するサンプル数だけ移動させる手段と、
前記読み出し処理対象となる読み出しアドレスを移動した後に読み出し処理対象となる読み出しアドレス以前に存在していたサンプリングデータを消去する手段と、
前記読み出し処理開始目標時刻を現在時刻に設定して、前記誤差時間をクリアする手段とを備えた
ことを特徴とする請求項２４に記載のリアルタイム処理装置。
【請求項２６】
前記読み出し処理対象となるバッファ上のデータを全て読み出し処理し、全てのバッファ上に処理待ちのデータが無い状態となった場合に、前記読み出し処理開始目標時刻を現在時刻に設定して、前記誤差時間をクリアする手段を備えた
ことを特徴とする請求項２３乃至請求項２５の何れかに記載のリアルタイム処理装置。
【請求項２７】
前記パケットはリアルタイム転送プロトコル（ＲＴＰ）パケットである
ことを特徴とする請求項１乃至請求項２６の何れかに記載のリアルタイム処理装置。
【請求項２８】
前記信号が音声信号である
ことを特徴とする請求項１乃至請求項２７の何れかに記載のリアルタイム処理装置。
【請求項２９】
２つ以上の送信装置のそれぞれに対応して前記パケット処理手段と前記データ読み出し処理手段を２組以上備え、
各データ読み出し処理手段から読み出されたデータをミキシングし、該ミキシングによって得られたデータを出力するミキシング手段を有している
ことを特徴とする請求項１乃至請求項２８の何れかに記載のリアルタイム処理装置。
【請求項３０】
各送信装置毎に存在する前記バッファは、
サンプリングデータがバッファ上に格納されているアドレスの先頭と末尾を記憶する手段を有し、
前記パケット処理手段は、
各送信装置に対応する前記バッファの、読み出し処理対象となる読み出しアドレスと、格納されているサンプリングデータの先頭アドレス及び末尾アドレスを比較することで、当該バッファのデータの読み出し処理を開始するべきか否かを判定する手段を有する
ことを特徴とする請求項２９に記載のリアルタイム処理装置。
【請求項３１】
各送信装置毎に存在する前記バッファは、
サンプリングデータがバッファ上に格納されているアドレスの先頭と末尾を記憶する手段を有し、
前記パケット処理手段は、
各送信装置に対応する前記バッファの、読み出し処理対象となる読み出しアドレスと、格納されているサンプリングデータの先頭アドレス及び末尾アドレスを比較することで、当該バッファのデータの読み出し処理を開始するべきか否かを判定する手段と、
各送信装置に対応する前記各バッファに格納されているサンプリングデータのうち、少なくとも１つが読み出し処理対象領域に至ったときに、読み出し処理を開始する手段とを有する
ことを特徴とする請求項２９に記載のリアルタイム処理装置。
【請求項３２】
各送信装置毎に存在する前記バッファは、サンプリングデータがバッファ上に格納されているアドレスの先頭と末尾を記憶する手段を有し、
前記パケット処理手段は、
各送信装置に対応する前記バッファの、読み出し処理対象となる読み出しアドレスと、格納されているサンプリングデータの先頭アドレス及び末尾アドレスを比較することで、当該バッファのデータの読み出し処理を開始するべきか否かを判定する手段と、
各送信装置に対応する前記各バッファに格納されているサンプリングデータの全てが読み出し処理を終え、読み出し処理待ちのデータがバッファ上に存在しなくなったとき、読み出し処理を行わず、読み出し処理対象領域の移動のみを行う手段とを有する
ことを特徴とする請求項２９に記載のリアルタイム処理装置。
【請求項３３】
各送信装置毎に存在する前記バッファは、サンプリングデータがバッファ上に格納されているアドレスの先頭と末尾を記憶する手段を有し、
前記パケット処理手段は、
各送信装置に対応する前記バッファの、読み出し処理対象となる読み出しアドレスと、格納されているサンプリングデータの先頭アドレス及び末尾アドレスを比較することで、当該バッファのデータの読み出し処理を開始するべきか否かを判定する手段と、
各送信装置に対応する前記各バッファに格納されているサンプリングデータのうち、読み出し処理対象領域に至らないデータについては、読み出し処理を行わずに、読み出し処理対象領域の移動のみを行う手段とを有する
ことを特徴とする請求項２９に記載のリアルタイム処理装置。
【請求項３４】
各送信装置毎に存在する前記バッファは、サンプリングデータがバッファ上に格納されているアドレスの先頭と末尾を記憶する手段を有し、
前記パケット処理手段は、
各送信装置に対応する前記バッファの、読み出し処理対象となる読み出しアドレスと、格納されているサンプリングデータの先頭アドレス及び末尾アドレスを比較することで、当該バッファのデータの読み出し処理を開始するべきか否かを判定する手段と、
前記第２周期時間毎に前記各バッファ上の読み出し処理対象領域を第２周期分ずつ移動する手段とを備え、
読み出し処理が開始されていない場合に、
前記読み出し処理対象領域の移動によって、前記各バッファ上のサンプリングデータのうち、最も読み出し処理対象領域に近いデータが、前記読み出し処理対象領域の最後尾から前記第２周期以内の領域に入ったとき、
前記読み出し処理対象領域と前記サンプリングデータの先頭のサンプルを時間に変換した時間が経過した後に、読み出し処理対象領域を前記サンプリングデータの先頭サンプルが格納されているアドレスに移動する手段を有する
ことを特徴とする請求項２９に記載のリアルタイム処理装置。
【請求項３５】
連続した信号を所定の第１周期毎に切り取り、該切り取った信号を前記第１周期よりも短いサンプリング時間毎にサンプリングして得られた複数のサンプリングデータを含むフレームを生成すると共に該フレーム毎に、該フレームを含むパケットを生成して順次送信する送信装置から通信網を介して前記パケットを受信し、前記受信したパケットに含まれる前記フレームを抽出して該フレームに含まれるサンプリングデータをバッファに格納し、バッファに格納されているサンプリングデータに対して時間経過に伴って所定の第２周期分ずつ読み出し処理を施すコンピュータ装置を用いたリアルタイム処理方法であって、
前記コンピュータ装置は、
パケットを受信した時刻を取得して保持すると共に、読み出し処理対象となる読み出しアドレスに対応した時刻を保持し、
サンプリング単位でアドレスを割り当てて前記受信したパケットに含まれるフレームのサンプリングデータをバッファに記憶するときに、
読み出し処理対象となる前記バッファの読み出しアドレスに対応した時刻と前記パケットを受信した時刻との差の時間をサンプリング数に換算して前記読み出し処理対象となる読み出しアドレスに加算し、さらに該加算結果に所定の余裕時間をサンプリング数に変換した値を加算して得られた前記バッファのアドレスに前記受信パケットのフレームに含まれているサンプリングデータを書き込み、
読み出しアドレス領域を前記第２周期毎に更新しながら、前記バッファの読み出しアドレス領域に書き込まれているサンプリングデータを読み出し処理し、
前記読み出し処理によって得られたデータを出力する
ことを特徴とするリアルタイム処理方法。
【請求項３６】
前記コンピュータ装置は、
前記読み出し処理対象となる読み出しアドレスに対応した時刻を、読み出し処理が現在の読み出しアドレスに移動した時刻となす
ことを特徴とする請求項３５に記載のリアルタイム処理方法。
【請求項３７】
前記コンピュータ装置は、
前記読み出し処理対象となる読み出しアドレスに対応した時刻を、読み出し処理が現在の読み出しアドレスに移動する予定だった理想的な処理時刻となす
ことを特徴とする請求項３５に記載のリアルタイム処理方法。
【請求項３８】
前記コンピュータ装置は、
前記バッファの読み出しアドレス領域からサンプリングデータを読み出した後に該読み出しアドレス領域に書き込まれているサンプリングデータを消去し、
前記バッファに書き込まれているサンプリングデータが存在しないときに、前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定する
ことを特徴とする請求項３５乃至請求項３７の何れかに記載のリアルタイム処理方法。
【請求項３９】
前記パケットは前記フレームに含まれる先頭のサンプリングデータが生成された時刻に対応した値を有するタイムスタンプを含み、
前記コンピュータ装置は、
前記タイムスタンプと前記パケットの受信時刻とに基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定する
ことを特徴とする請求項３５乃至請求項３８の何れかに記載のリアルタイム処理方法。
【請求項４０】
前記コンピュータ装置は、
前記バッファからの読み出しアドレス領域からサンプリングデータを読み出した後に該読み出しアドレス領域に書き込まれているサンプリングデータを消去し、
前記バッファに書き込まれているサンプリングデータが存在するときに、該バッファに書き込まれているサンプリングデータに対応するタイムスタンプと受信パケットのタイムスタンプと前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータ毎にデータの書き込みアドレスを決定する
ことを特徴とする請求項３５乃至請求項３８の何れかに記載のリアルタイム処理方法。
【請求項４１】
前記コンピュータ装置は、
相対的なデータ書き込みアドレス位置の計算の基準となる基準アドレス値と、該基準アドレス値に対応した基準タイムスタンプ値とを保持し、
前記基準アドレス値と、前記決定したバッファにおける書き込みアドレスとの距離サンプルをサンプル数で表した値を、受信パケットのタイムスタンプから差し引いて基準タイムスタンプ値を求め、
受信パケットのフレームをバッファに書き込む毎に次のパケットのフレーム書き込みに使用するために基準タイムスタンプを計算しておき、データがバッファ上に存在するときは、受信したパケットに含まれるタイムスタンプを基準タイムスタンプに加えることで当該受信パケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定する
ことを特徴とする請求項３５乃至請求項４０の何れかに記載のリアルタイム処理方法。
【請求項４２】
前記バッファは、リングバッファで構成され、
前記コンピュータ装置は、
アドレス計算の基準となる基準アドレス値と、基準アドレス値に対応するリングバッファ上のアドレスを保持し、
基準アドレス値との相対値により実際のリングバッファ上のアドレスを決定してサンプリングデータを書き込む
ことを特徴とする請求項３５乃至請求項４１の何れかに記載のリアルタイム処理方法。
【請求項４３】
前記コンピュータ装置は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める
ことを特徴とする請求項３５乃至請求項４２の何れかに記載のリアルタイム処理方法。
【請求項４４】
前記コンピュータ装置は、
読み出し処理対象となる読み出しアドレス領域に対して書き込みが重ならないアドレスを書き込み可能アドレス領域の先頭アドレスとして求める
ことを特徴とする請求項４３に記載のリアルタイム処理方法。
【請求項４５】
前記コンピュータ装置は、
読み出し処理対象となる読み出しアドレス領域が現在位置に移動した時刻と、現在時刻との差を、前記第２周期に相当する読み出し処理対象処理時間間隔から差し引いた処理待ち時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも多い場合には、読み出し処理対象となる現在の読み出しアドレス領域の最終アドレスよりも１サンプル後のアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、
前記処理待ち時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも少ない場合には、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも前記第２周期＋１サンプルだけ後のアドレスを書き込み可能アドレス領域の先頭アドレスとして求める
ことを特徴とする請求項４４に記載のリアルタイム処理方法。
【請求項４６】
前記コンピュータ装置は、
読み出し処理対象となる読み出しアドレス領域が現在位置に移動する予定だった理想的な処理時刻と、現在時刻との差の時間を第２周期に相当する時間で割った商と余りを求め、余りに相当する時間を前記第２周期に相当する時間から引いた時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも多い場合には、前記読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも１サンプル分後のアドレスに対して、前記第２周期の時間と前記求めた商を掛け合わせた時間をサンプルに変換したサンプル数分のアドレスを加えて得られたアドレスを前記書き込み可能アドレスの先頭アドレスとして求め、
前記余りに相当する時間を前記第２周期に相当する時間から引いた時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも少ない場合には、前記読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも１サンプル分後のアドレスに対して、前記第２周期の時間と前記求めた商＋１を掛け合わせた時間をサンプルに変換したサンプル数分のアドレスを加えて得られたアドレスを前記書き込み可能アドレスの先頭アドレスとして求める
ことを特徴とする請求項４４に記載のリアルタイム処理方法。
【請求項４７】
前記コンピュータ装置は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、
前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、前記書き込み対象となるサンプリングデータの書き込みアドレスを前記書き込み可能アドレス領域内のアドレスに変換して前記書き込み対象のサンプリングデータを前記バッファに書き込む
ことを特徴とする請求項３５乃至請求項４６の何れかに記載のリアルタイム処理方法。
【請求項４８】
前記コンピュータ装置は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、
前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、
読み出し処理対象となる読み出しアドレスに対応した時刻と前記パケットを受信した時刻との差の時間をサンプリング数に換算して前記読み出し処理対象となる読み出しアドレスに加算し、さらに該加算結果に所定の余裕時間をサンプリング数に変換した値を加算して前記バッファにおける書き込みアドレスを前記書き込み対象となるサンプリングデータの前記書き込み可能アドレス領域内のアドレスに決定し、該アドレスに前記受信パケットに含まれていたサンプリングデータを書き込む
ことを特徴とする請求項４７に記載のリアルタイム処理方法。
【請求項４９】
前記コンピュータ装置は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、
前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、前記所定の余裕時間を増加させる
ことを特徴とする請求項４８に記載のリアルタイム処理方法。
【請求項５０】
前記コンピュータ装置は、
前記所定の余裕時間を、所定の最大余裕時間を超えては増加させない
ことを特徴とする請求項４９に記載のリアルタイム処理方法。
【請求項５１】
前記コンピュータ装置は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、
前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以前に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、前記書き込み対象となるサンプリングデータのうち、前記書き込み可能アドレス領域内のアドレスに書き込むべきサンプリングデータのみを前記バッファに書き込む
ことを特徴とする請求項３５乃至請求項５０の何れかに記載のリアルタイム処理方法。
【請求項５２】
前記コンピュータ装置は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の最終アドレスとして求める
ことを特徴とする請求項３５乃至請求項５１の何れかに記載のリアルタイム処理方法。
【請求項５３】
前記コンピュータ装置は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の最終アドレスとして求め、
前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータの少なくとも一部が、前記書き込み可能アドレス領域の最終アドレス以降に書き込まれるべきデータであるとき、前記書き込み対象となるサンプリングデータの書き込みアドレスを前記書き込み可能アドレス領域内のアドレスに変換して前記書き込み対象のサンプリングデータを前記バッファに書き込む
ことを特徴とする請求項５２に記載のリアルタイム処理方法。
【請求項５４】
前記コンピュータ装置は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の最終アドレスとして求め、
前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記書き込み可能アドレス領域の最終アドレス以降に書き込まれるべきデータであるとき、
前記バッファの書き込み可能アドレス領域の先頭アドレスから書き込み可能アドレス領域の最終アドレスまでのサンプリングデータを全て消去し、
前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定する
ことを特徴とする請求項５３に記載のリアルタイム処理方法。
【請求項５５】
前記コンピュータ装置は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、
前記書き込み可能アドレス領域の先頭アドレス以前に読み出されるアドレスにデータが書き込まれておらず、且つ、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスが、前記バッファに書き込まれている最初のサンプリングデータ以前に書き込まれるべきアドレスであるとき、
前記バッファに書き込まれている最初のサンプリングデータの先頭アドレスから前記受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスを差し引いて得られたサンプル数を、シフト量として算出し、
前記バッファに既に書き込まれているサンプリングデータの最終アドレスに対して前記シフト量を加えたアドレスが、前記書き込み可能領域の最終アドレスを超えないアドレスであるとき、
前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定し、且つ、前記バッファに既に書き込まれているサンプリングデータを、前記受信したパケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスに対して前記シフト量を加えたアドレス位置に移動する
ことを特徴とする請求項３５乃至請求項５４の何れかに記載のリアルタイム処理方法。
【請求項５６】
前記コンピュータ装置は、
読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、
前記書き込み可能アドレス領域の先頭アドレス以前に読み出されるアドレスにデータが書き込まれておらず、且つ、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスが、前記バッファに書き込まれている最初のサンプリングデータ以前に書き込まれるべきアドレスであるとき、
前記バッファに書き込まれている最初のサンプリングデータの先頭アドレスから前記受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスを差し引いて得られたサンプル数をシフト量として算出し、
前記バッファに既に書き込まれているサンプリングデータの最終アドレスに対して前記シフト量を加えたアドレスが、前記書き込み可能領域の最終アドレスを超えるアドレスであるとき、
前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームのサンプリングデータのうち、前記書き込み可能アドレス領域の先頭アドレス以降に書き込まれるべきサンプリングデータのみを前記バッファに書き込む
ことを特徴とする請求項３５乃至請求項５５の何れかに記載のリアルタイム処理方法。
【請求項５７】
前記コンピュータ装置は、
前記第２周期に相当する時間の経過を待つ処理を精度の補償されない休止命令を用いて実現する場合に、
前記読み出し処理を次に開始すべき時刻を読み出し処理開始目標時刻となして、装置起動直後に前記読み出し処理開始目標時刻を現在時刻に設定して保持し、
前記読み出し処理の実行を開始した時刻を読み出し処理開始時刻として、該読み出し処理開始時刻から前記保持されている読み出し処理開始目標時刻を差し引いた時間を誤差時間として算出し、
前記読み出し処理開始時刻に前記第２周期に相当する時間を加算すると共に該加算結果の時刻から前記誤差時間を差し引いた時刻を新たな読み出し処理開始目標時刻として設定して保持し、
前記読み出し処理を終了した時刻を読み出し処理終了時刻として、前記保持している読み出し処理開始目標時刻から前記読み出し処理終了時刻を差し引いた時間を前記休止時間となして前記処理休止命令を実行する
ことを特徴とする請求項３５乃至請求項５６の何れかに記載のリアルタイム処理方法。
【請求項５８】
前記コンピュータ装置は、
前記算出した休止時間が負の値のときは、前記休止命令の実行を中止する
ことを特徴とする請求項５７に記載のリアルタイム処理方法。
【請求項５９】
前記コンピュータ装置は、
前記算出した休止時間が負の値であり、前記休止時間の絶対値が所定の許容最大値以上になったときに、前記休止命令の実行を中止し、読み出し処理対象となる読み出しアドレスを前記休止時間の絶対値に相当するサンプル数だけ移動させ、
前記読み出し処理対象となる読み出しアドレスを移動した後に読み出し処理対象となる読み出しアドレス以前に存在していたサンプリングデータを消去し、
前記読み出し処理開始目標時刻を現在時刻に設定して、前記誤差時間をクリアする
ことを特徴とする請求項５８に記載のリアルタイム処理方法。
【請求項６０】
前記コンピュータ装置は、
前記読み出し処理対象となるバッファ上のデータを全て読み出し処理し、全てのバッファ上に処理待ちのデータが無い状態となった場合に、
前記読み出し処理開始目標時刻を現在時刻に設定して、前記誤差時間をクリアする
ことを特徴とする請求項５７乃至請求項５９の何れかに記載のリアルタイム処理方法。
【請求項６１】
前記コンピュータ装置は、前記パケットをリアルタイム転送プロトコル（ＲＴＰ）を用いて受信する
ことを特徴とする請求項３５乃至請求項６０の何れかに記載のリアルタイム処理方法。
【請求項６２】
前記信号が音声信号であり、前記コンピュータ装置は、バッファに格納されたサンプリングデータから音声データを生成する
ことを特徴とする請求項３５乃至請求項６１の何れかに記載のリアルタイム処理方法。
【請求項６３】
前記コンピュータ装置は、
２つ以上の送信装置のそれぞれから受信した音声パケット信号を受信し、
各音声パケット信号から抽出したサンプリングデータを各送信装置ごとに設けられたバッファに格納し、
各バッファに格納されているサンプリングデータを読み出してミキシングし、該ミキシングによって得られたデータを出力する
ことを特徴とする請求項３５乃至請求項６２の何れかに記載のリアルタイム処理方法。
【請求項６４】
前記コンピュータ装置は、
前記各送信装置毎に存在するバッファにおけるサンプリングデータが格納されているアドレスの先頭と末尾を記憶し、
前記各バッファの、読み出し処理対象となる読み出しアドレスと、格納されているサンプリングデータの先頭アドレス及び末尾アドレスを比較することで、当該バッファのデータの読み出し処理を開始するべきか否かを判定する
ことを特徴とする請求項６３に記載のリアルタイム処理方法。
【請求項６５】
前記コンピュータ装置は、
前記各送信装置に対応する各バッファに格納されているサンプリングデータのうち、少なくとも１つが読み出し処理対象領域に至ったときに読み出し処理を開始する
ことを特徴とする請求項６３に記載のリアルタイム処理方法。
【請求項６６】
前記コンピュータ装置は、
前記各送信装置に対応する各バッファに格納されているサンプリングデータの全てが読み出し処理を終え、読み出し処理待ちのデータがバッファ上に存在しなくなったとき、読み出し処理を行わずに読み出し処理対象領域の移動のみを行う
ことを特徴とする請求項６３に記載のリアルタイム処理方法。
【請求項６７】
前記コンピュータ装置は、
前記バッファに格納されているサンプリングデータのうち、読み出し処理対象領域に至らないデータについては、読み出し処理を行わずに読み出し処理対象領域の移動のみを行う
ことを特徴とする請求項６３に記載のリアルタイム処理方法。
【請求項６８】
前記コンピュータ装置は、
前記第２周期時間毎に前記各バッファ上の読み出し処理対象領域を第２周期分ずつ移動し、
読み出し処理が開始されていない場合に、
前記読み出し処理対象領域の移動によって、前記各バッファ上のサンプリングデータのうち、最も読み出し処理対象領域に近いデータが、前記読み出し処理対象領域の最後尾から前記第２周期以内の領域に入ったとき、
前記読み出し処理対象領域と前記サンプリングデータの先頭のサンプルを時間に変換した時間が経過した後に、読み出し処理対象領域を前記サンプリングデータの先頭サンプルが格納されているアドレスに移動する
ことを特徴とする請求項６３に記載のリアルタイム処理方法。
【請求項６９】
連続した信号を所定の第１周期毎に切り取り、該切り取った信号を前記第１周期よりも短いサンプリング時間毎にサンプリングして得られた複数のサンプリングデータを含むフレームを生成すると共に該フレーム毎に、該フレームを含むパケットを生成して順次送信する送信装置から通信網を介して前記パケットを受信し、前記受信したパケットに含まれる前記フレームを抽出して該フレームに含まれるサンプリングデータをバッファに格納し、バッファに格納されているサンプリングデータに対して時間経過に伴って所定の第２周期分ずつ読み出し処理を施すリアルタイム処理をコンピュータ装置に行わせるコンピュータプログラムにおいて、
前記請求項３５乃至請求項６８の何れかに記載のリアルタイム処理方法を実行するステップを含む
ことを特徴とするリアルタイム処理プログラム。
【請求項７０】
前記請求項６９に記載のリアルタイム処理プログラムが記憶されている
ことを特徴とするコンピュータ読み取り可能な情報記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の送信装置から送信された音声パケットを受信してリアルタイムでパケット処理するリアルタイム処理装置及びその方法並びにそのプログラム及び情報記憶媒体に関するものである。
【背景技術】
【０００２】
従来、複数の送信装置から送信された音声パケットを受信してリアルタイムでミキシング等のリアルタイム処理を行うリアルタイム処理装置の一例として遠隔会議システムが知られている。
【０００３】
この様な、遠隔会議システムでは、複数の遠隔地点にクライアント端末装置を配置し、各クライアント端末装置において音声信号或いは音声信号と映像信号をサンプリングして得られた複数のサンプリングデータを含むフレームを生成し、該フレームをパケット化して各クライアント端末装置から通信網を介してサーバに送信する。
【０００４】
サーバでは、各クライアント端末装置から受信したパケットに含まれるフレームを抽出してミキシングし、ミキシングして得られた音声信号或いは音声信号と映像信号をパケット化して各クライアント端末装置に送信する。
【０００５】
これにより、各クライアント端末装置は全てのクライアント端末装置から送信された音声信号或いは音声信号と映像信号を受け取って再生することができる。
【０００６】
この様な処理装置の一例としては、特開２０００−２８６８８６号公報、特開２００１−０４５０６７号公報、特開２００１−２７４８２９号公報、特開２００２−２０４２５８号公報に開示される装置が知られている。
【特許文献１】特開２０００−２８６８８６号公報
【特許文献２】特開２００１−０４５０６７号公報
【特許文献３】特開２００１−２７４８２９号公報
【特許文献４】特開２００２−２０４２５８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来の揺らぎ吸収の処理方法では、揺らぎ吸収の基準をパケットを単位として行われており、バッファに蓄積されたパケット数、もしくは蓄積されたパケット数がしきい値を上回ってから一定時間が経過した後に処理を開始している。
【０００８】
しかし、このようにバッファに蓄積されたパケット数に基づいて揺らぎを吸収する処理方法では、複数の端末から受信したパケットを同期させてミキシングする場合には、処理の精度がパケット単位になるので、遅延時間の短縮はパケット単位までにしかできない。
【０００９】
また、バッファに蓄積されたパケット数がしきい値を上回ってから一定時間が経過した後に処理を開始する場合には、バッファ毎にタイマを備えて計時を行う必要があり、処理が複雑になると共にコストが高くなるという問題があった。
【００１０】
本発明の目的は上記の問題点に鑑み、複数地点の送信装置から送信されたパケットの遅延揺らぎ吸収を各送信装置ごとに独立して行い、サンプリング時間単位で最適な遅延に制御し、サンプリング時間単位の精度でデータを読み出して、ミキシング等のリアルタイム処理を行うことが可能なリアルタイム処理装置及びその方法並びにそのプログラム及び情報記憶媒体を提供することである。
【課題を解決するための手段】
【００１１】
本発明は、上記の目的を達成するために、連続した信号を所定の第１周期毎に切り取り、該切り取った信号を前記第１周期よりも短いサンプリング時間毎にサンプリングして得られた複数のサンプリングデータを含むフレームを生成すると共に該フレーム毎に、該フレームを含むパケットを生成して順次送信する送信装置から通信網を介して前記パケットを受信し、前記受信したパケットに含まれる前記フレームを抽出して該フレームに含まれるサンプリングデータに対して時間経過に伴って所定の第２周期分ずつ読み出し処理を行うリアルタイム処理装置において、受信したパケットを処理するパケット処理手段とデータ読み出し処理手段とを備え、前記パケット処理手段は、パケットを受信するパケット受信処理手段と、パケットを受信した時刻を取得し保持する手段と、前記受信したパケットから前記フレームを抽出して前記サンプリングデータを取得するデータ取得手段と、サンプリング単位でアドレスを割り当てて前記サンプリングデータを記憶すると共に時間の経過に伴ってデータの読み出しアドレスがサンプリング単位で連続して変化するバッファと、読み出し処理対象となる読み出しアドレスに対応した時刻を保持する手段と、読み出し処理対象となる読み出しアドレスに対応した時刻と前記パケットを受信した時刻との差の時間をサンプリング数に換算して前記読み出し処理対象となる読み出しアドレスに加算し、さらに該加算結果に所定の余裕時間をサンプリング数に変換した値を加算して前記バッファにおける書き込みアドレスを決定し、該アドレスに前記受信パケットに含まれていたサンプリングデータを書き込むデータ書込処理手段とを有し、前記データ読み出し処理手段は、前記バッファの前記読み出しアドレス領域に書き込まれているサンプリングデータを読み出す読み出し手段を有することを特徴とするリアルタイム処理装置を提案する。
【００１２】
本発明のリアルタイム処理装置によれば、パケットを受信した時刻を取得して保持すると共に、読み出し処理対象となる読み出しアドレスに対応した時刻を保持する。さらに、これらの時刻を用いて、読み出し処理対象となる読み出しアドレスに対応した時刻とパケットを受信した時刻との差の時間がサンプリング数に換算され、該換算されたサンプリング数が読み出し処理対象となる読み出しアドレスに加算される。さらに、該加算結果に所定の余裕時間をサンプリング数に変換した値が加算されてバッファにおける書き込みアドレスが決定される。
【００１３】
また、読み出し処理開始時において読み出し処理対象となる前記第２周期分のサンプリングデータが格納されている前記バッファの読み出しアドレス領域よりも前記サンプリング時間の倍数となる所定の余裕時間経過後に読み出される書き込み可能アドレス領域に、時間の経過に伴ってデータの書き込みアドレスをサンプリング時間単位で連続して変化させて、前記データ取得手段によって取得されたサンプリングデータが書き込まれる。これにより、各バッファにはサンプリング時間単位で変化されるアドレスにサンプリングデータが書き込まれるので、サンプリングデータの時間的な揺らぎは前記サンプリング時間単位で調整可能になる。
【００１４】
さらに、前記バッファの前記読み出しアドレス領域に書き込まれているサンプリングデータが読み出し処理され、前記読み出し処理によって得られたデータが出力される。
【００１５】
これにより、バッファにはサンプリング時間単位で変化されるアドレスにサンプリングデータが書き込まれるので、受信パケットに遅れが生じたとしても、読み出し処理におけるサンプリングデータの遅延時間はサンプリング時間単位の遅れとなる。
【００１６】
また、本発明は上記のリアルタイム処理装置において、前記バッファに既に書き込まれているサンプリングデータとの相対アドレスで前記受信パケットに含まれているサンプリングデータを書き込むアドレスを決定する手段と、前記パケットを受信した時刻と、読み出しアドレスに対応した時刻とを用いて、前記受信パケットに含まれているサンプリングデータを書き込むアドレスを決定する手段とを有するリアルタイム処理装置を提案する。
【００１７】
本発明のリアルタイム処理装置によれば、サンプリングデータの前記バッファへの書き込みアドレスは、前記バッファに既に書き込まれているサンプリングデータとの相対アドレスで決定されるか、または、前記パケットを受信した時刻と、読み出しアドレスに対応した時刻とを用いて決定される。
【００１８】
また、本発明は上記のリアルタイム処理装置において、前記読み出し処理対象となる読み出しアドレスに対応した時刻は、読み出し処理が現在の読み出しアドレスに移動した時刻であるリアルタイム処理装置を提案する。
【００１９】
本発明のリアルタイム処理装置によれば、読み出し処理が現在の読み出しアドレスに移動した時刻が、前記読み出し処理対象となる読み出しアドレスに対応した時刻とされ、該時刻から前記余裕時間経過後に読み出される書き込み可能アドレス領域に、前記データ取得手段によって取得されたサンプリングデータが書き込まれる。
【００２０】
また、本発明は上記のリアルタイム処理装置において、前記読み出し処理対象となる読み出しアドレスに対応した時刻は、読み出し処理が現在の読み出しアドレスに移動する予定だった理想的な処理時刻であるリアルタイム処理装置を提案する。
【００２１】
本発明のリアルタイム処理装置によれば、読み出し処理が現在の読み出しアドレスに移動する予定だった理想的な処理時刻が、前記読み出し処理対象となる読み出しアドレスに対応した時刻とされ、該時刻から前記余裕時間経過後に読み出される書き込み可能アドレス領域に、前記データ取得手段によって取得されたサンプリングデータが書き込まれる。これにより、データ読み出し手段の動作に関する時間精度が十分でない場合には、高負荷時に読み出し処理に遅れが生じる場合があり、このような場合には読み出し処理手段は休止しないで連続動作することで処理の遅れを回復しようとするが、読み出し処理の遅延回復動作とデータ書き込み処理動作におけるアドレスの位置競合すなわち書き込みアドレスと読み出しアドレスが同時に同じアドレスになることを避けることができる。
【００２２】
また、本発明は上記のリアルタイム処理装置において、前記データ読み出し手段が前記バッファの読み出しアドレス領域からサンプリングデータを読み出した後に該読み出しアドレス領域に書き込まれているサンプリングデータを消去する手段を備え、前記データ書き込み手段は、前記バッファに書き込まれているサンプリングデータが存在しないときに、前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定する手段を有するリアルタイム処理装置を提案する。
【００２３】
本発明のリアルタイム処理装置によれば、前記データ読み出し手段が前記バッファの読み出しアドレス領域からサンプリングデータを読み出した後に該読み出しアドレス領域に書き込まれているサンプリングデータが消去される。さらに、前記データ書き込み手段によって、前記バッファに書き込まれているサンプリングデータが存在しないときに、前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスが前記サンプリングデータ毎に決定される。
【００２４】
また、本発明は上記のリアルタイム処理装置において、前記パケットは前記フレームに含まれる先頭のサンプリングデータが生成された時刻に対応した値を有するタイムスタンプを含み、前記データ書込処理手段は、前記タイムスタンプと前記パケットの受信時刻とに基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定する手段を有するリアルタイム処理装置を提案する。
【００２５】
本発明のリアルタイム処理装置によれば、前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスは、前記タイムスタンプと前記パケットの受信時刻とに基づいて前記サンプリングデータ毎に決定されるので、最初のパケットのフレーム処理、フレームがすでにバッファ上に存在する場合の処理、最初のパケットの順序逆転時の処理等を適切に行うことができる。
【００２６】
また、本発明は上記のリアルタイム処理装置において、前記データ読み出し手段が前記バッファからの読み出しアドレス領域からサンプリングデータを読み出した後に該読み出しアドレス領域に書き込まれているサンプリングデータを消去する手段を備え、前記データ書込処理手段は、前記バッファに書き込まれているサンプリングデータが存在するときに、該バッファに書き込まれているサンプリングデータに対応するタイムスタンプと受信パケットのタイムスタンプと前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータ毎にデータの書き込みアドレスを決定する手段を有するリアルタイム処理装置を提案する。
【００２７】
本発明のリアルタイム処理装置によれば、前記バッファからの読み出しアドレス領域からサンプリングデータが読み出された後に、該読み出されたサンプリングデータが消去される。これにより、データが消去されたアドレスを再利用することができるので、リングバッファを用いることができる。さらに、前記バッファに書き込まれているサンプリングデータが存在するときに、該バッファに書き込まれているサンプリングデータに対応するタイムスタンプと受信パケットのタイムスタンプと前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータ毎にデータの書き込みアドレスが決定されるので、すでにバッファ上に存在するフレームと受信パケットに含まれるフレームの順序逆転時の処理等を適切に行うことができる。
【００２８】
また、本発明は上記のリアルタイム処理装置において、前記データ書き込み処理手段は、相対的なデータ書き込みアドレス位置の計算の基準となる基準アドレス値と、該基準アドレス値に対応した基準タイムスタンプ値とを保持する手段と、前記基準アドレス値と、前記決定したバッファにおける書き込みアドレスとの距離サンプルをサンプル数で表した値を、受信パケットのタイムスタンプから差し引いて基準タイムスタンプ値を求める手段と、受信パケットのフレームをバッファに書き込む毎に次のパケットのフレーム書き込みに使用するために基準タイムスタンプを計算しておき、データがバッファ上に存在するときは、受信したパケットに含まれるタイムスタンプを基準タイムスタンプに加えることで当該受信パケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定する手段とを有するリアルタイム処理装置を提案する。
【００２９】
本発明のリアルタイム処理装置によれば、相対的なデータ書き込みアドレス位置の計算の基準となる基準アドレス値と、該基準アドレス値に対応した基準タイムスタンプ値とが保持され、前記基準アドレス値と、前記決定したバッファにおける書き込みアドレスとの距離サンプルをサンプル数で表した値を、受信パケットのタイムスタンプから差し引いて基準タイムスタンプ値が求められる。
【００３０】
さらに、受信パケットのフレームをバッファに書き込む毎に次のパケットのフレーム書き込みに使用するために基準タイムスタンプが計算され、データがバッファ上に存在するときは、受信したパケットに含まれるタイムスタンプを基準タイムスタンプに加えることで当該受信パケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスが前記サンプリングデータ毎に決定される。
【００３１】
また、本発明は上記のリアルタイム処理装置において、前記バッファは、リングバッファで構成され、前記データ書き込み処理手段は、アドレス計算の基準となる基準アドレス値と、基準アドレス値に対応するリングバッファ上のアドレスを保持する手段と、基準アドレス値との相対値により実際のリングバッファ上のアドレスを決定してサンプリングデータを書き込む手段とを有するリアルタイム処理装置を提案する。
【００３２】
本発明のリアルタイム処理装置によれば、アドレス計算の基準となる基準アドレス値と、基準アドレス値に対応するリングバッファ上のアドレスが保持され、基準アドレス値との相対値により実際のリングバッファ上のアドレスが決定されて、該アドレスにサンプリングデータが書き込まれる。
【００３３】
また、本発明は上記のリアルタイム処理装置において、前記データ書込処理手段は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段を有するリアルタイム処理装置を提案する。
【００３４】
本発明のリアルタイム処理装置によれば、前記データ書込処理手段により、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが書き込み可能アドレス領域の先頭アドレスとして求められる。これにより、サンプリングデータの時間的な揺らぎがサンプリング時間単位で調整可能になる。
【００３５】
また、本発明は上記のリアルタイム処理装置において、前記データ書込処理手段は、読み出し処理対象となる読み出しアドレス領域に対して書き込みが重ならないアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段を有するリアルタイム処理装置を提案する。
【００３６】
本発明のリアルタイム処理装置によれば、前記データ書込処理手段により、読み出し処理対象となる読み出しアドレス領域に対して書き込みが重ならないアドレスが書き込み可能アドレス領域の先頭アドレスとして求められる。これにより、読み出し処理対象となる読み出しアドレス領域とデータ書き込みアドレス領域の位置競合すなわち書き込みアドレスと読み出しアドレスが同時に同じアドレスになることを避けることができる。
【００３７】
また、本発明は上記のリアルタイム処理装置において、前記書き込み可能アドレス領域の先頭アドレスを求める手段は、読み出し処理対象となる読み出しアドレス領域が現在位置に移動した時刻と、現在時刻との差を、前記第２周期に相当する読み出し処理対象処理時間間隔から差し引いた処理待ち時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも多い場合には、読み出し処理対象となる現在の読み出しアドレス領域の最終アドレスよりも１サンプル後のアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、前記処理待ち時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも少ない場合には、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも前記第２周期＋１サンプルだけ後のアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段を有するリアルタイム処理装置を提案する。
【００３８】
本発明のリアルタイム処理装置によれば、読み出し処理対象となる読み出しアドレス領域が現在位置に移動した時刻と、現在時刻との差を、前記第２周期に相当する読み出し処理対象処理時間間隔から差し引いた処理待ち時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも多い場合には、読み出し処理対象となる現在の読み出しアドレス領域の最終アドレスよりも１サンプル後のアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【００３９】
さらに、前記処理待ち時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも少ない場合には、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも前記第２周期＋１サンプルだけ後のアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【００４０】
また、本発明は上記のリアルタイム処理装置において、前記書き込み可能アドレス領域の先頭アドレスを求める手段は、読み出し処理対象となる読み出しアドレス領域が現在位置に移動する予定だった理想的な処理時刻と、現在時刻との差の時間を第２周期に相当する時間で割った商と余りを求め、余りに相当する時間を前記第２周期に相当する時間から引いた時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも多い場合には、前記読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも１サンプル分後のアドレスに対して、前記第２周期の時間と前記求めた商を掛け合わせた時間をサンプルに変換したサンプル数分のアドレスを加えて得られたアドレスを前記書き込み可能アドレスの先頭アドレスとして求め、前記余りに相当する時間を前記第２周期に相当する時間から引いた時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも少ない場合には、前記読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも１サンプル分後のアドレスに対して、前記第２周期の時間と前記求めた商＋１を掛け合わせた時間をサンプルに変換したサンプル数分のアドレスを加えて得られたアドレスを前記書き込み可能アドレスの先頭アドレスとして求める手段を有するリアルタイム処理装置を提案する。
【００４１】
本発明のリアルタイム処理装置によれば、読み出し処理対象となる読み出しアドレス領域が現在位置に移動する予定だった理想的な処理時刻と、現在時刻との差の時間を第２周期に相当する時間で割った商と余りが求められる。
【００４２】
さらに、余りに相当する時間を前記第２周期に相当する時間から引いた時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも多い場合、前記読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも１サンプル分後のアドレスに対して、前記第２周期の時間と前記求めた商を掛け合わせた時間をサンプルに変換したサンプル数分のアドレスを加えて得られたアドレスが、前記書き込み可能アドレスの先頭アドレスとして求められる。
【００４３】
また、前記余りに相当する時間を前記第２周期に相当する時間から引いた時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも少ない場合には、前記読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも１サンプル分後のアドレスに対して、前記第２周期の時間と前記求めた商＋１を掛け合わせた時間をサンプルに変換したサンプル数分のアドレスを加えて得られたアドレスが、前記書き込み可能アドレスの先頭アドレスとして求められる。
【００４４】
また、本発明は上記のリアルタイム処理装置において、前記データ書き込み手段は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段と、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、前記書き込み対象となるサンプリングデータの書き込みアドレスを前記書き込み可能アドレス領域内のアドレスに変換して前記書き込み対象のサンプリングデータを前記バッファに書き込む手段を備えているリアルタイム処理装置を提案する。
【００４５】
本発明のリアルタイム処理装置によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【００４６】
さらに、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるときは、前記書き込み対象となるサンプリングデータの書き込みアドレスが、前記書き込み可能アドレス領域内のアドレスに変換され、前記書き込み対象のサンプリングデータが前記バッファに書き込まれる。
【００４７】
また、本発明は上記のリアルタイム処理装置において、前記データ書込処理手段は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段と、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、読み出し処理対象となる読み出しアドレスに対応した時刻と前記パケットを受信した時刻との差の時間をサンプリング数に換算して前記読み出し処理対象となる読み出しアドレスに加算し、さらに該加算結果に所定の余裕時間をサンプリング数に変換した値を加算して前記バッファにおける書き込みアドレスを前記書き込み対象となるサンプリングデータの前記書き込み可能アドレス領域内のアドレスに決定し、該アドレスに前記受信パケットに含まれていたサンプリングデータを書き込む手段を備えているリアルタイム処理装置を提案する。
【００４８】
本発明のリアルタイム処理装置によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【００４９】
さらに、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるときは、読み出し処理対象となる読み出しアドレスに対応した時刻と前記パケットを受信した時刻との差の時間をサンプリング数に換算して前記読み出し対象となる読み出しアドレスに加算し、さらに該加算結果に所定の余裕時間をサンプリング数に変換した値を加算して前記バッファにおける書き込みアドレスを前記書き込み対象となるサンプリングデータの前記書き込み可能アドレス領域内のアドレスに決定し、該アドレスに前記受信パケットに含まれていたサンプリングデータが書き込まれる。
【００５０】
また、本発明は上記のリアルタイム処理装置において、前記データ書込処理手段は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段と、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、前記所定の余裕時間を増加させる余裕時間増加手段とを備えているリアルタイム処理装置を提案する。
【００５１】
本発明のリアルタイム処理装置によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【００５２】
さらに、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるときは、前記余裕時間が増加される。
【００５３】
また、本発明は上記のリアルタイム処理装置において、前記余裕時間増加手段は、前記所定の余裕時間を、所定の最大余裕時間を超えては増加させないリアルタイム処理装置を提案する。
【００５４】
本発明のリアルタイム処理装置によれば、前記余裕時間は、前記最大余裕時間を超えて増加されることがない。
【００５５】
また、本発明は上記のリアルタイム処理装置において、前記データ書込処理手段は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段と、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以前に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、前記書き込み対象となるサンプリングデータのうち、前記書き込み可能アドレス領域内のアドレスに書き込むべきサンプリングデータのみを前記バッファに書き込む手段とを備えているリアルタイム処理装置を提案する。
【００５６】
本発明のリアルタイム処理装置によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【００５７】
さらに、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以前に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるときは、前記書き込み対象となるサンプリングデータのうち、前記書き込み可能アドレス領域内のアドレスに書き込むべきサンプリングデータのみが前記バッファに書き込まれる。
【００５８】
また、本発明は上記のリアルタイム処理装置において、前記データ書込処理手段は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の最終アドレスとして求める手段を有するリアルタイム処理装置を提案する。
【００５９】
本発明のリアルタイム処理装置によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の最終アドレスとして求められる。
【００６０】
また、本発明は上記のリアルタイム処理装置において、前記データ書込処理手段は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の最終アドレスとして求める手段と、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータの少なくとも一部が、前記書き込み可能アドレス領域の最終アドレス以降に書き込まれるべきデータであるとき、前記書き込み対象となるサンプリングデータの書き込みアドレスを前記書き込み可能アドレス領域内のアドレスに変換して前記書き込み対象のサンプリングデータを前記バッファに書き込む手段とを備えているリアルタイム処理装置を提案する。
【００６１】
本発明のリアルタイム処理装置によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の最終アドレスとして求められる。
【００６２】
さらに、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータの少なくとも一部が、前記書き込み可能アドレス領域の最終アドレス以降に書き込まれるべきデータであるときは、前記書き込み対象となるサンプリングデータの書き込みアドレスを前記書き込み可能アドレス領域内のアドレスに変換して前記書き込み対象のサンプリングデータが前記バッファに書き込まれる。
【００６３】
また、本発明は上記のリアルタイム処理装置において、前記データ書込処理手段は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の最終アドレスとして求める手段と、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記書き込み可能アドレス領域の最終アドレス以降に書き込まれるべきデータであるとき、前記バッファの書き込み可能アドレス領域の先頭アドレスから書き込み可能アドレス領域の最終アドレスまでのサンプリングデータを全て消去し、前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定する手段とを有するリアルタイム処理装置を提案する。
【００６４】
本発明のリアルタイム処理装置によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の最終アドレスとして求められる。
【００６５】
さらに、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記書き込み可能アドレス領域の最終アドレス以降に書き込まれるべきデータであるときは、前記バッファの書き込み可能アドレス領域の先頭アドレスから書き込み可能アドレス領域の最終アドレスまでのサンプリングデータが全て消去される。また、前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスが、前記サンプリングデータ毎に決定される。
【００６６】
また、本発明は上記のリアルタイム処理装置において、前記データ書込処理手段は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段と、前記書き込み可能アドレス領域の先頭アドレス以前に読み出されるアドレスにデータが書き込まれておらず、且つ、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスが、前記バッファに書き込まれている最初のサンプリングデータ以前に書き込まれるべきアドレスであるとき、前記バッファに書き込まれている最初のサンプリングデータの先頭アドレスから前記受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスを差し引いて得られたサンプル数を、シフト量として算出し、前記バッファに既に書き込まれているサンプリングデータの最終アドレスに対して前記シフト量を加えたアドレスが、前記書き込み可能領域の最終アドレスを超えないアドレスであるとき、前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定し、且つ、前記バッファに既に書き込まれているサンプリングデータを、前記受信したパケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスに対して前記シフト量を加えたアドレス位置に、前記バッファに既に書き込まれているサンプリングデータを移動する手段とを有するリアルタイム処理装置を提案する。
【００６７】
本発明のリアルタイム処理装置によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【００６８】
さらに、前記書き込み可能アドレス領域の先頭アドレス以前に読み出されるアドレスにデータが書き込まれておらず、且つ、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスが、前記バッファに書き込まれている最初のサンプリングデータ以前に書き込まれるべきアドレスであるときは、前記バッファに書き込まれている最初のサンプリングデータの先頭アドレスから前記受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスを差し引いて得られたサンプル数がシフト量として算出される。
【００６９】
さらにまた、前記バッファに既に書き込まれているサンプリングデータの最終アドレスに対して前記シフト量を加えたアドレスが、前記書き込み可能領域の最終アドレスを超えないアドレスであるときに、前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスが、前記サンプリングデータ毎に決定され、且つ、前記受信したパケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスに対して前記シフト量を加えたアドレス位置に、前記バッファに既に書き込まれているサンプリングデータが移動される。
【００７０】
また、本発明は上記のリアルタイム処理装置において、前記データ書込処理手段は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求める手段と、前記書き込み可能アドレス領域の先頭アドレス以前に読み出されるアドレスにデータが書き込まれておらず、且つ、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスが、前記バッファに書き込まれている最初のサンプリングデータ以前に書き込まれるべきアドレスであるとき、前記バッファに書き込まれている最初のサンプリングデータの先頭アドレスから前記受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスを差し引いて得られたサンプル数をシフト量として算出し、前記バッファに既に書き込まれているサンプリングデータの最終アドレスに対して前記シフト量を加えたアドレスが、前記書き込み可能領域の最終アドレスを超えるアドレスであるとき、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームのサンプリングデータのうち、前記書き込み可能アドレス領域の先頭アドレス以降に書き込まれるべきサンプリングデータのみを前記バッファに書き込む手段を有するリアルタイム処理装置を提案する。
【００７１】
本発明のリアルタイム処理装置によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【００７２】
また、前記書き込み可能アドレス領域の先頭アドレス以前に読み出されるアドレスにデータが書き込まれておらず、且つ、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスが、前記バッファに書き込まれている最初のサンプリングデータ以前に書き込まれるべきアドレスであるとき、前記バッファに書き込まれている最初のサンプリングデータの先頭アドレスから前記受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスを差し引いて得られたサンプル数がシフト量として算出され、前記バッファに既に書き込まれているサンプリングデータの最終アドレスに対して前記シフト量を加えたアドレスが、前記書き込み可能領域の最終アドレスを超えるアドレスであるとき、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームのサンプリングデータのうち、前記書き込み可能アドレス領域の先頭アドレス以降に書き込まれるべきサンプリングデータのみが前記バッファに書き込まれる。
【００７３】
また、本発明は上記のリアルタイム処理装置において、前記第２周期に相当する時間が経過する毎に読み出し処理対象となる読み出しアドレスを前記第２周期サンプルだけ移動する手段は、前記第２周期に相当する時間の経過を待つ処理を精度の補償されない休止命令を用いて実現する場合に、前記読み出し処理を次に開始すべき時刻を読み出し処理開始目標時刻となして、装置起動直後に前記読み出し処理開始目標時刻を現在時刻に設定して保持する手段と、前記読み出し処理の実行を開始した時刻を読み出し処理開始時刻として、該読み出し処理開始時刻から前記保持されている読み出し処理開始目標時刻を差し引いた時間を誤差時間として算出する手段と、前記読み出し処理開始時刻に前記第２周期に相当する時間を加算すると共に該加算結果の時刻から前記誤差時間を差し引いた時刻を新たな読み出し処理開始目標時刻として設定して保持する手段と、前記読み出し処理を終了した時刻を読み出し処理終了時刻とし、前記保持している読み出し処理開始目標時刻から前記読み出し処理終了時刻を差し引いた時間を前記休止時間となして前記処理休止命令を実行する手段とを備えているリアルタイム処理装置を提案する。
【００７４】
本発明のリアルタイム処理装置によれば、読み出し処理対象となる読み出しアドレスが、前記第２周期に相当する時間が経過する毎に前記第２周期サンプルだけ移動される。
【００７５】
さらに、前記第２周期に相当する時間の経過を待つ処理を精度の補償されない休止命令を用いて実現する場合に、前記読み出し処理を次に開始すべき時刻が、読み出し処理開始目標時刻とされて、装置起動直後に前記読み出し処理開始目標時刻が現在時刻に設定されて保持される。
【００７６】
また、前記読み出し処理の実行を開始した時刻が、読み出し処理開始時刻とされて、該読み出し処理開始時刻から前記保持されている読み出し処理開始目標時刻を差し引いた時間が、誤差時間として算出される。
【００７７】
さらにまた、前記読み出し処理開始時刻に前記第２周期に相当する時間が加算されると共に該加算結果の時刻から前記誤差時間を差し引いた時刻が、新たな読み出し処理開始目標時刻として設定されて保持される。
【００７８】
また、前記読み出し処理を終了した時刻が読み出し処理終了時刻とされて、前記保持している読み出し処理開始目標時刻から前記読み出し処理終了時刻を差し引いた時間が前記休止時間とされて前記処理休止命令が実行される。
【００７９】
また、本発明は上記のリアルタイム処理装置において、前記算出した休止時間が負の値のときは、前記休止命令の実行を中止する手段を備えたリアルタイム処理装置を提案する。
【００８０】
本発明のリアルタイム処理装置によれば、前記算出した休止時間が負の値のときは、前記休止命令の実行が中止されて前記読み出し処理が継続して行われる。これにより、前記読み出し処理の処理遅延を低減することができる。
【００８１】
また、本発明は上記のリアルタイム処理装置において、前記算出した休止時間が負の値であり、前記休止時間の絶対値が所定の許容最大値以上になったときに、前記休止命令の実行を中止し、読み出し処理対象となる読み出しアドレスを前記休止時間の絶対値に相当するサンプル数だけ移動させる手段と、前記読み出し処理対象となる読み出しアドレスを移動した後に読み出し処理対象となる読み出しアドレス以前に存在していたサンプリングデータを消去する手段と、前記読み出し処理開始目標時刻を現在時刻に設定して、前記誤差時間をクリアする手段とを備えたリアルタイム処理装置を提案する。
【００８２】
本発明のリアルタイム処理装置によれば、前記算出した休止時間が負の値であり、前記休止時間の絶対値が所定の許容最大値以上になったときに、前記休止命令の実行が中止され、読み出し処理対象となる読み出しアドレスを前記休止時間の絶対値に相当するサンプル数だけ移動される。
【００８３】
さらに、前記読み出し処理対象となる読み出しアドレスが移動された後に読み出し処理対象となる読み出しアドレス以前に存在していたサンプリングデータが消去され、前記読み出し処理開始目標時刻が現在時刻に設定されて、前記誤差時間がクリアされる。
【００８４】
また、本発明は上記のリアルタイム処理装置において、前記読み出し処理対象となるバッファ上のデータを全て読み出し、全てのバッファ上に処理待ちのデータが無い状態となった場合に、前記読み出し処理開始目標時刻を現在時刻に設定して、前記誤差時間をクリアする手段を備えたリアルタイム処理装置を提案する。
【００８５】
本発明のリアルタイム処理装置によれば、前記読み出し処理対象となるバッファ上のデータを全て読み出し、全てのバッファ上に処理待ちのデータが無い状態となった場合には、前記読み出し処理開始目標時刻が現在時刻に設定されて、前記誤差時間がクリアされる。
【００８６】
また、本発明は上記のリアルタイム処理装置において、前記パケットはリアルタイム転送プロトコル（ＲＴＰ）パケットであるリアルタイム処理装置を提案する。
【００８７】
本発明のリアルタイム処理装置によれば、ＲＴＰパケットのタイムスタンプによって前記サンプリングデータの順番が識別される。
【００８８】
また、本発明は上記のリアルタイム処理装置において、前記信号が音声信号であるリアルタイム処理装置を提案する。
【００８９】
本発明のリアルタイム処理装置によれば、音声信号がサンプリングされたサンプリングデータが読み出し処理される。
【００９０】
また、本発明は上記のリアルタイム処理装置において、前記パケット受信処理手段と前記データ読み出し処理手段を２組以上備え、データ読み出し処理手段から読み出されたデータをミキシングし、該ミキシングによって得られたデータを出力するミキシング手段を有しているリアルタイム処理装置を提案する。
【００９１】
本発明のリアルタイム処理装置によれば、２つ以上のデータ読み出し処理手段のそれぞれから出力されるデータがミキシング手段によってミキシングされて出力される。例えば、データ読み出し処理手段から音声データが出力される場合には、これらの音声データがミキシング手段によってミキシングされて出力される。
【００９２】
また、本発明は上記のリアルタイム処理装置において、前記バッファは、サンプリングデータがバッファ上に格納されているアドレスの先頭と末尾を記憶する手段を有し、前記データ読み出し手段は、送信装置に対応する前記バッファの、読み出し処理対象となる読み出しアドレスと、格納されているサンプリングデータの先頭アドレス及び末尾アドレスを比較することで、当該バッファのデータの読み出しを開始するべきか否かを判定する手段を有するリアルタイム処理装置を提案する。
【００９３】
本発明のリアルタイム処理装置によれば、サンプリングデータがバッファ上に格納されているアドレスの先頭と末尾が記憶される。さらに、前記バッファの、読み出し処理対象となる読み出しアドレスと、格納されているサンプリングデータの先頭アドレス及び末尾アドレスが比較されて、当該バッファのデータの読み出しを開始するべきか否かが判定される。
【００９４】
また、本発明は上記のリアルタイム処理装置において、前記データ読み出し手段は、前記バッファに格納されているサンプリングデータのうち、少なくとも１つが読み出し対象領域に至ったときに、読み出し処理を開始する手段を有するリアルタイム処理装置を提案する。
【００９５】
本発明のリアルタイム処理装置によれば、前記データ読み出し手段により、送信装置に対応する前記バッファに格納されているサンプリングデータのうち、少なくとも１つが読み出し対象領域に至ったときに、読み出し処理が開始される。
【００９６】
また、本発明は上記のリアルタイム処理装置において、前記データ読み出し手段は、前記バッファに格納されているサンプリングデータの全てが読み出し処理を終え、読み出し処理待ちのデータがバッファ上に存在しなくなったとき、読み出し処理を行わず、読み出し対象領域の移動のみを行う手段を有するリアルタイム処理装置を提案する。
【００９７】
本発明のリアルタイム処理装置によれば、前記バッファに格納されているサンプリングデータの全てが読み出し処理を終え、読み出し処理待ちのデータがバッファ上に存在しなくなったときは、読み出し処理は行われず、読み出し対象領域の移動のみが行われる。
【００９８】
また、本発明は上記のリアルタイム処理装置において、前記データ読み出し手段は、前記バッファに格納されているサンプリングデータのうち、読み出し対象領域に至らないデータについては、読み出し及び読み出し処理を行わずに、読み出し対象領域の移動のみを行う手段を有するリアルタイム処理装置を提案する。
【００９９】
本発明のリアルタイム処理装置によれば、前記バッファに格納されているサンプリングデータのうち、読み出し対象領域に至らないデータについては、読み出し及び読み出し処理が行われずに、読み出し対象領域の移動のみが行われる。
【０１００】
また、本発明は上記のリアルタイム処理装置において、前記データ読み出し手段は、前記第２周期時間毎に前記バッファ上の読み出し処理対象領域を第２周期分ずつ移動する手段を備え、読み出しが開始されていない場合に、前記読み出し処理対象領域の移動によって、前記バッファ上のサンプリングデータのうち、最も読み出し処理対象領域に近いデータが、前記読み出し処理対象領域の最後尾から前記第２周期以内の領域に入ったとき、前記読み出し処理対象領域と前記サンプリングデータの先頭のサンプルを時間に変換した時間が経過した後に、読み出し対象領域を前記サンプリングデータの先頭サンプルが格納されているアドレスに移動する手段を有するリアルタイム処理装置を提案する。
【０１０１】
本発明のリアルタイム処理装置によれば、前記バッファ上の読み出し処理対象領域が前記第２周期時間毎に第２周期分ずつ移動され、読み出しが開始されていない場合に、前記読み出し処理対象領域の移動によって、前記バッファ上のサンプリングデータのうち、最も読み出し処理対象領域に近いデータが、前記読み出し処理対象領域の最後尾から前記第２周期以内の領域に入ったとき、前記読み出し処理対象領域と前記サンプリングデータの先頭のサンプルが時間に変換され、該時間が経過した後に、読み出し対象領域を前記サンプリングデータの先頭サンプルが格納されているアドレスに移動される。
【０１０２】
また、本発明は上記の目的を達成するために、連続した信号を所定の第１周期毎に切り取り、該切り取った信号を前記第１周期よりも短いサンプリング時間毎にサンプリングして得られた複数のサンプリングデータを含むフレームを生成すると共に該フレーム毎に、該フレームを含むパケットを生成して順次送信する送信装置から通信網を介して前記パケットを受信し、前記受信したパケットに含まれる前記フレームを抽出して該フレームに含まれるサンプリングデータをバッファに格納し、バッファに格納されているサンプリングデータに対して時間経過に伴って所定の第２周期分ずつ読み出し処理を施すコンピュータ装置を用いたリアルタイム処理方法であって、前記コンピュータ装置は、サンプリング単位でアドレスを割り当てて前記受信したパケットに含まれるフレームのサンプリングデータをバッファに記憶するときに、読み出し処理対象となる前記バッファの読み出しアドレスに対応した時刻と前記パケットを受信した時刻との差の時間をサンプリング数に換算して前記読み出し対象となる読み出しアドレスに加算し、さらに該加算結果に所定の余裕時間をサンプリング数に変換した値を加算して得られた前記バッファのアドレスに前記受信パケットのフレームに含まれているサンプリングデータを書き込み、読み出しアドレス領域を前記第２周期毎に更新しながら、前記バッファの読み出しアドレス領域に書き込まれているサンプリングデータを読み出し、前記バッファから読み出したサンプリングデータを読み出し、前記読み出しによって得られたデータを出力するリアルタイム処理方法を提案する。
【０１０３】
本発明のリアルタイム処理方法によれば、パケットを受信した時刻を取得して保持すると共に、読み出し処理対象となる読み出しアドレスに対応した時刻を保持する。さらに、これらの時刻を用いて、読み出し処理対象となる読み出しアドレスに対応した時刻とパケットを受信した時刻との差の時間がサンプリング数に換算され、該換算されたサンプリング数が読み出し処理対象となる読み出しアドレスに加算される。さらに、該加算結果に所定の余裕時間をサンプリング数に変換した値が加算されてバッファにおける書き込みアドレスが決定される。
【０１０４】
また、読み出し処理開始時において読み出し処理対象となる前記第２周期分のサンプリングデータが格納されている前記バッファの読み出しアドレス領域よりも前記サンプリング時間の倍数となる所定の余裕時間経過後に読み出される書き込み可能アドレス領域に、時間の経過に伴ってデータの書き込みアドレスをサンプリング時間単位で連続して変化させて、前記データ取得手段によって取得されたサンプリングデータが書き込まれる。これにより、バッファにはサンプリング時間単位で変化されるアドレスにサンプリングデータが書き込まれるので、サンプリングデータの時間的な揺らぎは前記サンプリング時間単位で調整可能になる。
【０１０５】
さらに、前記バッファの前記読み出しアドレス領域に書き込まれているサンプリングデータが読み出されると共に、読み出しによって得られたデータが出力される。
【０１０６】
これにより、バッファにはサンプリング時間単位で変化されるアドレスにサンプリングデータが書き込まれるので、受信パケットに遅れが生じたとしても、読み出し処理におけるサンプリングデータの遅延時間はサンプリング時間単位の遅れとなる。
【０１０７】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、前記読み出し処理対象となる読み出しアドレスに対応した時刻を、読み出し処理が現在の読み出しアドレスに移動した時刻となすリアルタイム処理方法を提案する。
【０１０８】
本発明のリアルタイム処理方法によれば、読み出し処理が現在の読み出しアドレスに移動した時刻が、前記読み出し処理対象となる読み出しアドレスに対応した時刻とされ、該時刻から前記余裕時間経過後に読み出される書き込み可能アドレス領域に、前記データ取得手段によって取得されたサンプリングデータが書き込まれる。
【０１０９】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、前記読み出し処理対象となる読み出しアドレスに対応した時刻を、読み出し処理が現在の読み出しアドレスに移動する予定だった理想的な処理時刻となすリアルタイム処理方法を提案する。
【０１１０】
本発明のリアルタイム処理方法によれば、読み出し処理が現在の読み出しアドレスに移動する予定だった理想的な処理時刻が、前記読み出し処理対象となる読み出しアドレスに対応した時刻とされ、該時刻から前記余裕時間経過後に読み出される書き込み可能アドレス領域に、前記データ取得手段によって取得されたサンプリングデータが書き込まれる。これにより、読み出し処理手段の動作に関する時間精度が十分でない場合には、高負荷時に読み出し処理に遅れが生じる場合があり、このような場合にはデータ読み出し手段は休止しないで連続動作することで処理の遅れを回復しようとするが、読み出し処理の遅延回復動作とデータ書き込み処理動作におけるアドレスの位置競合すなわち書き込みアドレスと読み出しアドレスが同時に同じアドレスになることを避けることができる。
【０１１１】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、前記バッファの読み出しアドレス領域からサンプリングデータを読み出した後に該読み出しアドレス領域に書き込まれているサンプリングデータを消去し、前記バッファに書き込まれているサンプリングデータが存在しないときに、前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定するリアルタイム処理方法を提案する。
【０１１２】
本発明のリアルタイム処理方法によれば、前記バッファの読み出しアドレス領域からサンプリングデータを読み出した後に該読み出しアドレス領域に書き込まれているサンプリングデータが消去される。さらに、前記データ書き込み手段によって、前記バッファに書き込まれているサンプリングデータが存在しないときに、前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスが前記サンプリングデータ毎に決定される。
【０１１３】
また、本発明は上記のリアルタイム処理方法において、前記パケットは前記フレームに含まれる先頭のサンプリングデータが生成された時刻に対応した値を有するタイムスタンプを含み、前記コンピュータ装置は、前記タイムスタンプと前記パケットの受信時刻とに基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定するリアルタイム処理方法を提案する。
【０１１４】
本発明のリアルタイム処理方法によれば、前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスは、前記タイムスタンプと前記パケットの受信時刻とに基づいて前記サンプリングデータ毎に決定されるので、最初のパケットのフレーム処理、フレームがすでにバッファ上に存在する場合の処理、最初のパケットの順序逆転時の処理等を適切に行うことができる。
【０１１５】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、前記バッファからの読み出しアドレス領域からサンプリングデータを読み出した後に該読み出しアドレス領域に書き込まれているサンプリングデータを消去し、前記バッファに書き込まれているサンプリングデータが存在するときに、該バッファに書き込まれているサンプリングデータに対応するタイムスタンプと受信パケットのタイムスタンプと前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータ毎にデータの書き込みアドレスを決定するリアルタイム処理方法を提案する。
【０１１６】
本発明のリアルタイム処理方法によれば、前記バッファからの読み出しアドレス領域からサンプリングデータが読み出された後に、該読み出されたサンプリングデータが消去される。これにより、データが消去されたアドレスを再利用することができるので、リングバッファを用いることができる。さらに、前記バッファに書き込まれているサンプリングデータが存在するときに、該バッファに書き込まれているサンプリングデータに対応するタイムスタンプと受信パケットのタイムスタンプと前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータ毎にデータの書き込みアドレスが決定されるので、すでにバッファ上に存在するフレームと受信パケットに含まれるフレームの順序逆転時の処理等を適切に行うことができる。
【０１１７】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、相対的なデータ書き込みアドレス位置の計算の基準となる基準アドレス値と、該基準アドレス値に対応した基準タイムスタンプ値とを保持し、前記基準アドレス値と、前記決定したバッファにおける書き込みアドレスとの距離サンプルをサンプル数で表した値を、受信パケットのタイムスタンプから差し引いて基準タイムスタンプ値を求め、受信パケットのフレームをバッファに書き込む毎に次のパケットのフレーム書き込みに使用するために基準タイムスタンプを計算しておき、データがバッファ上に存在するときは、受信したパケットに含まれるタイムスタンプを基準タイムスタンプに加えることで当該受信パケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定するリアルタイム処理方法を提案する。
【０１１８】
本発明のリアルタイム処理方法によれば、相対的なデータ書き込みアドレス位置の計算の基準となる基準アドレス値と、該基準アドレス値に対応した基準タイムスタンプ値とが保持され、前記基準アドレス値と、前記決定したバッファにおける書き込みアドレスとの距離サンプルをサンプル数で表した値を、受信パケットのタイムスタンプから差し引いて基準タイムスタンプ値が求められる。
【０１１９】
さらに、受信パケットのフレームをバッファに書き込む毎に次のパケットのフレーム書き込みに使用するために基準タイムスタンプが計算され、データがバッファ上に存在するときは、受信したパケットに含まれるタイムスタンプを基準タイムスタンプに加えることで当該受信パケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスが前記サンプリングデータ毎に決定される。
【０１２０】
また、本発明は上記のリアルタイム処理方法において、前記バッファは、リングバッファで構成され、前記コンピュータ装置は、アドレス計算の基準となる基準アドレス値と、基準アドレス値に対応するリングバッファ上のアドレスを保持し、基準アドレス値との相対値により実際のリングバッファ上のアドレスを決定してサンプリングデータを書き込むリアルタイム処理方法を提案する。
【０１２１】
本発明のリアルタイム処理方法によれば、アドレス計算の基準となる基準アドレス値と、基準アドレス値に対応するリングバッファ上のアドレスが保持され、基準アドレス値との相対値により実際のリングバッファ上のアドレスが決定されて、該アドレスにサンプリングデータが書き込まれる。
【０１２２】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求めるリアルタイム処理方法を提案する。
【０１２３】
本発明のリアルタイム処理方法によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが書き込み可能アドレス領域の先頭アドレスとして求められる。これにより、サンプリングデータの時間的な揺らぎがサンプリング時間単位で調整可能になる。
【０１２４】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、読み出し処理対象となる読み出しアドレス領域に対して書き込みが重ならないアドレスを書き込み可能アドレス領域の先頭アドレスとして求めるリアルタイム処理方法を提案する。
【０１２５】
本発明のリアルタイム処理方法によれば、読み出し処理対象となる読み出しアドレス領域に対して書き込みが重ならないアドレスが書き込み可能アドレス領域の先頭アドレスとして求められる。これにより、読み出し処理対象となる読み出しアドレス領域とデータ書き込みアドレス領域の位置競合すなわち書き込みアドレスと読み出しアドレスが同時に同じアドレスになることを避けることができる。
【０１２６】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、読み出し処理対象となる読み出しアドレス領域が現在位置に移動した時刻と、現在時刻との差を、前記第２周期に相当する読み出し対象処理時間間隔から差し引いた処理待ち時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも多い場合には、読み出し処理対象となる現在の読み出しアドレス領域の最終アドレスよりも１サンプル後のアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、前記処理待ち時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも少ない場合には、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも前記第２周期＋１サンプルだけ後のアドレスを書き込み可能アドレス領域の先頭アドレスとして求めるリアルタイム処理方法を提案する。
【０１２７】
本発明のリアルタイム処理方法によれば、読み出し処理対象となる読み出しアドレス領域が現在位置に移動した時刻と、現在時刻との差を、前記第２周期に相当する読み出し対象処理時間間隔から差し引いた処理待ち時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも多い場合には、読み出し処理対象となる現在の読み出しアドレス領域の最終アドレスよりも１サンプル後のアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【０１２８】
さらに、前記処理待ち時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも少ない場合には、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも前記第２周期＋１サンプルだけ後のアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【０１２９】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、読み出し処理対象となる読み出しアドレス領域が現在位置に移動する予定だった理想的な処理時刻と、現在時刻との差の時間を第２周期に相当する時間で割った商と余りを求め、余りに相当する時間を前記第２周期に相当する時間から引いた時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも多い場合には、前記読み出し対象となる読み出しアドレス領域の最終アドレスよりも１サンプル分後のアドレスに対して、前記第２周期の時間と前記求めた商を掛け合わせた時間をサンプルに変換したサンプル数分のアドレスを加えて得られたアドレスを前記書き込み可能アドレスの先頭アドレスとして求め、前記余りに相当する時間を前記第２周期に相当する時間から引いた時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも少ない場合には、前記読み出し対象となる読み出しアドレス領域の最終アドレスよりも１サンプル分後のアドレスに対して、前記第２周期の時間と前記求めた商＋１を掛け合わせた時間をサンプルに変換したサンプル数分のアドレスを加えて得られたアドレスを前記書き込み可能アドレスの先頭アドレスとして求めるリアルタイム処理方法を提案する。
【０１３０】
本発明のリアルタイム処理方法によれば、読み出し処理対象となる読み出しアドレス領域が現在位置に移動する予定だった理想的な処理時刻と、現在時刻との差の時間を第２周期に相当する時間で割った商と余りが求められる。
【０１３１】
さらに、余りに相当する時間を前記第２周期に相当する時間から引いた時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも多い場合、前記読み出し対象となる読み出しアドレス領域の最終アドレスよりも１サンプル分後のアドレスに対して、前記第２周期の時間と前記求めた商を掛け合わせた時間をサンプルに変換したサンプル数分のアドレスを加えて得られたアドレスが、前記書き込み可能アドレスの先頭アドレスとして求められる。
【０１３２】
また、前記余りに相当する時間を前記第２周期に相当する時間から引いた時間が、当該受信パケットのサンプリングデータ書き込み処理に必要な時間よりも少ない場合には、前記読み出し対象となる読み出しアドレス領域の最終アドレスよりも１サンプル分後のアドレスに対して、前記第２周期の時間と前記求めた商＋１を掛け合わせた時間をサンプルに変換したサンプル数分のアドレスを加えて得られたアドレスが、前記書き込み可能アドレスの先頭アドレスとして求められる。
【０１３３】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、前記書き込み対象となるサンプリングデータの書き込みアドレスを前記書き込み可能アドレス領域内のアドレスに変換して前記書き込み対象のサンプリングデータを前記バッファに書き込むリアルタイム処理方法を提案する。
【０１３４】
本発明のリアルタイム処理方法によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【０１３５】
さらに、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるときは、前記書き込み対象となるサンプリングデータの書き込みアドレスが、前記書き込み可能アドレス領域内のアドレスに変換され、前記書き込み対象のサンプリングデータが前記バッファに書き込まれる。
【０１３６】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、読み出し処理対象となる読み出しアドレスに対応した時刻と前記パケットを受信した時刻との差の時間をサンプリング数に換算して前記読み出し対象となる読み出しアドレスに加算し、さらに該加算結果に所定の余裕時間をサンプリング数に変換した値を加算して前記バッファにおける書き込みアドレスを前記書き込み対象となるサンプリングデータの前記書き込み可能アドレス領域内のアドレスに決定し、該アドレスに前記受信パケットに含まれていたサンプリングデータを書き込むリアルタイム処理方法を提案する。
【０１３７】
本発明のリアルタイム処理方法によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【０１３８】
さらに、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるときは、読み出し処理対象となる読み出しアドレスに対応した時刻と前記パケットを受信した時刻との差の時間をサンプリング数に換算して前記読み出し対象となる読み出しアドレスに加算し、さらに該加算結果に所定の余裕時間をサンプリング数に変換した値を加算して前記バッファにおける書き込みアドレスを前記書き込み対象となるサンプリングデータの前記書き込み可能アドレス領域内のアドレスに決定し、該アドレスに前記受信パケットに含まれていたサンプリングデータが書き込まれる。
【０１３９】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、前記所定の余裕時間を増加させるリアルタイム処理方法を提案する。
【０１４０】
本発明のリアルタイム処理方法によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【０１４１】
さらに、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以降に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるときは、前記余裕時間が増加される。
【０１４２】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、前記所定の余裕時間を、所定の最大余裕時間を超えては増加させないリアルタイム処理方法を提案する。
【０１４３】
本発明のリアルタイム処理方法によれば、前記余裕時間は、前記最大余裕時間を超えて増加されることがない。
【０１４４】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以前に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるとき、前記書き込み対象となるサンプリングデータのうち、前記書き込み可能アドレス領域内のアドレスに書き込むべきサンプリングデータのみを前記バッファに書き込むリアルタイム処理方法を提案する。
【０１４５】
本発明のリアルタイム処理方法によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【０１４６】
さらに、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記バッファに書き込まれている最後のサンプリングデータ以前に書き込まれるべきデータであり、且つ前記書き込み対象となるサンプリングデータの前記決定した書き込みアドレスが、前記書き込み可能アドレス領域の先頭のアドレス以前に読み出されるアドレスであるときは、前記書き込み対象となるサンプリングデータのうち、前記書き込み可能アドレス領域内のアドレスに書き込むべきサンプリングデータのみが前記バッファに書き込まれる。
【０１４７】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の最終アドレスとして求めるリアルタイム処理方法を提案する。
【０１４８】
本発明のリアルタイム処理方法によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の最終アドレスとして求められる。
【０１４９】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の最終アドレスとして求め、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータの少なくとも一部が、前記書き込み可能アドレス領域の最終アドレス以降に書き込まれるべきデータであるとき、前記書き込み対象となるサンプリングデータの書き込みアドレスを前記書き込み可能アドレス領域内のアドレスに変換して前記書き込み対象のサンプリングデータを前記バッファに書き込むリアルタイム処理方法を提案する。
【０１５０】
本発明のリアルタイム処理方法によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の最終アドレスとして求められる。
【０１５１】
さらに、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータの少なくとも一部が、前記書き込み可能アドレス領域の最終アドレス以降に書き込まれるべきデータであるときは、前記書き込み対象となるサンプリングデータの書き込みアドレスを前記書き込み可能アドレス領域内のアドレスに変換して前記書き込み対象のサンプリングデータが前記バッファに書き込まれる。
【０１５２】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の最終アドレスとして求め、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記書き込み可能アドレス領域の最終アドレス以降に書き込まれるべきデータであるとき、前記バッファの書き込み可能アドレス領域の先頭アドレスから書き込み可能アドレス領域の最終アドレスまでのサンプリングデータを全て消去し、前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定するリアルタイム処理方法を提案する。
【０１５３】
本発明のリアルタイム処理方法によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の最終アドレスとして求められる。
【０１５４】
さらに、前記受信したパケットのフレームに含まれる書き込み対象となるサンプリングデータが前記書き込み可能アドレス領域の最終アドレス以降に書き込まれるべきデータであるときは、前記バッファの書き込み可能アドレス領域の先頭アドレスから書き込み可能アドレス領域の最終アドレスまでのサンプリングデータが全て消去される。また、前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスが、前記サンプリングデータ毎に決定される。
【０１５５】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、前記書き込み可能アドレス領域の先頭アドレス以前に読み出されるアドレスにデータが書き込まれておらず、且つ、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスが、前記バッファに書き込まれている最初のサンプリングデータ以前に書き込まれるべきアドレスであるとき、前記バッファに書き込まれている最初のサンプリングデータの先頭アドレスから前記受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスを差し引いて得られたサンプル数を、シフト量として算出し、前記バッファに既に書き込まれているサンプリングデータの最終アドレスに対して前記シフト量を加えたアドレスが、前記書き込み可能領域の最終アドレスを超えないアドレスであるとき、前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスを前記サンプリングデータ毎に決定し、且つ、前記バッファに既に書き込まれているサンプリングデータを、前記受信したパケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスに対して前記シフト量を加えたアドレス位置に移動するリアルタイム処理方法を提案する。
【０１５６】
本発明のリアルタイム処理方法によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【０１５７】
さらに、前記書き込み可能アドレス領域の先頭アドレス以前に読み出されるアドレスにデータが書き込まれておらず、且つ、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスが、前記バッファに書き込まれている最初のサンプリングデータ以前に書き込まれるべきアドレスであるときは、前記バッファに書き込まれている最初のサンプリングデータの先頭アドレスから前記受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスを差し引いて得られたサンプル数がシフト量として算出される。
【０１５８】
さらにまた、前記バッファに既に書き込まれているサンプリングデータの最終アドレスに対して前記シフト量を加えたアドレスが、前記書き込み可能領域の最終アドレスを超えないアドレスであるときに、前記パケットの受信時刻に基づいて前記受信したパケットに含まれるフレームの各サンプリングデータを書き込むための前記バッファにおける書き込みアドレスが、前記サンプリングデータ毎に決定され、且つ、前記受信したパケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスに対して前記シフト量を加えたアドレス位置に、前記バッファに既に書き込まれているサンプリングデータが移動される。
【０１５９】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスを書き込み可能アドレス領域の先頭アドレスとして求め、前記書き込み可能アドレス領域の先頭アドレス以前に読み出されるアドレスにデータが書き込まれておらず、且つ、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスが、前記バッファに書き込まれている最初のサンプリングデータ以前に書き込まれるべきアドレスであるとき、前記バッファに書き込まれている最初のサンプリングデータの先頭アドレスから前記受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスを差し引いて得られたサンプル数をシフト量として算出し、前記バッファに既に書き込まれているサンプリングデータの最終アドレスに対して前記シフト量を加えたアドレスが、前記書き込み可能領域の最終アドレスを超えるアドレスであるとき、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームのサンプリングデータのうち、前記書き込み可能アドレス領域の先頭アドレス以降に書き込まれるべきサンプリングデータのみを前記バッファに書き込むリアルタイム処理方法を提案する。
【０１６０】
本発明のリアルタイム処理方法によれば、読み出し処理対象となる読み出しアドレス領域の最終アドレスよりも所定サンプリング数後に読み出されるアドレスが、書き込み可能アドレス領域の先頭アドレスとして求められる。
【０１６１】
また、前記書き込み可能アドレス領域の先頭アドレス以前に読み出されるアドレスにデータが書き込まれておらず、且つ、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスが、前記バッファに書き込まれている最初のサンプリングデータ以前に書き込まれるべきアドレスであるとき、前記バッファに書き込まれている最初のサンプリングデータの先頭アドレスから前記受信パケットに含まれるフレームの先頭のサンプリングデータの書き込みアドレスを差し引いて得られたサンプル数がシフト量として算出され、前記バッファに既に書き込まれているサンプリングデータの最終アドレスに対して前記シフト量を加えたアドレスが、前記書き込み可能領域の最終アドレスを超えるアドレスであるとき、前記タイムスタンプに基づいて決定した受信パケットに含まれるフレームのサンプリングデータのうち、前記書き込み可能アドレス領域の先頭アドレス以降に書き込まれるべきサンプリングデータのみが前記バッファに書き込まれる。
【０１６２】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、前記第２周期に相当する時間の経過を待つ処理を精度の補償されない休止命令を用いて実現する場合に、前記読み出し処理を次に開始すべき時刻を読み出し処理開始目標時刻となして、装置起動直後に前記読み出し処理開始目標時刻を現在時刻に設定して保持し、前記読み出し処理の実行を開始した時刻を読み出し処理開始時刻として、該読み出し処理開始時刻から前記保持されている読み出し処理開始目標時刻を差し引いた時間を誤差時間として算出し、前記読み出し処理開始時刻に前記第２周期に相当する時間を加算すると共に該加算結果の時刻から前記誤差時間を差し引いた時刻を新たな読み出し処理開始目標時刻として設定して保持し、前記読み出し処理を終了した時刻を読み出し処理終了時刻として、前記保持している読み出し処理開始目標時刻から前記読み出し処理終了時刻を差し引いた時間を前記休止時間となして前記処理休止命令を実行するリアルタイム処理方法を提案する。
【０１６３】
本発明のリアルタイム処理方法によれば、読み出し処理対象となる読み出しアドレスが、前記第２周期に相当する時間が経過する毎に前記第２周期サンプルだけ移動される。
【０１６４】
さらに、前記第２周期に相当する時間の経過を待つ処理を精度の補償されない休止命令を用いて実現する場合に、前記読み出し処理を次に開始すべき時刻が、読み出し処理開始目標時刻とされて、装置起動直後に前記読み出し処理開始目標時刻が現在時刻に設定されて保持される。
【０１６５】
また、前記読み出し処理の実行を開始した時刻が、読み出し処理開始時刻とされて、該読み出し処理開始時刻から前記保持されている読み出し処理開始目標時刻を差し引いた時間が、誤差時間として算出される。
【０１６６】
さらにまた、前記読み出し処理開始時刻に前記第２周期に相当する時間が加算されると共に該加算結果の時刻から前記誤差時間を差し引いた時刻が、新たな読み出し処理開始目標時刻として設定されて保持される。
【０１６７】
また、前記読み出し処理を終了した時刻が読み出し処理終了時刻とされて、前記保持している読み出し処理開始目標時刻から前記読み出し処理終了時刻を差し引いた時間が前記休止時間とされて前記処理休止命令が実行される。
【０１６８】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、前記算出した休止時間が負の値のときは、前記休止命令の実行を中止するリアルタイム処理方法を提案する。
【０１６９】
本発明のリアルタイム処理方法によれば、前記算出した休止時間が負の値のときは、前記休止命令の実行が中止されて前記読み出し処理が継続して行われる。これにより、前記読み出し処理の処理遅延を低減することができる。
【０１７０】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、前記算出した休止時間が負の値であり、前記休止時間の絶対値が所定の許容最大値以上になったときに、前記休止命令の実行を中止し、読み出し処理対象となる読み出しアドレスを前記休止時間の絶対値に相当するサンプル数だけ移動させ、前記読み出し処理対象となる読み出しアドレスを移動した後に読み出し処理対象となる読み出しアドレス以前に存在していたサンプリングデータを消去し、前記読み出し処理開始目標時刻を現在時刻に設定して、前記誤差時間をクリアするリアルタイム処理方法を提案する。
【０１７１】
本発明のリアルタイム処理方法によれば、前記算出した休止時間が負の値であり、前記休止時間の絶対値が所定の許容最大値以上になったときに、前記休止命令の実行が中止され、読み出し処理対象となる読み出しアドレスを前記休止時間の絶対値に相当するサンプル数だけ移動される。
【０１７２】
さらに、前記読み出し処理対象となる読み出しアドレスが移動された後に読み出し処理対象となる読み出しアドレス以前に存在していたサンプリングデータが消去され、前記読み出し処理開始目標時刻が現在時刻に設定されて、前記誤差時間がクリアされる。
【０１７３】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、前記読み出し処理対象となるバッファ上のデータを全て読み出し、全てのバッファ上に処理待ちのデータが無い状態となった場合に、前記読み出し処理開始目標時刻を現在時刻に設定して、前記誤差時間をクリアするリアルタイム処理方法を提案する。
【０１７４】
本発明のリアルタイム処理方法によれば、前記読み出し処理対象となるバッファ上のデータを全て読み出し、全てのバッファ上に処理待ちのデータが無い状態となった場合には、前記読み出し処理開始目標時刻が現在時刻に設定されて、前記誤差時間がクリアされる。
【０１７５】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、前記パケットをリアルタイム転送プロトコル（ＲＴＰ）を用いて受信するリアルタイム処理方法を提案する。
【０１７６】
本発明のリアルタイム処理装置によれば、ＲＴＰパケットのタイムスタンプによって前記サンプリングデータの順番が識別される。
【０１７７】
また、本発明は上記のリアルタイム処理方法において、前記信号が音声信号であり、前記コンピュータ装置は、バッファに格納されたサンプリングデータから音声データを生成するリアルタイム処理方法を提案する。
【０１７８】
本発明のリアルタイム処理装置によれば、サンプリングデータから音声データが生成される。
【０１７９】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、２つ以上の送信装置のそれぞれから受信した音声パケット信号を受信し、各音声パケット信号から抽出したサンプリングデータを各送信装置ごとに設けられたバッファに格納し、各バッファに格納されているサンプリングデータを読み出してミキシングし、該ミキシングによって得られたデータを出力するリアルタイム処理方法を提案する。
【０１８０】
本発明のリアルタイム処理方法によれば、
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、バッファにおけるサンプリングデータが格納されているアドレスの先頭と末尾を記憶し、バッファの、読み出し処理対象となる読み出しアドレスと、格納されているサンプリングデータの先頭アドレス及び末尾アドレスを比較することで、当該バッファのデータの読み出しを開始するべきか否かを判定するリアルタイム処理方法を提案する。
【０１８１】
本発明のリアルタイム処理方法によれば、サンプリングデータがバッファ上に格納されているアドレスの先頭と末尾が記憶される。さらに、前記バッファの、読み出し処理対象となる読み出しアドレスと、格納されているサンプリングデータの先頭アドレス及び末尾アドレスが比較されて、当該バッファのデータの読み出しを開始するべきか否かが判定される。
【０１８２】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、バッファに格納されているサンプリングデータのうち、少なくとも１つが読み出し対象領域に至ったときに読み出し処理を開始するリアルタイム処理方法を提案する。
【０１８３】
本発明のリアルタイム処理方法によれば、前記データ読み出し手段により、前記バッファに格納されているサンプリングデータのうち、少なくとも１つが読み出し対象領域に至ったときに、読み出し処理が開始される。
【０１８４】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、バッファに格納されているサンプリングデータの全てが読み出し処理を終え、読み出し処理待ちのデータがバッファ上に存在しなくなったとき、読み出し処理を行わずに読み出し対象領域の移動のみを行うリアルタイム処理方法を提案する。
【０１８５】
本発明のリアルタイム処理方法によれば、前記バッファに格納されているサンプリングデータの全てが読み出し処理を終え、読み出し処理待ちのデータがバッファ上に存在しなくなったときは、読み出し処理は行われず、読み出し対象領域の移動のみが行われる。
【０１８６】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、バッファに格納されているサンプリングデータのうち、読み出し対象領域に至らないデータについては、読み出し及び読み出し処理を行わずに読み出し対象領域の移動のみを行うリアルタイム処理方法を提案する。
【０１８７】
本発明のリアルタイム処理方法によれば、前記バッファに格納されているサンプリングデータのうち、読み出し対象領域に至らないデータについては、読み出し処理が行われずに、読み出し対象領域の移動のみが行われる。
【０１８８】
また、本発明は上記のリアルタイム処理方法において、前記コンピュータ装置は、前記第２周期時間毎に前記バッファ上の読み出し処理対象領域を第２周期分ずつ移動し、読み出しが開始されていない場合に、前記読み出し処理対象領域の移動によって、前記バッファ上のサンプリングデータのうち、最も読み出し処理対象領域に近いデータが、前記読み出し処理対象領域の最後尾から前記第２周期以内の領域に入ったとき、前記読み出し処理対象領域と前記サンプリングデータの先頭のサンプルを時間に変換した時間が経過した後に、読み出し対象領域を前記サンプリングデータの先頭サンプルが格納されているアドレスに移動するリアルタイム処理方法を提案する。
【０１８９】
本発明のリアルタイム処理方法によれば、前記バッファ上の読み出し処理対象領域が前記第２周期時間毎に第２周期分ずつ移動され、読み出しが開始されていない場合に、前記読み出し処理対象領域の移動によって、前記バッファ上のサンプリングデータのうち、最も読み出し処理対象領域に近いデータが、前記読み出し処理対象領域の最後尾から前記第２周期以内の領域に入ったとき、前記読み出し処理対象領域と前記サンプリングデータの先頭のサンプルが時間に変換され、該時間が経過した後に、読み出し対象領域を前記サンプリングデータの先頭サンプルが格納されているアドレスに移動される。
【０１９０】
また、本発明は、上記の目的を達成するために、連続した信号を所定の第１周期毎に切り取り、該切り取った信号を前記第１周期よりも短いサンプリング時間毎にサンプリングして得られた複数のサンプリングデータを含むフレームを生成すると共に該フレーム毎に、該フレームを含むパケットを生成して順次送信する送信装置から通信網を介して前記パケットを受信し、前記受信したパケットに含まれる前記フレームを抽出して該フレームに含まれるサンプリングデータをバッファに格納し、バッファに格納されているサンプリングデータに対して時間経過に伴って所定の第２周期分ずつ読み出し処理を施すリアルタイム処理をコンピュータ装置に行わせるコンピュータプログラムにおいて、上記のリアルタイム処理方法を実行するステップを含むリアルタイム処理プログラムを提案する。
【０１９１】
また、本発明は、上記の目的を達成するために、上記のリアルタイム処理プログラムが記憶されたコンピュータ読み取り可能な情報記憶媒体を提案する。
【発明の効果】
【０１９２】
本発明のリアルタイム処理装置によれば、複数地点の送信装置から送信されたパケットの遅延揺らぎ吸収を各送信装置ごとに設けたパケット処理手段のバッファにおいて独立して行うことができ、サンプリング時間単位で最適な遅延に制御し、サンプリング時間単位の精度でバッファからデータの読み出しを行うことができる。
【０１９３】
また、本発明のリアルタイム処理方法によれば、所定のコンピュータ装置を上記リアルタイム処理装置として動作させることができ、複数地点の送信装置から送信されたパケットの遅延揺らぎ吸収を各送信装置ごとに設けたバッファにおいて独立して行うことができ、サンプリング時間単位で最適な遅延に制御し、サンプリング時間単位の精度でバッファからデータの読み出しを行うことができる。
【０１９４】
また、本発明のリアルタイム処理プログラムによれば、所定のコンピュータ装置を上記のリアルタイム処理装置として動作させることが容易に可能になる。
【０１９５】
また、本発明のリアルタイム処理プログラムが記憶されたコンピュータ読み取り可能な情報記憶媒体によれば、上記プログラムを容易に配布することができ、所定のコンピュータ装置を上記のリアルタイム処理装置として動作させることが容易に可能になる。
【発明を実施するための最良の形態】
【０１９６】
本発明におけるリアルタイム処理装置は、パケットを受信する手段と、パケットを受信した時刻を取得する手段と、受信したパケットからサンプリングデータを取得する手段と、時刻毎に異なる読み出しアドレスを取得する手段と、読み出しアドレスに対応した時刻を取得する手段と、読み出しアドレスに対応した時刻と、前記パケットを受信した時刻との差の時間をバッファ上のアドレスの差に換算して、前記読み出しアドレスに加算し、さらに該加算結果に、所定の余裕時間をアドレスの差に換算した値を加算して前記バッファにおける書き込みアドレスを決定する手段と、前記バッファにおける前記決定した書き込みアドレスにサンプリングデータを書き込む手段と、前記バッファにおける前記読み出しアドレスからサンプリングデータを読み出す手段とを有することを特徴とする。
【０１９７】
また、本発明におけるリアルタイム処理装置は、上記装置において、前記バッファに既に書き込まれているサンプリングデータとの相対アドレスで前記受信パケットに含まれているサンプリングデータを書き込むアドレスを決定する手段と、前記パケットを受信した時刻と、読み出しアドレスに対応した時刻とを用いて、前記受信パケットに含まれているサンプリングデータを書き込むアドレスを決定する手段とを有することを特徴とする。
【０１９８】
また、本発明のリアルタイム処理方法は、パケットを受信し、パケットを受信した時刻を取得すると共に受信したパケットからサンプリングデータを取得し、さらに、時刻毎に異なる読み出しアドレスを取得すると共に読み出しアドレスに対応した時刻を取得し、読み出しアドレスに対応した時刻と、前記パケットを受信した時刻との差の時間をバッファ上のアドレスの差に換算して、前記読み出しアドレスに加算し、さらに該加算結果に、所定の余裕時間をアドレスの差に換算した値を加算して前記バッファにおける書き込みアドレスを決定し、前記バッファにおける前記決定した書き込みアドレスにサンプリングデータを書き込み、前記バッファにおける前記読み出しアドレスからサンプリングデータを読み出すことを特徴とする。
【０１９９】
以下、図面に基づいて本発明の一実施形態を説明する。
【０２００】
図１は、本発明の第１実施形態におけるリアルタイムミキシング処理装置の機能構成を示すブロック図である。図において、１０はリアルタイムミキシング処理装置で、周知のコンピューター装置からなり、予め設定されているプログラムによって動作し、複数のパケット処理部１１（１１−１〜１１−Ｎ（Ｎは自然数））と、音声データミキシング処理部１２、音声データ送信処理部１３、基準時刻監視・音声データ取出制御部１４を備えている。ここで、リアルタイムミキシング処理装置１０を構成する各構成部分はソフトウェアとハードウェアの双方によって構成されている。
【０２０１】
パケット処理部１１−１〜１１−Ｎ内の構成要素１１１〜１１５について、同様の構成であるために特に１１１−１等とは記載していないが、特に１１−１に含まれる１１１を指して説明を行う場合には、それぞれ１１１−１と記述する。また、１１１−ｉとする場合には、添え字ｉは１〜Ｎのいずれかの値をとる。同様に１１−ｉに対応した構成要素が固有に用いる変数を、添え字[i]を用いてStickTimeMin[i]、CurrentStickTime[i]等で表す。
【０２０２】
本実施形態のリアルタイムミキシング処理装置１０は、例えば、図２及び図３に示すような遠隔会議システムのサーバ２２に適用することが可能である。このような遠隔会議システムは複数のクライアント端末装置２１とサーバ２２とを通信網３０を介して接続し、各クライアント端末装置２１の送信部２１１から送信された音声データを含むパケットをサーバ２２のパケット処理部１１−１〜１１−Ｎが受信し、受信した各クライアント端末装置２１からの音声信号を音声データミキシング処理部１２によってミキシングし、音声データ送信処理部１３によってパケット化して、各クライアント端末装置２１の受信部２１２に送信するシステムである。
【０２０３】
各クライアント端末装置２１側では、音声信号を所定の第１周期で切り取り、これを所定のサンプリング時間毎にサンプリングしてディジタル信号に変換すると共に符号化した音声データフレームを生成し、さらにこの音声データフレームを含むリアルタイム転送プロトコル（以下、ＲＴＰと称する）パケットを作成して、作成したＲＴＰパケットを通信網３０を介してリアルタイムでサーバ２２に向けて送信する。
【０２０４】
サーバ２２では、各クライアント端末装置２１毎に設けられたパケット処理部１１−１〜１１−Ｎによって、受信したＲＴＰパケットから音声データフレームを抽出し、この音声データフレームを復号化してディジタル音声データを生成した後、これをバッファに格納し、各バッファに格納されたディジタル音声データを所定の第２周期毎に読み出し、これをミキシングする。さらに、ミキシングしたディジタル音声データを符号化した音声データフレームを生成し、さらにこの音声データフレームを含むＲＴＰパケットを生成して、作成したＲＴＰパケットを、通信網３０を介してリアルタイムで各クライアント端末装置２１に向けて送信する。
【０２０５】
尚、本実施形態では、上記サンプリングの周波数を８ｋＨｚに設定し、上記第１及び第２周期のそれぞれを２０ｍｓに設定している。
【０２０６】
上記パケット処理部１１−１〜１１−Ｎのそれぞれは、パケット受信処理部１１１と、音声データ復号処理部１１２、音声データ貼付処理部１１３、音声データバッファ１１４、音声データ取出処理部１１５から構成されている。
【０２０７】
パケット受信処理部１１１は、通信網３０を介してクライアント端末装置２１から送信されたＲＴＰパケットを受信してこれを音声データ復号処理部１１２に送出する。このとき、ＲＴＰパケットを受信した時刻としてタイムスタンプを打ち、パケット受信時刻を管理する。即ち、パケット受信処理部１１１は、ＲＴＰパケットを受信した時刻Ｔｒを取得し、この時刻Ｔｒの情報を受信したＲＴＰパケットと共に音声データ復号処理部１１２に渡す。
【０２０８】
音声データ復号処理部１１２は、ＲＴＰパケットの解析処理、パケット受信処理部１１１によって打たれたタイムスタンプと受信パケットのヘッダに含まれるＲＴＰ時刻を比較して後述するリングバッファSoundDataMap[i]への書き込みアドレスを計算する処理、ＲＴＣＰ用に受信状況を分析する処理等を行う。
【０２０９】
ここで、リングバッファSoundDataMap[i]への書き込みアドレスとは、後述する音声データバッファ１１４のリングバッファSoundDataMap[i]に、当該受信パケットの音声データフレームを書き込む際の、リングバッファSoundDataMap[i]のアドレスを意味する。
【０２１０】
また、書き込みアドレスの計算は音声データ復号処理部１１２で行ってもよいし、音声データ貼付処理部１１３で行っても良い。本実施形態では、音声データ貼付処理部１１３でリングバッファへの書き込みアドレスを決定することとする。
【０２１１】
即ち、音声データ復号処理部１１２は、パケット受信処理部１１１からＲＴＰパケットとパケット受信時刻を受け取り、ＲＴＰパケットからヘッダ部と符号化された音声データフレームを取得し、符号化された音声データフレームを復号して、音声のサンプリングデータとと音声データのフレーム長を得る。また、ヘッダ部からＲＴＰタイムスタンプを取得する。
【０２１２】
音声データ復号処理部１１２は、パケット受信時刻、ＲＴＰタイムスタンプ、復号された音声データ、音声データのフレーム長を音声データ貼付処理部１１３に送出する。
【０２１３】
音声データ貼付処理部１１３は、音声データミキシング処理部１２から制御情報を入力すると共に、この制御情報と音声データ復号処理部１１２から入力したＲＴＰタイムスタンプに基づいて、音声データ復号処理部１１２から入力した復号済の複数のサンプリングデータを含む音声データフレームを格納要求と共に音声データバッファ１１４に送出する。
【０２１４】
ここで、制御情報とは、音声データ取出処理部１１５が音声データバッファ１１４のリングバッファSoundDataMap[i]から直前に音声データを読み出した領域の先頭アドレスMixStartTimeと、基準時刻監視・音声データ取出制御部１４が前回起動した際に設定したMixStartTimeに対応する時刻MixerTimeStamp、および、音声データ取出処理部１１５がバッファから読み出す所定の第２周期に相当するサイズMixFrameTimeLenである。
【０２１５】
上記に加えて、データ貼付処理部１１３は、データ貼付処理部１１３が音声データバッファ１１４のリングバッファSoundDataMap[i]に書き込んだ音声データ領域の先頭アドレスFrameStartTime[i]、音声データ領域の末尾の次のアドレスFrameEndTime[i]、音声データ復号処理部１１２から入力された、当該パケット受信時刻CurrentTimeStamp[i]、ＲＴＰタイムスタンプRTPCurrentTime[i]、音声データフレーム、音声データフレーム長CurrentFrameTimeLen[i]を用いて当該音声データフレームの書き込みアドレスを決定することができる。
【０２１６】
また、データ貼付処理部１１３は、後述するRTPBaseCount[i]も保持し、当該音声データフレームの書き込みアドレス算出に用いる。
【０２１７】
以下、バッファメモリの所定アドレスへサンプリングデータを書き込む処理を貼付と称する。
【０２１８】
また、音声データ貼付処理部１１３は、後述する基準アドレスBaseCountに基づいて、音声データバッファ１１４に備わるリングバッファSoundDataMap[i]（図４に示す）のマッピング処理及びリングバッファSoundDataMap[i]へのサンプリングデータの貼付位置決定処理を行う。これらの処理には、最初のパケットのフレーム処理、フレームが既にリングバッファ上に存在する場合の処理、最初のパケットの順序逆転時の処理等を含む。
【０２１９】
また、音声データ貼付処理部１１３は、正常貼付処理、アンダーランの処理、オーバーランの処理等を行う。
【０２２０】
「正常貼付」「アンダーラン」「オーバーラン」の定義については後述する。
【０２２１】
アンダーランの処理では、貼付対象となるフレームに含まれるサンプリングデータが、すでにリングバッファ上に貼り付けられているフレームのサンプリングデータに連続するものであり、且つ、データの貼付位置が、貼付可能領域の先頭よりも前の位置に貼り付けられるべきものである場合には、再バッファリングを行い、所定の余裕時間を伸ばしてサンプリングデータの貼付を行う。
【０２２２】
「アンダーラン」時の処理の詳細については、第３実施例で説明する。
【０２２３】
オーバーランの処理は、オーバーラン境界StickTimeMax[i]を越えてサンプリングデータがたまった場合の処理であり、この場合、貼付可能位置の下限StickTimeMin[i]以降のサンプリングデータを全て破棄して再バッファリング処理を行い、貼付可能領域の先頭を再バッファリング先頭位置に設定する。
【０２２４】
「オーバーラン」時の処理の詳細については、第３実施例で説明する。
【０２２５】
さらに、音声データ貼付処理部１１３は、その他の処理として、フレーム開始位置FrameStartTime[i]及びフレーム終了位置FrameEndTime[i]等の変数を更新する。
【０２２６】
ここで、FrameStartTime[i]は、音声データバッファ１１４のリングバッファSoundDataMap[i]に書き込んだ音声データ領域の先頭アドレスを保持する変数であり、FrameEndTime[i]は上記音声データ領域の末尾の次のアドレスを保持する変数である。
【０２２７】
音声データ貼付処理部１１３の処理内容の詳細説明に先立ち、音声データバッファ１１４および音声データ取出処理部１１５、基準時刻監視・音声データ取出制御部１４について説明する。
【０２２８】
音声データバッファ１１４は、音声データ貼り付け処理部１１３から入力した複数のサンプリングデータを含む音声データフレームを、アドレスを指定した格納要求に基づいてバッファメモリの所定アドレスにサンプリングデータ単位で書き込む。
【０２２９】
また、音声データバッファ１１４は、音声データ取出処理部１１５からの指示により指定されたアドレスから音声データの読み出しを行う。
【０２３０】
また、音声データバッファ１１４は、バッファメモリとして周知のリングバッファを備えている。ここで、音声データバッファ１１４は、各クライアント端末装置２１毎に設けられたパケット処理部１１−１〜１１−Ｎに対応しているため、１１−i番目に対応する音声データバッファを１１４−iと表し、１１４−ｉに対応するリングバッファをSoundDataMap[i]で表すこととする。
【０２３１】
図４及び図５にリングバッファSoundDataMap[i]の例を示す。
【０２３２】
図４中の基準アドレスBaseCountは周知のリングバッファSoundDataMap[i]の構成要素で、リングバッファの境界アドレスに対応した論理アドレスの値を保持する変数である。図５に示すようにSoundDataMap[i][0]をバッファ上のアドレスの先頭とし、サンプリング単位でアドレスが連続して増加する。アドレスの値を添え字[j]で表すと、[j]はリングバッファの最大サイズを超えると再度「０」に設定されるため、０からバッファに格納できる最大サンプル数に対応するアドレスまでの値をとる。
【０２３３】
これに対して、基準アドレスBaseCountは、SoundDataMap[i][j]に対応するアドレスへの論理的なアドレスを保持する変数であり、基準アドレスBaseCountの値を、バッファサイズで割った余りが実際のバッファの物理アドレスSoundDataMap[i][j]に対応する。
【０２３４】
基準アドレスBaseCountは初期値として「０」が設定され、基準アドレスBaseCountの保持する値は、対応する時間の経過にともなって単調に増加する。
【０２３５】
論理的な基準アドレスBaseCountとの相対値を用いることで、物理的なバッファサイズよりも広い論理アドレス領域を表現することが可能となる。
【０２３６】
以下、アドレスの表現として論理アドレスを用い、基準アドレスBaseCountが保持する論理アドレスをリングバッファ上のアドレス領域の先頭アドレスとし、アドレスは時計回りにサンプリング単位で連続して増加することとする。
【０２３７】
小さな値のアドレスほど、時間的に古いサンプリングデータの格納アドレスを表し、大きなアドレスほど時間的に新しいサンプリングデータに対応するアドレスとなる。
リングバッファは、論理的には、基準アドレスBaseCountが指すアドレスを先頭として、バッファサイズ後方までのアドレスを保持する。
【０２３８】
以下、「アドレス」と記述されるときは、基準アドレスBaseCountを基準とする論理アドレスを指すものとする。
【０２３９】
上記のように、リングバッファSoundDataMap[i]では、基準アドレスBaseCountを基準として、時刻とアドレスがサンプリング単位で対応付けられてデータの読み出しと書き込みが行われる。例えば、サンプリング周波数が8kHz、量子化ビット数が16ビットでサンプリングされた音声データを扱う場合は、１サンプルにあたる16ビットごとのデータを単位としてアドレスの指定が行われる。（この場合は、１サンプルは1/8000(s)時間に対応する。）
サンプリング周波数が8kHzのとき、１秒分のサンプリングデータを保持するためには、バッファサイズとしては8000サンプル分のサイズが必要となる。
【０２４０】
また、図４において、MixStartTimeはミキシング処理に際して読み出される領域の先頭アドレス、MixEndTimeはミキシング処理で読み出す領域の末尾の次のアドレス、StickTimeMin[i]は貼付可能位置の下限、StickTimeMax[i]はオーバーラン境界、CurrentStickTime[i]はフレーム貼付位置、StickTargetTime[i]は理想貼付位置で、これらのそれぞれは基準アドレスBaseCountを基準として設定され、基準アドレスBaseCountは所定時刻ごとに更新される。
【０２４１】
本実施例では、例えば、SoundDataMap[i]のサイズを６０秒に相当する480000サンプル分とし、基準アドレスBaseCountを３０秒ごとに240000サンプル分増加することとする。
【０２４２】
また、PreBufTimeLen[i]は前方バッファで、再生余裕時間で、パケットを受け取ってから再生するまでの余裕時間に相当するサンプル数を保持する変数である。
【０２４３】
クライアント端末装置２１からのＲＴＰパケットは、通信網３０の伝送路の状態により、到着間隔が揺らぐ場合がある。受信したパケット内の音声サンプリングデータを音声データバッファ１１４に一時的に保持して、適切な時間分だけバッファリングを行ってから読み出すことで、このような揺らぎを吸収して連続したサンプルデータとして取り出すことが可能となる。
【０２４４】
このようなパケットの受信揺らぎの分散が大きいときには、バッファに保持する時間を長く設定する必要があり、受信揺らぎの分散が小さいときには、バッファに保持する時間を短くすることができる。
【０２４５】
サンプリング周波数を8kHzとした場合には、たとえばPreBufTimeLen[i]の値を160サンプルとすると、余裕時間を20msに設定することができる。
【０２４６】
たとえば、パケット受信間隔の揺らぎの累積が20ms以内に収まっている間は、揺らぎを吸収して連続したサンプリングデータを取り出すことが可能となる。
【０２４７】
各クライアント端末装置２１からの音声パケットの受信間隔の揺らぎは、各クライアント端末装置２１との間の伝送路の状態に依存し、個々に異なる。そのためPreBufTimeLen[i]は、各クライアント端末装置２１からのパケット受信状況に応じてに独立した値として設定することが望ましい。
【０２４８】
図４において、MixStartTime[i]は音声データ取出処理部１１５−iからの指示により、直前に取り出した音声データの読み出しアドレスの先頭アドレスを指す変数であり、MixEndTime[i]は直前のデータ読み出しを行ったアドレスの末尾の次のアドレスを指す変数である。
【０２４９】
読み出しに対応するアドレスは、音声データバッファ１１４−１〜１１４−Ｎに対してそれぞれ独立した変数MixStartTime[1]〜MixStartTime[N]で表されるが、本実施例では、同一時刻に対応した読み出しアドレスから読み出しを行うことから、共通の値MixStartTimeを用いてMixStartTime=MixStartTime[1]=MixStartTime[2]=・・・=MixStartTime[N]とすることができる。尚、MixEndTime[i]も同様にMixEndTimeとすることができる。
【０２５０】
以後、読み出しアドレスを表す変数として、MixStartTime、MixEndTimeを用いる。
【０２５１】
ここで、貼付可能領域の先頭StickTimeMin[i]は、バッファからのデータ読み出しとデータ貼付アドレスが同時に同じアドレス領域を指定しないように、ミキシング処理で読み出す領域の末尾の次のアドレスMixEndTimeよりも所定サンプル後のアドレスに設定されている。また、オーバーラン境界StickTimeMax[i]は、貼付可能領域の末尾の次のアドレスで、データの最大保持量を規定する。また、オーバーラン境界StickTimeMax[i]からミキシング処理に対応したアドレスMixStartTimeまでの間は、バッファがゼロクリアされるべき領域である。
【０２５２】
リングバッファSoundDataMap[i]における位置は、図５に示すように、サンプリングデータ単位で割り当てるアドレスによって表され、サンプリングデータの読み出し処理や貼付処理に用いられる。
【０２５３】
基準時刻監視・音声データ取出制御部１４は第２周期ごと（たとえば20msごと）に起動され、音声データ取出処理部１１５−１〜１１５−Ｎに対して、読み出しアドレスの更新を指示する。これにより、音声データミキシング処理部１２がミキシングに用いる音声データの読み出しアドレスが更新される。
【０２５４】
音声データ取出処理部１１５は、基準時刻監視・音声データ取出制御部１４からの指示により第２周期ごとに対応する音声データバッファ１１４（SoundDataMap[i]）からのデータ読み出しアドレスを更新し、対応するアドレスから音声データを読み出す。
【０２５５】
音声データ取出処理部１１５では、基準時刻監視・音声データ取出制御部１４からの指示を受けて、前回読み出しを行ったMixStartTimeからMixEndTime-1までのアドレスで示される領域を無音データ「０」で初期化し、次いで、前回取り出し処理が行われた際の読み出しアドレスの先頭MixStartTimeに、前回読み出されたサンプル数を加えて、MixStartTimeに今回読み出し処理を行うべき先頭アドレスを設定する。
【０２５６】
同様に、今回読み出されるサンプル数MixFrameTimeLenを用いてMixEndTimeを更新する（MixEndTime=MixStartTime+MixFrameTimeLen）。
【０２５７】
また、基準時刻監視・音声データ取出制御部１４は、起動されるごとに読み出しアドレスの先頭MixStartTimeに対応する時刻MixerTimeStampを取得し保持する。
【０２５８】
本実施例では、例えば、MixStartTimeに対応する時刻として、基準時刻監視・音声データ取出制御部１４の処理が起動された時刻をMixerTimeStampに設定することができる。
【０２５９】
また、基準時刻監視・音声データ取出制御部１４の起動が、理想的には第２周期ごとに行われるべきであるにもかかわらず、実行に際して時刻誤差を生じるような実装では、基準時刻監視・音声データ取出制御部１４が起動すべきだった理想的な時刻をMixStartTimeに対応する時刻MixerTimeStampとすることもできる。たとえば、基準時刻監視・音声データ取出制御部１４の理想的な起動時刻が時刻T1であった場合に、err時間の誤差により実際にはT=T1+errに規準時刻監視・音声データ取出制御部１４が起動されたとする。この場合、前者の例では実際に基準時刻監視・音声データ取出制御部１４が起動された時刻をMixerTimeStampとして設定するので、MixerTimeStamp=T1+errとすることができるし、基準時刻監視・音声データ取出制御部１４が起動されるべきだった理想的な時刻をMixerTimeStampに設定する後者の例ではMixerTimeStamp=T1とすることもできる。
【０２６０】
本実施例においては、時間誤差err=0が成り立つ場合（T1=T1+errの場合）の例として、MixerTimeStamp=T1とした場合について説明する。尚、後者のerr!=0である場合の詳細については第４実施例にて述べる。
【０２６１】
基準時刻監視・音声データ取出制御部１４の起動が20msのごとに周期的に行われる場合には、データ読み出しアドレスの先頭MixStartTimeに対応した時刻MixerTimeStampの値は、20ms分ずつ増加する。また、データの読み出しも20msを単位として行われるので、MixFrameTimeLen=160サンプルとなり、基準時刻監視・音声データ取出制御部１４が起動されるごとに読み出し先頭アドレスMixStartTimeの値は160サンプル分ずつ後方のアドレスに移動する。MixEndTimeの値も同様に160サンプル分ずつ後方に移動する。
【０２６２】
尚、初期状態では音声データバッファ１１４は、振幅０を表す音声サンプルで初期化されており無音の音声データが格納された状態となっている。初期化された状態のアドレス位置から音声データの読み出しを行う場合には、無音サンプルが読み出される。
【０２６３】
音声データ取出処理部１１５は、音声データバッファ１１４のMixStartTimeからMixEndTime-1で指定されたアドレス領域より読み出した第２周期（たとえば160サンプル）分の音声データを音声データミキシング処理部１２に出力する。
【０２６４】
音声データミキシング処理部１２では、音声データ取出処理部１１５−１〜１１５−Ｎから第２周期に相当する音声データを受け取り、それらをミキシング処理し、ミキシングして得られた音声データを音声データ送信処理部１３に出力する。
【０２６５】
ここで、音声データミキシング処理部１２において、例えば通信中のクライアント端末装置２１が１台しか存在せず、Ｎ＝１である場合には、音声データ取出処理部１１５−１〜１１５−Ｎから出力される音声データが１つしかないので、ミキシング処理は行わず、音声データ取出処理部１１５−１から得られた音声フレームをそのまま音声データ送信処理部１３に出力する。
【０２６６】
また、音声データミキシング処理部１２において、ミキシングすべきデータが音声データバッファ１１４−１〜１１４−Ｎ上にない場合には、音声データ取出処理部１１５−１〜１１５−Ｎは音声データバッファ１１４−１〜１１４−Ｎからの音声データ取出処理を行わず、音声データが２つ以上取り出されない場合には、ミキシング処理は行われない。
【０２６７】
音声データ送信処理部１３では、音声データミキシング処理部１２から得られた音声データを、必要に応じて音声符号化処理し、符号化処理された音声フレームを含むＲＴＰパケットを生成して各クライアント端末装置２１に対して送信する。
【０２６８】
基準時刻監視・音声データ取出制御部１４では、音声データ取出処理部１１５−１〜１１５−Ｎのデータ取出処理および、音声データミキシング処理部１２でのミキシング処理、音声データ送信処理部１３での送信処理が完了した後、基準時刻監視・音声データ取出制御部１４の次回起動時刻を設定する。これにより設定された時刻に次回の起動が行われる。
【０２６９】
また、基準時刻監視・音声データ取出制御部１４は、基準アドレスBaseCountを所定時間毎、例えば３０秒単位で更新する。
【０２７０】
音声データ貼付処理部１１３の処理内容について記述する。
【０２７１】
音声データ貼付処理部１１３は、パケット受信処理部１１１で音声パケットが受信されるごとに、パケット受信時刻、ＲＴＰタイムスタンプ、復号された音声データ、音声データのフレーム長を、音声データ復号処理部１１２から受け取る。
【０２７２】
音声データ貼付処理部１１３では、音声データ復号処理部１１２から受け取った情報をもとに、音声データを音声データバッファ１１４に格納する際の書き込みアドレスを算出する。
【０２７３】
次に音声データ貼付処理部１１３は、音声データを、算出した書き込みアドレスと共にデータ書き込み要求として音声データバッファ１１４に送出する。
【０２７４】
音声データ貼付処理部１１３は、当該音声データを音声データバッファ１１４に書き込むアドレスを算出するにあたって、音声データバッファ１１４に既に書き込まれている音声データとの相対アドレスによって書き込みアドレスを決定するか、当該パケットの受信時刻を元に書き込みアドレスを決定するかを判定する。
【０２７５】
以下、音声データバッファ１１４上の音声データとの相対位置によらず、パケット受信時刻を基準としてアドレスを決定する方法を「１類に属するアドレス決定法」、音声データバッファ１１４上に既に書き込まれた音声データとの相対アドレスで当該音声データの書き込みアドレスを決定する方法を「２類に属するアドレス決定法」として定義する。
【０２７６】
判定は、たとえば、SoundDataMap[i]上にこれまでに音声データを書き込んだアドレスの先頭を保持するFrameStartTime[i]、これまでに音声データを書き込んだアドレス末尾の次のアドレスを保持するFrameEndTime[i]を用いて、相対位置でアドレスを算出するかどうかを判定することができる。
【０２７７】
即ち、音声データバッファ１１４−iに書き込まれたデータの先頭アドレスをFrameStartTime[i]、末尾アドレスの次のアドレスをFrameEndTime[i]に保持することとし、初期状態ではFrameStartTime[i]=「−１」、FrameEndTime[i]=「−１」、MixStartTime=「０」としておく。
【０２７８】
パケットを受信する毎に、FrameStartTime[i]<MixStartTime、且つ、FrameEndTime[i]<=MixStartTimeであるかどうかを判定し、真である場合には、当該パケットの受信時刻を元に書き込みアドレスを決定する（「１類に属するアドレス決定法」を用いる）こととし、それ以外の場合には、既に書き込まれたデータとの相対関係によって当該音声データの書き込みアドレスを決定する（「２類に属するアドレス決定法」を用いる）ようにすることができる。尚、書き込みを行った後、次のパケット受信に備えてFrameStartTime[i]、FrameEndTime[i]は適切な値に更新される。この詳細は後述する。
【０２７９】
「１類に属するアドレス決定法」では、当該受信パケットの受信時刻と、受信時点での読み出しアドレスを基準として、読み出しアドレスに対応した時刻と、前記パケットを受信した時刻との差の時間を、バッファ上のアドレスの差に換算して前記読み出しアドレスに加算し、さらに該加算結果に、通信網３０によるパケット受信時刻の揺らぎの統計量に基づいて決定した所定の余裕時間を、アドレスの差に換算した値を加算して前記バッファにおける書き込みアドレスを決定する。
これは、通信網３０によるパケット受信時刻の揺らぎを吸収するための余裕時間だけ、音声データをバッファに保持した後に読み出しを行うことに相当する。
【０２８０】
「２類に属するアドレス決定法」は、音声データバッファ上に既に書き込まれたサンプリングデータが存在する場合に、バッファ上に既に書き込んだサンプリングデータとの相対アドレスで当該受信パケットに含まれるサンプリングデータの書き込みアドレスを決定する。
これによって通信網３０での伝送中にパケットの順序逆転や、パケット消失が発生した場合にも、送信された順にバッファ上にサンプリングデータを書き込むことができる。
【０２８１】
上記「１類に属するアドレス決定法」と「２類に属するアドレス決定法」を選択する際には、バッファ上に既に書き込まれたサンプリングデータが存在するかどうかによって判定する。
【０２８２】
バッファ上に相対アドレスの規準となるべきサンプリングデータが存在する場合には、「２類に属するアドレス決定法」によって当該受信パケットに含まれるサンプリングデータの書き込みアドレスを決定し、バッファ上に相対アドレスの規準となるべきサンプリングデータが存在しない場合には、「１類に属するアドレス決定法」によって当該受信パケットに含まれるサンプリングデータの書き込みアドレスを決定する。
【０２８３】
また、「２類に属するアドレス決定法」を用いてバッファ上に既に書き込まれたサンプリングデータとの相対アドレスで当該受信パケットに含まれるサンプリングデータの書き込みアドレスを決定した場合に、該決定されたサンプリングデータの書き込みアドレス領域が、所定のアドレス領域内に含まれるかどうかを判定し、所定のアドレス領域外のアドレスであった場合には、当該受信パケットの書き込みを行わないか、または、当該受信パケットの受信時刻を元に「１類に属するアドレス決定法」を用いて、当該受信パケットに含まれるサンプリングデータの書き込みアドレスを決定する。この際、バッファ上に既に書き込まれたサンプリングデータは、破棄するか、または、上記「１類に属するアドレス決定法」で決定された当該受信パケットのサンプリングデータ書き込みアドレスを基準として決定した相対アドレスに、既にバッファに書き込まれたサンプリングデータの書き込みアドレスを移動する。
【０２８４】
「１類に属するアドレス決定法」を用いて、パケット受信時刻をもとに音声データバッファ１１４へのデータ書き込みアドレスを算出する方法について示す。
【０２８５】
音声データ貼付処理部１１３では、音声復号処理部１１２より、パケット受信時刻Tr、ＲＴＰタイムスタンプ、音声データ、音声データ長を入力として受け取っている。このパケット受信時刻TrをCurrentTimeStamp[i]、ＲＴＰタイムスタンプをRTPCurrentTime[i]、音声データ長をCurrentFrameTimeLen[i]の各変数に一時的に保持する。
【０２８６】
また、音声データ貼付処理部１１３は、音声データ取出処理部１１５および基準時刻監視・音声データ取出制御部１４より、前述の音声データバッファ１１４からの読み出しアドレスMixStartTime、および、MixStartTimeに対応した時刻MixerTimeStampを得る。
【０２８７】
これらの値に、さらに余裕時間をサンプル数に換算したPreBufTimeLen[i]を用いて、パケット受信時刻を基にした理想的な書き込みアドレスをStickTargetTime[i]とするとき、StickTargetTime[i]は次の（１）式で求めることができる。
【０２８８】
StickTargetTime[i]=MixStartTime+(CurrentTimeStamp[i]-MixerTimeStamp)*SamplesPerMilliSec+PreBufTimeLen[i]  …（１）
また、同様にパケット受信時刻を基にした当該音声データの書き込みアドレスの先頭CurrentStickTime[i]は次に示す（２）式で求めることができる。
【０２８９】
CurrentStickTime[i]=MixStartTime+(CurrentTimeStamp[i]-MixerTimeStamp)*SamplesPerMilliSec+PreBufTimeLen[i]  …（２）
ここで、上記（１）（２）式において、PreBufTimeLen[i]はパケット受信揺らぎを吸収するための余裕時間に対応し、揺らぎ吸収のためのバッファリングをたとえば40ms分行うこととする場合には、320サンプルとすることができる。また、SamplesPerMilliSecは、単位時間１ｍｓあたりのサンプル数で、時間をサンプル数に換算するために用いる。時刻CurrentTimeStamp[i]およびMixerTimeStampの単位をmsとし、音声データのサンプリング周波数を8kHzとした場合には、たとえば、SamplesPerMilliSec=8サンプルとすることができる。尚、式における「*」は乗算を表す。
【０２９０】
（２）式を用いれば、当該受信パケットの書き込みアドレスCurrentStickTime[i]は、当該受信パケットの受信時刻CurrentTimeStamp[i]と、受信時点での読み出しアドレスMixStartTimeを基準として、読み出しアドレスに対応した時刻MixerTimeStampと、前記パケットを受信した時刻CurrentTimeStamp[i]との差の時間(CurrentTimeStamp[i]-MixerTimeStamp)を、バッファ上のアドレスの差((CurrentTimeStamp[i]-MixerTimeStamp)*SamplesPerMilliSec)に換算して前記読み出しアドレスMixStartTimeに加算し、さらに該加算結果に、通信網３０によるパケット受信時刻の揺らぎの統計量に基づいて決定した所定の余裕時間をアドレスの差に換算した値PreBufTimeLen[i]を加算して前記バッファにおける書き込みアドレスを決定する。
【０２９１】
これは、通信網３０によるパケット受信時刻の揺らぎを吸収するための余裕時間だけ、音声データをバッファに保持した後に読み出しを行うことに相当する。
【０２９２】
音声データ貼付処理部１１３において、「２類に属するアドレス決定法」を用いて、音声データバッファ１１４に既に書き込まれている音声データとの相対位置によって当該音声データの書き込みアドレスを算出する方法について示す。
【０２９３】
「２類に属するアドレス決定法」では、ＲＴＰタイムスタンプ、シーケンス番号とフレーム長、あるいは連続する音声フレーム等の関係を用いて音声データバッファ上の音声データサンプルとの相対位置で当該音声データフレームの書き込みアドレスを算出することができる。
【０２９４】
ＲＴＰタイムスタンプ等の送信元からの情報を用いない場合には、たとえば、直前の音声データに続くアドレスに当該音声データを書き込むようにすることができる（第１実施例）。
【０２９５】
また、ＲＴＰタイムスタンプを用いる場合には、過去の音声データアドレスに対応したＲＴＰタイムスタンプを保持しておき、ＲＴＰタイムスタンプの差とアドレスの差が等しくなるようにアドレスを決定するようにすることができる。尚、詳細は第２実施例、乃至第４実施例中で別途示す。
【０２９６】
また、音声データ貼付処理部１１３は、音声データバッファ１１４に書き込まれた音声データとの相対アドレスによって当該音声データの書き込みアドレスを算出した場合に、算出した結果得られたアドレスを試験し、所定の書き込み可能領域内に収まらない場合に、当該パケットの受信時刻を元にして書き込みアドレスを決定することができる。
【０２９７】
即ち、先ず「２類に属するアドレス決定法」を用いて音声データバッファ１１４上に既に書き込まれた音声データとの相対位置で当該音声データフレームの書き込みアドレスを算出し、算出されたアドレスが、書き込み可能なアドレス領域内であれば、そのアドレスに書き込みを行い、アドレスが書き込み可能なアドレス領域外であった場合には、「１類に属するアドレス決定法」を用いて、パケット受信時刻に基づいて、書き込み可能な領域内に書き込みアドレスを決定するようにすることができる。
【０２９８】
たとえば、書き込み可能アドレス領域の先頭をStickTimeMin[i]、書き込み可能アドレス領域の末尾の次のアドレスをStickTimeMax[i]、当該音声データ長をCurrentFrameTimeLen[i]（例えば第１の周期を20msとした場合には160サンプル）としたとき、相対アドレスによって算出したアドレスCurrentStickTime[i]が、CurrentStickTime[i]<StickTimeMin[i]となるような場合を、「アンダーラン」状態（バッファアンダーフロー）と定義する。
【０２９９】
また、StickTimeMax[i]<CurrenStickTime[i]+CurrentFrameTimeLen[i]となるような場合を、「オーバーラン」状態（バッファオーバーフロー）と定義する。
【０３００】
また、「アンダーラン」「オーバーラン」以外の場合を「正常貼り付け」状態と定義する。
【０３０１】
ここで、「アンダーラン」境界StickTimeMin[i]は、バッファからのデータ読み出しとデータ書き込みが同時に同じアドレス領域を指定しないように、たとえば、読み出し領域の末尾MixEndTimeよりも所定サンプル後方のアドレスに設定される。また、「オーバーラン」境界StickTimeMax[i]は、データ書き込み可能領域の末尾アドレスの次のアドレスを指し、データの最大保持量を規定する。
【０３０２】
「アンダーラン」状態は、たとえば、通信網３０の伝送遅延揺らぎにより、当該パケットの受信時刻が遅れた場合に、バッファへの書き込みアドレスが読み出し領域に近づきすぎた、あるいは既に読み出し済みの領域になった場合に発生する。このような場合には、たとえば、当該音声データを受信時刻に基づいて新たに算出したアドレスに書き込むことで、再バッファリングを行うようにすることができる。
【０３０３】
「オーバーラン」状態は、たとえば、通信網３０の伝送遅延揺らぎにより、一度に複数のＲＴＰパケットを受信し、「オーバーラン」境界StickTimeMax[i]を越えて音声データバッファ１１４に音声データがたまった場合に発生する。この場合、StickTimeMin[i]からFrameEndTime[i]までの音声データを全て破棄して、当該音声データを受信時刻に基づいて算出したアドレスに書き込むことで、再バッファリング処理を行うようにすることができる。
【０３０４】
音声データ貼付処理部１１３は、音声データバッファ１１４に音声データの書き込みを行った後、音声データが書き込まれたアドレスの先頭FrameStartTime[i]、および音声データが書き込まれた領域の末尾の次のアドレスFrameEndTime[i]を最新の値に更新する。
【０３０５】
リアルタイムミキシング装置１０は、通常状態では図６に示すように、受信したパケットに含まれる復号化したフレーム４１を順次音声データバッファ１１４に貼り付けていき、音声データミキシング処理部１２が第２周期毎に各音声データバッファ１１４からデータを読み出して送信用のフレーム４２を生成し、これらのフレームを含むパケット４３を音声データ送信処理部１３によって生成して送信する。ここで、パケット受信時刻Ｔｒから理想再生時刻Ｔｐまでの時間に相当するサンプル数が前方バッファPreBufTimeLen[i]となる。
【０３０６】
また、図７に示すように、音声データミキシング処理部１２は、各パケット処理部１１−１〜１１−Ｎの音声データバッファ１１４をレーンとしてとらえ、時間の経過と共に各音声データバッファ１１４の読み出しアドレス領域（ミキシング領域）を更新しながら各音声データバッファ１１４に貼り付けられているフレーム４１のサンプリングデータをミキシング処理する。さらに、StickTimeMin[i]は、貼付可能位置の先頭であり、この位置よりBaseCount側へのデータ貼付は禁止されている。また、各レーンにおいて連続した複数のフレーム４１の開始位置をフレーム開始位置FrameStartTime[i]とし、終了位置の１サンプル後ろの位置を、フレーム終了位置FrameEndTime[i]として管理している。
【０３０７】
また、音声データミキシング処理部１２は、２０ｍｓごとに、現在時刻を更新すると共に音声データバッファ１１４のMixEndTime[i]を更新する。さらに、ミキシングすべきデータが何れかのレーンに存在するときは、ミキシング領域内の音声サンプリングデータをリングバッファSoundDataMap[i]から取得してミキシング処理して音声データ送信処理部１３に送出する。ミキシングすべきデータがどのレーンにもなければミキシング処理を行わない。
【０３０８】
音声データ送信処理部１３は、音声データミキシング処理部１２のミキシングによって得られたデータをエンコード（符号化）したフレームを生成し、このフレームを含むＲＴＰパケットを生成して各クライアント端末装置２１に送信する。
【０３０９】
基準時刻監視・音声データ取出制御部１４は、リアルタイムミキシング処理装置１０の現在時刻と各音声データバッファ１１４の時刻更新周期を調整し、同期が正しくとれているかどうかを確認すると共に、基準アドレスBaseCountを所定時間毎、例えば３０ｓ単位で更新する。
【０３１０】
次に、本実施形態における実施例を詳細に説明する。
（第１実施例）
第１実施例ではＲＴＰタイムスタンプを用いないでパケット受信処理およびミキシング処理を行う場合の一例を図８のタイミングチャート及び図９のフローチャートを参照して説明する。
【０３１１】
クライアント端末装置２１−１〜２１−Ｎは、マイクから入力された音声データを、例えばサンプリング周波数8kHz、量子化ビット数16bitでサンプリングし、たとえば音声符号化方式を用いて各サンプルを符号化し、160サンプル（20ms）を１単位としてＵＤＰパケットとしてリアルタイムミキシング装置１０に対して送信する。
【０３１２】
リアルタイムミキシング装置１０は、クライアント端末装置２１―１〜２１−ＮのＮ個の端末からの音声データパケットを受信し、音声復号化処理を行ってサンプリング周波数8kHz、量子化ビット数16bitの音声サンプルデータを復元した後、音声データバッファ１１４−１〜１１４−Ｎに蓄積し、バッファから適切なタイミングで音声データを読み出した後、ミキシング処理を行い、ミキシングされた音声データを音声符号化およびパケット化して複製し、クライアント端末装置２１−１〜２１−Ｎに送信する。
【０３１３】
この際、各クライアント端末装置２１からの音声パケットは通信網３０の状態によって、パケットの到着時刻が揺らぐ場合がある。このパケット到着時間の揺らぎを吸収するために、適切な時間だけバッファリングしてから読み出しを行う必要がある。各クライアント端末装置２１−１〜２１−Ｎに対応して、それぞれパケット処理部１１−１〜１１−Ｎがパケットの受信及びバッファリング処理を行う。
【０３１４】
また、クライアント端末装置２１−１〜２１−Ｎは、リアルタイムミキシング装置１０から音声パケットを受信して、音声複号化処理を行い、得られた音声データをスピーカから出力する。
【０３１５】
尚、リアルタイムミキシング装置１０から各クライアント端末装置２１−１〜２１−Ｎに向けた音声パケットも、通信網３０の状態によって、パケットの到着時刻が揺らぐ場合がある。このパケット到着時間の揺らぎを吸収するために、適切な時間だけバッファリングしてから読み出しを行う必要があるが、この処理については、リアルタイムミキシング装置１０の構成要素の変形によって同様に解決することが可能であるので、ここでは詳細な説明は行わない。
【０３１６】
リアルタイムミキシング装置１０は、起動されると初期化処理を行う。
【０３１７】
リアルタイムミキシング装置１０の各パケット処理部１１−１〜１１−Ｎは、音声データバッファ１１４のリングバッファSoundDataMap[i]（iは処理部１〜Ｎに対応）の領域を予め無音を表す０で初期化しておく。
【０３１８】
音声データバッファ１１４のリングバッファSoundDataMap[i]（iは処理部１〜Ｎに対応）への音声データ書き込み領域の先頭アドレスFrameStartTime[i]、および、データ書き込み領域の末尾アドレスの次のアドレスFrameEndTime[i]にそれぞれ「-1」を設定する。
【０３１９】
音声データ取出処理部の現在の読み出しアドレスの先頭MixStartTimeは、初期値として「０」が設定される。
【０３２０】
また、MixStartTimeに対応した時刻、MixerTimeStampには、起動時刻が設定される。
【０３２１】
初期化により、パケット受信処理の準備と、データ読み出し・ミキシング処理を行う準備が整う。
【０３２２】
初期化が完了すると、基準時刻監視・音声データ取出制御部１４の動作が開始される。
【０３２３】
基準時刻監視・音声データ取出制御部１４は、これ以後、第２周期（たとえば20ms）の時間間隔で周期的に動作し、音声データ取出処理部１１５への音声データ取出指示、音声データミキシング処理部１２へのミキシング処理指示、およびMixStartTime、MixEndTime、MxerTimeStampの更新を行う。
【０３２４】
音声データ取出処理部１１５は、基準時刻監視・音声データ取出制御部１４より指示を受けると、音声データバッファ１１４のリングバッファSoundDataMap[i]の、MixStartTime以前のデータ領域を０でクリアした上で、MixStartTimeからMixEndTime-1で示されるアドレス領域の音声データを読み出して、音声データミキシング処理部１２に渡す。
【０３２５】
音声データミキシング処理部１２は、音声データ取出処理部１１５−１〜１１５−Ｎから入力された音声データフレームをミキシングして後段に出力する。
【０３２６】
基準時刻監視・音声データ取出処理部１４の処理は、第２周期（たとえば20ms）毎に周期的に行われ、それに伴って読み出しアドレスの先頭MixStartTimeは160サンプルずつ後方に移動する。
【０３２７】
また、MixStartTimeに対応する時刻MixerTimeStampの値も、基準時刻監視・音声データ取出制御部１４の周期的な処理起動と連動して20ms分ずつ増加する。
【０３２８】
本実施例では、MixStartTime、MixEndTime、MixerTimeStampの更新を、基準時刻・音声データ取出制御部１４で行うこととしているが、これらの更新処理を、たとえば音声データミキシング処理部１２で行うような実装とすることもできる。
【０３２９】
その場合には、音声データミキシング処理部１２は、２０ｍｓ毎に１６０サンプルずつリングバッファSoundDataMap[i]上のミキシングに対応したアドレスMixStartTimeを移動する。
【０３３０】
尚、移動した後、ミキシングに対応したアドレスMixStartTime以前のデータを０でクリアする。また、ここで時刻と称しているが、この時刻は、前述の通りサンプリングデータ単位のアドレスに対応している。同様にMixerTimeStampの値も更新する。
【０３３１】
一方で、初期化が終了したパケット受信処理部１１１は、クライアント端末装置２１からの音声データパケットの受信を待ち受ける状態で待機している。
【０３３２】
クライアント端末装置２１からのパケットが到着するのを契機に、パケット受信処理部１１１は受信パケット内の音声データを音声データバッファ１１４への貼付を行う。
【０３３３】
パケット受信処理部１１１は、ＲＴＰパケットを受信した時刻Ｔｒを取得し、受信したＲＴＰパケットと共に音声データ復号処理部１１２に渡す。
【０３３４】
音声データ復号処理部１１２は、ＲＴＰパケットを解析し、音声復号化処理を行って、パケット受信時刻、ＲＴＰタイムスタンプ、復号された音声データ、音声データのフレーム長を音声データ貼付処理部１１３に送出する。
【０３３５】
音声データ貼付処理部１１３は、パケット受信処理部１１１で音声パケットが受信されるごとに、パケット受信時刻、ＲＴＰタイムスタンプ、復号された音声データ、音声データのフレーム長を、音声データ復号処理部１１２から受け取って、音声データ取出処理部１１５のバッファ１１４からの読み出しアドレスと、読み出しアドレスに対応した時刻を用いて、音声データバッファ１１４のリングバッファSoundDataMap[i]への書き込みアドレスを決定する。
【０３３６】
音声データ貼付処理部１１３は、当該音声データを音声データバッファ１１４に書き込むアドレスを算出するにあたって、音声データバッファ１１４に既に書き込まれている音声データとの相対アドレスによって書き込みアドレスを決定するか、当該パケットの受信時刻を元に書き込みアドレスを決定するかを判定する。
【０３３７】
判定の結果、ミキサの現在の読み出しアドレスMixStartTimeよりも後方のアドレス領域に音声サンプリングデータが書き込まれていない場合（即ち、上記「１類に属するアドレス決定法」を用いる場合）、受信したパケットのフレームを１つ目のフレームとして理想貼付位置StickTargetTime[i]に貼り付ける。ここで、ミキサの現在に対応したアドレスMixStartTimeから離れた位置に貼り付けるほど再生時間までに余裕があることになり、揺らぎ吸収余裕が大きくなる。これを余裕時間PreBufTimeLen[i]で管理する。尚、ここで位置と称しているが、この位置は、サンプリングデータ単位のアドレスに対応している。
【０３３８】
受信したパケットの理想貼付位置StickTargetTime[i]は以下の（１）式で表される。この式は、前述の式（１）と同一であるが、再掲する。
【０３３９】
StickTargetTime[i]=MixStartTime+(CurrentTimeStamp[i]-MixerTimeStamp)*SamplesPerMilliSec+PreBufTimeLen[i]  …（１）
ここで、MixStartTimeはミキサの現在に対応した読み出しアドレスであり、MixerTimeStampはミキサが現在に対応した読み出しアドレスに移動した時刻、CurrentTimeStamp[i]はパケットを受信した時刻、PreBufTimeLen[i]は揺らぎ吸収余裕（パケットを受信してから再生するまでの時間）、SamplesPerMilliSecは単位時間当たりのサンプル数である。尚、式における「*」は乗算を表す。
【０３４０】
また、上記判定の結果、２つ目以降の受信パケットのフレームは前のパケットのフレームの貼付位置に続けて貼り付ける。例えば現時点でリングバッファSoundDataMap[i]に貼り付けられているフレームの最後尾FrameEndTime[i]の位置に続けて貼り付ける。
【０３４１】
上記音声データのバッファへの書き込み処理の詳細を図９のフローチャートを参照して説明する。
【０３４２】
リアルタイムミキシング装置１０は、起動すると初期化処理を行う（ＳＡ１）。この初期化処理では、フレーム開始位置FrameStartTime[i]（すなわち音声データバッファ１１４のリングバッファSoundDataMap[i]（iは処理部１〜Ｎに対応）への音声データ書き込み領域の先頭アドレスFrameStartTime[i]）を「−１」に設定すると共に、フレーム終了位置FrameEndTime[i]（すなわちデータ書き込み領域の末尾アドレスの次のアドレスFrameEndTime[i]）に「−１」を設定し、さらにミキサの現在のアドレスMixStartTime（すなわち音声データ取出処理部１１５の現在の読み出しアドレスの先頭）を「０」に設定する。
【０３４３】
また、ミキサの現在の読み出しアドレスMixStartTimeに対応した時刻を表す変数MixerTimeStampに、現在時刻を設定する。
【０３４４】
SoundDataMap[i]、FrameStartTime[i]、FrameEndTime[i]の初期化は、１〜Ｎの全てのiについて行われる。
【０３４５】
次いで、パケット受信処理を行い（ＳＡ２）、受信パケットに対して受信時刻CurrentTimeStamp[i]を対応付けて記憶する。
【０３４６】
たとえば、クライアント端末装置２１−１からの音声パケットを受信した場合に行われる処理を例にとって説明を行うと次のようになる。
【０３４７】
リアルタイムミキシング装置１０は、クライアント端末装置２１−１〜２１−ＮまでのＮ個の端末からのパケットを受信し、ミキシング処理を行う。
【０３４８】
クライアント端末装置２１−１からの音声パケットは、端末装置２１−１に対応したパケット処理部１１−１で処理される。受信した音声パケットは、パケット処理部１１−１内のパケット受信処理部１１１−１に渡される。パケット受信処理部１１１−１では、受信パケットに対してパケット受信時刻CurrentTimeStamp[1]を対応付けて記憶する（ＳＡ２）。
【０３４９】
この後、受信パケットが最初の１個目のパケットであるか否かを判定する（ＳＡ３）。この判定は、フレーム開始位置FrameStartTime[i]がミキサの現在のアドレスMixStartTimeよりも小さい値であり且つフレーム終了位置FrameEndTime[i]がミキサの現在のアドレスMixStartTimeよりも小さい値であるとき、すなわちリングバッファSoundDataMap[i]の読み出しアドレスよりも後方のアドレス領域にサンプリングデータが書き込まれていない状態であるとき、受信パケットが最初の１個目のパケットであると判定する。
【０３５０】
ここで上記ＳＡ３の判定は、受信パケットを音声データバッファ１１４−ｉに格納する際のアドレスを計算する際に、音声データバッファ上に既に書き込まれた音声データとの相対アドレスでアドレスを決定する「２類に属するアドレス決定法」を用いるか、パケットを受信した時刻を元にしてアドレスを決定する「１類に属するアドレス決定法」を用いるかを判定することを意味する。
【０３５１】
たとえば、音声データバッファ１１４−ｉのリングバッファSoundDataMap[i]に書き込まれた音声データ領域の先頭アドレスを保持するFrameStartTime[i]と、音声データ領域の末尾の次のアドレスを保持するFrameEndTime[i]と、音声データ取出処理部１１５がSoundDataMap[i]からの読み出したアドレスを保持するMixStartTimeの値との関係を用いて判定を行うことができる。
【０３５２】
即ち、FrameStartTime[i]<MixStartTime、且つ、FrameEndTime[i]<=MixStartTimeが共に真である場合には、パケットを受信した時刻を元にして「１類に属するアドレス決定法」を用いてアドレスを算出し、偽である場合には、音声データバッファ上に既に書き込まれた音声データとの相対位置による「２類に属するアドレス決定法」を用いてアドレスを決定する。
【０３５３】
ここで、「１類に属するアドレス決定法」が選択されるのは、受信する最初の１個目のパケット、もしくは、音声データバッファ１１４上の音声データ領域が音声データ読み出しに伴って初期化された状態で到着した最初のパケットである場合等である。
【０３５４】
この判定の結果、受信パケットが最初の１個目のパケットでないとき（先の定義で「２類に属するアドレス決定法」を用いてアドレスを決定する場合に相当）は、このパケットのフレームに含まれるサンプリングデータのリングバッファSoundDataMap[i]への貼付位置を前のフレームの直後に設定（ＳＡ４）して、後述するＳＡ７の処理に移行する。
【０３５５】
すなわち、貼付位置CurrentStickTime[i]をフレーム終了位置FrameEndTime[i]に設定する。
【０３５６】
たとえば、音声データ書込処理部１１３は、音声データバッファ１１４−１のSoundDataMap[1]に対して、FrameEndTime[1]で示されるアドレスに当該音声データフレームの先頭サンプルを書き込むようにする場合には、書き込みアドレスをCurrentStickTime[1]=FrameEndTime[1]とする。
【０３５７】
また、上記ＳＡ３の判定の結果、受信パケットが最初の１個目のパケットであるとき（先の定義で「１類に属するアドレス決定法」を用いる場合に相当）は、次の（２）式で貼付位置（音声データバッファ１１４への当該音声データフレームの書き込みアドレスの先頭）CurrentStickTime[i]を算出（ＳＡ５）した後、フレーム開始位置FrameStartTime[i]の設定を行う（ＳＡ６）。尚、（２）式は、前述の（２）式と同一であるが再掲する。
【０３５８】
CurrenStickTime[i]=MixStartTime+(CurrentTimeStamp[i]-MixerTimeStamp)*SamplesPerMilliSec+PreBufTimeLen[i]  …（２）
ここで、MixStartTimeは、基準時刻監視・音声データ取出制御部１４で設定された値で、音声データ取出処理部１１５が音声データバッファ１１４から直近で音声データを読み出したアドレスの先頭を指している。CurrentTimeStamp[i]は、パケット受信処理部１１１においてパケット受信時に取得されたタイムスタンプで、当該音声データパケットの受信時刻をmsを単位として保持する変数である。MixerTimeStampはMixStartTimeに対応した時刻で、たとえば、基準時刻・音声データ取出制御部１４が最後に起動された時刻がmsを単位として設定される。また、SamplesPerMilliSecは1msあたりのサンプリング数で、サンプリング周波数が8kHzである場合には、8サンプルである。
【０３５９】
また、PreBufTimeLen[i]は、パケット受信揺らぎを吸収するための時間余裕をサンプル数に換算した値であり、たとえば、余裕時間を40msとする場合には、320サンプルとすることができる。
【０３６０】
このとき、貼付位置CurrentStickTime[i]をフレーム開始位置FrameStartTime[i]の値として設定する（FrameStartTime[i]=CurrentStickTime[i]）。
【０３６１】
これは、当該音声データフレームのサンプリングデータが、バッファ上に書き込まれた最初のサンプリングデータであることから、バッファ上にサンプリングデータが書き込まれた領域の先頭アドレスFrameStartTime[i]に、当該サンプリングデータを書き込んだアドレス領域の先頭CurrentStickTime[i]の値を設定することを意味する。
【０３６２】
次いで、リアルタイムミキシング処理装置１０は、上記算出した貼付位置（音声データバッファ１１４のリングバッファSoundDataMap[i]への当該音声データフレームの書き込みアドレス）CurrentStickTime[i]で示されるアドレスから始まる領域に、受信パケットに含まれる音声データフレームのサンプリングデータを貼り付けた（書き込んだ）後（ＳＡ７）、フレーム終了位置（音声データバッファ１１４のリングバッファSoundDataMap[i]に音声データが書き込まれた領域の末尾の次のアドレス）FrameEndTime[i]の値を更新し（ＳＡ８）、上記ＳＡ１の処理に移行する。このとき、フレーム終了位置FrameEndTime[i]は次の（３）式によって算出される。
【０３６３】
FrameEndTime[i]=CurrentStickTime[i]+CurrentFrameTimeLen[i]  …（３）
ここで、CurrentFrameTimeLen[i]は、音声データ復号処理部１１２によって取得された当該音声データフレームの音声データ長で、第１周期に相当し、たとえば160サンプルである。これは、当該音声データフレームのサンプリングデータが、バッファ上に書き込まれた最初のサンプリングデータであることから、バッファ上にサンプリングデータが書き込まれた領域の末尾の次のアドレスFrameStartTime[i]に、当該サンプリングデータを書き込んだアドレス領域の先頭CurrentStickTime[i]と書き込んだサンプリングデータ数CurrentFrameTimeLen[i]を加算した値を設定することを意味する。
【０３６４】
上記アドレス決定法を用いて、各クライアント端末装置２１−１〜２１−Ｎからの受信パケットを、各クライアント端末装置に対応した音声データバッファ１１４−１〜１１４−Ｎに書き込むべきアドレスを決定することができる。
【０３６５】
基準時刻監視・音声データ取出制御部１４は、処理の開始と同時に所定の第２周期（たとえば20ms）で周期的に起動される。起動されるごとに音声データバッファ１１４の音声データ読み出し領域の先頭アドレスMixStartTimeの値を第２周期（２０ｍｓ）に相当する160サンプル分後方に進め（MixStartTime+=160）同様に処理が起動されるごとに、MixStartTimeに対応する時刻MixerTimeStampの指す時刻を20ms分増加させる。
【０３６６】
また、基準時刻監視・音声データ取出制御部１４は、起動されるごとに、音声データ取出処理部１１５−１〜１１５−Ｎに起動指示を与える。音声データ取出処理部１１５は、基準時刻監視・音声データ取出制御部１４によって所定の第２周期（たとえば20ms）で周期的に起動され、対応する音声データバッファ１１４のSoundDataMap[i]のMixStartTimeで示されるアドレスから、所定の第２周期に相当する160サンプル分のデータを読み出して音声データミキシング処理部１２に出力する。
【０３６７】
音声データミキシング処理部１２は、各音声データ読み出し処理部１１５−１〜１１５−Ｎより入力された第２周期に相当する160サンプル分の音声データフレームをサンプルごとに加算することによって、ミキシング済みの音声データ160サンプルを得る。
【０３６８】
得られたミキシング済みの音声データフレームを、符号化し、音声パケットとして複製し、各クライアント端末装置２１に送信する。
【０３６９】
上記第１実施例によれば、ミキシング処理開始時においてミキシング対象となるサンプリングデータが格納されているリングバッファSoundDataMap[i]のミキシング領域（読み出しアドレス領域）よりもサンプリング時間の倍数となる所定の余裕時間PreBufTimeLen[i]経過後に読み出される貼付可能領域に、アドレスをサンプリング時間単位で連続して変化させて、サンプリングデータが貼り付けられるので、サンプリングデータの時間的な揺らぎがサンプリング時間単位で調整可能になる。
【０３７０】
即ち、上記第１実施例によれば、「１類に属するアドレス決定法」を用いた場合には、音声データ取出処理部１１５が読み出しを行うデータ読み出し対象となるサンプリングデータが格納されているリングバッファSoundDataMap[i]の、読み出しアドレス領域から音声データが読み出された時刻よりも、サンプリング時間の倍数となる所定の余裕時間（PreBufTimeLen[i]/SamplesPerMilliSec）に相当する時間だけ経過後に読み出されるアドレス領域に、アドレスをサンプリング時間単位で連続して変化させてサンプリングデータが書き込まれることとなるので、パケット受信の時間揺らぎを、サンプリングデータの時間的な揺らぎとしてサンプリング時間単位で調整可能となる。
【０３７１】
また、「２類に属するアドレス決定法」を用いて、リングバッファSoundDataMap[i]上に既に書き込まれた音声データに連続するアドレスに音声データを書き込む場合には、パケット受信の時間揺らぎの累積が、所定の余裕時間（PreBufTimeLen[i]/SamplesPerMilliSec）以内に収まる限りにおいて、受信の時間揺らぎを吸収して連続的に音声データを格納し、所定の第２周期で取り出すことが可能となる。
【０３７２】
これにより、複数地点のクライアント端末装置２１から送信されたパケットの遅延揺らぎ吸収を各クライアント端末装置２１毎に独立して行うことができ、サンプリング時間単位で最適な遅延に制御した後、PreBufTimeLen[i]を制御することによって、サンプリング時間単位の精度で所定の第２周期毎にミキシングを行うことが可能となる。
【０３７３】
（第２実施例）
次に、本実施形態における第２実施例を図１０乃至図１２を参照して詳細に説明する。第２実施例はＲＴＰタイムスタンプを用いてパケット受信処理、およびミキシング処理を行う場合の一例である。
【０３７４】
クライアント端末装置２１−１〜２１−Ｎは、マイクから入力された音声データを、例えばサンプリング周波数8kHz、量子化ビット数16bitでサンプリングし、たとえば音声符号化方式を用いて各サンプルを符号化し、第１の周期160サンプル（20ms）を１単位としてＲＴＰパケットとして構成し、ＵＤＰパケットとしてリアルタイムミキシング装置１０に対して送信する。
【０３７５】
リアルタイムミキシング装置１０は、クライアント端末装置２１―１〜２１−ＮのＮ個の端末からの音声データパケットを受信し、音声復号化処理を行ってサンプリング周波数8kHz、量子化ビット数16bitの音声サンプルデータを復元した後、音声データバッファ１１４−１〜１１４−Ｎに蓄積し、バッファから適切なタイミングで音声データを読み出した後、ミキシング処理を行い、ミキシングされた音声データを音声符号化およびパケット化して複製し、クライアント端末装置２１−１〜２１−Ｎに送信する。
【０３７６】
この際、各クライアント端末装置２１からの音声パケットは通信網３０の状態によって、パケットの到着時刻が揺らぐ場合がある。このパケット到着時間の揺らぎを吸収するために、適切な時間だけバッファリングしてから読み出しを行う必要がある。各クライアント端末装置２１−１〜２１−Ｎに対応して、それぞれパケット処理部１１−１〜１１−Ｎがパケットの受信及びバッファリング処理を行う。
【０３７７】
また、クライアント端末装置２１−１〜２１−Ｎは、リアルタイムミキシング装置１０から音声パケットを受信して、音声復号化処理を行い、得られた音声データをスピーカから出力する。
【０３７８】
尚、リアルタイムミキシング装置１０から各クライアント端末装置２１−１〜２１−Ｎに向けた音声パケットも、通信網３０の状態によって、パケットの到着時刻が揺らぐ場合がある。このパケット到着時間の揺らぎを吸収するために、適切な時間だけバッファリングしてから読み出しを行う必要があるが、この処理については、リアルタイムミキシング装置１０の構成要素の変形によって同様に解決することが可能であるので、ここでは詳細な説明は行わない。
【０３７９】
リアルタイムミキシング装置１０は、起動されると初期化処理を行う。
【０３８０】
リアルタイムミキシング装置１０の各パケット処理部１１−１〜１１−Ｎは、音声データバッファ１１４のSoundDataMap[i]（iは処理部１〜Ｎに対応）の領域を予め無音を表す０で初期化しておく。
【０３８１】
音声データバッファ１１４のリングバッファSoundDataMap[i]（iは処理部１〜Ｎに対応）への音声データ書き込み領域の先頭アドレスFrameStartTime[i]、および、データ書き込み領域の末尾アドレスの次のアドレスFrameEndTime[i]にそれぞれ「-1」を設定する。
【０３８２】
音声データ取出処理部１１５の現在の読み出しアドレスの先頭MixStartTimeは、初期値として「０」が設定される。また、MixStartTimeに対応した時刻、MixerTimeStampには、起動時刻が設定される。
【０３８３】
初期化により、パケット受信処理の準備と、データ読み出し・ミキシング処理を行う準備が整う。
【０３８４】
初期化が完了すると、基準時刻監視・音声データ取出制御部１４の動作が開始される。
【０３８５】
基準時刻監視・音声データ取出制御部１４は、これ以後、第２周期（たとえば20ms）の時間間隔で周期的に動作し、音声データ取出処理部１１５への音声データ取出指示、音声データミキシング処理部１２へのミキシング処理指示、およびMixStartTime、MixEndTime、MxerTimeStampの更新を行う。
【０３８６】
音声データ取出処理部１１５は、基準時刻監視・音声データ取出制御部１４より指示を受けると、音声データバッファ１１４のリングバッファSoundDataMap[i]のMixStartTime以前のデータ領域を０でクリアした上で、MixStartTimeからMixEndTime-1で示されるアドレス領域の音声データを読み出し、音声データミキシング処理部１２に渡す。
【０３８７】
音声データミキシング処理部１２は、音声データ取出処理部１１５−１〜１１５−Ｎから入力された音声データフレームをミキシングして後段に出力する。
【０３８８】
基準時刻監視・音声データ取出制御部１４の処理は、第２周期（たとえば20ms）ごとに周期的に行われ、それに伴って読み出しアドレスの先頭MixStartTimeは160サンプルずつ後方に異動する。
【０３８９】
また、MixStartTimeに対応する時刻MixerTimeStampの値も、基準時刻監視・音声データ取出制御部１４の周期的な処理起動と連動して20ms分ずつ増加する。
【０３９０】
本実施例では、MixStartTime、MixEndTime、MixerTimeStampの更新を、基準時刻・音声データ取出制御部１４で行うこととしているが、これらの更新処理を、たとえば音声データミキシング処理部１２で行うような実装とすることもできる。
【０３９１】
その場合には、音声データミキシング処理部１２は、２０ｍｓ毎に１６０サンプルずつリングバッファSoundDataMap[i]上のミキシングに対応したアドレスMixStartTimeを移動する。尚、移動した後、ミキシングに対応したアドレスMixStartTime以前のデータを０でクリアする。同様にMixerTimeStampの値も更新する。
【０３９２】
一方で、初期化が終了したパケット受信処理部１１１は、クライアント端末装置２１からの音声データパケットの受信を待ち受ける状態で待機している。
【０３９３】
クライアント端末装置２１からのパケットが到着するのを契機に、パケット受信処理部１１１は受信パケット内の音声データを音声データバッファ１１４への貼付を行う。
【０３９４】
パケット受信処理部１１１は、ＲＴＰパケットを受信した時刻Ｔｒを取得し、受信したＲＴＰパケットと共に音声データ復号処理部１１２に渡す。
【０３９５】
音声データ復号処理部１１２は、ＲＴＰパケットを解析し、音声復号化処理を行って、パケット受信時刻、ＲＴＰタイムスタンプ、復号された音声データ、音声データのフレーム長を音声データ貼付処理部１１３に送出する。
【０３９６】
音声データ貼付処理部１１３は、パケット受信処理部１１１で音声パケットが受信されるごとに、パケット受信時刻、ＲＴＰタイムスタンプ、復号された音声データ、音声データのフレーム長を、音声データ復号処理部１１２から受け取って、音声データ取出処理部１１５のバッファ１１４からの読み出しアドレスと、読み出しアドレスに対応した時刻を用いて、音声データバッファ１１４のリングバッファSoundDataMap[i]への書き込みアドレスを決定する。
【０３９７】
音声データ貼付処理部１１３は、当該音声データを音声データバッファ１１４に書き込むアドレスを算出するにあたって、音声データバッファ１１４に既に書き込まれている音声データとの相対アドレスによって書き込みアドレスを決定するか、当該パケットの受信時刻を元に書き込みアドレスを決定するかを判定する。
【０３９８】
判定の結果、ミキサの現在位置に対応したアドレスMixStartTimeよりも後方のアドレス領域に音声サンプリングデータが貼り付けられていない場合（即ち、上記「１類に属するアドレス決定法」を用いる場合）、受信したパケットのフレームを１つ目のフレームとして理想的貼付位置StickTargetTime[i]に貼り付ける。ここで、ミキサの現在位置に対応したアドレスMixStartTimeから離れた位置に貼り付けるほど再生時間までに余裕があることになり揺らぎ吸収余裕が大きくなる。これを余裕時間PreBufTimeLen[i]で管理する。受信パケットの理想的貼付位置StickTargetTime[i]は上記（１）式で表される。
【０３９９】
本実施例では第１実施例で記述したアドレス決定の方法のうち、「２類に属するアドレス決定法」で、ＲＴＰタイムスタンプを用いる点が第１実施例と異なる。
【０４００】
２つ目以降のパケットのフレーム（アドレス決定方法の判定の結果、音声データバッファ１１４上に既に書き込まれている音声データとの相対位置をもとにアドレスを決定する「２類に属するアドレス決定法」が選択された場合）については、図１０，１２に示すように、ＲＴＰタイムスタンプを基準にして前のパケットのフレームとの相対アドレスを求め、この相対アドレスに基づいて書き込みアドレスが決定される。先ず、パケットを貼り付けるごとに（「１類に属するアドレス決定方法」「２類に属するアドレス決定方法」によらず、音声データバッファ１１４に音声データを書き込む毎に）、次回のパケットのフレームを貼り付ける位置を計算するための基準となる値RTPBaseCount[i]を（４）式を用いて計算しておく。
【０４０１】
ここで、RTPBaseCount[i]は、直近でバッファに書き込まれた音声データフレームの先頭サンプルに対応したアドレスと、ＲＴＰタイムスタンプの値を対応付けるための変数である。
【０４０２】
RTPBaseCount[i]=CurrentStickTime[i]-RTPCurrentTime[i]  …（４）
ここで、CurrentStickTime[i]は、当該音声データフレームの先頭サンプルを書き込んだアドレスを指す。また、RTPCurrentTime[i]は当該音声データフレームの先頭サンプルに対応したＲＴＰタイムスタンプで、クライアント端末装置２１からのＲＴＰパケットに含まれていた値である。RTPBaseCount[i]は、当該音声データに含まれるサンプリングデータの先頭サンプルが書き込まれるバッファ上のアドレスCurrentStickTime[i]と、当該音声データに含まれるサンプリングデータの先頭サンプルに対応したＲＴＰタイムスタンプRTPCurrentTime[i]の差であり、オフセットを意味する。
【０４０３】
２つ目以降のパケットを貼り付ける場合（アドレス決定方法の判定の結果、音声データバッファ１１４上に既に書き込まれている音声データとの相対位置をもとにアドレスを決定する「２類に属するアドレス決定法」が選択された場合）には、上記の値（以前の音声データフレームをバッファ上に書き込んだ際に計算され保持されていたRTPBaseCount[i]の値）と受信したパケットに含まれるＲＴＰタイムスタンプを基にして、次の（５）式によって貼付位置（当該音声データフレームの先頭サンプルを書き込むべきアドレスCurrentStickTime[i]）を計算する。
【０４０４】
CurrentStickTime[i]=RTPBaseCount[i]+RTPCurrentTime[i]  …（５）
ここで、RTPBaseCount[i]は前のパケットを貼り付けたときに求めた値であり、当該音声データパケットを受信する以前で直近に音声データを書き込んだ際に式（４）を用いて算出し保持していた値である。RTPCurrentTime[i]は受信したパケットに含まれるＲＴＰタイムスタンプである。
【０４０５】
バッファ上に書き込まれたサンプリングデータが既に存在しており、バッファ上に最後に書き込まれたサンプリングデータの先頭のサンプリングデータが書き込まれているアドレスと、該サンプリングデータに対応したＲＴＰタイムスタンプとの差（オフセット）RTPBaseCount[i]が予め計算されている場合に、当該受信パケットに含まれる音声データフレームのサンプリングデータを書き込むアドレスCurrentStickTime[i]は、サンプリングデータの先頭サンプルに対応したＲＴＰタイムスタンプRTPCurrentTime[i]と、オフセットRTPBaseCount[i]を加算して求められる。
【０４０６】
上記音声データのバッファへの書き込み処理の詳細を図１２のフローチャートを参照して説明する。
【０４０７】
リアルタイムミキシング処理装置１０は、起動すると初期化処理を行う（ＳＢ１）。この初期化処理では、フレーム開始位置FrameStartTime[i]（すなわち音声データバッファ１１４のリングバッファSoundDataMap[i] （iは処理部１〜Ｎに対応）への音声データ書き込み領域の先頭アドレスFrameStartTime[i]）を「−１」に設定すると共に、フレーム終了位置FrameEndTime[i]（すなわちデータ書き込み領域の末尾アドレスの次のアドレスFrameEndTime[i]）を「−１」に設定し、さらにミキサの現在のアドレスMixStartTime（すなわち音声データ取出処理部１１５の現在の読み出しアドレスの先頭）を「０」に設定する。
【０４０８】
また、ミキサの現在の読み出しアドレスMixStartTimeに対応した時刻を表す変数MixerTimeStampに、現在時刻を設定する。
【０４０９】
SoundDataMap[i]、FrameStartTime[i]、FrameEndTime[i]の初期化は、１〜Ｎの全てのiについて行われる。
【０４１０】
次いで、パケット受信処理を行い（ＳＢ２）、受信パケットに対して受信時刻CurrentTimeStamp[i]を対応付けて記憶する。
【０４１１】
たとえば、パケットが受信された場合の処理は次のようになる。
【０４１２】
リアルタイムミキシング装置１０は、クライアント端末装置２１−１〜２１−ＮまでのＮ個の端末からのパケットを受信する。
【０４１３】
ここでは、クライアント端末装置２１−ｉからの音声パケットを受信した場合に行われる処理を例にとって説明を行う。
【０４１４】
クライアント端末装置２１−ｉからの音声パケットは、端末２１−ｉに対応したパケット処理部１１−ｉで処理される。受信した音声パケットは、パケット処理部１１−ｉ内のパケット受信処理部１１１−ｉに渡される。パケット受信処理部１１１−ｉでは、受信パケットに対してパケット受信時刻CurrentTimeStamp[i]を対応付けて記憶する（ＳＢ２）。
【０４１５】
この後、音声データ貼付処理部１１３において、受信パケットが最初の１個目のパケットであるか否かを判定する（ＳＢ３）。この判定は、フレーム開始位置FrameStartTime[i]がミキサの現在のアドレスMixStartTimeよりも小さい値であり且つフレーム終了位置FrameEndTime[i]がミキサの現在のアドレスMixStartTimeよりも小さい値であるとき、すなわちリングバッファSoundDataMap[i]の読み出しアドレスよりも後方のアドレス領域にサンプリングデータが書き込まれていない状態であるとき、受信パケットが最初の１個目のパケットであると判定する。
【０４１６】
ここで、ＳＢ３の判定は、受信パケットを音声データバッファ１１４−ｉに格納する際のアドレスを計算する際に、音声データバッファ上に既に書き込まれた音声データとの相対アドレスでアドレスを決定する「２類に属するアドレス決定法」を用いるか、パケットを受信した時刻を元にしてアドレスを決定する「１類に属するアドレス決定法」を用いるかを判定することを意味する。この判定は、たとえば、音声データバッファ１１４−ｉのリングバッファSoundDataMap[i]に書き込まれた音声データ領域の先頭アドレスを保持するFrameStartTime[i]と、音声データ領域の末尾の次のアドレスを保持するFrameEndTime[i]と、音声データ取出処理部１１５がSoundDataMap[i]からの読み出したアドレスを保持するMixStartTimeの値との関係を用いて行うことができる。
【０４１７】
即ち、FramsStartTime[i]<MixStartTime、且つ、FrameEndTime[i]<=MixStartTimeが共に真である場合には、パケットを受信した時刻を元にして「１類に属するアドレス決定法」を用いてアドレスを算出し、偽である場合には、音声データバッファ１１４上に既に書き込まれた音声データとの相対位置による「２類に属するアドレス決定法」を用いてアドレスを決定する。
【０４１８】
たとえば、「１類に属するアドレス決定法」が選択されるのは、受信する最初の１個目のパケット、もしくは、音声データバッファ１１４上の音声データ領域が音声データ読み出しに伴って初期化された状態で到着した最初のパケットである場合等である。
【０４１９】
このＳＢ３による判定の結果、受信パケットが最初の１個目のパケットではないとき（「２類に属するアドレス決定法」を用いてアドレスを決定する場合）は、このパケットのフレームに含まれるサンプリングデータのリングバッファSoundDataMap[i]への貼付位置CurrentStickTime[i]を、直前の音声データを処理した際に、上記（４）式を用いて予め計算し保持しておいたRTPBaseCount[i]と、音声データ復号処理部１１２で受信したＲＴＰパケットから取得したＲＴＰタイムスタンプRTPCurrentTime[i]を用いて上記（５）式により算出して（ＳＢ４）、後述するＳＢ７の処理に移行する。
【０４２０】
また、上記ＳＢ３の判定の結果、受信パケットが１個目のパケットであるとき（「１類に属するアドレス決定法」を用いる場合）は、上記（２）式で貼付位置（音声データバッファ１１４への当該音声データフレームの書き込みアドレス）CurrentStickTime[i]を算出（ＳＢ５）した後、音声データバッファ１１４上の音声データの先頭アドレスに相当するフレーム開始位置FrameStartTime[i] を更新する（ＳＢ６）。このとき、貼付位置CurrentStickTime[i]をフレーム開始位置FrameStartTime[i]の値として設定する。尚、更新に際してFrameStartTime[i]=CurrentStickTime[i]とする。
【０４２１】
即ち、該音声データフレームのサンプリングデータが、現時点でバッファ上に書き込まれている先頭のサンプリングデータであることから、バッファ上にサンプリングデータが書き込まれた領域の先頭アドレスFrameStartTime[i]に、当該サンプリングデータを書き込んだアドレス領域の先頭CurrentStickTime[i]の値を設定する。
【０４２２】
次いで、リアルタイムミキシング処理装置１０は、上記算出した貼付位置CurrentStickTime[i]（すなわち音声データバッファへの当該音声データフレームの書き込みアドレスCurrentStickTime[i]から始まる領域）に受信パケットに含まれる音声データフレームのサンプリングデータを書き込んだ後（ＳＢ７）、次回の音声データフレームを書き込むアドレスを算出するために必要となるＲＴＰ基準カウントRTPBaseCount[i]を更新すると共に、フレーム終了位置FrameEndTime[i]（すなわち音声データバッファ１１４上の音声データ領域の末尾の次のアドレスを指すFrameEndTime[i]）を更新し（ＳＢ８）、上記ＳＢ２の処理に移行する。
【０４２３】
このとき、次回のパケットの音声データフレームを書き込むアドレスを計算するために基準となるＲＴＰ基準カウントRTPBaseCount[i]は上記（４）式を用いて計算され、フレーム終了位置FrameEndTime[i]は上記（３）式によって算出される。
【０４２４】
また、式（４）におけるRTPBaseCount[i]の算出において、式（４）の代わりにBaseCountを用いて次に示す（４−２）式で計算することもできる。
【０４２５】
RTPBaseCount[i]=(CurrentStickTime[i]-BaseCount)-RTPCurrentTime[i]  …（４−２）
ここで、CurrentStickTime[i]は、当該音声データフレームの先頭サンプルを書き込んだアドレスを指す。また、RTPCurrentTime[i]は当該音声データフレームの先頭サンプルに対応したＲＴＰタイムスタンプで、クライアント端末装置からのＲＴＰパケットに含まれていた値である。
【０４２６】
BaseCountは、リングバッファSoundDataMap[i]の基準アドレスであり、たとえば３０秒ごとにMixStartTimeの指す値と同期させるようにして更新される。
【０４２７】
式（４−２）を用いてRTPBaseCount[i]を計算した場合には、上記（５）式に代えて次に示す（５−２）式を用いてCurrentStickTime[i]を算出する。
【０４２８】
CurrentStickTime[i]=BaseCount+RTPBaseCount[i]+RTPCurrentTime[i]  …（５−２）
ここで、RTPBaseCount[i]は、直近の音声データパケットの音声データバッファ１１４への書き込みに際して、式（４−２）を用いて計算した値である。
【０４２９】
ここで、基準時刻監視・音声データ取出し制御部１４がBaseCountを変更することによって、（４−２）式を用いてRTPBaseCount[i]を計算した際に使用したBaseCountの値と、（５−２）式を計算する際のBaseCountの値が異なる場合がある。
【０４３０】
このような場合にも正しいアドレスを計算するために、（４−２）（５−２）式を用いてアドレスを計算する実装方式とする場合には、基準時刻監視・音声データ取出制御部１４は、BaseCountを変更する際に、同じ値だけRTPBaseCount[i]の値も変更する必要がある。
【０４３１】
これまでに示したように、上記アドレス決定法によれば（１）〜（４）式を用いて、各クライアント端末装置２１−１〜２１−Ｎからの受信パケットを、各クライアント端末装置に対応した音声データバッファ１１４−１〜１１４−Ｎに書き込むべきアドレスを決定することができる。
【０４３２】
基準時刻監視・音声データ取出制御部１４は、処理の開始と同時に所定の第２周期（たとえば20ms）で周期的に起動される。起動されるごとに音声データバッファ１１４の音声データ読み出し領域の先頭アドレスMixStartTimeの値を第２周期（２０ｍｓ）に相当する160サンプル分後方に進め（MixStartTime+=160）同様に処理が起動されるごとに、MixStartTimeに対応する時刻MixerTimeStampの指す時刻を20ms分増加させる。
【０４３３】
また、基準時刻監視・音声データ取出制御部１４は、起動されるごとに、音声データ取出処理部１１５−１〜１１５−Ｎに起動指示を与える。音声データ取出処理部１１５は、基準時刻監視・音声データ取出制御部１４によって所定の第２周期（たとえば20ms）で周期的に起動され、対応する音声データバッファ１１４のSoundDataMap[i]のMixStartTimeで示されるアドレスから、所定の第２周期に相当する160サンプル分のデータを読み出して音声データミキシング処理部１２に出力する。
【０４３４】
音声データミキシング処理部１２は、各音声データ取出処理部１１５−１〜１１５−Ｎより入力された第２周期に相当する160サンプル分の音声データフレームをサンプルごとに加算することによって、ミキシング済みの音声データ160サンプルを得る。
【０４３５】
得られたミキシング済みの音声データフレームを、符号化し、音声パケットとして複製し、各クライアント端末装置２１に送信する。
【０４３６】
上記第２実施例によれば、ミキシング処理開始時においてミキシング処理対象となるサンプリングデータが格納されているリングバッファSoundDataMap[i]のミキシング領域（読み出しアドレス領域）よりもサンプリング時間の倍数となる所定の余裕時間PreBufTimeLen[i]経過後に読み出される貼付可能アドレス領域に、アドレスをサンプリング時間単位で連続して変化させて、サンプリングデータが格納されるので、サンプリングデータの時間的な揺らぎがサンプリング時間単位で調整可能になる。
【０４３７】
さらに、ＲＴＰ基準カウントRTPBaseCount[i]を用いて、フレーム貼付位置CurrentStickTime[i]とＲＴＰ現在時刻RTPCurrentTime[i]とが対応付けられており、２つ目以降のパケットを貼り付ける場合には、上記の値と受信したパケットに含まれるＲＴＰタイムスタンプを基にして、フレームのサンプリングデータを貼り付けるリングバッファSoundDataMap[i]上の位置（アドレス）が決定されるので、最初のパケットのフレーム処理、フレームがすでにリングバッファ上に存在する場合の処理、最初のパケットの順序逆転時の処理等を適切に行うことができる。
【０４３８】
即ち、上記第２実施例によれば、「１類に属するアドレス決定法」を用いた場合には、音声データ取出処理部１１５が読み出しを行うデータ読み出し対象となるサンプリングデータが格納されているリングバッファSoundDataMap[i]の、読み出しアドレス領域から音声データが読み出された時刻よりも、サンプリング時間の倍数となる所定の余裕時間（PreBufTimeLen[i]/SamplesPerMilliSec）に相当する時間だけ経過後に読み出されるアドレス領域に、アドレスをサンプリング時間単位で連続して変化させてサンプリングデータが書き込まれることとなるので、パケット受信の時間揺らぎを、サンプリングデータの時間的な揺らぎとしてサンプリング時間単位で調整可能となる。
【０４３９】
また、「２類に属するアドレス決定法」でＲＴＰタイムスタンプを用いて、リングバッファSoundDataMap[i]上に既に書き込まれた音声データとの相対位置を元に書き込みアドレスを決定する場合には、受信パケットの到着順序が入れ替わったり、パケットの消失がある場合にも、パケット受信の揺らぎが、所定の余裕時間（PreBufTimeLen[i]/SamplesPerMilliSec）以内に収まる限りにおいて、受信揺らぎを吸収して連続的に音声データを格納し、所定の第２周期で取り出すことが可能となる。
【０４４０】
従って、第２実施例においても、複数地点のクライアント端末装置から送信されたパケットの遅延揺らぎ吸収を各クライアント端末装置ごとに独立して行うことができ、サンプリング時間単位で最適な遅延に制御した後、PreBufTimeLen[i]を制御することによって、サンプリング時間単位の精度で所定の第２周期毎にミキシングを行うことが可能になる
（第３実施例）
次に、本実施形態における第３実施例を図１３のタイミングチャート及び図１４乃至図１９のフローチャートを参照して詳細に説明する。
【０４４１】
第３実施例は受信パケットのフレームに含まれるサンプリングデータの貼付位置が、貼付位置の下限（アンダーラン境界）StickTimeMin[i]よりも基準アドレスBaseCount側になるアンダーランの場合及びオーバーラン境界StickTimeMax[i]以降になった場合にも十分に揺らぎを吸収してリアルタイムにミキシング処理を行えるようにしたものの一例である。
【０４４２】
第３実施例では、当該パケットの受信時刻を元に、音声データバッファ１１４のリングバッファSoundDataMap[i]への書き込み可能なアドレス領域の先頭アドレスStickTimeMin[i]と、書き込み可能なアドレス領域の末尾の次のアドレスStickTimeMax[i]を定義し、「２類に属するアドレス決定法」に基づいて当該音声データの書き込みアドレスを算出する場合に、算出されたアドレスが、書き込み可能な領域に収まっているかどうかを判定し、判定結果に応じて書き込みアドレスを制御する例を示す。
【０４４３】
上記「２類に属するアドレス決定法」により式（５）を用いてアドレスCurrentStickTime[i]を算出した場合には、音声データバッファ１１４上に書き込まれている音声データとの相対位置でアドレスが決定されるため、当該音声データを含むパケットの受信時刻によっては、CurrentStickTime[i]<StickTimeMin[i]もしくは、StickTimeMax[i]<CurrentStickTime[i]+CurrentFrameTimeLen[i]となり、書き込み可能領域外となる場合がある。
【０４４４】
CurrentStickTime[i]<StickTimeMin[i]となるような場合を「アンダーラン」状態、StickTimeMax[i]<CurrentStickTime[i]+CurrentFrameTimeLen[i]となるような場合を「オーバーラン」状態と定義する。
【０４４５】
「アンダーラン」もしくは「オーバーラン」が発生した場合には、たとえば、「１類に属するアドレス決定法」により、式（１）を用いて当該音声データフレームの書き込みアドレスを決定するようにすることができる。
【０４４６】
これは、従来法における再バッファリングに相当する。
【０４４７】
尚、上記アドレス算出法の定義から、「１類に属するアドレス決定方法」により、式（２）を用いて書き込みアドレスCurrentStickTime[i]を算出する場合には、StickTimeMin[i]<=CurrentStickTime[i]、且つ、CurrentStickTime[i]+CurrentFrameTimeLen[i]<=StickTimeMax[i]となるように上記条件、PreBufTimeLen[i]、BufOverRunTimeLen[i]の値の範囲を設定しておく。
【０４４８】
第３実施例では、貼付可能範囲における貼付可能位置の下限（音声データバッファ１１４の書き込み可能領域の先頭アドレス）StickTimeMin[i]は、ミキサの現在のアドレス（音声データ取出処理部１１５の読み出しアドレス）MixStartTimeと、基準時刻監視・音声データ取出制御部１４によってMixStartTimeに対応した時刻として設定されたミキサが現在のアドレスに移動した時刻MixerTimeStamp及びパケット受信時刻CurrentTimeStamp[i]を用いて次の（６）式で表される。
【０４４９】
StickTimeMin[i]=MixStartTime+(1+divInt)*MixFrameTimeLen  …（６）
ここで、MixFrameTimeLenは、音声データ取出処理部１１５が音声データバッファ１１４のリングバッファSoundDataMap[i]から読み出すサンプル数であり、所定の第２周期に相当する。
【０４５０】
また、基準時刻監視・音声データ取出制御部１４が起動されてから、音声データ取出処理部１１５−１〜１１５−Ｎが読み出しアドレスMixStartTimeから音声データを読み出し、音声データミキシング処理部１２が音声データ取出処理部１１５−１〜１１５−Ｎから受け取ったＮ個の音声データフレームをミキシングして後段に出力が完了するまでに要する時間をMixProcessTimeとすると、divIntは、(CurrentTimeStamp[i]-MixerTimeStamp+MixProcessTime)を所定の第２周期に相当する時間（MixFrameTimeLen/SamplesPerMilliSecで計算され、たとえば20ms）で割った商の整数部で定義される値である。
【０４５１】
たとえば、MixProcessTimeは10msとすることができ、所定の第２周期を20msとした場合には、MixFrameTimeLenは160サンプルとすることができる。
【０４５２】
また、オーバーラン境界StickTimeMax[i]は次の（７）式によって表される。
【０４５３】
StickTimeMax[i]=StickTargetTime[i]+BufOverRunTimeLen[i]  …（７）
ここで、StickTimeMax[i]は音声データバッファ１１４の書き込み可能領域の末尾の次のアドレスを指すアドレスであり、BufOverRunTimeLen[i]は、音声データバッファ上に書き込む音声データの最大量を規定する値で、単位はサンプル数である。
【０４５４】
また、StickTargetTime[i]は、当該音声データの受信時刻をもとに上記（１）式を用いて「１類に属するアドレス決定方法」で算出された当該音声データの理想的な書き込みアドレスである。
【０４５５】
StickTimeMax[i]によって、音声パケットを受信してから、音声データ取出処理部１１５で読み出しが行われるまでにかかる最大時間を制限したり、音声データバッファ１１４に保持される音声データの量が、SoundDataMap[i]のサイズを超えないように制御することができる。
【０４５６】
上記アドレス算出法の定義から、「１類に属するアドレス決定方法」により、（１）式もしくは（２）式を用いて書き込みアドレスCurrentStickTime[i]を算出した場合には、StickTimeMin[i]<=CurrentStickTime[i]、且つ、CurrentStickTime[i]+CurrentFrameTimeLen[i]<=StickTimeMax[i]が満たされるように、PreBufTimeLen[i]、BufOverRunTimeLen[i]の値の範囲を設定しておく。
【０４５７】
また、「２類に属するアドレス決定法」により式（５）を用いてアドレスCurrentStickTime[i]を算出した場合には、音声データバッファ１１４上に書き込まれている音声データとの相対位置でアドレスが決定されるため、当該音声データを含むパケットの受信時刻によっては、CurrentStickTime[i]<StickTimeMin[i]もしくは、StickTimeMax[i]<CurrentStickTime[i]+CurrentFrameTimeLen[i]となり、書き込み可能領域外となる場合がある。
【０４５８】
CurrentStickTime[i]<StickTimeMin[i]となるような場合を「アンダーラン」状態、StickTimeMax[i]<CurrentStickTime[i]+CurrentFrameTimeLen[i]となるような場合を「オーバーラン」状態と定義する。
【０４５９】
「アンダーラン」もしくは「オーバーラン」が発生した場合には、たとえば、「１類に属するアドレス決定法」により、式（１）を用いて当該音声データフレームの書き込みアドレスを決定するようにすることができる。これは、従来法における再バッファリングに相当する。
【０４６０】
尚、アンダーラン状態が生じたとき、貼付位置の下限（アンダーラン境界）StickTimeMin[i]よりもミキサの現在のアドレス側にはサンプリングデータを貼り付けることはできない。上記計算の結果、CurrentStickTime[i]<StickTimeMin[i]となる場合にはアンダーランとなる。また、上記計算の結果、CurrentStickTime[i]+CurrentFrameTimeLen[i]>StickTimeMax[i]となる場合にはオーバーランとなる。
【０４６１】
ここで、StickTimeMin[i]は、単純にStickTimeMin[i]=MixEndTime、もしくはStickTimeMin[i]=MixEndTime+MixFrameTimeLen等とすることも可能である。StickTimeMin[i]をMixEndTime(およびMixStartTime)から十分離れたアドレスとしておくことで、音声データ貼付処理部１１３の、受信した音声データフレームの音声データバッファ１１４のリングバッファSoundDataMap[i]への書き込みと、音声データ取出処理部１１５のSoundDataMap[i]からの音声データ読み出しが同時に同じアドレス領域を指定するのを回避することができる。
【０４６２】
また、StickTimeMax[i]についても同様にStickTimeMax[i]=MixStartTime+MixFrameTimeLen*Ｎｐ（Ｎｐはたとえば２０）等とすることも可能である。
【０４６３】
また、「オーバーラン」状態の判定はCurrentStickTime[i]+CurrentFrameTimeLen[i]>StickTimeMax[i]となる場合としているが、これをCurrentStickTime[i]>=StickTimeMax[i]とすることも可能である。後者の場合には当該音声データフレームのフレーム長を考慮せず、先頭サンプルの書き込みアドレスのみでオーバーランを判定することとなる。
【０４６４】
次に、第３実施例における処理の詳細を図１４乃至図１９に示すフローチャートを参照して詳細に説明する。
【０４６５】
リアルタイムミキシング処理装置１０は、起動すると図１４に示す初期化処理（ＳＣ１）を行う。この初期化処理では、フレーム開始位置FrameStartTime[i]（すなわち音声データバッファ１１４のリングバッファSoundDataMap[i] （iは処理部１〜Ｎに対応）への音声データ書き込み領域の先頭アドレスFrameStartTime[i]）を「−１」に設定すると共に、フレーム終了位置FrameEndTime[i]（すなわちデータ書き込み領域の末尾アドレスの次のアドレスFrameEndTime[i]）を「−１」に設定し、さらにミキサの現在のアドレスMixStartTime（すなわち音声データ取出処理部１１５の現在の読み出しアドレスの先頭）を「０」に設定すると共に、基準アドレスBaseCountを「０」に設定する。
【０４６６】
また、MixerTimeStampに現在時刻を設定する。
【０４６７】
また、各パケット処理部１１−１〜１１−Ｎのそれぞれに対応する音声データバッファ１１４のリングバッファSoundDataMap[i]（iは処理部１〜Ｎに対応）の領域を、無音を表す「０」で初期化する。
【０４６８】
この後、リアルタイムミキシング処理装置１０は、後述する基準時刻監視・音声データ取出制御部１４の起動処理を行い、パケット受信処理部１１１を起動する。
【０４６９】
パケット受信処理部１１１はパケットが受信されるまで待機状態となり、クライアント端末装置２１からのパケット受信を契機として処理を行う。
【０４７０】
図１５を用いて、基準時刻監視・音声データ取出制御部１４の処理の詳細について説明する。
【０４７１】
上記ミキサ起動処理では、図１５に示すように、ミキサの起動時刻を取得し、ミキサが現在のアドレスに移動した時刻MixerTimeStampの値として現在時刻を設定する。
【０４７２】
即ち、上記基準時刻監視・音声データ取出制御部１４は、起動時刻を取得し、音声データ取出処理部１１５のSoundDataMap[i]の読み出しアドレスMixStartTimeが現在のアドレスに移動した時刻として、MixerTimeStampに取得した起動時刻（現在時刻）を設定する（ＳＤ１）。ここで、初回のみはＳＣ１で設定したMixerTimeStampの値を用いることとしても良い。
【０４７３】
この後、基準時刻監視・音声データ取出制御部１４は、各パケット処理部１１の音声データバッファ１１４に対応する複数のレーンのうち１つ以上がミキシング中であるか否かを判定する（ＳＤ２）。
【０４７４】
ここで、ｉ＝１〜Ｎまでのレーンのうち、音声データバッファ１１４のリングバッファSoundDataMap[i]の当該読み出しアドレス領域の先頭アドレスMixStartTimeの位置にサンプリングデータが存在するようなレーンが１つ以上ある場合に、ｉ＝１〜ＮまでのリングバッファSoundDataMap[i]のMixStartTimeからMixEndTime-1までのアドレス領域の音声データを読み出してミキシング処理を行う必要がある。すなわちミキシング中であると判定する。
【０４７５】
この判定では、フレーム開始位置FrameStartTime[i]がミキサの現在の読み出しアドレスMixStartTime以下の値であり且つフレーム終了位置FrameEndTime[i]がミキサの現在の読み出しアドレスMixStartTimeより大きな値であるとき、ミキシング中であると判定する。即ち、基準時刻監視・音声データ取出制御部１４は、音声データバッファ１１４−１〜１１４−Ｎの、すべてについて（ｉ＝１〜Ｎのすべてについて）、それぞれ、FrameStartTime[i]<=MixStartTime、且つ、FrameEndTime[i]>MixStartTimeとなっているかどうかを判定し、ｉ＝１〜Ｎのうち、１つでも上記が真である場合にミキシング中であると判定する。ここで、「[i]」はレーンの番号を意味している。
【０４７６】
この判定の結果、ミキシング中でないとき（即ち上記ＳＤ２の判定を行った結果、ｉ＝１〜Ｎのうち、全てのレーンについて条件式が偽であった場合）は後述するＳＤ８の処理に移行し、ミキシング中のときは各パケット処理部１１−１〜１１−Ｎの音声データバッファ１１４からミキシングに必要な量(MixFrameTimeLen)の音声サンプリングデータを取得して後述するミキシング処理を実行し（ＳＤ３）、このミキシング処理によって得られた音声データに対して音声符号化処理を施す（ＳＤ４）。
【０４７７】
即ち、上記判定を行った結果、ｉ＝１〜Ｎのうち、いずれか１つでも真であった場合には、基準時刻監視・音声データ取出制御部１４は、音声データ取出処理部１１５−１〜１１５−Ｎに指示して、１〜Ｎの全てのｉについて、音声データバッファ１１４−ｉのリングバッファSoundDataMap[i]のMixStartTimeで示されたアドレスから、所定の第２周期に相当するMixFrameTimeLen（たとえば160サンプル）分の音声データを読み出し、音声データミキシング処理部１２に渡し、ミキシング処理を行う（ＳＤ３）。
【０４７８】
音声データミキシング処理に関する詳細は、図１９を参照して後述する。
【０４７９】
次に、音声データミキシング処理部１２でミキシングされて得られた音声データフレームは、音声符号化処理される（ＳＤ４）。
【０４８０】
尚、音声符号化処理は必要に応じて行えばよいものであり、音声符号化処理を行わなくても良い。
【０４８１】
ここで、上記ＳＤ２の判定の結果、ｉ＝１〜Ｎのいずれか１つでも真であった場合を「ミキシングモード」状態、全てが偽であった場合を「アイドリングモード」状態と定義する。
【０４８２】
「アイドリングモード」では、リアルタイムミキシング処理装置１０は、クライアント端末装置２１に対して音声データパケットを送信しない。「ミキシングモード」ではクライアント端末装置２１に対してミキシングを行った結果得られた音声データを送信する。
【０４８３】
これによって、クライアント端末装置２１から音声データを受信した場合にのみ、ミキシングを行った音声データを各クライアント端末装置２１に送信することが可能となる。
【０４８４】
これに対して、第１実施例、第２実施例は、基準時刻監視・音声データ取出制御部１４は、クライアント端末装置２１からの音声データ受信の有無に関わらず、各クライアント端末装置２１に対して音声データを送信するような実装とした例である。
【０４８５】
次に、音声符号化処理によって得られた音声データをフレーム単位でパケット化し、このパケットを送信する（ＳＤ５）。
【０４８６】
この後、ミキサが現在のアドレスに来た時刻MixerTimeStampからMixFrameTimeLen/SamplesPerMilliSec（例えば２０ｍｓ）経過するまで待ち（ＳＤ６）、MixFrameTimeLen/SamplesPerMilliSecに相当する時間経過したらミキサの現在のアドレスMixStartTimeをMixFrameTimeLen進める（ＳＤ７）。すなわち、ミキサの現在のアドレスMixStartTimeの値にミキシングしたサンプリングデータの数（時間）MixFrameTimeLenを加算した値を新たなミキサの現在のアドレスMixStartTimeの値とする。
【０４８７】
上記処理において、基準時刻監視・音声データ取出制御部１４は、ＳＤ１の処理でMixerTimeStampに設定した時刻から起算して、第２周期に相当する時間（たとえば２０ms）だけ後の時刻になるまで処理を休止して待ち（ＳＤ６）、MixerTimeStamp+20msの時刻になったら、MixStartTimeの値を、所定の第２周期に相当するたとえば160サンプルだけ増加する。即ち、音声データ取出処理部１１５がリングバッファSoundDataMap[i]から読み出しを行うアドレスMixStartTimeの値を第２周期に相当するサンプル数だけ後方に移動する。MixStartTime=MixStartTime+MixFrameTimeLen（ＳＤ７）。この後、前記ＳＤ１の処理に移行する。
【０４８８】
一方、前記ＳＤ２の判定の結果、ミキシング中でないときは、何れかのレーンにおけるミキシング領域にフレームの先頭のサンプリングデータが存在するか否かを判定する（ＳＤ８）。即ち、前記ＳＤ２の判定の結果、ｉ＝１〜Ｎの全てのｉについて、判定結果が偽であった場合（「アイドリングモード」状態であった場合）には、基準時刻監視・音声データ取出制御部１４は、音声データ取出処理部１１５−ｉが音声データバッファ１１４−ｉのリングバッファSoundDataMap[i]から当該処理において読み出すアドレス領域（MixStartTimeからMixEndTimeの間の領域）に音声データの先頭FrameStartTime[i]が存在するか否かを判定する。
【０４８９】
この判定では、FrameStartTime[i] <= MixStartTime+MixFrameTimeLenであり且つFrameEndTime[i]>=MixStartTime+MixFrameTimeLenであるとき、SoundDataMap[i]上に既に書き込まれた音声データ領域の先頭が存在するものと判定する。
【０４９０】
このとき、MixStartTime+MixFrameTimeLen=MixEndTimeである。
【０４９１】
ここで、「[i]」は前述と同様にレーンの番号を意味する。以下、「[i]」に関しては同様である。
【０４９２】
ここで、上記ＳＤ８の判定式を「FrameStartTime[i]<MixEndTimeであり、且つ、FrameEndTime[i]>MixStartTimeであるとき、SoundDataMap[i]上に既に書き込まれた音声データ領域の先頭FrameStartTime[i]が存在するものと判定する。」としても良い。
【０４９３】
本実施例のようにCurrentFrameTimeLen[i]>=MixFrameTimeLenの場合（本実施例ではCurrentFrameTimeLen[i]=MixFrameTimeLen=160サンプルである）には、上記ＳＤ８の判定式と同等である。
【０４９４】
この判定の結果、当該処理において読み出すアドレス領域に音声データ領域の先頭FrameStartTime[i]が存在しないときは前記ＳＤ６の処理に移行し、音声データ領域の先頭FrameStartTime[i]が存在するときは、存在するデータの先頭をミキシングする時刻まで待ち（ＳＤ９）、ミキサをミキシング開始位置まで進める（ＳＤ１０）。
【０４９５】
このとき、存在するデータの先頭をミキシングすべき時刻まで待つ待機処理は、全ての再生待ちレーンのデータ領域の先頭FrameStartTime[i]のうちで最もミキサの現在のアドレスMixStartTimeに近いものをFrameStartTime[j]としたとき、（FrameStartTime[j]-MixStartTime）/SamplesPerMilliSecによってサンプル数を時間に換算して待機時間を求めることができる。
【０４９６】
また、フレーム開始位置FrameStartTime[j]からミキサの現在のアドレスMixStartTimeを減算した値をミキサの現在のアドレスMixStartTimeの値に対して加算した値を新たなミキサの現在のアドレスMixStartTimeとする。
【０４９７】
基準時刻監視・音声データ取出制御部１４は、上記式によって得られた時刻まで処理を休止して待ち（ＳＤ９）、読み出しアドレスMixStartTimeをMixStartTime=FrameStartTime[j]に設定する（ＳＤ１０）。
【０４９８】
各クライアント端末装置２１からサンプリングデータを含むパケットを受信した場合にのみミキシング処理を行って各クライアント端末装置２１に対してサンプリングデータを送信するようにしたい場合がある。この際、複数のクライアント端末装置２１から受信するサンプリングデータのうちで、最も先頭のサンプリングデータを、各クライアント端末装置２１に送信するサンプリングデータの先頭サンプルとするためには、読み出しアドレスを、受信したサンプリングデータの先頭サンプルが書き込まれているアドレスに設定する必要がある。また、読み出し処理は設定した読み出しアドレスに対応した時刻に行う必要がある。
【０４９９】
各レーンの先頭サンプルが書き込まれたアドレスFrameStartTime[i]を比較して、読み出しアドレスMixStartTimeに最も近いアドレスをFrameStartTime[j]としたとき、読み出しアドレスMixStartTimeは、FrameStartTime[j]に設定される。
【０５００】
当該処理の起動時刻をMixerTimeStampとしたとき、読み出し処理が行われるべき時刻は、MixerTimeStamp+(FrameStartTime[j]-MixStartTime)/SamlesPerMilliSecであらわされる。
【０５０１】
この待ち合わせ処理で先頭のFrameStartTime[j]とMixStartTimeを同期させることによって、不要な無音サンプルを各クライアント端末装置２１に送出することなく、各クライアント端末装置２１から受け取った音声データの先頭サンプルからミキシングして送出することが可能となる。尚、休止から回復した基準時刻監視・音声データ取出制御部１４は、次回のＳＤ２判定処理で「ミキシングモード」と判定される。この後、基準時刻監視・音声データ取出制御部１４は、ＳＤ１の処理に移行する。
【０５０２】
次に、図１６を用いて音声パケット受信処理の詳細を説明する。
【０５０３】
リアルタイムミキシング処理装置１０は、クライアント端末装置２１−１〜２１−ＮまでのＮ個の端末からのパケットを受信する。
【０５０４】
ここでは、クライアント端末装置２１−１からの音声パケットを受信した場合に行われる処理を例にとって説明を行う。
【０５０５】
クライアント端末装置２１−１からの音声パケットは、端末装置２１−１に対応したパケット処理部１１−１で処理される。受信した音声パケットは、パケット処理部１１−１内のパケット受信処理部１１１−１に渡される。パケット受信処理部１１１−１では、受信パケットに対してパケット受信時刻CurrentTimeStamp[1]を対応付けて記憶する（ＳＥ１）。
【０５０６】
上記パケット受信処理では、図１６に示すように、パケット受信処理を行い（ＳＥ１）、受信パケットに対して受信時刻CurrentTimeStamp[i]を対応付けて記憶する。
【０５０７】
この後、受信パケットに含まれるフレームが符号化されているサンプリングデータからなる場合は、音声データ復号処理部１１２において、この符号化されたサンプリングデータを復号するために音声復号化処理を施す（ＳＥ２）。尚、音声復号化処理は必要に応じて行えばよいものであり、受信パケットに含まれるフレームが符号化されていないサンプリングデータからなる場合は音声復号化処理を行わなくても良い。
【０５０８】
次に、各レーンに対応する音声データ貼付処理部１１３において、受信パケットが最初の１個目のパケットであるか否かを判定する（ＳＥ３）。この判定は、フレーム開始位置FrameStartTime[i]がミキサの現在のアドレスMixStartTimeよりも小さい値であり且つフレーム終了位置FrameEndTime[i]がミキサの現在のアドレスMixStartTimeよりも小さい値であるとき、すなわちリングバッファSoundDataMap[i]の読み出しアドレスよりも後方のアドレス領域にサンプリングデータが書き込まれていない状態であるとき、受信パケットが最初の１個目のパケットであると判定する。
【０５０９】
ここで、ＳＥ３の判定は、受信パケットを音声データバッファ１１４−ｉに格納する際のアドレスを計算する際に、音声データバッファ１１４−ｉ上に既に書き込まれた音声データとの相対アドレスでアドレスを決定する「２類に属するアドレス決定法」を用いるか、パケットを受信した時刻を元にしてアドレスを決定する「１類に属するアドレス決定法」を用いるかを判定する（ＳＥ３）。この判定は、たとえば、音声データバッファ１１４−ｉのリングバッファSoundDataMap[i]に書き込まれた音声データ領域の先頭アドレスを保持するFrameStartTime[i]と、音声データ領域の末尾の次のアドレスを保持するFrameEndTime[i]と、音声データ取出処理部１１５がSoundDataMap[i]からの読み出したアドレスを保持するMixStartTimeの値との関係を用いて行うことができる。
【０５１０】
即ち、FramsStartTime[i]<MixStartTime、且つ、FrameEndTime[i]<=MixStartTimeが共に真である場合には、パケットを受信した時刻を元にして「１類に属するアドレス決定法」を用いてアドレスを算出し、偽である場合には、音声データバッファ１１４−ｉ上に既に書き込まれた音声データとの相対位置による「２類に属するアドレス決定法」を用いてアドレスを決定する。
【０５１１】
たとえば、「１類に属するアドレス決定法」が選択されるのは、受信する最初の１個目のパケット、もしくは、音声データバッファ１１４−ｉ上の音声データ領域が音声データ読み出しに伴って初期化された状態で到着した最初のパケットである場合等である。
【０５１２】
このＳＥ３による判定の結果、受信パケットが最初の１個目のパケットではないとき（「２類に属するアドレス決定法」を用いてアドレスを決定する場合）は、このパケットのフレームに含まれるサンプリングデータのリングバッファSoundDataMap[i]への貼付位置CurrentStickTime[i]を、直前の音声データを処理した際に、上記（４）式を用いて予め計算し保持しておいたRTPBaseCount[i]と、音声データ復号処理部１１２で受信したＲＴＰパケットから取得したＲＴＰタイムスタンプRTPCurrentTime[i]を用いて上記（５）式により算出して（ＳＥ４）、後述するＳＥ７の処理に移行する。
【０５１３】
また、上記ＳＥ３の判定の結果、受信パケットが１個目のパケットであるとき（「１類に属するアドレス決定法」を用いる場合）は、上記（２）式で貼付位置（音声データバッファ１１４への当該音声データフレームの書き込みアドレスの先頭）CurrentStickTime[i]を算出（ＳＥ５）した後、音声データバッファ１１４上の音声データの先頭アドレスに相当するフレーム開始位置FrameStartTime[i] の設定を行う（ＳＥ６）。このとき、貼付位置CurrentStickTime[i]をフレーム開始位置FrameStartTime[i]の値として設定する。尚、更新に際してFrameStartTime[i]=CurrentStickTime[i]とする。
【０５１４】
即ち、当該音声データフレームのサンプリングデータが、現時点でバッファ上に書き込まれている先頭のサンプリングデータであることから、バッファ上にサンプリングデータが書き込まれた領域の先頭アドレスFrameStartTime[i]に、当該サンプリングデータを書き込んだアドレス領域の先頭CurrentStickTime[i]の値を設定する。
【０５１５】
次いで、リアルタイムミキシング処理装置１０は、貼付位置の下限（アンダーラン境界）StickTimeMin[i]と貼付位置の上限（オーバーラン境界）StickTimeMax[i]を算出し（ＳＥ７）、貼付処理を実施する（ＳＥ８）。
【０５１６】
ここで、StickTimeMin[i]は、音声データバッファ１１４のリングバッファSoundDataMap[i]の書き込み可能領域の先頭アドレス、StickTimeMax[i]は書き込み可能領域の末尾の次のアドレスに相当する。
【０５１７】
図１７及び図１８を用いて実際の書き込みアドレス決定、および書き込み処理の詳細について説明する。
【０５１８】
上記貼付処理では、各パケット処理部１１−１〜１１−Ｎにおいて、受信パケットのフレームが既に音声データバッファ１１４に貼り付けられているフレームよりも前のフレームであるか否かを判定する（ＳＦ１）。
【０５１９】
即ち、音声データ貼付処理部１１３−ｉは、（２）式もしくは（５）式によって得られた当該音声データフレームのSoundDataMap[i]への書き込みアドレスCurrentStickTime[i]が、既に音声データバッファ１１４のリングバッファSoundDataMap[i]上の、音声データが書き込まれている領域の先頭アドレスよりも前のアドレスかどうかを判定する。
【０５２０】
この判定では、フレーム貼付位置CurrentStickTime[i]がフレーム開始位置FrameStartTime[i]よりも小さいとき、当該受信パケットのフレームが既に音声データバッファ１１４に貼り付けられているフレームよりも前のフレームであると判定する。
【０５２１】
即ち、CurrentStickTime[i]<FrameStartTime[i]となるとき、当該音声データフレームが、音声データバッファ１１４に既に書き込まれている音声データ領域の先頭よりも前のアドレスに書き込まれるべき音声データであるものと判定する。
【０５２２】
この判定の結果、当該受信パケットの音声データフレームが、既に音声データバッファ１１４に貼り付けられているフレームよりも前のフレームであるとき（既に書き込まれている音声データ領域の先頭アドレスよりも前のアドレスに書き込まれるべき音声データであるとき）は後述するＳＦ１２の処理に移行し、当該受信パケットのフレームが既に音声データバッファ１１４に貼り付けられているフレームよりも前のフレームでないとき（既に書き込まれている音声データ領域の先頭アドレスよりも前のアドレスに書き込まれるべき音声データでないとき）は、アンダーランが生じているか否かを判定する（ＳＦ２）。この判定では、フレーム貼付位置CurrentStickTime[i]が貼付位置の下限（アンダーラン境界）StickTimeMin[i]よりも小さいとき即ちCurrentStickTime[i]<StickTimeMin[i]となっている場合にアンダーランが生じているものと判定する。
【０５２３】
バッファ上に既に書き込まれているサンプリングデータとの相対アドレスによって、当該受信パケットに含まれるサンプリングデータの書き込みアドレスを決定した場合に、書き込みアドレスと読み出しアドレスが同時に同じアドレスとなってしまう場合や、決定された書き込みアドレスが、過去に既に読み出しを終えた領域のアドレスとなってしまう場合がある。このような状態が「アンダーラン」状態である。アンダーランは、当該パケットがそれ以前のパケットと比較して大きく遅延して到着した場合に発生する。
【０５２４】
この判定の結果、「アンダーラン」が生じているときは後述するＳＦ７の処理に移行し、「アンダーラン」が生じていないときは「オーバーラン」が生じているか否かを判定する（ＳＦ３）。この判定では、フレーム貼付位置に当該音声データフレームのフレーム長を加えたCurrentStickTime[i]+CurrentframeTimeLen[i]が貼付位置の上限（オーバーラン境界）StickTimeMax[i]よりも大きいときオーバーランが生じているものとする。
【０５２５】
即ち、当該音声データフレームのSoundDataMap[i]への書き込みアドレスCurrenStickTime[i]が、書き込み可能領域の末尾アドレスStickTimeMax[i]よりも後方のアドレスかどうかを判定し、CurrentStickTime[i]+CurrentFrameTimeLen[i]>StickTimeMax[i]となる場合には「オーバーラン」が生じているものと判定する。
【０５２６】
ここで、当該受信パケットの音声データフレーム長CurrentFrameTimeLen[i]を考慮せず、CurrentStickTime[i]>=StickTimeMax[i]となっている場合に「オーバーラン」が生じていると判定するように定義することも可能である。
【０５２７】
この判定の結果、オーバーランが生じていないときは後述するＳＦ６の処理に移行し、オーバーランが生じているときは、貼付可能位置の下限StickTimeMin[i]からフレーム終了位置FrameEndTime[i]までのサンプリングデータを全て破棄（０クリア）し（ＳＦ４）、上記（２）式を用いて当該パケットに含まれるサンプリングデータの書き込みアドレスCurrentStickTime[i]を算出する（ＳＦ５）。
【０５２８】
即ち、音声データ貼付処理部１１４−ｉは、SoundDataMap[i]への書き込み可能領域の先頭アドレスStickTimeMin[i]からバッファに書き込まれた音声データ領域の末尾アドレスFrameEndTime[i]-1で示されるアドレスまでの領域のサンプリングデータを全て破棄（「０」クリア）し（ＳＦ４）、上記（２）式を用いて音声データバッファ１１４のリングバッファSoundDataMap[i]への当該音声データフレームの書き込みアドレスを算出する（ＳＦ５）。
【０５２９】
次いで、上記算出した貼付位置（音声データバッファ１１４のリングバッファSoundDataMap[i]の書き込みアドレス）CurrentStickTime[i]に受信パケットに含まれる当該音声データフレームのサンプリングデータを書き込む（ＳＦ６）。
【０５３０】
次いで、当該音声データの書き込みアドレスCurrentStickTime[i]と、当該音声データのＲＴＰタイムスタンプRTPCurrentTime[i]を用いてＲＴＰ基準カウントRTPBaseCount[i]を更新すると共に、音声データバッファ１１４のリングバッファSoundDataMap[i]に書き込まれた音声データ領域の末尾の次のアドレスを指すようにフレーム終了位置FrameEndTime[i]を更新し（ＳＦ１１）、上記パケット受信処理に移行してクライアント端末装置２１からの次のパケットが受信されるのを待つ。
【０５３１】
このとき、RTP基準カウントRTPBaseCount[i]は上記（４）式によって算出され、音声データバッファ上に既に書き込まれた音声データ領域の末尾の次のアドレスFrameEndTime[i]は上記（３）式によって算出される。
【０５３２】
一方、上記ＳＦ２の判定の結果、アンダーランが生じているときは、貼付対象としている当該音声データフレームが音声データバッファ１１４のリングバッファSoundDataMap[i]に貼り付けられているフレーム（サンプリングデータ）の途中のフレームであるか否かを判定する（ＳＦ７）。
【０５３３】
この判定では、貼付位置（当該フレームの書き込みアドレス）CurrentStickTime[i]がフレーム終了位置（既に書き込まれた音声データ領域の末尾の次のアドレス）FrameEndTime[i]よりも前に読み出されるアドレスであるとき（CurrentStickTime[i]<FrameEndTime[i]となっている場合）に途中のフレームであると判定する。
【０５３４】
この判定の結果、途中のフレームであるとき、即ち、当該フレームが音声データバッファ１１４のリングバッファSoundDataMap[i]に既に書き込まれている音声データ領域の途中のアドレスに書き込まれるデータであると判定した場合には後述するＳＦ１０の処理に移行し、途中のフレームでないとき、すなわちリングバッファSoundDataMap[i]に貼り付けられている最後のフレームに続くフレームであるとき、即ちリングバッファSoundDataMap[i]に既に書き込まれた音声データ領域の末尾よりも後方のアドレスに書き込まれるべき音声データであるときは、音声データ貼付処理部１１３は、揺らぎ吸収余裕が不足していたと判断して、揺らぎ吸収余裕PreBufTimeLen[i]を所定量増加させる（ＳＦ８）と共に、新たなPreBufTimeLen[i]と上記（２）式を用いて貼付位置CurrentStickTime[i]を算出する（ＳＦ９）。この後、前記ＳＦ６の処理に移行する。ここで、揺らぎ吸収余裕PreBufTimeLen[i]を所定量増加する処理において、所定のPreBufTimeLen[i]の最大値を超えては増加させないようにすることもできる。
【０５３５】
また、上記ＳＦ７の判定の結果、途中のフレームであるとき、即ち、音声データバッファ１１４のリングバッファSoundDataMap[i]に、既に書き込まれている音声データ領域の途中のアドレスに書き込まれるデータである場合には、貼付可能位置の下限（アンダーラン境界）StickTimeMin[i]よりも貼り付け位置が大きいサンプリングデータのみをリングバッファSoundDataMap[i]に貼り付け、これ以外のサンプリングデータを破棄する（ＳＦ１０）。
【０５３６】
即ち、当該音声データフレームに含まれるサンプリングデータのうち、書き込み可能領域の先頭アドレスStickTimeMin[i]よりも後方のアドレスに書き込まれるべきサンプリングデータのみをリングバッファSoundDataMap[i]に書き込み、これ以外のサンプリングデータを破棄する。
【０５３７】
その後、上記パケット受信処理に移行してクライアント端末装置２１からの次のパケットが受信されるのを待つ。
【０５３８】
一方、上記ＳＦ１の判定の結果、受信パケットのフレームが既に音声データバッファ１１４に貼り付けられているフレームよりも前のフレームであるとき、即ち、受信した当該音声データフレームが、音声データバッファ１１４のリングバッファSoundDataMap[i]に既に書き込まれている音声データ領域の先頭アドレスFrameStartTime[i]よりも前方のアドレスに書き込まれるべき音声データフレームであった場合には、既に音声データバッファ１１４に貼り付けられているフレームの先頭のサンプリングデータが既にミキシング中であるか否かを判定する（ＳＦ１２）。
【０５３９】
この判定では、音声データバッファ１１４に貼り付けられている音声データ領域の先頭アドレスが、StickTimeMin[i]よりも前のアドレスであるとき、即ちFrameStartTime[i]<StickTimeMin[i]のとき既にミキシング中であると判定する。
【０５４０】
この判定の結果、既にミキシング中であるときは逆転して後に受信したパケットのフレームを破棄して、このフレームのサンプリングデータの貼付は行わずに（ＳＦ１３）、上記パケット受信処理に移行する。
【０５４１】
即ち、上記ＳＦ１２の判定の結果、FrameStartTime[i]<StickTimeMin[i]となっている場合には、当該音声データフレームを破棄して、この音声データフレームのサンプリングデータの音声データバッファ１１４への書き込みは行わず（ＳＦ１３）、上記パケット受信処理に移行し、クライアント端末装置２１からの次のパケットが受信されるのを待つ。
【０５４２】
また、ＳＦ１２の判定の結果、ミキシング中で無いとき、即ち、FrameStartTime[i]>=StickTimeMin[i]となっている場合には、貼付対象としているフレームに含まれる全てのサンプリングデータを挿入してリングバッファに貼り付けた場合にオーバーランになるか否かを判定する（ＳＦ１４）。
【０５４３】
即ち、当該音声データフレームの受信時刻をもとに計算した理想的な書き込みアドレスStickTargetTime[i]に当該音声データフレームを書き込み、音声データバッファ１１４のリングバッファSoundDataMap[i]上に既に書き込まれている音声データは、当該音声データの書き込みアドレスに続くアドレスに移動する処理を行った場合に、書き込み可能領域の末尾StickTimeMax[i]よりも後方のアドレスにデータを書き込むことになるかどうかを判定する（ＳＦ１４）。この判定は、上記（１）式を用いて当該パケットの受信時刻からStickTargetTime[i]を算出し、このStickTargetTime[i]を用いて、StickTargrtTime[i]+(FrameEndTime[i]-CurrentStickTime[i])>StickTimeMax[i]となるかどうかによって判定する。
【０５４４】
この判定の結果、オーバーランになるときは、貼付可能位置の下限（アンダーランの境界）StickTimeMin[i]からフレーム開始位置FrameStartTime[i]までの間のアドレスに貼付可能な分のサンプリングデータのみを貼り付けた後（ＳＦ１５）、フレーム開始位置FrameStartTime[i]の値を貼付可能位置の下限（アンダーランの境界）StickTimeMin[i]の値に更新して（ＳＦ１６）、上記パケット受信処理に移行する。
【０５４５】
即ち、このＳＦ１４の判定の結果、StickTargetTime[i]+(FrameEndTime[i]-CurrentStickTime[i])>StickTimeMax[i]となる場合には、音声データバッファ１１４のリングバッファSoundDataMap[i]への当該音声データ書き込みアドレスの先頭CurrentStickTime[i]を基準として、StickTimeMin[i]以降に対応するアドレスに対してのみ、当該音声データフレームのサンプリングデータを書き込む（ＳＦ１５）。この後、FrameStartTime[i]=StickTimeMin[i]としてFrameStartTime[i]を更新し（ＳＦ１６）、RTPBaseCount[i]の値は更新しないで、上記パケット受信処理に移行し、クライアント端末装置２１からの次のパケットが受信されるのを待つ。
【０５４６】
また、ＳＦ１４の判定の結果、オーバーランにならないとき、即ちStickTargetTime[i]+(FrameEndTime[i]-CurrentStickTime[i])<=StickTimeMax[i]となる場合には、FrameStartTime[i]からFrameEndTime[i]−１までのアドレスに貼り付けられているサンプリングデータをStickTargetTime+(FrameStartTime[i]-CurrentStickTime[i])の位置のアドレスを先頭とする領域に移動し、理想的貼付位置StickTargetTime[i]のアドレスを先頭として現在貼り付け対象としているフレームの全てのサンプリングデータを貼り付ける（ＳＦ１７）。
【０５４７】
この後、フレーム終了位置FrameEndTime[i]のアドレスを更新する（ＳＦ１８）。このとき、当該音声データを書き込んだ後の音声データ領域のサンプル数は、現在の末尾の次のアドレスFrameEndTime[i]から、現在バッファに書き込まれている音声サンプリングデータとの相対アドレスとして算出されたCurrentStickTime[i]のアドレスを引くことによって、(FrameEndTime[i]-CurrentStickTime[i])で求めることができる。
【０５４８】
このサンプル数をStickTargetTime[i]を先頭アドレスとする領域に書き込むので、音声データ領域の末尾の次のアドレスFrameEndTime[i]はFrameEndTime[i]=StickTargetTime[i]+(FrameEndTime[i]-CurrentStickTime[i])として更新することができる。
【０５４９】
次いで、各レーン毎にフレーム開始位置FrameStartTime[i]のアドレスを更新する（ＳＦ１９）。このとき、理想貼付位置StickTargetTime[i]の値を新たなフレーム開始位置FrameStartTime[i]として設定する。
【０５５０】
また、CurrentStickTime[i]=StickTargetTime[i]とし、新たなCurrentStickTime[i]を（４）式に適用して、RTPBaseCount[i]を計算する。
【０５５１】
次に、図１９を参照して音声データミキシング処理の詳細について説明する。
【０５５２】
本処理は、前述のＳＤ２の処理において、音声データバッファ１１４−１〜１１４−Ｎのすべてについて、それぞれ、FrameStartTime[i]<=MixStartTime、且つ、FrameEndTime[i]>MixStartTimeとなっているかどうかを判定し、ｉ＝１〜Ｎのうち、いずれか１つでも上記が真であった場合に行われる処理である。
【０５５３】
上記ミキシング処理では、図１９に示すように、ミキシングバッファの初期化を行い（ＳＧ１）、ｉ＝１として第１番目のレーン、すなわち第１番目のパケット処理部１１−１のバッファを選択する。
【０５５４】
即ち、基準時刻監視・音声データ取出制御部１４は、音声データミキシング処理部１２に対してミキシングバッファの初期化を指示する。この指示を受けて音声データミキシング処理部１２は、ミキシングすべき所定の第２周期に相当する（たとえば160サンプル分）サイズのミキシングバッファを「０」で初期化する。また、基準時刻監視・音声データ取出制御部１４は、後述するＳＧ２の判定を行うレーンを指定するインデックスをｉ＝１に設定する。
【０５５５】
次いで、ミキサで必要な範囲にデータが存在するか否かを判定する（ＳＧ２）。この判定では、フレーム開始位置FrameStartTime[i]がミキシング処理で読み出されるアドレス領域の末尾の次のアドレスMixEndTimeよりも前に読み出されるアドレスであり且つフレーム終了位置FrameEndTime[i]がミキシングで読み出されるアドレス領域の先頭アドレスMixStartTimeよりも後に読み出されるアドレスであるとき、ミキサで必要な範囲にデータが存在すると判断する。
【０５５６】
即ち、基準時刻監視・音声データ取出制御部１４は、ｉ＝１〜Ｎの全てについて、音声データバッファ１１４−ｉを順に選択し、リングバッファSoundDataMap[i]の、当該音声データ読み出し対象の領域に音声データが書き込まれているかどうかを検査する。音声データバッファ１１４−ｉのリングバッファSoundDataMap[i]上に書き込まれた音声データ領域の先頭アドレスを指すFrameStartTime[i]、末尾の次のアドレスを指すFrameEndTime[i]が、FrameStartTime[i]<MixEndTime、且つ、FrameEndTime[i]>MixStartTimeとなっているかどうかを判定し、真の場合には必要とする音声データが存在すると判断する。
【０５５７】
この判定の結果、ミキサで必要な範囲にデータが存在しないときは後述するＳＧ４の処理に移行し、存在するときは、復号済みのサンプリングデータが貼り付けられている音声データバッファ１１４のリングバッファSoundDataMap[i]から音声サンプリングデータを取り出してミキシングバッファでミキシングする。このとき、取り出されるサンプリングデータはミキシング処理で読み出されるアドレス領域の先頭アドレスMixStartTime以上であり、アドレス領域の末尾の次のアドレスMixEndTimeよりも小さいアドレス領域に貼り付けられているサンプリングデータである。
【０５５８】
即ち、上記ＳＧ２の判定を行い、結果が偽の場合にはＳＧ４の処理に移行し、結果が真の場合には、基準時刻監視・音声データ取出制御部１４は、音声データ取出処理部１１５−ｉに指示して、音声データバッファ１１４−ｉのリングバッファSoundDataMap[i]のMixStartTimeで示されたアドレスから、所定の第２周期に相当するMixFrameTimeLen（たとえば160サンプル）分の音声データを読み出し、音声データミキシング処理部１２に渡し、ミキシング処理を行う（ＳＧ３）。
【０５５９】
音声データミキシング処理部１２では、音声データ取出処理部１１５−ｉから渡された音声データフレームを、ミキシングバッファに保持されている音声データとミキシングして得られた音声データフレームをミキシングバッファに保持する。
【０５６０】
この後、次のレーンの音声データバッファを選択するために、変数ｉに１を加算し（ＳＧ４）、全てのレーン（ｉ＝１〜Ｎの全ての音声データバッファ）のデータのミキシング処理を終了したか否かを判定する（ＳＧ５）。この判定の結果、全てのレーンのデータミキシング処理を終了していないとき、即ち全ての音声データバッファ１１４−１〜１１４−Ｎについて処理が終了していないときには、上記ＳＧ２の処理に移行し、全てのレーンのデータのミキシング処理を終了したときは、ミキシング処理を終了する。
【０５６１】
上記第３実施例によれば、「１類に属するアドレス決定法」を用いた場合には、データ取出処理部１１５が読み出しを行うデータ読み出し対象となるサンプリングデータが格納されているリングバッファSoundDataMap[i]の、読み出しアドレス領域から音声データが読み出された時刻よりも、サンプリング時間の倍数となる所定の余裕時間（PreBufTimeLen[i]/SamplesPerMilliSec）に相当する時間だけ経過後に読み出されるアドレス領域に、アドレスをサンプリング時間単位で連続して変化させてサンプリングデータが書き込まれることとなるので、パケット受信の時間揺らぎを、サンプリングデータの時間的な揺らぎとしてサンプリング時間単位で調整可能となる。
【０５６２】
また、「２類に属するアドレス決定法」を用いて、リングバッファSoundDataMap[i]上に既に書き込まれた音声データとの相対位置を元に書き込みアドレスを決定する場合には、パケット受信の揺らぎが、所定の余裕時間（PreBufTimeLen[i]/SamplesPerMilliSec）以内に収まる限りにおいて、受信揺らぎを吸収して連続的に音声データを格納し、所定の第２周期で取り出すことが可能となる。
【０５６３】
また、パケット受信順序の入れ替わり等が発生した場合にも、適切なバッファリングを行うことが可能となる。
【０５６４】
また、パケット受信間隔の時間揺らぎの累積が、所定の余裕時間（PreBufTimeLen[i]/SamplesPerMilliSec）を超え「アンダーラン」、「オーバーラン」が生じる場合にも、再バッファリングを行い、適応的に受信揺らぎを吸収することが可能となる。
【０５６５】
従って、第３実施例においても、複数地点のクライアント端末装置２１から送信されたパケット遅延揺らぎ吸収を各クライアント端末装置２１毎に独立して行うことができ、PreBufTimeLen[i]を制御することによって、サンプリング時間単位で最適な遅延に制御した後、サンプリング時間単位の精度で所定の第２周期毎にミキシングを行うことが可能となる。
（第４実施例）
次に、本実施形態における第４実施例を図２０乃至図２３を参照して詳細に説明する。第４実施例は、ミキサが読み出し処理を行う時刻の精度が保証されない場合におけるフレームの書き込みアドレスを高精度で制御するミキサ起動処理の一例である。
【０５６６】
即ち、基準時刻監視・音声データ取出制御部１４の休止命令からの回復時刻が保証されない場合において、音声データ取出処理部１１５が音声データバッファ１１４のリングバッファSoudDataMap[i]から音声データを読み出すアドレスMixStartTimeに対応した時刻MixerTimeStampを時間揺らぎを考慮して設定し、受信パケットのバッファへの書き込みアドレスを決定する方法を示す。
【０５６７】
図２０はタイミングチャートであり、図２２乃至図２３はフローチャートである。
【０５６８】
ミキサの動作に関する時間精度が十分でない場合には、高負荷時にミキサの処理休止状態からの復帰が遅れる場合があり、このような場合にミキサは処理を休止しないで連続動作することで処理の遅れを回復しようとする。このため、ミキサの遅延回復動作によって書き込みアドレスと読み出しアドレスが、同時に同じアドレスを使用しないように、書き込みアドレスを制御する必要がある。
【０５６９】
第１乃至第３実施例までの例にも示したように、基準時刻監視・音声データ取出制御部１４の処理において、音声データバッファ１１４から音声データを読み出すべき時刻まで、処理休止命令を用いた処理の休止が行われる。
【０５７０】
一般に、処理休止命令は、たとえば計算機上のプログラムで実装される場合には、周知のsleep命令等を用いて実現される場合が多い。
【０５７１】
このような処理休止命令は、所望の時間以上処理を休止することは保証する命令であり、休止から復帰した際に、所望の休止時間よりも多くの時間が経過してしまう場合がある。
【０５７２】
基準時刻監視・音声データ取出制御部１４の処理は、たとえば所望の第２周期毎に実行される必要があるが、これを実現する際にも、この休止命令からの復帰時間の遅れを考慮する必要がある。
【０５７３】
たとえば、ある時刻の休止命令からの復帰が遅れた場合に、次回は所望の第２周期よりも短い時間の休止を行って、処理時刻の遅延を回復するようにすることができる。
【０５７４】
また、処理時刻の累積遅延が、所望の第２周期よりも大きくなってしまった場合には、処理休止命令を実行せず、連続で基準時刻監視・音声データ取出制御部１４の動作を行うようにすることで、処理時刻の遅延を回復するようにすることができる。
【０５７５】
また、処理時刻の累積遅延が、所定の累積遅延量閾値よりも大きくなった場合には、累積処理遅延に対応する部分の音声データを破棄して処理を省き、処理時刻の累積遅延を回復するようにすることもできる。
【０５７６】
このような場合には、ミキサが現在のアドレスに来る予定だった時刻MixerTimeStampとして、ミキサが現在のアドレスに移動した時刻を設定するのではなく、理想的に動作した場合に現在のアドレスに到達する予定だった時刻をMixerTimeStampに設定する。
【０５７７】
即ち、音声データバッファ１１４のリングバッファSoudDataMap[i]から音声データを読み出すアドレスMixStartTimeに対応した時刻MixerTimeStampとして、基準時刻監視・音声データ取出制御部１４が実際に処理を行った時刻を設定するのではなく、基準時刻監視・音声データ取出制御部１４が処理休止状態から復帰して処理を行う予定だった理想的な時刻を設定し、受信パケットのバッファへの書き込みアドレス計算を行う一例である。
【０５７８】
これによって、ミキサが現在時刻までに移動する予定だった範囲を貼付可能位置の下限StickTimeMin[i]に設定することが可能となり、ミキサの時間動作精度が保証されない場合にも、貼付位置CurrentStickTime[i]とミキサの読み込み位置が重ならないように制御することができる。
【０５７９】
即ち、上記（２）式もしくは（５）式を用いて、受信パケットの音声データバッファ１１４のリングバッファSaundDataMap[i]への書き込みアドレス領域を計算する場合に、求まったアドレス（CurrentStickTime[i]からCurrentStickTime[i]+CurrentFrameTimeLen[i]-1までの領域）が、音声データ取出処理部１１５がバッファから音声データを読み出すアドレス領域（MixStartTimeからMixEndTime-1=MixStartTime+MixFrameTimeLen-1までの領域）と重ならないように制御することができる。
【０５８０】
この場合、貼付可能範囲における貼付可能位置の下限StickTimeMin[i]はミキサの現在のアドレスMixStartTimeとミキサが現在のアドレスに移動する予定だった時刻MixTimeStamp、及びパケット受信時刻CurrentStickTime[i]を用いて次の（８）式で表される。
【０５８１】
StickTimeMin[i]=MixStartTime+(1+divInt)*MixFrameTimeLen  …（８）
ここで、MixProcessTimeは、ミキサが１パケット分をミキシング処理するのにかかる時間で、例えば１０ｍｓであり、divIntは、(CurrentTimeStamp[i]-MixerTimeStamp+MixProcessTime)を２０ｍｓで割った商の整数部である。また、貼付可能位置の上限（オーバーラン境界）StickTimeMax[i]は次の（９）式によって表される。
【０５８２】
StickTimeMax[i]=StickTargetTime[i]+BufOverRunTimeLen[i]  …（９）
上式は、当該パケット受信時刻をもとに、受信揺らぎを吸収するための余裕時間を考慮して決定したアドレスStickTargetTime[i]から、さらに所定のBufOverRunTimeLen[i]だけ後ろのアドレスまでを、書き込み可能領域とすることに相当する。
【０５８３】
ここで、たとえば第１周期を20msとし、４パケットまでをバッファに余分に保持することを許容するような場合には、所定のBufOverRunTimeLen[i]は、20msに相当する160サンプル×４パケットとして、たとえばBufOverRunTimeLen[i]＝640と設定することができる。
【０５８４】
次に、第４実施例における処理の詳細を図２１乃至図２３に示すフローチャートを参照して詳細に説明する。ここでは、第３実施例におけるミキサ起動処理（基準時刻監視・音声取出制御部１４の処理）のみに関して説明する。
【０５８５】
第４実施例のミキサ起動処理では、ミキサの起動時刻を取得する（ＳＨ１）。
【０５８６】
即ち、基準時刻監視・音声データ取出制御部１４は、基準時刻監視・音声データ取出制御部１４が起動された時刻を取得する。
【０５８７】
このとき、基準時刻監視・音声データ取出制御部１４が休止状態から復帰起動し、読み出しアドレスが現在のアドレスに移動した時刻を保持する変数start＿timeに現在時刻を設定し、ミキサが現在のアドレスに来る予定だった時刻、すなわち音声データ取出処理部１１５が音声データバッファ１１４のリングバッファSoundDataMap[i]からデータを読み出すアドレスMixStartTimeに対応する時刻MixerTimeStampに、基準時刻監視・音声データ取出制御部１４の当該処理が起動されるべきだった理想的な時刻をあらわす変数last＿target＿timeの値を代入する。また、初回のみに変数last＿target＿timeの値として変数start＿timeの値を代入すると共に、初回のみに変数sleep＿timeの値を０に設定する。
【０５８８】
次に、基準時刻監視・音声データ取出制御部１４は、基準時刻監視・音声データ取出制御部１４の動作起動時刻の累積遅延が許容量を超えているか否かを判定する（ＳＨ２）。この判定では、次回の処理までに処理を休止すべき時間を保持する変数sleep＿timeの値が負であり、且つ、その絶対値が予め設定されている所定の最大許容量maxdilaytimeよりも大きいとき、基準時刻監視・音声データ取出制御部１４の動作起動時刻の累積遅延が許容量を超えているものと判定する。
【０５８９】
ここで、累積遅延がある場合には、処理休止時間sleep＿timeの値は所定の第２周期よりも小さな値となり、さらに累積遅延が所定の第２周期よりも大きな場合には、sleep＿timeは負の値となる。
【０５９０】
この判定の結果、基準時刻監視・音声データ取出制御部１４の動作起動時刻の累積遅延が許容量を越えていないときは後述するＳＨ４の処理に移行し、遅延回復のために待機時間を短縮して動作したり、待機せず連続動作する。また、ＳＨ２の判定により累積遅延が許容量を超えているときは、遅延を回復するために音声データ処理をあきらめて、音声データバッファ１１４のリングバッファSoundDataMap[i]の読み出しアドレスMixStartTimeを累積遅延に相当するサンプル数分だけ一気に進めて、累積遅延分の音声データを処理しないことで累積遅延をクリアする（ＳＨ３）。
【０５９１】
このとき、ミキサの現在のアドレスMixStartTimeの値に対して、変数sleep＿timeの値に−１を乗算し、更にこの値に１ｍｓあたりのサンプル数SamplesPerMilliSecを乗算した値を加算して得られた値を新たなミキサの現在のアドレスMixStartTimeのアドレス値とする。
【０５９２】
即ち、音声データバッファ１１４のリングバッファSoundDataMap[i]の読み出しアドレスMixStartTimeは次のような値に変更される。
【０５９３】
MixStartTime=MixStartTime+((-1)*sleep＿time)/SamplesPerMilliSec
ここで、sleep＿timeはms単位の時間を表し、SamplesPerMilliSecは、1msあたりのサンプル数を表すこととする。
【０５９４】
さらに、変数last＿target＿timeの値として、変数start＿timeの値を代入する。
【０５９５】
ここで、last＿target＿timeは、当該処理が休止状態から復帰する予定だった理想的な時刻を表し、start＿timeは当該処理が処理休止状態から復帰した実際の時刻を表している。処理休止状態からの復帰時刻が遅れているかを表す時刻誤差errは、処理休止状態から復帰した実際の時刻start＿timeと、休止状態からの復帰予定時刻last＿target＿timeとの差によってerr=start＿time-last＿targrt＿timeと表すことができる。
【０５９６】
累積遅延に相当するサンプリングデータを破棄した後に、last＿target＿timeに当該処理起動時刻start＿timeを代入することによって、時刻誤差判定に用いるerrの計算でerr=0と算出される。すなわち、累積遅延をクリアしたことに相当する。
【０５９７】
この後、基準時刻監視・音声データ取出制御部１４は、各パケット処理部１１の音声データバッファ１１４に対応するレーンの１つ以上がミキシング中であるか否かを判定する（ＳＨ４）。この判定では、フレーム開始位置FrameStartTime[i]がミキサの現在のアドレスMixStartTimeよりも前に読み出されるアドレス値であり且つフレーム終了位置FrameEndTime[i]がミキサの現在のアドレスMixStarTime以降に読み出されるアドレス値であるとき、ミキシング中であると判定する。
【０５９８】
即ち、基準時刻監視・音声データ取出制御部１４は、音声データバッファ１１４−１〜１１４−Ｎの、すべてについて（ｉ＝１〜Ｎのすべてについて）、それぞれ、FrameStartTime[i]<=MixStartTime、且つ、FrameEndTime[i]>MixStartTimeとなっているかどうかを判定する（ＳＨ４）。
【０５９９】
この判定の結果、ミキシング中でないとき、即ちアイドリングモードのときは後述するＳＨ１１の処理に移行し、ミキシング中、すなわちミキシングモードのときは各パケット処理部１１−１〜１１−Ｎの音声データバッファ１１４（リングバッファSoundDataMap[i]）からミキシングに必要な数（MixFrameTimeLen）の音声サンプリングデータを取得して後述するミキシング処理を実行し（ＳＨ５）、このミキシング処理によって得られた音声データに対して音声符号化処理を施す（ＳＨ６）。
【０６００】
即ち、上記ＳＨ４の判定を行った結果、全てのｉ＝１〜Ｎについて上記が偽であった場合（「アイドリングモード」の場合）には、後述するＳＨ１１の処理に移行する。
【０６０１】
上記ＳＨ４の判定の結果、ｉ＝１〜Ｎのうち、いずれか１つでも真であった場合（「ミキシングモード」の場合）には、基準時刻監視・音声データ取出制御部１４は、音声データ取出処理部１１５−１〜１１５−Ｎに指示して、１〜Ｎの全てのｉについて、音声データバッファ１１４−ｉのリングバッファSoundDataMap[i]のMixStartTimeで示されたアドレスから、所定の第２周期に相当するMixFrameTimeLen（たとえば160サンプル）分の音声データを読み出し、音声データミキシング処理部１２に渡し、ミキシング処理を行う（ＳＨ５）。
【０６０２】
音声データミキシング処理に関する詳細は、図１９を参照して第３実施例で説明済みである。
【０６０３】
ここで、上記ＳＤ２の判定の結果、ｉ＝１〜Ｎのいずれか１つでも真であった場合を「ミキシングモード」状態、全てが偽であった場合を「アイドリングモード」状態と定義する。
【０６０４】
「アイドリングモード」では、リアルタイムミキシング処理装置１０は、クライアント端末装置２１に対して音声データパケットを送信しない。「ミキシングモード」ではクライアント端末装置２１に対してミキシングを行った結果得られた音声データを送信する。
【０６０５】
これによって、クライアント端末装置２１から音声データを受信した場合にのみ、ミキシングを行った音声データを各クライアント端末装置２１に送信することが可能となる。
【０６０６】
これに対して、第１実施例、第２実施例は、基準時刻監視・音声データ取出制御部１４は、クライアント端末装置２１からの音声データ受信の有無に関わらず、各クライアント端末装置２１に対して音声データを送信するような実装とした例である。
【０６０７】
尚、音声符号化処理は必要に応じて行えばよいものであり、音声符号化処理を行わなくても良い。
【０６０８】
次に、音声データ送信処理を実行する（ＳＨ７）。この音声データ送信処理では、音声符号化処理によって得られた音声データをフレーム単位でパケット化し、このパケットを送信する。
【０６０９】
この後、基準時刻監視・音声データ取出制御部１４は、処理終了時刻をあらわす変数end＿timeの値として現在時刻を設定して処理終了時刻を取得する（ＳＨ８）。さらに、変数errと、変数target＿time、及び変数sleep＿timeを次の（１０）〜（１２）式によって求める（ＳＨ９）。
【０６１０】
err=start＿time - last＿target＿time  …（１０）
target＿time=start＿time + MixFrameTimeLen/SamplesPerMilliSec - err  …（１１）
sleep＿time=target＿time-end＿time  …（１２）
ここで、MixFrameTimeLenは音声データ取出処理部１１５が読み出す第２周期に相当する音声データサイズで、たとえば160サンプルである（所定の第２周期が20msの場合）。
【０６１１】
また、SamplesPerMilliSecは１ｍｓあたりのサンプル数をあらわし、(MixFrameTimeLen/SamplesPerMilliSec)は所定の第２周期に相当し、たとえば20msである。
【０６１２】
時刻誤差errは、今回処理休止状態から復帰した実際の時刻start＿timeと、今回の休止状態からの復帰予定時刻last＿target＿timeとの差によってerr=start＿time-last＿targrt＿timeと表すことができる。
【０６１３】
target＿timeは、次回の処理休止命令からの理想的な復帰予定時刻で、現在の時刻start＿timeの値に、第２周期にあたる時間(MixFrameTimeLen/SamplesPerMilliSec)を加えた値から、さらに今回の処理休止状態からの復帰が遅れた分の時刻誤差errを差し引いて求めることができる。
【０６１４】
この場合に、当該処理が終了した現在の時刻end＿timeから、次回処理起動予定時刻target＿timeまで、処理休止命令によって処理を休止する時間sleep＿timeは、sleep＿time=target＿time-end＿timeで表すことができる。
【０６１５】
ここで、処理時刻の遅延errが大きければ、sleep＿timeは負の値を取る。
【０６１６】
次に、ミキサの現在のアドレスMixStartTimeを２０ｍｓ分進める（ＳＨ１０）。すなわち、ミキサの現在のアドレスMixStartTimeのアドレス値にミキシングしたサンプリングデータのフレーム長MixFrameTimeLenを加算したアドレス値を新たなミキサの現在のアドレスMixStartTimeのアドレス値とする。
【０６１７】
即ち、基準時刻監視・音声データ取出制御部１４は、音声データ取出処理部１１５が、音声データバッファ１１４のリングバッファSoundDataMap[i]から音声データを読み出すアドレスMixStartTimeのアドレス値を次式で更新する。
MixStartTime=MixStartTime+MixFrameTimeLen
この後、後述するＳＨ１７の処理に移行する。
【０６１８】
一方、前記ＳＨ４の判定の結果、ミキシング中でないとき、すなわちアイドリングモードのときは、各レーンにおいて、ミキシング領域にリングバッファSoundDataMap[i]に貼り付けられているフレームの先頭のサンプリングデータが存在するか否かを判定する（ＳＨ１１）。この判定では、FrameStartTime[i]<MixEndTimeであり且つFrameEndTime[i]>=MixStartTimeであるとき、データの先頭が存在するものと判定する。
【０６１９】
即ち、ｉ＝１〜Ｎの全てのｉについて、前記ＳＨ４の判定結果が偽であった場合（「アイドリングモード」状態であった場合）には、基準時刻監視・音声データ取出制御部１４は、音声データ取出処理部１１５−ｉが音声データバッファ１１４−ｉのリングバッファSoundDataMap[i]から当該処理において読み出すアドレス領域（MixStartTimeからMixEndTimeの間の領域）に音声データの先頭FrameStartTime[i]が存在するか否かを判定する（ＳＨ１１）。この判定では、FrameStartTime[i]<MixEndTimeであり、且つ、FrameEndTime[i]>MixStartTimeであるとき、SoundDataMap[i]上に既に書き込まれた音声データ領域の先頭FrameStartTime[i]が存在するものと判定する。
【０６２０】
この判定の結果、データの先頭が存在しないとき（当該処理において読み出すアドレス領域に音声データ領域の先頭FrameStartTime[i]が存在しないとき）は、直前の処理におけるモードが「ミキシングモード」であったかどうかを判定し、直前のモードがミキシングモードのとき、すなわちミキシングモードからアイドリングモードに切り替わった場合には、変数last＿target＿timeの値として変数start＿timeの値を代入することにより、累積処理遅延をクリアする（ＳＨ１２）。この後、前記ＳＨ８の処理に移行する。
【０６２１】
ここで、ミキシングモードからアイドリングモードに切り替わった場合に累積処理遅延をクリア可能である理由は、アイドリングモードではクライアント端末装置２１に送信すべきサンプリングデータが存在せず、無音区間となり、音声再生品質が劣化する恐れが無いためである。
【０６２２】
また、前記ＳＨ１１の判定の結果、データの先頭が存在するとき（当該処理において読み出すアドレス領域に音声データ領域の先頭FrameStartTime[i]が存在するとき）は、各レーンに存在する音声サンプリングデータのうちで先頭に存在する音声サンプリングデータまでの距離を時間に換算して、この値をMixerStepに設定する（ＳＨ１３）。
【０６２３】
即ち、基準時刻監視・音声データ取出制御部１４は、ｉ＝１〜Ｎのうち、全てのｉについてFrameStartTime[i]を比較し、最もMixStartTimeに近いFrameStartTime[i]の値FrameStartTime[j]を得る。このFrameStartTime[j]を用いて、次に示す（１３）式でMixerStepを算出する。
【０６２４】
MixerStep=(FrameStartTime[j]-MixStartTime)/SamplesPerMilliSec  …（１３）
ここで、(FrameStartTime[j]-MixStartTime)/SamplesPerMilliSecによってサンプル数を時間に換算している。
【０６２５】
この後、基準時刻監視・音声データ取出制御部１４は、処理終了時刻をあらわす変数end＿timeの値として現在時刻を設定して処理終了時刻を取得する（ＳＨ１４）。さらに、変数errを上記（１０）式、変数target＿timeを次の（１４）式、及び変数sleep＿timeを上記（１２）式によって求める（ＳＨ１５）。
【０６２６】
target＿time=start＿time + MixerStep - err  …（１４）
ここで、MixerStepは上記（１３）式によって計算された時間で、単位はmsである。
【０６２７】
次に、基準時刻監視・音声データ取出し制御部１４は、ミキサをミキシング開始位置まで進める（ＳＨ１６）。このとき、ミキサの現在のアドレスMiStartTimeのアドレス値に対して最もMixStartTimeに近いフレームの先頭のサンプリングデータのアドレスを上記FrameStartTime[j]とすれば、MixStartTimeの値は MixStartTime=FrameStartTime[j]として更新される。
【０６２８】
この後、次回起動時のMixerTimeStamp取得ために、処理休止命令から復帰する理想的な時刻をあらわす変数last＿target＿timeの値として変数target＿timeの値を代入し（ＳＨ１７）、変数sleep＿timeの値が正の値（sleep＿time>0）であるか否かを判定する（ＳＨ１８）。この判定の結果、変数sleep＿timeの値が０以下の値（sleep＿time<=0）であるときは前記ＳＨ１の処理に移行し、変数sleep＿timeの値が正の値（sleep＿time>0）であるときは変数sleep＿timeの値として設定されている時間だけ待機（ＳＨ１９）した後、前記ＳＨ１の処理に移行する。
【０６２９】
即ち、基準時刻監視・音声データ取出制御部１４は、sleep＿timeが正の場合にのみ処理休止命令によって処理を休止し、sleep＿timeが０以下であれば、処理の休止を行わず、累積処理遅延を回復する。休止命令を行った場合、理想的にはstart＿timeで表される時刻に休止状態から復帰する。
【０６３０】
上記第４実施例によれば、基準時刻監視・音声データ取出制御部１４の休止命令による休止状態からの復帰の時間誤差により、音声データ読み出し処理が行われる時間間隔が揺らぐ場合にも、パケット受信間隔の揺らぎと、読み出し処理の時間間隔の揺らぎの累積が、所定の余裕時間の範囲内に収まる限りにおいて、受信揺らぎおよび読み出し処理の処理時間間隔の揺らぎを吸収することが可能となる。
【０６３１】
前述したように本実施形態のリアルタイムミキシング処理装置１０を用いたサーバ２２によれば、複数地点の端末２１から送信されたパケットの遅延揺らぎ吸収を各端末ごとに設けたパケット処理部11-1〜11-Nのバッファにおいて独立して行うことができ、サンプリング時間単位で最適な遅延に制御し、サンプリング時間単位の精度でバッファからデータの読み出しを行うことができる。
【０６３２】
すなわち、上記第１実施例、乃至第４実施例によれば、
パケットを受信する手段と、
パケットを受信した時刻を取得する手段と、
受信したパケットからサンプリングデータを取得する手段と、
サンプリングデータをサンプリングデータ単位のアドレスで指定して、書き込み、読み出しを行うことのできるバッファと、
時刻ごとに異なる前記バッファの読み出しアドレスを取得する手段と、
前記読み出しアドレスに対応した時刻を取得する手段と、
前記読み出しアドレスに対応した時刻と、前記パケットを受信した時刻との差の時間
を前記バッファ上のアドレスの差に換算して、前記読み出しアドレスに加算し、さらに該加算結果に、所定の余裕時間をアドレスの差に換算した値を加算して前記バッファにおける書き込みアドレスを決定する手段と、
前記バッファの該決定した書き込みアドレスにサンプリングデータを書き込む手段と、
前記バッファの前記読み出しアドレスからサンプリングデータを読み出す手段と、
を有し、
バッファに所定の余裕時間サンプリングデータを保持した後に読み出しを行うことで、
各クライアント装置からのパケット受信間隔の揺らぎの累積が所定の余裕時間内に収まる限りにおいて、受信間隔の揺らぎをバッファによって吸収して、連続したサンプリングデータを読み出して、ミキシング処理を行うことが可能となる。
【０６３３】
また、上記第１実施例、乃至第４実施例によれば、
前記バッファに既に書き込まれているサンプリングデータとの相対アドレスで
該受信パケットに含まれるサンプリングデータを書き込むアドレスを決定する手段と、
前記パケットを受信した時刻と、読み出しアドレスに対応した時刻とを用いて
該受信パケットに含まれるサンプリングデータを書き込むアドレスを決定する手段と
を有し、
前記バッファに既に書き込まれているサンプリングデータが存在する場合には、
前記バッファに既に書き込まれているサンプリングデータとの相対アドレスで
該受信パケットに含まれるサンプリングデータを書き込むアドレスを決定し、
前記バッファに既に書き込まれているサンプリングデータが存在しない場合には、
前記読み出しアドレスに対応した時刻と、前記パケットを受信した時刻との差の時間
を前記バッファ上のアドレスの差に換算して、前記読み出しアドレスに加算し、さらに該加算結果に、所定の余裕時間をアドレスの差に換算した値を加算して該受信パケットに含まれるサンプリングデータを書き込むアドレスを決定し、
該決定したアドレスにサンプリングデータを書き込み、
バッファに所定の余裕時間サンプリングデータを保持した後に読み出しを行うことで、
各クライアント装置からのパケット受信間隔の揺らぎの累積が所定の余裕時間内に収まる限りにおいて、受信間隔の揺らぎをバッファによって吸収して、連続したサンプリングデータを読み出して、ミキシング処理を行うことが可能となる。
【０６３４】
また、上記第２実施例、乃至第４実施例によれば、
パケットを受信する手段と、
パケットを受信した時刻を取得する手段と、
受信したパケットからサンプリングデータを取得する手段と、
受信したパケットから取得したサンプリングデータに対応するタイムスタンプを取得する手段と、
サンプリングデータをサンプリングデータ単位のアドレスで指定して、書き込み、読み出しを行うことのできるバッファと、
時刻ごとに異なる前記バッファの読み出しアドレスを取得する手段と、
前記読み出しアドレスに対応した時刻を取得する手段と、
前記読み出しアドレスに対応した時刻と、前記パケットを受信した時刻との差の時間
を前記バッファ上のアドレスの差に換算して、前記読み出しアドレスに加算し、さらに該加算結果に、所定の余裕時間をアドレスの差に換算した値を加算して前記バッファにおける書き込みアドレスを決定する手段と、
前記バッファの該決定したサンプリングデータの書き込みアドレスと、前記タイムスタンプの差を用いて書き込みアドレスとタイムスタンプの間のオフセット値を取得する手段と、
該受信したパケット以前に受信したパケットのサンプリングデータをバッファに書き込んだ際に取得した前記オフセット値と、該受信したサンプリングデータに対応したタイムスタンプの値を加算して前記バッファにおける書き込みアドレスを決定する手段と、
前記バッファの該決定した書き込みアドレスにサンプリングデータを書き込む手段と、
前記バッファの前記読み出しアドレスからサンプリングデータを読み出す手段と、
前記バッファの前記読み出しアドレスのサンプリングデータを消去する手段と
を有し、
前記バッファに既に書き込まれているサンプリングデータが存在する場合には、
前記オフセット値と、該受信したサンプリングデータに対応したタイムスタンプの値を加算して、前記バッファに既に書き込まれているサンプリングデータとの相対アドレスで
該受信パケットに含まれるサンプリングデータを書き込むアドレスを決定し、
前記バッファに既に書き込まれているサンプリングデータが存在しない場合には、
前記読み出しアドレスに対応した時刻と、前記パケットを受信した時刻との差の時間
を前記バッファ上のアドレスの差に換算して、前記読み出しアドレスに加算し、さらに該加算結果に、所定の余裕時間をアドレスの差に換算した値を加算して
該受信パケットに含まれるサンプリングデータを書き込むアドレスを決定して
該決定したアドレスにサンプリングデータを書き込み、
バッファに所定の余裕時間サンプリングデータを保持した後に読み出しを行い、読み出した後にバッファからサンプリングデータを消去することで、各クライアント装置からのパケット受信間隔の揺らぎの累積が所定の余裕時間内に収まる限りにおいて、受信間隔の揺らぎをバッファによって吸収して、連続したサンプリングデータを読み出して、ミキシング処理を行うことが可能となる。
【０６３５】
また、上記第３実施例、乃至第４実施例によれば、
パケットを受信する手段と、
パケットを受信した時刻を取得する手段と、
受信したパケットからサンプリングデータを取得する手段と、
受信したパケットから取得したサンプリングデータに対応するタイムスタンプを取得する手段と、
サンプリングデータをサンプリングデータ単位のアドレスで指定して、書き込み、読み出しを行うことのできるバッファと、
時刻ごとに異なる前記バッファの読み出しアドレスを取得する手段と、
前記読み出しアドレスに対応した時刻を取得する手段と、
前記読み出しアドレスに対応した時刻と、前記パケットを受信した時刻との差の時間
を前記バッファ上のアドレスの差に換算して、前記読み出しアドレスに加算し、さらに該加算結果に、所定の余裕時間をアドレスの差に換算した値を加算して前記バッファにおける書き込みアドレスを決定する手段と、
前記バッファの該決定したサンプリングデータの書き込みアドレスと、前記タイムスタンプの差を用いて書き込みアドレスとタイムスタンプの間のオフセット値を取得する手段と、
該受信したパケット以前に受信したパケットのサンプリングデータをバッファに書き込んだ際に取得した前記オフセット値と、該受信したサンプリングデータに対応したタイムスタンプの値を加算して前記バッファにおける書き込みアドレスを決定する手段と、
前記バッファの有効な書き込みアドレスの範囲を取得する手段と、
前記バッファの該決定した書き込みアドレスにサンプリングデータを書き込む手段と、
前記バッファの前記読み出しアドレスからサンプリングデータを読み出す手段と、
前記バッファの前記読み出しアドレスのサンプリングデータを消去する手段と
を有し、
前記バッファに既に書き込まれているサンプリングデータが存在しない場合には、前記読み出しアドレスに対応した時刻と、前記パケットを受信した時刻との差の時間を前記バッファ上のアドレスの差に換算して、前記読み出しアドレスに加算し、さらに該加算結果に、所定の余裕時間をアドレスの差に換算した値を加算して前記バッファにおける書き込みアドレスを決定して、該決定したアドレスにサンプリングデータを書き込み、
前記バッファに既に書き込まれているサンプリングデータが存在する場合には、
前記オフセット値と、該受信したサンプリングデータに対応したタイムスタンプの値を加算して、前記バッファに既に書き込まれているサンプリングデータとの相対アドレスで
該受信パケットに含まれるサンプリングデータを書き込むアドレスを決定し、
該相対アドレスで決定されたアドレスが、前記バッファの有効な書き込みアドレスの範囲内のアドレスである場合には、該決定したアドレスにサンプリングデータを書き込み、
該相対アドレスで決定されたアドレスが、前記バッファの有効な書き込みアドレスの範囲外のアドレスである場合には、該受信パケットに含まれるサンプリングデータのうち、前記バッファの有効な書き込みアドレスの範囲内のアドレスに対応するサンプリングデータのみを前記バッファに書き込むか、もしくは、前記バッファに既に書き込まれているサンプリングデータを破棄し、前記読み出しアドレスに対応した時刻と、前記パケットを受信した時刻との差の時間を前記バッファ上のアドレスの差に換算して、前記読み出しアドレスに加算し、さらに該加算結果に、所定の余裕時間をアドレスの差に換算した値を加算して前記バッファにおける書き込みアドレスを決定して
該決定したアドレスにサンプリングデータを書き込み、
バッファに所定の余裕時間サンプリングデータを保持した後に読み出しを行い、読み出した後にバッファからサンプリングデータを消去することで、各クライアント装置からのパケット受信間隔の揺らぎの累積が所定の余裕時間内に収まる限りにおいて、受信間隔の揺らぎをバッファによって吸収して、連続したサンプリングデータを読み出して、ミキシング処理を行うことが可能となる。
【０６３６】
また、上記第３実施例、乃至第４実施例によれば、
パケットを受信する手段と、
パケットを受信した時刻を取得する手段と、
受信したパケットからサンプリングデータを取得する手段と、
受信したパケットから取得したサンプリングデータに対応するタイムスタンプを取得する手段と、
サンプリングデータをサンプリングデータ単位のアドレスで指定して、書き込み、読み出しを行うことのできるバッファと、
時刻ごとに異なる前記バッファの読み出しアドレスを取得する手段と、
前記読み出しアドレスに対応した時刻を取得する手段と、
前記読み出しアドレスに対応した時刻と、前記パケットを受信した時刻との差の時間
を前記バッファ上のアドレスの差に換算して、前記読み出しアドレスに加算し、さらに該加算結果に、所定の余裕時間をアドレスの差に換算した値を加算して前記バッファにおける書き込みアドレスを決定する手段と、
前記バッファの該決定したサンプリングデータの書き込みアドレスと、前記タイムスタンプの差を用いて書き込みアドレスとタイムスタンプの間のオフセット値を取得する手段と、
該受信したパケット以前に受信したパケットのサンプリングデータをバッファに書き込んだ際に取得した前記オフセット値と、該受信したサンプリングデータに対応したタイムスタンプの値を加算して前記バッファにおける書き込みアドレスを決定する手段と、
前記バッファの有効な書き込みアドレスの範囲を取得する手段と、
前記バッファの該決定した書き込みアドレスにサンプリングデータを書き込む手段と、
前記バッファの前記読み出しアドレスからサンプリングデータを読み出す手段と、
前記バッファの前記読み出しアドレスのサンプリングデータを消去する手段と
を有し、
前記バッファに既に書き込まれているサンプリングデータが存在しない場合には、前記読み出しアドレスに対応した時刻と、前記パケットを受信した時刻との差の時間を前記バッファ上のアドレスの差に換算して、前記読み出しアドレスに加算し、さらに該加算結果に、所定の余裕時間をアドレスの差に換算した値を加算して前記バッファにおける書き込みアドレスを決定して、該決定したアドレスにサンプリングデータを書き込み、
前記バッファに既に書き込まれているサンプリングデータが存在する場合には、
前記オフセット値と、該受信したサンプリングデータに対応したタイムスタンプの値を加算して、前記バッファに既に書き込まれているサンプリングデータとの相対アドレスで
該受信パケットに含まれるサンプリングデータを書き込むアドレスを決定し、
該相対アドレスで決定されたアドレスが、前記バッファの有効な書き込みアドレスの範囲内のアドレスである場合には、該決定したアドレスにサンプリングデータを書き込み、
該相対アドレスで決定されたアドレスが、前記バッファの有効な書き込みアドレスの範囲外のアドレスである場合には、該受信パケットに含まれるサンプリングデータのうち、前記バッファの有効な書き込みアドレスの範囲内のアドレスに対応するサンプリングデータのみを前記バッファに書き込むか、もしくは、前記読み出しアドレスに対応した時刻と、前記パケットを受信した時刻との差の時間を前記バッファ上のアドレスの差に換算して、前記読み出しアドレスに加算し、さらに該加算結果に、所定の余裕時間をアドレスの差に換算した値を加算して前記バッファにおける該受信パケットに含まれるサンプリングデータの書き込みアドレスを決定し、前記バッファに既に書き込まれているサンプリングデータを、該受信したサンプリングデータの書き込みアドレスとの相対アドレスで決定されるアドレスに移動した上で、該決定したアドレスに該受信したサンプリングデータを書き込み、
バッファに所定の余裕時間サンプリングデータを保持した後に読み出しを行い、読み出した後にバッファからサンプリングデータを消去することで、各クライアント装置からのパケット受信間隔の揺らぎの累積が所定の余裕時間内に収まる限りにおいて、受信間隔の揺らぎをバッファによって吸収して、連続したサンプリングデータを読み出して、ミキシング処理を行うことが可能となる。
【０６３７】
また、上記第１実施例、乃至第３実施例によれば、
前記読み出しアドレスに対応した時刻として、時刻ごとに異なる前記バッファの読み出しアドレスが当該読み出しアドレスに設定された時刻を設定することで、
各クライアント装置からのパケット受信間隔の揺らぎの累積が所定の余裕時間内に収まる限りにおいて、受信間隔の揺らぎをバッファによって吸収して、連続したサンプリングデータを読み出して、ミキシング処理を行うことが可能となる。
【０６３８】
また、上記第４実施例によれば、
前記バッファの読み出しアドレス設定処理を行う予定だった時刻と実際に読み出しアドレス設定処理を行う自己との間に時刻誤差を生じる場合に、
前記読み出しアドレスに対応した時刻として、時刻ごとに異なる前記バッファの読み出しアドレスが当該読み出しアドレスに設定される予定だった理想的な処理時刻を設定することで、
各クライアント装置からのパケット受信間隔の揺らぎと、読み出し処理の実行間隔の揺らぎの累積が所定の余裕時間内に収まる限りにおいて、受信間隔の揺らぎと読み出し処理の実行間隔の揺らぎをバッファによって吸収して、連続したサンプリングデータを読み出して、ミキシング処理を行うことが可能となる。
【０６３９】
次に、本発明の第２実施形態を説明する。図２４は第２実施形態におけるリアルタイムミキシング処理装置の機能構成を示すブロック図である。図において、前述した第１実施形態と同一構成部分は同一符号を持って表しその説明を省略する。また、第２実施形態と第１実施形態との相違点は、第２実施形態のリアルタイムミキシング処理装置10Aは、データ取出処理部115を除いたパケット処理部(11A-1〜11A-N(Nは自然数))を備えると共に、データ取出処理部115の機能を有する音声データミキシング処理部12Aを備えている。このようにデータ取出処理部115の機能を音声データミキシング処理部12Aに設けても第１実施形態と同様の作用効果を得ることができる。
【０６４０】
次に、本発明の第３実施形態を説明する。
【０６４１】
図２５は第３実施形態における遠隔会議システムを示す構成図、図２６は第３実施形態における遠隔会議システムの各端末の機能構成を示すブロック図である。図において、前述した第１実施形態と同一構成部分は同一符号をもって表しその説明を省略する。
【０６４２】
また、第３実施形態における遠隔会議システムでは３つの端末Ａ，Ｂ，Ｃ（５１）がＩＰ網（通信網）３０を介して周知のメッシュ接続によって相互に接続されている。即ち、端末Ａは、端末Ｂと端末Ｃに対してパケット化された音声信号を送信できると共に端末Ｂと端末Ｃから送信された音声パケットを受信できるように各端末Ｂ，Ｃと接続されている。端末Ｂは、端末Ａと端末Ｃに対してパケット化された音声信号を送信できると共に端末Ａと端末Ｃから送信された音声パケットを受信できるように各端末Ａ，Ｃと接続されている。また、端末Ｃは、端末Ａと端末Ｂに対してパケット化された音声信号を送信できると共に端末Ａと端末Ｂから送信された音声パケットを受信できるように各端末Ａ，Ｂと接続されている。
【０６４３】
また、各端末Ａ，Ｂ，Ｃ（５１）のそれぞれは、図２６に示すように、受信装置としてのリアルタイムミキシング処理装置10Bと送信装置１７とを備えている。
【０６４４】
リアルタイムミキシング処理装置10Bは、前述した第１実施形態におけるリアルタイムミキシング処理装置１０とほぼ同一の構成をなしており、相違点は、２つのパケット処理部11-1,11-2を有していること、及び音声データ送信処理部１３に代えて音声出力部１６を備えていることであり、その他は第１実施形態のリアルタイムミキシング処理装置１０と同一である。
【０６４５】
リアルタイムミキシング処理装置10Bは、他の２つの端末５１のそれぞれから送信された音声パケット信号を、それぞれに対応して設けられたパケット処理部11-1,11-2によって受信する。各パケット処理部11-1,11-2によってリアルタイムに音声信号が再生され、これらの音声信号が音声データミキシング処理部１２によりミキシングされて音声出力部１６によってスピーカから音声信号として出力される。
【０６４６】
送信装置１７は、周知のコンピュータ装置から構成され、予め設定されているプログラムよって動作し、音声入力部171と、アナログ／ディジタル（Ａ／Ｄ）変換部172、符号化処理部173、パケット生成部174、送信部175とから構成されている。送信装置１７を構成するこれらの各部分は、ハードウェア及びソフトウェアの両方によって構成されている。
【０６４７】
音声入力部171はマイクから入力された音声信号をアナログ電気信号に変換してＡ／Ｄ変換部172に出力し、Ａ／Ｄ変換部172によって所定のサンプリングタイムでディジタル信号に変換された音声データ（サンプル）が符号化処理部173に備わるバッファに順次格納される。
【０６４８】
また、符号化処理部173は、バッファに格納された符号化対象となる音声データフレームを符号化してパケット生成部174に送出する。
【０６４９】
パケット生成部174は、符号化処理部173から入力した符号化された音声データを含む周知のＲＴＰパケットを生成して送信部175へ送出する。このときのＲＴＰパケットにはＲＴＰヘッダが付加される。
【０６５０】
ＲＴＰヘッダには、周知のように、２ビットのVersion情報Ｖと、１ビットのPadding情報Ｐ、１ビットのExtension情報Ｘ、３ビットのCSRC-Count情報ＣＣ、１ビットのMarker情報（以下、マーカービットと称する）Ｍ、７ビットのPayload-Type情報ＰＴ、１６ビットのシーケンス番号（順序番号：Sequence Number）、３２ビットのタイムスタンプ（Timestamp）、３２ビットの同期信号元（ＳＳＲＣ）識別子、３２ビットの寄与送信元（ＣＳＲＣ）識別子等が含まれている。
【０６５１】
また、送信部175は、パケット生成部174から入力したＲＴＰパケットをＩＰ網３０を介して他の２つの端末５１に送信する。
【０６５２】
前述の構成よりなる第３実施形態によれば、第１実施形態と同様に複数地点の端末５１から送信されたパケットの遅延揺らぎ吸収を各端末５１ごとに設けたパケット処理部11-1〜11-2のバッファにおいて独立して行うことができ、サンプリング時間単位で最適な遅延に制御し、サンプリング時間単位の精度でバッファからデータの読み出しを行うことができる。
【０６５３】
次に、本発明の第４実施形態を説明する。
【０６５４】
図２７は第４実施形態における遠隔会議システムを示す構成図、図２８は第４実施形態における遠隔会議システムの各端末の機能構成を示すブロック図である。図において、前述した第１乃至第３実施形態と同一構成部分は同一符号をもって表しその説明を省略する。
【０６５５】
また、第４実施形態における遠隔会議システムでは２つの端末Ａ，Ｂ（５２）がＩＰ網３０を介してて相互に接続されている。即ち、端末Ａは端末Ｂに対してパケット化された音声信号を送信できると共に端末Ｂから送信された音声パケットを受信できるように端末Ｂと接続されている。端末Ｂは端末Ａに対してパケット化された音声信号を送信できると共に端末Ａから送信された音声パケットを受信できるように端末Ａと接続されている。
【０６５６】
また、各端末Ａ，Ｂ（５２）のそれぞれは、図２８に示すように、受信装置としてのパケット処理部11-1と音声出力部１６、及び送信装置１７を備えている。
【０６５７】
パケット処理部11-1は、前述した第１実施形態で説明したパケット処理部11-1と同一の構成をなしている。音声出力部１６はパケット処理部11-1から出力される音声信号をスピーカから出力する。
【０６５８】
前述の構成よりなる第４実施形態によれば、第１乃至第３実施形態と同様に他の端末５２から送信されたパケットの遅延揺らぎ吸収をパケット処理部11A-1のバッファにおいて行うと共に、サンプリング時間単位で最適な遅延に制御し、サンプリング時間単位の精度でバッファからデータの読み出しを行うことができる。
【０６５９】
尚、上記実施形態および各実施例は本発明の一具体例であり、本発明が上記実施形態及び実施例の構成のみに限定されないことは言うまでもないことである。
【０６６０】
また、上記プログラムを記録した情報記憶媒体を作成することにより、上記プログラムを用意に配布することができ、所定のコンピュータ装置を上記のリアルタイムミキシング処理装置として動作させることが容易に可能になる。
【図面の簡単な説明】
【０６６１】
【図１】本発明の第１実施形態におけるリアルタイムミキシング処理装置の機能構成を示すブロック図
【図２】本発明の第１実施形態における遠隔会議システムを示す構成図
【図３】本発明の第１実施形態における遠隔会議システムを示す構成図
【図４】本発明の第１実施形態におけるリングバッファを説明する図
【図５】本発明の第１実施形態におけるリングバッファをアクセスするポインタを説明する図
【図６】本発明の第１実施形態におけるミキシング処理を説明する図
【図７】本発明の第１実施形態におけるミキシング処理を説明する図
【図８】本発明の第１実施形態における第１実施例のミキシング処理を説明するタイミングチャート
【図９】本発明の第１実施形態における第１実施例のミキシング処理プログラムを説明するフローチャート
【図１０】本発明の第１実施形態における第２実施例のミキシング処理を説明するタイミングチャート
【図１１】本発明の第１実施形態における第２実施例のリングバッファを説明する図
【図１２】本発明の第１実施形態における第２実施例のミキシング処理プログラムを説明するフローチャート
【図１３】本発明の第１実施形態における第３実施例のミキシング処理を説明するタイミングチャート
【図１４】本発明の第１実施形態における第３実施例のミキシング処理プログラムを説明するフローチャート
【図１５】本発明の第１実施形態における第３実施例のミキシング処理プログラムを説明するフローチャート
【図１６】本発明の第１実施形態における第３実施例のミキシング処理プログラムを説明するフローチャート
【図１７】本発明の第１実施形態における第３実施例のミキシング処理プログラムを説明するフローチャート
【図１８】本発明の第１実施形態における第３実施例のミキシング処理プログラムを説明するフローチャート
【図１９】本発明の第１実施形態における第３実施例のミキシング処理プログラムを説明するフローチャート
【図２０】本発明の第１実施形態における第４実施例のミキシング処理を説明するタイミングチャート
【図２１】本発明の第１実施形態における第４実施例のミキシング処理プログラムを説明するフローチャート
【図２２】本発明の第１実施形態における第４実施例のミキシング処理プログラムを説明するフローチャート
【図２３】本発明の第１実施形態における第４実施例のミキシング処理プログラムを説明するフローチャート
【図２４】本発明の第２実施形態におけるリアルタイムミキシング処理装置の機能構成を示すブロック図
【図２５】本発明の第３実施形態における遠隔会議システムを示す構成図
【図２６】本発明の第３実施形態における端末の機能構成を示すブロック図
【図２７】本発明の第４実施形態における遠隔会議システムを示す構成図
【図２８】本発明の第４実施形態における端末の機能構成を示すブロック図
【符号の説明】
【０６６２】
１０，１０Ａ，１０Ｂ…リアルタイムミキシング処理装置、１１（11-1〜11-N,11A-1〜11A-N）…パケット処理部、１２…音声データミキシング処理部、１３…音声データ送信処理部、１４…基準時刻監視・音声データ取出制御部、１６…音声出力部、１７…送信装置、111…パケット受信処理部、112…音声データ復号処理部、113…音声データ貼付処理部、114…音声データバッファ、115…音声データ取出処理部、171…音声入力部、172…Ａ／Ｄ変換部、173…符号化処理部、174…パケット生成部、175…送信部、２１…クライアント端末装置、２２…サーバ、211…送信部、212…受信部、３０…通信網。
【図１】
2004343738.tif 000003
【図２】
2004343738.tif 000004
【図３】
2004343738.tif 000005
【図４】
2004343738.tif 000006
【図５】
2004343738.tif 000007
【図６】
2004343738.tif 000008
【図７】
2004343738.tif 000009
【図８】
2004343738.tif 000010
【図９】
2004343738.tif 000011
【図１０】
2004343738.tif 000012
【図１１】
2004343738.tif 000013
【図１２】
2004343738.tif 000014
【図１３】
2004343738.tif 000015
【図１４】
2004343738.tif 000016
【図１５】
2004343738.tif 000017
【図１６】
2004343738.tif 000018
【図１７】
2004343738.tif 000019
【図１８】
2004343738.tif 000020
【図１９】
2004343738.tif 000021
【図２０】
2004343738.tif 000022
【図２１】
2004343738.tif 000023
【図２２】
2004343738.tif 000024
【図２３】
2004343738.tif 000025
【図２４】
2004343738.tif 000026
【図２５】
2004343738.tif 000027
【図２６】
2004343738.tif 000028
【図２７】
2004343738.tif 000029
【図２８】
2004343738.tif 000030