(57)【要約】【課題】音声の品質が低下せず、演算量を増大させずに欠落したフレームを補完可能な音声再生装置を提供する。【解決手段】音声データの複数の正常サンプルを時系列に配置し時系列に受信する複数の正常フレームの後半フレームを繰り返し上書きする上書きバッファ６と、音声データの異常を検出する検出部１１と、この異常の検出の直前の正常フレームの後半フレームの正常サンプルを時系列の逆の順番に配置した前半補完サンプルを有する前半逆フレームを生成する逆フレーム生成部１２と、後半フレームの正常サンプルを時系列の順番に配置した後半補完サンプルを有する後半順フレームを生成する順フレーム生成部１３と、正常フレームを出力し次に前半逆フレームを出力し次に後半順フレームを出力する出力部１４を有する。【選択図】図１
2007010855.tif 000002
【特許請求の範囲】
【請求項１】
音声データの複数の正常サンプルを時系列に配置し、時系列に受信する複数の正常フレームの後半フレームを繰り返し上書きする上書きバッファと、
前記音声データの異常を検出する検出部と、
前記異常の検出の直前の前記正常フレームの前記後半フレームの前記正常サンプルを前記時系列の逆の順番に配置した前半補完サンプルを有する前半逆フレームを生成する逆フレーム生成部と、
前記後半フレームの前記正常サンプルを前記時系列の順番に配置した後半補完サンプルを有する後半順フレームを生成する順フレーム生成部と、
前記正常フレームを出力し、次に、前記前半逆フレームを出力し、次に、前記後半順フレームを出力する出力部を有することを特徴とする音声再生装置。
【請求項２】
前記前半補完サンプルと前記後半補完サンプルをフェードアウトさせるフェードアウト部を更に有することを特徴とする請求項１に記載の音声再生装置。
【請求項３】
前記検出部が、前記異常の検出の後に、前記音声データの正常を検出すると、
前記出力部が、前記後半順フレームの次に、前記異常の検出の後に受信した前記正常フレームを出力することを特徴とする請求項１又は請求項２に記載の音声再生装置。
【請求項４】
前記異常の検出の後に受信した前記正常フレームが有する複数の前記正常サンプルをフェードインさせるフェードイン部を更に有することを特徴とする請求項３に記載の音声再生装置。
【請求項５】
前記出力部が、前記前半逆フレームと前記後半順フレームを交互に繰り返し出力した後に、無音に相当するサンプルを出力することを特徴とする請求項１乃至４のいずれか１項に記載の音声再生装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デジタル化された音声データを再生する音声再生装置に関する。
【背景技術】
【０００２】
近年、デジタル通信では、音声データだけでなく映像データをともないデータ量が大きくなるので、音声データと映像データは圧縮されて送受信されている。そこで、このような音声データは、デジタル音声圧縮ストリームと呼ばれ、受信されると画像データから分離され、圧縮に対してデコードされ、デジタルアナログ変換されて、音声として再生することができる。
【０００３】
デジタル音声圧縮ストリームが、例えば、サンプリング周波数が48kHzのMPEG（Moving Picture Expert Group）音声の場合は、映像データから分離されデコードされると、時間24ms相当の複数のPCM(Pulse Coded Modulation)データを有するフレームに変換される。ここで、デジタル音声圧縮ストリーム内の音声データが正常に受信されない等の異常があった場合、PCMデータが生成できず、このＰＣＭデータを含むフレームが欠落するというフレームの異常が生じることになる。
【０００４】
そこで、このフレームの異常を補完するために、レベル0のPCMデータからなるフレームを生成する方法が取られていたが、この方法では再生された音声データが不連続に変化することにより、ポップ音やクリック音などの音声ノイズが発生する可能性があった。そのため、音声の品質が低下するという問題があった。そこで、この不連続な音声データをフィルタを利用して滑らかな音声波形になる音声データに変換する方法があるが、処理装置の演算量を増大させるため、実用的でないという問題があった。また、欠落したフレームを、欠落発生直前に記録したフレームで補完する方法が提案されている（例えば、特許文献１参照。）。
【特許文献１】特開平９−２７７５７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、上記事情に鑑みてなされたものであり、その目的とするところは、音声の品質が低下せず、演算量を増大させずに欠落したフレームを補完可能な音声再生装置を提供することにある。
【課題を解決するための手段】
【０００６】
本願発明の一態様によれば、音声データの複数の正常サンプルを時系列に配置し時系列に受信する複数の正常フレームの後半フレームを繰り返し上書きする上書きバッファと、音声データの異常を検出する検出部と、この異常の検出の直前の正常フレームの後半フレームの正常サンプルを時系列の逆の順番に配置した前半補完サンプルを有する前半逆フレームを生成する逆フレーム生成部と、後半フレームの正常サンプルを時系列の順番に配置した後半補完サンプルを有する後半順フレームを生成する順フレーム生成部と、正常フレームを出力し次に前半逆フレームを出力し次に後半順フレームを出力する出力部を有することを特徴とする音声再生装置が提供される。
【発明の効果】
【０００７】
以上説明したように、本発明の一態様に係る音声再生装置によれば、音声の品質が低下せず、演算量を増大させずに欠落したフレームを補完可能な音声再生装置を提供できる。
【発明を実施するための最良の形態】
【０００８】
次に、図面を参照して、本発明の実施の形態について説明する。なお、以下では本発明の実施形態を図面に基づいて説明するが、図解のためだけであり、本発明はそれらの図面に限定されるものではない。以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。また、図面は模式的なものであり、時間と平面寸法との関係、各時間の比率等は現実のものとは異なることに留意すべきである。
【０００９】
図１に示すように、実施の形態に係る音声再生装置１は、音声圧縮ストリーム入力装置２と、ストリーム蓄積用バッファ３と、音声デコーダ４と、出力ＰＣＭ蓄積用バッファ５と、ＰＣＭ出力処理部８と、デジタルアナログ（Ｄ／Ａ）コンバータ９と、補完部１０を有している。
【００１０】
音声圧縮ストリーム入力装置２は、ハードディスクドライブ（HDD）やデジタル・バーサタイル・ディスク（DVD）に代表される蓄積メディアや、デジタル放送において、映像データの信号と多重化された音声圧縮データを、映像データからデジタル音声圧縮ストリームとして分離して、デジタル音声圧縮ストリームを入力する装置である。
【００１１】
ストリーム蓄積用バッファ３は、入力されたデジタル音声圧縮ストリームを記憶し、保持する。
【００１２】
音声デコーダ４は、デジタル音声圧縮ストリームを、ストリーム蓄積用バッファ３から、エレメンタリー・ストリーム（ＥＳ）と呼ばれる音声データの形式で入力させる。音声デコーダ４は、ＥＳを圧縮に対してデコードしたPCM音声データＤ１を生成する。ＥＳは、例えば、サンプリング周波数が48kHzのMPEG音声の場合は、24msのフレーム時間毎の音声波形に相当するPCM音声データＤ１の複数のサンプルに変換される。このフレーム時間毎の変換されたPCM音声データＤ１の複数のサンプルの束をフレームと呼ぶ。フレーム内には、PCM音声データＤ１の複数のサンプルが時系列に配置されている。また、音声デコーダ４は、音声波形の連続性から、複数のフレームを時系列に受信し、フレーム毎に、24msのフレーム時間以内にデコードを完了する必要がある。また、音声デコーダ４は、前回のフレームのデコードの時に同時に中間データを生成し保持しており、次のフレームのデコード時にこの中間データを用いることによって、フレーム間の音声波形が滑らかに続くようにPCM音声データＤ１の複数のサンプルを生成してもよい。
【００１３】
出力ＰＣＭ蓄積用バッファ５は、生成されたPCM音声データＤ１の複数のサンプルを記憶し、保持する。出力ＰＣＭ蓄積用バッファ５は、上書きバッファ６と、出力バッファ７を有している。上書きバッファ６は、時系列に受信する複数のフレームの後半フレームを、その時系列の順番に繰り返し上書きする。出力バッファ７は、ＰＣＭ出力処理部８に出力するために補完され生成されたPCM音声データＤ１を記憶し、ＰＣＭ出力処理部８に出力する。
【００１４】
ＰＣＭ出力処理部８は、PCM音声データＤ１に、例えば、音声のボリューム（Volume）調整、音声に様々な効果や臨場感を持たせるフィルタリングや3D処理を行う。
【００１５】
Ｄ／Ａコンバータ９は、PCM音声データＤ１を、デジタルアナログ変換し、アナログの音声波形を有する音声信号Ｄ２を生成する。音声信号Ｄ２は、スピーカから音声として出力される。
【００１６】
補完部１０は、検出部１１と、逆フレーム生成部１２と、順フレーム生成部１３と、出力部１４と、フェードアウト部１５と、フェードイン部１６を有している。
【００１７】
検出部１１は、音声データの正常と異常を検出する。例えば、放送局が使用するデータ送出器、もしくは伝送系に何らかの異常があった場合、ESデータがデコード開始予定時刻までに正常に到着しないことがある。また、音声再生装置１に入力として与えられるべきデジタル音声圧縮ストリームが不足したり誤ったりしている場合がある。これらの場合、音声デコーダ４でデコード処理は行われないため、フレームが生成されず、検出部１１はフレームの欠落というフレームの異常を検出する。また、検出部１１はフレームの異常の検出の後に、異常を含まない正常フレームを検出することができる。
【００１８】
逆フレーム生成部１２は、取得用ポインタの設定部２１と、格納用ポインタの設定部２２と、取得部２３と、格納部２４を有している。逆フレーム生成部１２は、検出部１１による異常の検出の直前の正常フレームの後半フレームの正常サンプルを時系列の逆の順番に配置してなる前半補完サンプルを有する前半逆フレームを生成する。
【００１９】
順フレーム生成部１３は、取得用ポインタの設定部３１と、格納用ポインタの設定部３２と、取得部３３と、格納部３４を有している。順フレーム生成部１３は、検出部１１による異常の検出の直前の正常フレームの後半フレームの正常サンプルを時系列の順番に配置してなる後半補完サンプルを有する後半順フレームを生成する。
【００２０】
出力部１４は、正常フレームを出力し、次に、前半逆フレームを出力し、次に、後半順フレームを出力する。さらに、検出部１１が、音声データの異常の検出の後に音声データの正常を検出すると、出力部１４は、後半順フレームの次に、異常の検出の後に受信した正常フレームを出力する。出力部１４は、エラー回数閾値の設定部１７と、フレームエラー連続回数の設定部１８と、フレームエラー連続回数の判定部１９と、無音設定部２０を有している。出力部１４は、前半逆フレームと後半順フレームを交互に繰り返し出力した後に、無音に相当するサンプルを出力する。
【００２１】
フェードアウト部１５は、ミュートレートの設定部２５と、積算部２６を有している。フェードアウト部１５は、前半逆フレームの前半補完サンプルと、後半順フレームの後半補完サンプルをフェードアウトさせる。
【００２２】
フェードイン部１６は、取得用ポインタの設定部４１と、格納用ポインタの設定部４２と、取得部４３と、格納部４４と、ミュートレートの設定部４５と、積算部４６を有している。フェードイン部１６は、異常の検出の後に受信した正常フレームが有する複数の正常サンプルをフェードインさせる。
【００２３】
実施の形態に係る音声再生方法は、図１の音声再生装置を用いて実施される。図２と図３に示すように、ステップＳ１で、音声圧縮ストリーム入力装置２が、デジタル音声圧縮ストリームを入力し、ストリーム蓄積用バッファ３に記憶させる。音声デコーダ４は、ストリーム蓄積用バッファ３からデジタル音声圧縮ストリームを読み出し、正常フレームを生成する。図４に示すように、上書きバッファ６は、フレームの後半フレームの全てのサンプルａ１乃至ａｎを記憶することができる。サンプルａ１乃至ａｎは、時系列を反映する配列にしたがって記憶される。具体的には、書き込みポインタＰ１を上から一つずつ下に設定し、その設定のたび毎に時系列の早いサンプルから順に記憶させる。そして、音声デコーダ４が、次の正常フレームを生成すると、上書きバッファ６は、前の正常フレームの後半フレームのサンプルａ１乃至ａｎの上に、この次の正常フレームの後半フレームのサンプルａ１乃至ａｎを上書きして記憶する。
【００２４】
ステップＳ２で、検出部１１が、音声データのデジタル音声圧縮ストリームの異常を検出すると、ステップＳ３で、エラー回数閾値の設定部１７が、音声デコーダ４が正常フレームを連続して生成できないフレームエラー連続回数が許容される最大値であるエラー回数閾値を設定する。例えば、エラー回数閾値として１乃至１００を設定する。フレームエラー連続回数の設定部１８が、フレームエラー連続回数に初期値ゼロ（０）を設定する。フレームエラー連続回数の判定部１９が、フレームエラー連続回数がエラー回数閾値より大きいか否か判定する。大きければステップＳ２５に進み無音フレームが生成され、大きくなければステップＳ４に進み補完フレームが生成される。
【００２５】
ステップＳ４で、フレームエラー連続回数の判定部１９が、フレームエラー連続回数がゼロか否か判定する。フレームエラー連続回数がゼロであればステップＳ６に進み、ステップＳ６でミュートレートの設定部２５がミュートレートを１に設定する。フレームエラー連続回数がゼロでなければ、ステップＳ５に進む。
【００２６】
ステップＳ５で、ミュートレートの設定部２５が、前回のフレームの異常の検出の際の最後に使用したミュートレートに、ミュートレートを設定する。
【００２７】
ステップＳ７で、ミュートレートの設定部２５が、ミュートレートの変化量を算出する。ミュートレートの変化量は、エラー回数閾値とフレームサンプル数の積で、ミュートレートの初期値１を割った値である。
【００２８】
ステップＳ８で、取得用ポインタの設定部２１が、図４の取得用ポインタＰ２を上書きバッファ６の最後のサンプルａｎに設定する。また、格納用ポインタの設定部２２が、図５の格納用ポインタＰ３を出力バッファ７の最初の記憶領域ｂ１に設定する。
【００２９】
ステップＳ９で、ループＡが始まる。ループＡでは、図１の逆フレーム生成部１２により、前半逆フレームが生成される。ループＡは、ステップＳ９とＳ１４の間のステップＳ１０乃至Ｓ１３で構成される。ループ回数は、フレームサンプル数の半分ｎである。
【００３０】
ステップＳ１０で、取得部２３が、取得用ポインタＰ２が示すサンプルａｎを１サンプル取得し、取得用ポインタ設定部２１が取得用ポインタＰ２を逆方向に１サンプル進め、サンプルａｎ−１に取得用ポインタを設定する。
【００３１】
ステップＳ１１で、積算部２６が、サンプルａｎのサンプル値にミュートレートをかけた積算値を算出する。
【００３２】
ステップＳ１２で、ミュートレートの設定部２５が、ミュートレートからミュートレートの変化量を引いた値を、新たにミュートレートに設定する。
【００３３】
ステップＳ１３で、格納部２４が、ステップＳ１１の算出値を、出力バッファ７の格納用ポインタＰ３の設定された記憶領域ｂ１に記憶させ格納する。格納用ポインタの設定部２２が格納用ポインタＰ３を順方向に１領域進め、領域ｂ２に格納用ポインタＰ３を設定する。
【００３４】
ステップＳ１４で、ループＡの一回目が終わるので、以下同様に、所定の回数分だけループＡを回す。このことにより、出力バッファ７の２番目の記憶領域ｂ２には、上書きバッファ６の下から２番目のサンプルａｎ−１のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。出力バッファ７の３番目の記憶領域ｂ３には、上書きバッファ６の下から３番目のサンプルａｎ−２のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。最後に、出力バッファ７のフレームサンプル数の半分のｎ番目の記憶領域ｂｎには、上書きバッファ６の下からｎ番目で上から１番目のサンプルａ１のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。
【００３５】
ステップＳ１５で、ループＢが始まる。ループＢでは、図１の順フレーム生成部１３により後半順フレームが生成される。ループＢは、ステップＳ１５とＳ２０の間のステップＳ１６乃至Ｓ１９で構成される。ループ回数は、フレームサンプル数の半分ｎである。
【００３６】
ステップＳ１６で、取得部３３が、取得用ポインタＰ２が示す上から一番目のサンプルａ１を１サンプル取得し、取得用ポインタの設定部３１が取得用ポインタＰ２を順方向に１サンプル進め、サンプルａ２に取得用ポインタを設定する。
【００３７】
ステップＳ１７で、積算部２６がサンプルａ１のサンプル値にミュートレートをかけた積算値を算出する。
【００３８】
ステップＳ１８で、ミュートレートに設定部２５がミュートレートからミュートレートの変化量を引いた値を、新たにミュートレートに設定する。
【００３９】
ステップＳ１９で、格納部３４がステップＳ１７の積算値を、出力バッファ７の格納用ポインタＰ３の設定された記憶領域ｂｎ＋１に記憶させ格納する。格納用ポインタの設定部３２が格納用ポインタＰ３を順方向に１領域進め、領域ｂｎ＋２に格納用ポインタＰ３を設定する。
【００４０】
ステップＳ２０で、ループＢの一回目が終わるので、以下同様に、所定の回数分だけループＢを回す。このことにより、出力バッファ７のｎ＋２番目の記憶領域ｂｎ＋２には、上書きバッファ６の上から２番目のサンプルａ２のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。出力バッファ７のｎ＋３番目の記憶領域ｂｎ＋３には、上書きバッファ６の上から３番目のサンプルａ３のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。最後に、出力バッファ７のフレームサンプル数２ｎ番目の記憶領域ｂｍには、上書きバッファ６の上からｎ番目で下から１番目のサンプルａｎのサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。
【００４１】
ステップＳ２１で、フレームエラー連続回数の設定部１８が、フレームエラー連続回数に１を加えた値を新たにフレームエラー連続回数に設定する。
【００４２】
ステップＳ２２で、出力バッファ７が、読み出しポインタＰ４を、先頭の記憶領域ｂ１に設定し、記憶領域ｂ１に記憶された音声データを読み出し、ＰＣＭ出力処理部８に出力する。以下同様に、読み出しポインタＰ４を、記憶領域ｂ１からｂｍまで順次設定する。記憶領域ｂ１からｂｍまで設定する度に、読み出しポインタＰ４が設定された記憶領域ｂ１乃至ｂｍに記憶された音声データを読み出す。
【００４３】
ステップＳ２３で、検出部１１が、異常を含まない正常フレームを検出したか判定する。正常フレームを検出した場合は、ステップＳ２４のエラー復帰処理に進む。エラー復帰処理の内容は図３で詳細に説明する。ステップＳ２４のエラー復帰処理の後、ステップＳ１に戻る。正常フレームを検出していない場合は、ステップＳ３に戻る。
【００４４】
なお、ステップＳ２５に進んだ場合は、ステップＳ２５で、ループＣが始まる。ループＣでは、図１の無音設定部２０により無音フレームが生成される。ループＣは、ステップＳ２５とＳ２７の間のステップＳ２６で構成される。ループ回数は、フレームサンプル数である。
【００４５】
ステップＳ２６で、無音設定部２０が、格納用ポインタＰ３を、先頭の記憶領域ｂ１に設定し、記憶領域ｂ１にゼロを記憶させる。以下同様に、格納用ポインタＰ３を、記憶領域ｂ１からｂｍまで順次設定する。記憶領域ｂ１からｂｍまで設定する度に、格納用ポインタＰ３が設定された記憶領域ｂ１乃至ｂｍにゼロを記憶させる。
【００４６】
次に、ステップＳ２４のエラー復帰処理を詳細に説明する。エラー復帰処理は、図１のフェードイン部１６で実施される。なお、上書きバッファ６の記憶領域は、フレームサンプル数２ｎ分あるとする。上書きバッファ６は、直近に検出された正常フレームをまるごと１フレーム分記憶しているとする。
【００４７】
まず、ステップＳ３１で、ミュートレートの設定部４５が、ステップＳ１７で前回最後に使用したミュートレートを、ミュートレートの初期値に設定する。
【００４８】
ステップＳ３２で、ミュートレートの設定部４５が、ミュートレートの変化量を算出する。ミュートレートの変化量は、フレームサンプル数で、１からミュートレートの初期値を引いた値を割った値である。
【００４９】
ステップＳ３３で、取得用ポインタの設定部４１が、図４の取得用ポインタＰ２を上書きバッファ６の最初のサンプルａ１に設定する。また、格納用ポインタの設定部４２が、図５の格納用ポインタＰ３を出力バッファ７の最初の記憶領域ｂ１に設定する。
【００５０】
ステップＳ３４で、ループＤが始まる。ループＤでは、図１のフェードイン１６により、直後の正常フレームが生成される。ループＤは、ステップＳ３４とＳ３９の間のステップＳ３５乃至Ｓ３８で構成される。ループ回数は、フレームサンプル数である。
【００５１】
ステップＳ３５で、取得部４３が、取得用ポインタＰ２が示すサンプルａ１を１サンプル取得し、取得用ポインタ設定部４１が取得用ポインタＰ２を順方向に１サンプル進め、サンプルａ２に取得用ポインタＰ２を設定する。
【００５２】
ステップＳ３６で、積算部４６が、サンプルａ１のサンプル値にミュートレートをかけた積算値を算出する。
【００５３】
ステップＳ３７で、ミュートレートの設定部４５が、ミュートレートからミュートレートの変化量を足した値を、新たにミュートレートに設定する。
【００５４】
ステップＳ３８で、格納部４４が、ステップＳ３６の積算値を、出力バッファ７の格納用ポインタＰ３の設定された記憶領域ｂ１に記憶させ格納する。格納用ポインタの設定部４２が格納用ポインタＰ３を順方向に１領域進め、領域ｂ２に格納用ポインタＰ３を設定する。
【００５５】
ステップＳ３９で、ループＤの一回目が終わるので、以下同様に、所定の回数分だけループＤを回す。このことにより、出力バッファ７の２番目の記憶領域ｂ２には、上書きバッファ６の２番目のサンプルａ２のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。出力バッファ７の３番目の記憶領域ｂ３には、上書きバッファ６の３番目のサンプルａ３のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。最後に、出力バッファ７のフレームサンプル数の２ｎ番目の記憶領域ｂｍには、上書きバッファ６の２ｎ番目のサンプルａ２ｎのサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。
【００５６】
ステップＳ４０で、出力バッファ７が、読み出しポインタＰ４を、先頭の記憶領域ｂ１に設定し、記憶領域ｂ１に記憶された音声データを読み出し、ＰＣＭ出力処理部８に出力する。以下同様に、読み出しポインタＰ４を、記憶領域ｂ１からｂｍまで順次設定する。記憶領域ｂ１からｂｍまで設定する度に、読み出しポインタＰ４が設定された記憶領域ｂ１乃至ｂｍに記憶された音声データを読み出す。
【００５７】
なお、図２のステップＳ２において、図５のバッファ５は、フレームが入力されるたびに、特に、正常フレームが検出された場合は、フレームのサンプルａ１乃至ａ２ｎを、出力バッファ７の記憶領域ｂ１乃至ｂｍに記憶させていてもよい。このことによれば、ループＤにおける、上書きバッファ６を出力バッファ７と見なし、取得用ポインタＰ２を格納用ポインタＰ３と見なすことにより、ループＤにおいて上書きバッファ６を使用しなくてすむ。したがって、実施の形態において上書きバッファ６はフレームサンプル数の半分の記憶領域を有していればよい。
【実施例１】
【００５８】
実施例１では、図１の音声再生装置と図２と図３の音声再生方法をもちいた音声再生方法について説明する。図６に示すように、複数の正常フレームが図１のバッファ５に入出力されており、フレームに異常が発生する直前の正常フレームが直前の正常フレームである。異常の発生により補完フレーム１乃至４と無音フレームが生成されている。これら補完フレーム１乃至４と無音フレームの生成の際に正常フレームが検出され、この正常フレームが直後の正常フレームとしてバッファ５から出力されている。
【００５９】
正常フレームが図１のバッファ５に入力されている場合は、図２のステップＳ１で、上書きバッファ６は、正常フレームの後半フレームの全てのサンプルａ１乃至ａｎを記憶する。次にも正常フレームが入力されてくるとする。直前の正常フレームがバッファ５に入力されてくると、ステップＳ１で、上書きバッファ６は、正常フレームの後半フレームの全てのサンプルａ１乃至ａｎの上に、直前の正常フレームの後半フレームの全てのサンプルａ１乃至ａｎを上書きし記憶する。
【００６０】
ステップＳ２で、検出部１１が、直前の正常フレームの直後にフレームの異常を検出したとする。
【００６１】
ステップＳ３で、エラー回数閾値を４に設定する。フレームエラー連続回数に初期値ゼロ（０）を設定する。フレームエラー連続回数ゼロがエラー回数閾値４より大きいか否か判定する。大きくないのでステップＳ４に進み、以後、補完フレーム１を生成することになる。
【００６２】
ステップＳ４で、フレームエラー連続回数ゼロがゼロか否か判定する。フレームエラー連続回数がゼロであるので、ステップＳ６に進み、ステップＳ６でミュートレートを１に設定する。
【００６３】
ステップＳ７で、ミュートレートの変化量を算出する。ミュートレートの変化量は、エラー回数閾値４とフレームサンプル数２ｎの積で、ミュートレートの初期値１を割った値である。
【００６４】
ステップＳ８で、図４の取得用ポインタＰ２を上書きバッファ６の最後のサンプルａｎに設定する。また、図５の格納用ポインタＰ３を出力バッファ７の最初の記憶領域ｂ１に設定する。
【００６５】
ステップＳ９で、ループＡが始まる。ループＡでは、補完フレーム１の前半逆フレームが生成される。
【００６６】
ステップＳ１０で、取得用ポインタＰ２が示すサンプルａｎを１サンプル取得し、取得用ポインタＰ２を逆方向に１サンプル進め、サンプルａｎ−１に取得用ポインタを設定する。
【００６７】
ステップＳ１１で、サンプルａｎのサンプル値にミュートレート１をかけた積算値を算出する。
【００６８】
ステップＳ１２で、ミュートレート１からミュートレートの変化量を引いた値を、新たにミュートレートに設定する。このようにミュートレートを変化させると、ミュートレートは、図６に示すように、記憶領域ｂ１乃至ｂｍ毎にミュートレートの変化量ずつ減少し、エラー回数閾値の値４と同じ数の補完フレームの最後の補完フレーム４の最後の記憶領域ｂｍに対応するミュートレートの大きさはゼロあるいはミュートレートの変化量になる。
【００６９】
ステップＳ１３で、ステップＳ１１の積算値を、出力バッファ７の格納用ポインタＰ３の設定された記憶領域ｂ１に記憶させ格納する。格納用ポインタＰ３を順方向に１領域進め、領域ｂ２に格納用ポインタＰ３を設定する。
【００７０】
以下同様に、所定の回数分だけループＡを回す。このことにより、出力バッファ７の２番目の記憶領域ｂ２には、上書きバッファ６の下から２番目のサンプルａｎ−１のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。最後に、出力バッファ７のフレームサンプル数の半分のｎ番目の記憶領域ｂｎには、上書きバッファ６の下からｎ番目で上から１番目のサンプルａ１のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。このように、補完フレーム１の前半逆フレームでは、ミュートレートがだんだん小さくなるので、サンプル値もだんだん小さくなる。また、補完フレーム１の前半逆フレームの音声波形Ｄ２は、直前の正常フレームの後半フレームの音声波形Ｄ２を折り返した波形になる。したがって、補完フレーム１の前半逆フレームの音声波形Ｄ２は、直前の正常フレームの後半フレームの音声波形Ｄ２に連続する。
【００７１】
ステップＳ１５で、ループＢが始まる。ループＢでは、補完フレーム１の後半順フレームが生成される。
【００７２】
ステップＳ１６で、図４の取得用ポインタＰ２が示す上から一番目のサンプルａ１を１サンプル取得し、取得用ポインタＰ２を順方向に１サンプル進め、サンプルａ２に取得用ポインタを設定する。
【００７３】
ステップＳ１７で、サンプルａ１のサンプル値にミュートレートをかけた積算値を算出する。
【００７４】
ステップＳ１８で、ミュートレートからミュートレートの変化量を引いた値を、新たにミュートレートに設定する。このことにより、ミュートレートは後半順フレームにおいても下がり続ける。
【００７５】
ステップＳ１９で、ステップＳ１７の積算値を、出力バッファ７の格納用ポインタＰ３の設定された記憶領域ｂｎ＋１に記憶させ格納する。格納用ポインタＰ３を順方向に１領域進め、領域ｂｎ＋２に格納用ポインタＰ３を設定する。
【００７６】
以下同様に、所定の回数分だけループＢを回す。このことにより、出力バッファ７のｎ＋２番目の記憶領域ｂｎ＋２には、上書きバッファ６の上から２番目のサンプルａ２のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。最後に、出力バッファ７のフレームサンプル数２ｎ番目の記憶領域ｂｍには、上書きバッファ６の上からｎ番目で下から１番目のサンプルａｎのサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。このように、補完フレーム１の後半順フレームでは、ミュートレートがだんだん小さくなるので、サンプル値もだんだん小さくなる。また、補完フレーム１の後半順フレームの音声波形Ｄ２は、直前の正常フレームの後半フレームの音声波形Ｄ２を平行移動した波形であり、補完フレーム１の前半逆フレームを折り返した波形になる。したがって、補完フレーム１の後半順フレームの音声波形Ｄ２は、直前の補完フレーム１の前半逆フレームの音声波形Ｄ２に連続する。
【００７７】
ステップＳ２１で、フレームエラー連続回数ゼロに１を加えた値１を新たにフレームエラー連続回数に設定する。
【００７８】
ステップＳ２２で、補完フレーム１の音声データＤ２を読み出す。補完フレーム１の音声データＤ２は、徐々に小さくなり、直前の正常フレームの音声データと連続しているので、雑音が発生しにくい。
【００７９】
ステップＳ２３で、フレームの異常の検出後に異常を含まない正常フレームを検出したか判定する。正常フレームを検出していないので、ステップＳ３に戻る。
【００８０】
次に、再度ステップＳ３乃至Ｓ２３を実行し、補完フレーム２を生成する。補完フレーム２は補完フレーム１と同様に、前半逆フレームと後半順フレームを有する。補完フレーム２の前半逆フレームでは、ミュートレートがだんだん小さくなるので、サンプル値もだんだん小さくなる。また、補完フレーム２の前半逆フレームの音声波形Ｄ２は、直前の正常フレームの後半フレームの音声波形Ｄ２を折り返した波形であり、補完フレーム１の後半順フレームを折り返した波形になる。したがって、補完フレーム２の前半逆フレームの音声波形Ｄ２は、直前の補完フレーム１の後半順フレームの音声波形Ｄ２に連続する。補完フレーム２の後半順フレームでは、ミュートレートがだんだん小さくなるので、サンプル値もだんだん小さくなる。また、補完フレーム２の後半順フレームの音声波形Ｄ２は、直前の正常フレームの後半フレームの音声波形Ｄ２を平行移動した波形であり、補完フレーム２の前半逆フレームを折り返した波形になる。したがって、補完フレーム２の後半順フレームの音声波形Ｄ２は、直前の補完フレーム２の前半逆フレームの音声波形Ｄ２に連続する。ステップＳ２３で、正常フレームを検出していないので、再度ステップＳ３に戻る。
【００８１】
また、ステップＳ３乃至Ｓ２３を実行し、補完フレーム３を生成する。補完フレーム３も、前半逆フレームと後半順フレームを有する。補完フレーム３の前半逆フレームの音声波形Ｄ２は、直前の補完フレーム２の後半順フレームの音声波形Ｄ２に連続する。補完フレーム３の後半順フレームの音声波形Ｄ２は、直前の補完フレーム３の前半逆フレームの音声波形Ｄ２に連続する。ステップＳ２３で、正常フレームを検出していないので、再度ステップＳ３に戻る。
【００８２】
また、ステップＳ３乃至Ｓ２３を実行し、補完フレーム４を生成する。補完フレーム４も、前半逆フレームと後半順フレームを有する。補完フレーム４の前半逆フレームの音声波形Ｄ２は、直前の補完フレーム３の後半順フレームの音声波形Ｄ２に連続する。補完フレーム４の後半順フレームの音声波形Ｄ２は、直前の補完フレーム４の前半逆フレームの音声波形Ｄ２に連続する。そして、補完フレーム４の後半順フレームの音声波形Ｄ２の強度は、最後にはゼロになる。ステップＳ２３で、正常フレームを検出していないので、再度ステップＳ３に戻る。
【００８３】
ステップＳ３で、フレームエラー連続回数がここまでに５になっており、フレームエラー連続回数５がエラー回数閾値４より大きいか否か判定する。大きいのでステップＳ２５に進む。
【００８４】
ステップＳ２５で、図５の格納用ポインタＰ３を、先頭の記憶領域ｂ１に設定し、記憶領域ｂ１にゼロを記憶させる。以下同様に、格納用ポインタＰ３を、記憶領域ｂ１からｂｍまで順次設定する。記憶領域ｂ１からｂｍまで設定する度に、格納用ポインタＰ３が設定された記憶領域ｂ１乃至ｂｍにゼロを記憶させる。このことにより、図６の無音フレームが生成される。この後、ステップＳ２３に進む。
【００８５】
ステップＳ２３で、フレームの異常の検出後に異常を含まない正常フレームを検出したか判定する。図６に示すように正常フレームを検出しているので、ステップＳ２４に進み、さらに、図３のステップＳ３１に進む。
【００８６】
ステップＳ３１で、ステップＳ１７で前回最後に使用したミュートレートのゼロを、ミュートレートの初期値に設定する。
【００８７】
ステップＳ３２で、ミュートレートの変化量を算出する。ミュートレートの変化量は、フレームサンプル数で、ミュートレートの最大値である最終値１からミュートレートの初期値ゼロを引いた値を割った値である。
【００８８】
ステップＳ３３で、図４の取得用ポインタＰ２を上書きバッファ６の最初のサンプルａ１に設定する。また、格納用ポインタの設定部４２が、図５の格納用ポインタＰ３を出力バッファ７の最初の記憶領域ｂ１に設定する。
【００８９】
ステップＳ３５で、取得用ポインタＰ２が示すサンプルａ１を１サンプル取得し、取得用ポインタＰ２を順方向に１サンプル進め、サンプルａ２に取得用ポインタＰ２を設定する。
【００９０】
ステップＳ３６で、サンプルａ１のサンプル値にミュートレートをかけた積算値を算出する。
【００９１】
ステップＳ３７で、ミュートレートからミュートレートの変化量を足した値を、新たにミュートレートに設定する。このようにミュートレートを変化させると、ミュートレートは、図６に示すように、記憶領域ｂ１乃至ｂｍ毎にミュートレートの変化量ずつ増加し、直後の正常フレームの最後の記憶領域ｂｍに対応するミュートレートの大きさはミュートレートの最大値である最終値１になる。
【００９２】
ステップＳ３８で、ステップＳ３６の積算値を、出力バッファ７の格納用ポインタＰ３の設定された記憶領域ｂ１に記憶させ格納する。格納用ポインタＰ３を順方向に１領域進め、領域ｂ２に格納用ポインタＰ３を設定する。
【００９３】
以下同様に、出力バッファ７の２番目の記憶領域ｂ２には、上書きバッファ６の２番目のサンプルａ２のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。最後に、出力バッファ７のフレームサンプル数の２ｎ番目の記憶領域ｂｍには、上書きバッファ６の２ｎ番目のサンプルａ２ｎのサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。
【００９４】
ステップＳ４０で、記憶領域ｂ１からｂｍまで設定する度に、読み出しポインタＰ４が設定された記憶領域ｂ１乃至ｂｍに記憶された音声データＤ２を読み出す。以上により、図６の直後の正常フレームが生成する。直後の正常フレームでは、ミュートレートがゼロから１までだんだん大きくなるので、サンプル値もゼロからミュートレートの掛からない大きさまでだんだん大きくなる。したがって、直後の正常フレームの音声波形Ｄ２は、無音フレームの音声波形Ｄ２に連続する。図２のステップＳ２４のエラー復帰処理が終了し、ステップＳ１に戻る。
【００９５】
以上、図６に示すように、フレームの異常が検出されると、音声波形Ｄ２は、フェードアウトし、無音波形になる。さらに、音声波形Ｄ２は、正常フレームを検出すると、無音波形からフェードインする。これら、フェードアウトからフェードインに至るまで、音声波形Ｄ２は連続している。実施例１のデジタル音声圧縮ストリームのデコードを行う音声再生装置は、音声圧縮データ入力に異常があった場合に、フィルタ等を使用するよりも演算量が少なく、且つ音声波形Ｄ２が不連続となることによって引き起こされる音声品質低下のない出力PCMデータを生成できる。
【実施例２】
【００９６】
実施例２でも、図１の音声再生装置と図２と図３の音声再生方法をもちいた音声再生方法について説明する。図７に示すように、複数の正常フレームが図１のバッファ５に入出力されており、フレームに異常が発生する直前の正常フレームが直前の正常フレームである。異常の発生により補完フレーム１と２が生成されている。これら補完フレーム１と２の生成以降に正常フレームが検出され、この正常フレームが直後の正常フレームとしてバッファ５から出力され、引き続き正常フレームがバッファ５に入出力されている。
【００９７】
正常フレームが図１のバッファ５に入力されている場合は、図２のステップＳ１で、上書きバッファ６は、正常フレームの後半フレームの全てのサンプルａ１乃至ａｎを記憶する。次に、直前の正常フレームがバッファ５に入力されてくると、ステップＳ１で、上書きバッファ６は、正常フレームの後半フレームの全てのサンプルａ１乃至ａｎの上に、直前の正常フレームの後半フレームの全てのサンプルａ１乃至ａｎを上書きし記憶する。
【００９８】
ステップＳ２で、直前の正常フレームの入力の直後にフレームの異常を検出したとする。
【００９９】
ステップＳ３で、エラー回数閾値を４に設定する。フレームエラー連続回数に初期値ゼロ（０）を設定する。フレームエラー連続回数ゼロがエラー回数閾値４より大きいか否か判定する。大きくないのでステップＳ４に進み、以後では、まず、補完フレーム１を生成することになる。
【０１００】
ステップＳ４で、フレームエラー連続回数ゼロがゼロか否か判定する。フレームエラー連続回数がゼロであるので、ステップＳ６に進み、ステップＳ６でミュートレートを１に設定する。
【０１０１】
ステップＳ７で、ミュートレートの変化量を算出する。ミュートレートの変化量は、エラー回数閾値４とフレームサンプル数２ｎの積で、ミュートレートの初期値１を割った値である。
【０１０２】
ステップＳ８で、図４の取得用ポインタＰ２を上書きバッファ６の最後のサンプルａｎに設定する。また、図５の格納用ポインタＰ３を出力バッファ７の最初の記憶領域ｂ１に設定する。
【０１０３】
ステップＳ９で、ループＡが始まる。ループＡでは、補完フレーム１の前半逆フレームが生成される。
【０１０４】
ステップＳ１０で、取得用ポインタＰ２が示すサンプルａｎを１サンプル取得し、取得用ポインタＰ２を逆方向に１サンプル進め、サンプルａｎ−１に取得用ポインタを設定する。
【０１０５】
ステップＳ１１で、サンプルａｎのサンプル値にミュートレート１をかけた積算値を算出する。
【０１０６】
ステップＳ１２で、ミュートレート１からミュートレートの変化量を引いた値を、新たにミュートレートに設定する。このようにミュートレートを変化させると、ミュートレートは、図７に示すように、記憶領域ｂ１乃至ｂｍ毎にミュートレートの変化量ずつ減少し、エラー回数閾値の値４と同じ数の補完フレームの最後の補完フレーム４の最後の記憶領域ｂｍに対応するミュートレートの大きさはゼロあるいはミュートレートの変化量になる。そして、エラー回数閾値の値４の半分の２と同じ番目の補完フレーム２の最後の記憶領域ｂｍに対応するミュートレートの大きさは２分の１になる。
【０１０７】
ステップＳ１３で、ステップＳ１１の積算値を、出力バッファ７の格納用ポインタＰ３の設定された記憶領域ｂ１に記憶させ格納する。格納用ポインタＰ３を順方向に１領域進め、領域ｂ２に格納用ポインタＰ３を設定する。
【０１０８】
以下同様に、所定の回数分だけループＡを回す。このことにより、出力バッファ７の２番目の記憶領域ｂ２には、上書きバッファ６の下から２番目のサンプルａｎ−１のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。最後に、出力バッファ７のフレームサンプル数の半分のｎ番目の記憶領域ｂｎには、上書きバッファ６の下からｎ番目で上から１番目のサンプルａ１のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。このように、補完フレーム１の前半逆フレームでは、ミュートレートがだんだん小さくなるので、サンプル値もだんだん小さくなる。また、補完フレーム１の前半逆フレームの音声波形Ｄ２は、直前の正常フレームの後半フレームの音声波形Ｄ２を折り返した波形になる。したがって、補完フレーム１の前半逆フレームの音声波形Ｄ２は、直前の正常フレームの後半フレームの音声波形Ｄ２に連続する。
【０１０９】
ステップＳ１５で、ループＢが始まる。ループＢでは、補完フレーム１の後半順フレームが生成される。
【０１１０】
ステップＳ１６で、図４の取得用ポインタＰ２が示す上から一番目のサンプルａ１を１サンプル取得し、取得用ポインタＰ２を順方向に１サンプル進め、サンプルａ２に取得用ポインタを設定する。
【０１１１】
ステップＳ１７で、サンプルａ１のサンプル値にミュートレートをかけた積算値を算出する。
【０１１２】
ステップＳ１８で、ミュートレートからミュートレートの変化量を引いた値を、新たにミュートレートに設定する。このことにより、ミュートレートは後半順フレームにおいても下がり続ける。
【０１１３】
ステップＳ１９で、ステップＳ１７の積算値を、出力バッファ７の格納用ポインタＰ３の設定された記憶領域ｂｎ＋１に記憶させ格納する。格納用ポインタＰ３を順方向に１領域進め、領域ｂｎ＋２に格納用ポインタＰ３を設定する。
【０１１４】
以下同様に、所定の回数分だけループＢを回す。このことにより、出力バッファ７のｎ＋２番目の記憶領域ｂｎ＋２には、上書きバッファ６の上から２番目のサンプルａ２のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。最後に、出力バッファ７のフレームサンプル数２ｎ番目の記憶領域ｂｍには、上書きバッファ６の上からｎ番目で下から１番目のサンプルａｎのサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。このように、補完フレーム１の後半順フレームでは、ミュートレートがだんだん小さくなるので、サンプル値もだんだん小さくなる。また、補完フレーム１の後半順フレームの音声波形Ｄ２は、直前の正常フレームの後半フレームの音声波形Ｄ２を平行移動した波形であり、補完フレーム１の前半逆フレームを折り返した波形になる。したがって、補完フレーム１の後半順フレームの音声波形Ｄ２は、直前の補完フレーム１の前半逆フレームの音声波形Ｄ２に連続する。
【０１１５】
ステップＳ２１で、フレームエラー連続回数ゼロに１を加えた値１を新たにフレームエラー連続回数に設定する。
【０１１６】
ステップＳ２２で、補完フレーム１の音声データＤ２を読み出す。補完フレーム１の音声データＤ２は、徐々に小さくなり、直前の正常フレームの音声データと連続しているので、雑音が発生しにくい。
【０１１７】
ステップＳ２３で、フレームの異常の検出後に異常を含まない正常フレームを検出したか判定する。正常フレームを検出していないので、ステップＳ３に戻る。
【０１１８】
次に、再度ステップＳ３乃至Ｓ２３を実行し、補完フレーム２を生成する。補完フレーム２は補完フレーム１と同様に、前半逆フレームと後半順フレームを有する。補完フレーム２の前半逆フレームでは、ミュートレートがだんだん小さくなるので、サンプル値もだんだん小さくなる。また、補完フレーム２の前半逆フレームの音声波形Ｄ２は、直前の正常フレームの後半フレームの音声波形Ｄ２を折り返した波形であり、補完フレーム１の後半順フレームを折り返した波形になる。したがって、補完フレーム２の前半逆フレームの音声波形Ｄ２は、直前の補完フレーム１の後半順フレームの音声波形Ｄ２に連続する。補完フレーム２の後半順フレームでは、ミュートレートがだんだん小さくなるので、サンプル値もだんだん小さくなる。また、補完フレーム２の後半順フレームの音声波形Ｄ２は、直前の正常フレームの後半フレームの音声波形Ｄ２を平行移動した波形であり、補完フレーム２の前半逆フレームを折り返した波形になる。したがって、補完フレーム２の後半順フレームの音声波形Ｄ２は、直前の補完フレーム２の前半逆フレームの音声波形Ｄ２に連続する。ステップＳ２３で、フレームの異常の検出後に異常を含まない正常フレームを検出したか判定する。図７に示すように正常フレームを検出しているので、ステップＳ２４に進み、さらに、図３のステップＳ３１に進む。ステップＳ３１に前後して、正常フレームのサンプル値が、出力バッファ７の記憶領域ｂ１乃至ｂｍに記憶され格納される。
【０１１９】
ステップＳ３１で、ステップＳ１７で前回最後に使用したミュートレートの２分の１を、ミュートレートの初期値に設定する。
【０１２０】
ステップＳ３２で、ミュートレートの変化量を算出する。ミュートレートの変化量は、フレームサンプル数で、ミュートレートの最大値である最終値１からミュートレートの初期値２分の１を引いた値を割った値である。
【０１２１】
ステップＳ３３で、図４の取得用ポインタＰ２を図５の出力バッファ７の最初の記憶領域ｂ１に設定する。また、図５の格納用ポインタＰ３を出力バッファ７の最初の記憶領域ｂ１に設定する。
【０１２２】
ステップＳ３５で、取得用ポインタＰ２が示す記憶領域ｂ１のサンプル値を取得し、取得用ポインタＰ２を順方向に１サンプル進め、記憶領域ｂ２に取得用ポインタＰ２を設定する。
【０１２３】
ステップＳ３６で、取得された記憶領域ｂ１のサンプル値にミュートレートの２分の１をかけた積算値を算出する。
【０１２４】
ステップＳ３７で、ミュートレートからミュートレートの変化量を足した値を、新たにミュートレートに設定する。このようにミュートレートを変化させると、ミュートレートは、図７に示すように、記憶領域ｂ１乃至ｂｍ毎にミュートレートの変化量ずつ増加し、直後の正常フレームの最後の記憶領域ｂｍに対応するミュートレートの大きさはミュートレートの最大値である最終値１になる。
【０１２５】
ステップＳ３８で、ステップＳ３６の積算値を、出力バッファ７の格納用ポインタＰ３の設定された記憶領域ｂ１に記憶させ格納する。格納用ポインタＰ３を順方向に１領域進め、領域ｂ２に格納用ポインタＰ３を設定する。
【０１２６】
以下同様に、出力バッファ７の２番目の記憶領域ｂ２には、上書きバッファ６の２番目のサンプルａ２のサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。最後に、出力バッファ７のフレームサンプル数の２ｎ番目の記憶領域ｂｍには、上書きバッファ６の２ｎ番目のサンプルａ２ｎのサンプル値に変化量分だけ変化させたミュートレートをかけた積算値を記憶させる。
【０１２７】
ステップＳ４０で、記憶領域ｂ１からｂｍまで設定する度に、読み出しポインタＰ４が設定された記憶領域ｂ１乃至ｂｍに記憶された音声データＤ２を読み出す。以上で図２のステップＳ２４が終了し、ステップＳ１に戻る。ステップＳ１で正常フレームの上書きをする。
【０１２８】
図７の直後のフレームは、本来、直前の正常フレームに続いて生成されるところ、何らかの原因で遅れて生成される場合がある。この場合、直後のフレームを直前の正常フレームの後に配置すると、直後のフレームの音声波形Ｄ２は、直前の正常フレームの音声波形Ｄ２に連続する。ここで、直後のフレームの前の補完フレーム２の後半順フレームの音声波形Ｄ２は、直前の正常フレームの後半フレームの音声波形Ｄ２を平行移動したものなので、直後のフレームの音声波形Ｄ２は、補完フレーム２の後半順フレームの音声波形Ｄ２に連続する。なお、この連続は、ミュートレートを加味しても成り立つ。これは、図７に示すように、直後のフレームの最初のサンプル値に積算するミュートレートは、補完フレーム２の後半順フレームの最後のサンプル値に積算するミュートレートに等しいからである。直後のフレームでは、ミュートレートが２分の１から１までだんだん大きくなるので、サンプル値も２分の１からミュートレートの掛からない大きさまでだんだん大きくなる。したがって、直後のフレームの音声波形Ｄ２は、補完フレーム２の音声波形Ｄ２に連続する。また、直後のフレームの音声波形Ｄ２は、直後のフレームの後の正常フレームの音声波形Ｄ２に連続する。図２のステップＳ２４のエラー復帰処理が終了し、ステップＳ１に戻る。
【０１２９】
以上、図７に示すように、フレームに異常が検出されると、音声波形Ｄ２はフェードアウトし、その後さらに、正常フレームを検出すると、音声波形Ｄ２はフェードインする。これら、フェードアウトからフェードインに至るまで、音声波形Ｄ２は連続している。実施例２のデジタル音声圧縮ストリームのデコードを行う音声再生装置は、音声圧縮データ入力に異常があった場合に、フィルタ等を使用するよりも演算量が少なく、且つ音声波形Ｄ２が不連続となることによって引き起こされる音声品質低下のない出力PCMデータを生成できる。
【実施例３】
【０１３０】
実施例３では、実施例１と２の上書きバッファ６と出力バッファ７の代替可能な出力バッファについて説明する。
【０１３１】
図８に示すように、出力バッファは、書き込みポインタ、読み出しポインタ、取得用ポインタと格納用ポインタを有する。
【０１３２】
出力バッファは、書き込みポインタを用いて、生成された複数の正常フレームのサンプル値を上から順番に記憶し格納する。正常フレームと同様に、直前の正常フレームのサンプル値も正常フレームのサンプル値の後に順番に記憶し格納される。特に、直前の正常フレームの後半フレームのサンプル値ａ１乃至ａｎは、図８に示すように記憶される。このサンプル値ａ１乃至ａｎを記憶した記憶領域が実施例１と２の上書きバッファ６に相当する。すなわち、出力バッファ内に上書きバッファ６が生成され、出力バッファが上書きバッファ６を有していると考えられる。ただ、出力バッファのどの記憶領域に上書きバッファ６が生成されるかは、フレームの異常が検出される時期によって変動する。
【０１３３】
サンプル値ａｎの下の記憶領域ｂ１乃至ｂｍに補完フレームのサンプル値の記憶領域が確保される。前半逆フレームと後半順フレームを生成する。前半逆フレームの生成では、まず、取得用ポインタをサンプル値ａｎが記憶された記憶領域に設定し、格納用ポインタを記憶領域ｂ１に設定することになる。以下、実施例１と同様に前半逆フレームを生成することができる。後半順フレームの生成では、まず、取得用ポインタをサンプル値ａ１が記憶された記憶領域に設定し、格納用ポインタを記憶領域ｂｎ＋１に設定することになる。以下、実施例１と同様に後半順フレームを生成することができる。
【０１３４】
フレームの異常の後に正常フレームが検出された場合は、書き込みポインタが補完フレームあるいは無音フレームの直下の記憶領域に設定され、この書き込みポインタを用いて、異常の後に検出された正常フレームのサンプル値を上から順番に記憶し格納する。この格納にともなって実施例１と同様にフェードインが実施される。
【０１３５】
音声波形を出力するための出力バッファからの読み出しは、読み出しポインタを用いて行う。読み出しポインタは、出力バッファの最上部の記憶領域から一つずつ順番に下の記憶領域に移動させる。移動させるたびに読み出しポインタが設定された記憶領域のサンプル値を読み出す。
【０１３６】
実施例３の出力バッファを用いることにより、出力バッファとは別に上書きバッファ６を用意する必要がない。
【図面の簡単な説明】
【０１３７】
【図１】本発明の一実施形態に係る音声再生装置の構成図である。
【図２】本発明の一実施形態に係る音声再生方法のフローチャートである。
【図３】本発明の一実施形態に係る音声再生方法におけるエラー復帰処理のフローチャートである。
【図４】上書きバッファの構成図である。
【図５】出力バッファの構成図である。
【図６】本発明の一実施形態に係る音声再生装置により生成した音声の波形図である。
【図７】本発明の一実施形態に係る音声再生装置により生成した音声の波形図である。
【図８】本発明の一実施形態に係る音声再生装置の出力バッファの構成図である。
【符号の説明】
【０１３８】
１    音声再生装置
２    音声圧縮ストリーム入力装置
３    ストリーム蓄積用バッファ
４    音声デコーダ
５    出力ＰＣＭ蓄積用バッファ
６    上書きバッファ
７    出力バッファ
８    ＰＣＭ出力処理部
９    Ｄ／Ａコンバータ
１０  補完部
１１  検出部
１２  逆フレーム生成部
１３  順フレーム生成部
１４  出力部
１５  フェードアウト部
１６  フェードイン部
１７  エラー回数閾値の設定部
１８  フレームエラー連続回数の設定部
１９  フレームエラー連続回数の判定部
２０  無音設定部
２１、３１、４１  取得用ポインタの設定部
２２、３２、４２  格納用ポインタの設定部
２３、３３、４３  取得部
２４、３４、４４  格納部
２５、４５  ミュートレートの設定部
２６、４６  積算部
【図１】
2007010855.tif 000003
【図２】
2007010855.tif 000004
【図３】
2007010855.tif 000005
【図４】
2007010855.tif 000006
【図５】
2007010855.tif 000007
【図６】
2007010855.tif 000008
【図７】
2007010855.tif 000009
【図８】
2007010855.tif 000010