(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0012】
以下、本発明の実施形態について図面を参照して説明する。
[第1の実施形態]
図1は、第1の実施形態のオーディオ符号化装置の構成を表わす図である。
【0013】
図1を参照して、このオーディオ符号化装置1は、フィルタ処理部2と、量子化部3と、蓄積部7と、ストリーム生成部5とを備える。
【0014】
フィルタ処理部2は、一定時間ごとにサンプリングされた1152個のオーディオデータをサブバンド信号に分割し、さらにMDCT(Modified Discrete Cosine Transform)スペクトルに変換し、さらに折り返し歪削減バタフライで周波数領域の折返しを除去する。
【0015】
量子化部3は、フィルタ処理部2から出力されるフィルタ処理された1152個のオーディオサンプルからなるオーディオデータを量子化して、蓄積部7に記憶する。すなわち、量子化部3では、心理聴覚分析部で計算された周波数帯域毎の許容量子化雑音電力に関する要求と、ビットレート、及びビットリザーバ(これにより擬似的な可変ビットレートを実現する)の蓄積ビット数を元にして決定される使用可能ビット数の制限のもとで、反復ループ処理によって、量子化ステップサイズ、周波数帯域毎の量子化ビット数を変化させ、スケールファクタを決定して、MDCTスペクトルを量子化し、量子化インデックスのハフマン符号化を行なう。量子化部3は、ヘッダおよび付加情報を生成して、ストリーム生成部5に送る。
【0016】
蓄積部7は、量子化部3で量子化されたオーディオデータを蓄積する。
ストリーム生成部5は、蓄積部7から量子化されたオーディオデータmain_dataを取り出して、ヘッダおよび付加情報を付加して、MPEGオーディオレイヤ3のストリームを生成する。MPEGオーディオレイヤ3のストリームのフレーム長は一定であって、各フレームは、ヘッダおよび付加情報を含み、メインデータ領域にmain_dataが配置される。
【0017】
付加情報には、MDCTの変換ブロック長に関する情報、量子化ステップサイズ、スケールファクタ関連情報、ハフマン符号化の領域・テーブルに関する情報、main_data_beginなどを含む。
【0018】
各フレームのmain_data_beginは、そのフレームの先頭位置と、そのフレームのヘッダと関連するmain_dataの先頭位置との間の長さ(ヘッダ及び付加情報は除く)を表わす。したがって、main_data_beginが「0」の場合には、そのフレームのヘッダと関連するmain_dataがそのフレーム内にあることを示す。main_data_beginが「0」以外の場合には、そのフレームのヘッダと関連するmain_dataがそのフレームに先行するフレーム内にあることを示す。
【0019】
ストリーム生成部5は、蓄積部7内の量子化されたオーディオデータを、ストリーム内のオーディオデータと関連するヘッダが存在するフレームおよび/またはそのヘッダが存在するフレームに先行する1または複数のフレームに配置する(パッケージする)。つまり、第i番目のオーディオデータと関連するヘッダは、ストリームの第iフレームに配置されるので、第i番目のオーディオデータを、第iフレームおよび/または第iフレームに先行する1または複数のフレームに配置する(パッケージする)。
【0020】
より具体的には、ストリーム生成部5は、所定のフレームについては、そのフレームに含まれるヘッダと関連するオーディオデータの全体を配置し、残りの領域には可能な限り、上限を超えない範囲でオーディオデータの後続のオーディオデータを配置する。たとえば、所定のフレームが第3フレームとすると、第3フレームには、第3フレームに含まれるヘッダと関連する第3番目のオーディオデータの全体が配置され、第3フレームの残りの領域には可能な限り、上限を超えない範囲で第4番目以降のオーディオデータが可能な限り配置される。ここで、上限とは、たとえば、第X番目のオーディオデータを構成するビット量のうちの、第Xフレームに先行する1個以上のフレームに配置できるビット量の最大値である。
【0021】
ストリーム生成部5は、所定のフレーム以外については、そのフレームに含まれるヘッダと関連するオーディオデータおよび/またはそのオーディオデータの後続のオーディオデータを配置する。ここでも、後続のオーディオデータについては、上限を超えない範囲で配置される。たとえば、所定のフレーム以外のフレームが第4フレームとすると、第4フレームには、第4フレームに含まれるヘッダと関連する第4番目のオーディオデータおよび/または第5番目以降のオーディオデータが配置される。したがって、第4フレームには、第4番目のオーディオデータの一部または全部が含まれない場合がある。
【0022】
第1の実施形態では、所定のフレームは、一定周期ごと(たとえば、3フレームごと)に存在するものとする。
【0023】
ストリーム生成部5は、所定のフレーム内に「0」を表わすmain_data_beginを「0」を配置する。
【0024】
ストリーム生成部5は、フレーム内のメインデータ領域内のオーディオデータが配置されない空き領域をゼロ値で埋める(ゼロパディング)。空き領域は、後続のオーディオデータについては、上述のような上限を超えない範囲という制約が課されるためである。また、所定のフレームのmain_data_beginが「0」のため、所定のフレームおよび所定のフレームに後続するフレームに含まれるヘッダと関連するオーディオデータは、所定のフレームに先行するフレームに配置することができないためである。
【0025】
図2は、第1の実施形態のオーディオ符号化装置のフィルタ処理部および量子化部の動作手順を表わすフローチャートである。
【0026】
図2を参照して、まず、オーディオデータ番号iが「1」に設定される(ステップS101)。
【0027】
次に、オーディオデータ番号iのオーディオデータがフィルタ処理部2に入力される(ステップS102)。
【0028】
次に、フィルタ処理部2では、フィルタ処理を実行する(ステップS103)。
次に、量子化部3は、フィルタ処理されたオーディオデータを量子化する。具体的には、オーディオデータ番号iを周期Dで除算した余りが「1」の場合には、量子化部3は、量子化されたデータ量がフレーム番号iのフレーム内のメインデータ領域の容量Aを超えないように、量子化スケールを調整することによって量子化する。
【0029】
一方、オーディオデータ番号iを周期Dで除算した余りが「1」でない場合には、量子化部3は、量子化されたデータ量がフレーム番号iのフレーム内のメインデータ領域の容量Aと、フレーム番号iのフレームに先行する1個以上の所定のフレーム内のメインデータ領域内の空き領域の和と所定の上限値のうちの小さい方Bとの合計(A+B)を超えないように、量子化スケールを調整することによって量子化する。ここで、1個以上の所定のフレームとは、そのフレームのフレーム番号を周期Dで除算した余りが「1」であり、かつフレーム番号(i−D)〜フレーム番号(i−1)のフレームである(ステップS104)。
【0030】
次に、量子化部3は、量子化されたオーディオデータをmain_data(i)として蓄積部7に保存する(ステップS105)。
【0031】
次に、量子化部3は、main_data(i)についてのヘッダおよび付加情報を生成して、ストリーム生成部5に通知する。ここで、量子化部3は、オーディオデータ番号iを周期Dで除算した余りが「1」の場合には、付加情報の一部であるmain_data_begin(j)を「0」に設定し、オーディオデータ番号iを周期Dで除算した余りが「1」でない場合には、ストリーム内のフレーム番号iのフレームの先頭とmain_data(i)の先頭位置の間の長さ(付加情報およびヘッダを除く)を付加情報の一部であるmain_data_begin(i)の値に設定する。また、量子化部3は、main_data(i)のデータのうち、フレーム番号iのフレームに先行する各フレームにどれだけのデータを配置するかの情報(割当情報)もストリーム生成部5に通知する(ステップ106)。
【0032】
次に、オーディオデータ番号iを周期Dで除算した余りが「0」の場合には(ステップS107でYES)、ストリーム生成部5での消費によって蓄積部7が空になるのを待ってから(ステップS109)、オーディオデータ番号iがインクリメントされて(ステップS108)、ステップS102からの処理が繰返される。
【0033】
一方、オーディオデータ番号iを周期Dで除算した余りが「0」でない場合には(ステップS107でNO)、蓄積部7が空になるのを待つことなく、オーディオデータ番号iがインクリメントされて(ステップS108)、ステップS102からの処理が繰返される。
【0034】
図3は、第1の実施形態のオーディオ符号化装置のストリーム生成部の動作手順を表わすフローチャートである。
【0035】
まず、フレーム番号jが「1」に設定される(ステップS201)。
次に、ストリーム生成部5は、量子化部3で作成されたmain_data(j)についてのヘッダをフレーム番号jのフレームのヘッダ領域に配置する(ステップS202)。
【0036】
次に、ストリーム生成部5は、量子化部3で作成されたmain_data(j)についての付加情報をフレーム番号jのフレームの付加情報領域に配置する(ステップS203)。
【0037】
次に、ストリーム生成部5は、量子化部3で作成された割当情報に基づいて、フレーム番号jのフレームのメインデータ領域の容量A分のmain_dataを順次、蓄積部7から取り出して、メインデータ領域に配置し、フレームを生成する。ストリーム生成部5は、メインデータ領域内に空き領域が発生した場合には、空き部分をゼロ値で埋める(ゼロパディング)(ステップS204)。
【0038】
次に、フレーム番号jがインクリメントされて(ステップS205)、ステップS202からの処理が繰り返される。
【0039】
(ストリームの例)
図4は、第1の実施形態のオーディオ符号化装置によって生成されるストリームの例を表わす図である。
【0040】
図4は、周期Dが「3」の場合の例を表わす。
フレーム1、4、7では、main_data_beginが「0」に設定されている。
【0041】
フレーム1のメインデータ領域には、main_data(1)のすべてのデータが配置され、メインデータ領域の残りには、後続のmain_data(2)のすべてのデータと、main_data(3)の一部のデータが配置される。この例では、main_data(2)のすべてのデータとmain_data(3)の一部のデータの配置は、上限値を超えないという制約を満たしているものとする。
【0042】
フレーム2のメインデータ領域には、main_data(3)の一部のデータが配置される。この例では、main_data(3)の一部のデータの配置は、上限値を超えないという制約を満たしているものとする。
【0043】
フレーム3のメインデータ領域には、main_data(3)の一部のデータが配置される。フレーム3のメインデータ領域の空き領域がゼロパディングされる。
【0044】
フレーム4のメインデータ領域には、main_data(4)のすべてのデータが配置され、メインデータ領域の残りには、後続のmain_data(5)のすべてのデータと、main_data(6)の一部のデータが配置される。この例では、main_data(5)のすべてのデータとmain_data(6)の一部のデータの配置は、上限値を超えないという制約を満たしているものとする。
【0045】
フレーム5のメインデータ領域には、main_data(6)の一部のデータが配置される。この例では、main_data(6)の一部のデータの配置は、上限値を超えないという制約を満たしているものとする。
【0046】
フレーム6のメインデータ領域には、main_data(6)の一部のデータが配置される。フレーム6のメインデータ領域の空き領域がゼロパディングされる。
【0047】
フレーム7のメインデータ領域には、main_data(7)のすべてのデータが配置され、メインデータ領域の残りには、後続のmain_data(8)のすべてのデータと、main_data(9)の一部のデータが配置される。この例では、main_data(8)のすべてのデータとmain_data(9)の一部のデータの配置は、上限値を超えないという制約を満たしているものとする。
【0048】
フレーム8のメインデータ領域には、main_data(9)の一部のデータが配置される。この例では、main_data(9)の一部のデータの配置は、上限値を超えないという制約を満たしているものとする。
【0049】
フレーム9のメインデータ領域には、main_data(9)の一部のデータが配置される。フレーム9のメインデータ領域の空き領域がゼロパディングされる。
【0050】
以上のように、本実施の形態によれば、一定周期ごとにmain_data_beginが0になるフレームを設けることによって、早送り再生後に、再生不可能な状態に陥ることを回避できる。
【0051】
なお、本実施の形態では、
図2のステップS109で蓄積部7が空になるのを待つこととしたが、これに限定するものではない。蓄積部7が空になるのを待たずに、蓄積を継続し、i%D=0になったときに、蓄積部7内のデータをクリアし、その後、再度量子化されたデータを蓄積するものとしてもよい。
【0052】
[第2の実施形態]
図5は、第2の実施形態のオーディオ符号化装置の構成を表わす図である。
【0053】
図5を参照して、このオーディオ符号化装置21は、第1の実施形態のオーディオ符号化装置1の構成に加えて、中間バッファ14を備える。
【0054】
第1の実施形態では、ストリーム生成部5は、メインデータ領域内のオーディオデータが配置されない空き領域をゼロ値で埋める(ゼロパディング)こととした。
【0055】
これに対して、本実施の形態では、量子化部13は、メインデータ領域に空き領域が発生しないように、オーディオデータの量子化スケールを調整する。このような調整のために中間バッファ14が用いられる。
【0056】
また、本実施の形態では、量子化部13は、ストリームのフレームをフレーム群に分割する。量子化部13は、フレーム群に含まれるフレーム数は一定ではなく、1つのフレーム群の先頭のフレームを所定のフレームとして設定する。
【0057】
量子化部13は、直前のフレーム群の最後のフレームの次のフレームである第1のフレームを起点として後続のフレームを順番に選択し、フレーム内のメインデータ領域の容量Aと選択したフレームに含まれるヘッダと関連する量子化されたオーディオデータの容量との差分を求める。
【0058】
量子化部13は、この順次選択によって、差分の合計値が予め設定された蓄積許容容量を超えることになるフレーム、または所定個数選択後の次のフレームを次のフレーム群に存在する所定のフレーム(先頭フレーム)とする。
【0059】
量子化部13は、所定のフレームの直前のフレームを第2のフレームとして特定し、第1のフレームから第2のフレームまでを現在のフレーム群として設定する。
【0060】
図6および
図7は、第2の実施形態のオーディオ符号化装置のフィルタ処理部および量子化部による1つのフレーム群の処理手順を表わすフローチャートである。
【0061】
まず、量子化部13は、直前のフレーム群の最後のオーディオデータ番号LNに1を加算した値をオーディオデータ番号iに設定し、S1を0に設定する(ステップS301)。
【0062】
次に、オーディオデータの入力がある場合には(ステップS302でYES)、オーディオデータ番号iのオーディオデータがフィルタ処理部2に入力される(ステップS303)。
【0063】
次に、フィルタ処理部2では、フィルタ処理を実行し(ステップS304)、処理結果を中間バッファ14に蓄積する(ステップS305)。
【0064】
次に、量子化部13は、中間バッファ14からデータを取り出して量子化を実行する(ステップS306)。
【0065】
次に、量子化部13は、量子化によって得られたデータをmain_data(i)として蓄積部7に保存する(ステップS307)。
【0066】
次に、量子化部13は、main_data(i)のデータ量をデータ量B(i)に設定する(ステップS308)。
【0067】
次に、量子化部13は、メインデータ領域の容量AからB(i)の値を減算した値を差分値C(i)に設定する(ステップS309)。
【0068】
次に、量子化部13は、差分合計値S1に直前のステップS309で得られた差分値C(i)を加算する(ステップS310)。
【0069】
(i−LN)を周期Dで除算した余りが「0」でなく(ステップS311でNO)、かつ差分合計値S1が予め設定された蓄積許容容量T未満の場合(ステップS312でNO)、オーディオデータ番号iがインクリメントされて(ステップS313)、ステップS302からの処理が繰返される。
【0070】
量子化部13は、(i−LN)を周期Dで除算した余りが「0」の場合(ステップS311でYES)、または次のオーディオデータの入力がない場合(ステップS302でNO)には、変数Mにiの値を設定する(ステップS314)。
【0071】
量子化部13は、差分合計値S1が予め設定された蓄積許容容量Tを超える場合(ステップS312でYES)、変数(M+1)にiの値を設定する(ステップS315)。
【0072】
ここで、量子化部13は、この順次選択によって、差分の合計値があらかじめ設定された蓄積許容容量を超えることになるフレームの判定をなくし、所定個数選択後の次のフレームを次のフレーム群に存在する所定のフレーム(先頭フレーム)とするといった構成にしてもよい。
【0073】
次に、量子化部13は、フレーム番号が(M+1)のフレームを次のフレーム群の先頭のフレーム(第1のフレーム)とし、フレーム番号がMのフレームを第2のフレームとして設定する。量子化部13は、現在のフレーム群をフレーム番号が(LN+1)〜Mのフレームに決定する。すなわち、第1のフレームから第2のフレームまでが現在のフレーム群に属すると設定される(ステップS316)。
【0074】
次に、量子化部13は、差分値C(LN+1)+・・・+C(M)を新たな差分値の情報をS2に設定する(ステップS317)。
【0075】
次に、量子化部13は、蓄積部7をクリアする(ステップS318)。
次に、LNに1を加算した値がオーディオデータ番号iに設定される(ステップS319)。
【0076】
次に、量子化部13は、中間バッファ14からフィルタ処理された第i番目のオーディオデータを取り出して、再量子化する。第1の実施形態と同様に、量子化部13は、オーディオデータ番号iを周期Dで除算した余りが「1」の場合には、量子化されたデータ量がフレーム番号iのフレーム内のメインデータ領域の容量Aを超えないように、量子化スケールを調整することによって量子化する。また、量子化部13は、オーディオデータ番号iを周期Dで除算した余りが「1」でない場合には、量子化されたデータ量がフレーム番号iのフレーム内のメインデータ領域の容量Aと、フレーム番号iのフレームに先行する1個以上の所定のフレーム内のメインデータ領域内の空き領域の和と所定の上限値のうちの小さい方Bとの合計(A+B)を超えないように、量子化スケールを調整することによって量子化する。例えば、差分値C(i+1)が正で差分値C(i)が負の場合、i番目に使用できる容量Bの量を、上限値を超えない範囲で増加し、その増加分をi+1番目では減らす。あるいは、オーディオデータ番号LN+1からMまで、差分値Cの値に応じて、負がなくなる、もしくは、負の部分に正の分を全て回すようにフレーム番号に対応した容量Bを制御する。ここで、1個以上の所定のフレームとは、フレーム番号を周期Dで除算した余りが「1」であり、かつフレーム番号(i−D)〜フレーム番号(i−1)のフレームである。さらに、第2の実施形態では、量子化部13は、第1の実施形態で説明したような空き領域が発生しないように、差分合計値S2に基づいて、量子化スケールを調整することによって、再量子化する(ステップS320)。
【0077】
次に、量子化部13は、再量子化されたオーディオデータをmain_data(i)として蓄積部7に保存する(ステップS321)。
【0078】
次に、量子化部13は、main_data(i)についてのヘッダおよび付加情報を生成して、ストリーム生成部15に通知する。ここで、量子化部13は、iが(LN+1)の場合には、付加情報の一部であるmain_data_begin(j)を「0」に設定し、iが(LN+1)でない場合には、ストリーム内のフレーム番号iのフレームの先頭とmain_data(i)の先頭位置の間の長さ(付加情報およびヘッダを除く)を付加情報の一部であるmain_data_begin(i)の値に設定する。また、量子化部13は、main_data(i)のデータのうち、フレーム番号iのフレームに先行する各フレームにどれだけのデータを配置するかの情報(割当情報)もストリーム生成部15に通知する(ステップS322)。
【0079】
オーディオデータ番号iがMとなるまで(ステップS323でYES)、オーディオデータ番号iがインクリメントされて(ステップS324)、ステップS320からの処理が繰り返される。
【0080】
図8は、第2の実施形態のオーディオ符号化装置のストリーム生成部による1つのフレーム群の処理手順を表わすフローチャートである。
【0081】
まず、ストリーム生成部15は、直前のフレーム群の最後のオーディオデータ番号LNに1を加算した値をフレーム番号jに設定する。フレーム番号が(LN+1)のフレームを第1のフレームとする(ステップS401)。
【0082】
次に、ストリーム生成部15は、量子化部13で作成されたmain_data(i)についてのヘッダをフレーム番号jのフレームのヘッダ領域に配置する(ステップS402)。
【0083】
次に、ストリーム生成部15は、量子化部13で作成されたmain_data(i)についての付加情報をフレーム番号jのフレームの付加情報領域に配置する(ステップS403)。
【0084】
次に、ストリーム生成部15は、フレーム番号jのフレームのメインデータ領域の容量A分のmain_dataを蓄積部7から取り出して、メインデータ領域に配置する(ステップS404)。
【0085】
その後、フレーム番号jがインクリメントされて(ステップS406)、ステップS402からの処理が繰返される。
【0086】
(ストリームの例)
図9は、第2の実施形態のオーディオ符号化装置によって生成されるストリームの例を表わす図である。
【0087】
第1の実施形態では、
図4に示すように、フレーム3、6、9がゼロパディングされていたのに対して、本実施の形態では、メインデータ領域に空き領域が発生しないように、オーディオデータの量子化スケールを調整するので、
図9に示すように、ゼロパディングされるフレームが存在しない。
【0088】
以上のように、本実施の形態によれば
、main_data_beginが0になるフレームの直前のフレームの空き領域が発生するのを防止することによって、オーディオの品質を高くするとができる。
【0089】
[第2の実施形態の変形例]
本変形例では、量子化部13は、直前のフレーム群の最後のフレームの次のフレームである第1のフレームおよび後続の所定個数の複数のフレームのうち、フレームに含まれるヘッダと関連する量子化されたオーディオデータの容量が最小となるフレームを次のフレーム群に存在する所定のフレームとして設定する。量子化部13は、所定のフレームの直前のフレームを第2のフレームとして特定し、第1のフレームから第2のフレームまでを現在のフレーム群として設定する。
【0090】
図10および
図11は、第2の実施形態の変形例のオーディオ符号化装置のフィルタ処理部および量子化部による1つのフレーム群の処理手順を表わすフローチャートである。
【0091】
まず、量子化部13は、直前のフレーム群の最後のオーディオデータ番号LNに1を加算した値をオーディオデータ番号iに設定し、S1を0に設定する(ステップS501)。
【0092】
次に、オーディオデータの入力がある場合には(ステップS502でYES)、オーディオデータ番号iのオーディオデータがフィルタ処理部2に入力される(ステップS503)。
【0093】
次に、フィルタ処理部2では、フィルタ処理を実行し(ステップS504)、処理結果を中間バッファ14に蓄積する(ステップS505)。
【0094】
次に、量子化部13は、中間バッファ14からデータを取り出して量子化を実行する(ステップS506)。
【0095】
次に、量子化部13は、量子化によって得られたデータをmain_data(i)として蓄積部7に保存する(ステップS507)。
【0096】
次に、量子化部13は、main_data(i)のデータ量をデータ量B(i)に設定する(ステップS508)。
【0097】
次に、量子化部13は、メインデータ領域の容量AからB(i)の値を減算した値を差分値C(i)に設定する(ステップS509)。
【0098】
次に、量子化部13は、差分合計値S1に直前のステップS509で得られた差分値C(i)を加算する(ステップS510)。
【0099】
(i−LN)を周期Dで除算した余りが「0」でなく(ステップS511でNO)、かつ差分合計値S1が蓄積部4の容量T未満の場合(ステップS512でNO)、オーディオデータ番号iがインクリメントされて(ステップS513)、ステップS502からの処理が繰返される。
【0100】
量子化部13は、(i−LN)を周期Dで除算した余りが「0」の場合(ステップS511でYES)、または、次のオーディオデータの入力がない場合(ステップS502でNO)、または差分合計値S1が蓄積部4の容量Tを超える場合(ステップS512でYES)、C(k)(k=LN+1〜i)のうちの最大のkを特定して、特定した最大のkを変数(M+1)の値に設定する(ステップS514)。
【0101】
量子化部13は、フレーム番号が(M+1)のフレームを次のフレーム群の先頭のフレーム(第1のフレーム)とし、フレーム番号がMのフレームを第2のフレームとして設定する。量子化部13は、現在のフレーム群をフレーム番号が(LN+1)〜Mのフレームに決定する。すなわち、第1のフレームから第2のフレームまでが現在のフレーム群に属すると設定される(ステップS515)。
【0102】
次に、量子化部13は、差分値C(LN+1)+・・・+C(M)を新たな差分値の情報をS2に設定する(ステップS517)。
【0103】
次に、量子化部13は、蓄積部7をクリアする(ステップS518)。
次に、LNに1を加算した値がオーディオデータ番号iに設定される(ステップS519)。
【0104】
次に、量子化部13は、中間バッファ14からフィルタ処理された第i番目のオーディオデータを取り出して、再量子化する。第1の実施形態と同様に、量子化部13は、オーディオデータ番号iを周期Dで除算した余りが「1」の場合には、量子化されたデータ量がフレーム番号iのフレーム内のメインデータ領域の容量Aを超えないように、量子化スケールを調整することによって量子化する。また、量子化部13は、オーディオデータ番号iを周期Dで除算した余りが「1」でない場合には、量子化されたデータ量がフレーム番号iのフレーム内のメインデータ領域の容量Aと、フレーム番号iのフレームに先行する1個以上の所定のフレーム内のメインデータ領域内の空き領域の和と所定の上限値のうちの小さい方Bとの合計(A+B)を超えないように、量子化スケールを調整することによって量子化する。例えば、差分値C(i+1)が正で差分値C(i)が負の場合、i番目に使用できる容量Bの量を、上限値を超えない範囲で増加し、その増加分をi+1番目では減らす。あるいは、オーディオデータ番号LN+1からMまで、差分値Cの値に応じて、負がなくなる、もしくは、負の部分に正の分を全て回すようにフレーム番号に対応した容量Bを制御する。ここで、1個以上の所定のフレームとは、フレーム番号を周期Dで除算した余りが「1」であり、かつフレーム番号(i−D)〜フレーム番号(i−1)のフレームである。さらに、本変形例では、量子化部13は、第1の実施形態で説明したような空き領域が発生しないように、差分合計値S2に基づいて、量子化スケールを調整することによって、再量子化する(ステップS520)。
【0105】
次に、量子化部13は、再量子化されたオーディオデータをmain_data(i)として蓄積部7に保存する(ステップS521)。
【0106】
次に、量子化部13は、main_data(i)についてのヘッダおよび付加情報を生成して、ストリーム生成部15に通知する。ここで、量子化部13は、iが(LN+1)の場合には、付加情報の一部であるmain_data_begin(j)を「0」に設定し、iが(LN+1)でない場合には、ストリーム内のフレーム番号iのフレームの先頭とmain_data(i)の先頭位置の間の長さ(付加情報およびヘッダを除く)を付加情報の一部であるmain_data_begin(i)の値に設定する。また、量子化部13は、main_data(i)のデータのうち、フレーム番号iのフレームに先行する各フレームにどれだけのデータを配置するかの情報(割当情報)もストリーム生成部15に通知する(ステップS522)。
【0107】
オーディオデータ番号iがMとなるまで(ステップS523でYES)、オーディオデータ番号iがインクリメントされて(ステップS524)、ステップS520からの処理が繰り返される。
【0108】
本変形例のオーディオ符号化装置のストリーム生成部15による1つのフレーム群の処理手順は、第2の実施形態と同様なので、説明を繰り返さない。
【0109】
[第3の実施形態]
第3の実施形態が、第1の実施形態と相違する点は、量子化部3である。
【0110】
第1の実施形態では、量子化部3は、一定周期ごとに存在するフレームについては、固定長のメインデータ領域の容量Aを超えないように、量子化スケールを調整することによって、対応のオーディオデータを量子化した。
【0111】
これに対して、本実施の形態では、量子化部3は、一定周期ごとに存在するフレームについては、メインデータ領域のデフォルト容量Aを超えないように量子化スケールを調整する代わりに、メインデータ領域の大きさを可変、すなわちフレームのサイズを可変とする。これによって、オーディオデータの量子化後のデータ量がデフォルト容量Aを超えた場合でも、メインデータ領域の大きさが増加するので、このフレームにオーディオデータの量子化後のデータを収容することができる。
【0112】
図12は、第
3の実施形態のオーディオ符号化装置のフィルタ処理部および量子化部の動作手順を表わすフローチャートである。
【0113】
図12を参照して、まず、オーディオデータ番号iが「1」に設定される(ステップS601)。
【0114】
次に、オーディオデータ番号iのオーディオデータがフィルタ処理部2に入力される(ステップS602)。
【0115】
次に、フィルタ処理部2では、フィルタ処理を実行する(ステップS603)。
次に、量子化部3は、フィルタ処理されたオーディオデータを量子化する。具体的には、オーディオデータ番号iを周期Dで除算した余りが「1」の場合には、量子化部3は、量子化されたデータ量がフレーム番号iのフレーム内のメインデータ領域の容量Aを超えるかを気にすることなく量子化する。一方、オーディオデータ番号iを周期Dで除算した余りが「1」でない場合には、量子化部3は、量子化されたデータ量がフレーム番号iのフレーム内のメインデータ領域の容量Aと、フレーム番号iのフレームに先行する1個以上の所定のフレーム内のメインデータ領域内の空き領域の和と所定の上限値のうちの小さい方Bとの合計(A+B)を超えないように、量子化スケールを調整することによって量子化する。ここで、1個以上の所定のフレームとは、フレーム番号を周期Dで除算した余りが「1」であり、かつフレーム番号(i−D)〜フレーム番号(i−1)のフレームである(ステップS604)。
【0116】
次に、量子化部3は、量子化されたオーディオデータをmain_data(i)として蓄積部7に保存する(ステップS605)。
【0117】
次に、量子化部3は、main_data(i)についてのヘッダおよび付加情報を生成して、ストリーム生成部5に通知する。ここで、量子化部3は、オーディオデータ番号iを周期Dで除算した余りが「1」の場合には、付加情報の一部であるmain_data_begin(j)を「0」に設定し、オーディオデータ番号iを周期Dで除算した余りが「1」でない場合には、ストリーム内のフレーム番号iのフレームの先頭とmain_data(i)の先頭位置の間の長さ(付加情報およびヘッダを除く)を付加情報の一部であるmain_data_begin(i)の値に設定する。また、量子化部3は、main_data(i)のデータのうち、フレーム番号iのフレームに先行する各フレームにどれだけのデータを配置するかの情報(割当情報)もストリーム生成部5に通知する(ステップ606)。
【0118】
次に、オーディオデータ番号iを周期Dで除算した余りが「0」の場合には(ステップS607でYES)、ストリーム生成部5での消費によって蓄積部7が空になるのを待ってから(ステップS609)、オーディオデータ番号iがインクリメントされて(ステップS608)、ステップS602からの処理が繰返される。
【0119】
一方、オーディオデータ番号iを周期Dで除算した余りが「0」でない場合には(ステップS607でNO)、蓄積部7が空になるのを待つことなく、オーディオデータ番号iがインクリメントされて(ステップS608)、ステップS602からの処理が繰返される。
【0120】
図13は、第3の実施形態のオーディオ符号化装置のストリーム生成部5の動作手順を表わすフローチャートである。
【0121】
まず、フレーム番号jが「1」に設定される(ステップS701)。
次に、ストリーム生成部5は、量子化部3で作成されたmain_data(j)についてのヘッダをフレーム番号jのフレームのヘッダ領域に配置する(ステップS702)。
【0122】
次に、ストリーム生成部5は、量子化部3で作成されたmain_data(j)についての付加情報をフレーム番号jのフレームの付加情報領域に配置する(ステップS703)。
【0123】
次に、ストリーム生成部5は、量子化部3で作成された割当情報に基づいて、フレーム番号jのフレームのメインデータ領域の容量A分のmain_dataを蓄積部7から取り出して、メインデータ領域に配置する。ストリーム生成部5は、フレーム番号jを周期Dで除算した余りが「1」のフレームについては、フレームのサイズをmain_data(j)の大きさだけのメインデータ領域を有するようなサイズに拡張または縮小する。また、ストリーム生成部5は、フレーム番号jを周期Dで除算した余りが「1」のフレームについては、フレームサイズを固定とするとともに、メインデータ領域内に空き領域が発生した場合には、空き部分をゼロ値で埋める(ゼロパディング)(ステップS704)。
【0124】
次に、フレーム番号jがインクリメントされて(ステップS705)、ステップS702からの処理が繰り返される。
【0125】
(ストリームの例)
図14は、第3の実施形態のオーディオ符号化装置によって生成されるストリームの例を表わす図である。
【0126】
図14に示すように、周期Dが「3」の場合の例を表わす。
フレーム1では、main_data(1)のデータ量がメインデータ領域のデフォルト容量Aを超えないため、フレーム長がデフォルトのまま変化せず、デフォルト容量Aのメインデータ領域にmain_data(1)が配置され、残りのメインデータ領域にmain_data(2)以降のデータが配置される。
【0127】
一方、フレーム4では、main_data(4)のデータ量がメインデータ領域のデフォルト容量Aを超えるため、フレーム長がデフォルトから拡張され、拡大したメインデータ領域にmain_data(4)のデータが配置される。
【0128】
また、フレーム7では、main_data(7)のデータ量がメインデータ領域のデフォルト容量Aを超えるため、フレーム長がデフォルトから拡張され、拡大したメインデータ領域にmain_data(7)のデータが配置される。
【0129】
以上のように、本実施の形態では、main_data_beginが0になるフレームの長さを可変にすることによって、このフレームのオーディオデータの品質が落ちるのを防止することができる。
【0130】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。