AACオーディオの基本的な知識とコードストリーム分析
目次
- AACの紹介
- AAC仕様の紹介
- AACの機能
- AACオーディオファイル形式
- AAC要素情報
- AACファイル処理フロー
- AACデコードプロセス
- テクニカル分析
1.AACの紹介
-
AACはAdvancedAudio Codingの略で、1997年に登場し、もともとはMPEG-2に基づくオーディオコーディング技術でした。フラウンホーファーIIS、ドルビーラボラトリーズ、AT&T、ソニー、その他の企業が共同で開発し、MP3形式に取って代わりました。2000年、MPEG-4規格の登場後、AACはその特性を再統合し、SBRテクノロジーとPSテクノロジーを追加しました。従来のMPEG-2 AACと区別するために、MPEG-4AACとも呼ばれます。
-
AACは、新世代のオーディオ不可逆圧縮テクノロジです。いくつかの追加のコーディング手法(PS、SBRなど)を使用して、LC-AAC、HE-AAC、およびHE-AACv2の3つの主要なエンコーディングを導出します。LC-AACは従来のAACと比較すると、比較的言えば、主に中および高コードレート(> = 80Kbps)に使用され、HE-AAC(AAC + SBRと同等)は主に中および低コード(<= 80Kbps)に使用されます。新しく発売されたHE-AACv2(AAC + SBR + PSと同等)は主に低ビットレート(<= 48Kbps)に使用され、実際、ほとんどのエンコーダーはPSテクノロジーを自動的に有効にするために<= 48Kbpsに設定され、PSなしでは> 48Kbpsに設定されます、通常のHE-AACと同等です。
-
ビデオプレーヤーのオーディオストリームの位置を以下に示します。
2.AAC仕様の概要
-
AACには、さまざまな場面のニーズに対応するために合計9つの仕様があります。現在、最も使用されているのはLCとHE(低ビットレートに適しています)です。
- MPEG-4 AAC LC低複雑度仕様(低複雑度)------現在携帯電話でより一般的になっているMP4ファイル。
- MPEG-4 AAC HE高効率仕様(高効率)-この仕様は、NeroACCエンコーダーでサポートされている低ビットレートエンコーディングに適しています
-
人気のNeroAACエンコーディングプログラムは、LC、HE、HEv2の3つの仕様のみをサポートしています。エンコードされたAACオーディオの仕様はすべてLCです。HEは実際にはAAC(LC)+ SBRテクノロジーであり、HEv2はAAC(LC)+ SBR + PSテクノロジーです。
-
HE:「高効率」(高効率)。HE-AAC v1(AACPlusV1、SBRとも呼ばれます)は、コンテナー方式を使用してAAC(LC)+ SBRテクノロジーを実装します。SBRは、実際にはSpectral Band Replication(スペクトルバンドレプリケーション)の略です。簡単に言えば、音楽の主な周波数スペクトルは低周波数範囲に集中しており、高周波数範囲は非常に狭いですが、音質を決定する重要な要素です。周波数帯域全体がエンコードされている場合、高周波を保護するためには、低周波数のエンコードが詳細になりすぎてファイルが巨大になります。低周波数の主成分が保持され、高周波成分が失われると、音質が失われます。SBRは周波数スペクトルをカットします。低周波数は主要コンポーネントを保存するために個別にコード化され、高周波数は音質を保存するために個別に増幅およびコード化されます。「すべての側面を調整および処理」します。また、音質も保存します。ファイルサイズを縮小しながら、この矛盾を完全に解決します。
-
HEv2:コンテナ方式には、HE-AACv1およびPSテクノロジーが含まれます。PSは「パラメトリックステレオ」の略です。元のステレオファイルのファイルサイズは、チャンネルの2倍です。ただし、2つのチャネルのサウンドには一定の類似性があります。シャノンエントロピーコーディング定理によれば、ファイルサイズを小さくするには、相関関係を削除する必要があります。したがって、PSテクノロジは、1つのチャネルのすべての情報を格納し、数バイトを費やして、他のチャネルとそのパラメータとの違いを記述します。
3.AACの機能
-
AACは、高い圧縮率のオーディオ圧縮アルゴリズムですが、その圧縮率は、AC-3、MP3などの古いオーディオ圧縮アルゴリズムの圧縮率をはるかに上回っています。また、その品質は非圧縮CDサウンドの品質に匹敵します。
-
他の同様のオーディオコーディングアルゴリズムと同様に、AACも変換コーディングアルゴリズムを使用しますが、AACはより高い解像度のフィルターバンクを使用するため、より高い圧縮率を実現できます。
-
AACは、一時的なノイズの再配置、後方適応線形予測、ジョイントステレオ技術、量子化ハフマンコーディングなどの最新技術を使用しており、これらの新しい技術を使用することで、圧縮率がさらに向上しています。
-
AACは、より多くの種類のサンプルレートとビットレートをサポートし、1〜48のオーディオトラックをサポートし、最大15の低周波オーディオトラックをサポートし、多言語互換性があり、最大15の埋め込みデータストリームを備えています。
-
AACは、最大96kHzから最低8KHzまでの幅広いサウンド周波数をサポートします。これは、MP3の16KHz〜48kHzの範囲よりもはるかに広い範囲です。
-
MP3やWMAとは異なり、AACはサウンド周波数の非常に高い周波数成分と非常に低い周波数成分をほとんど失うことはなく、WMAよりもスペクトル構造の元のオーディオに近いため、サウンドの忠実度が高くなります。専門家による評価では、AACはWMAよりもクリアなサウンドであり、元のサウンドに近いことが示されています。
-
AACは、最適化されたアルゴリズムを使用して、より高いデコード効率を実現し、デコード中の処理能力を削減します。
4.AACオーディオファイル形式
1. AACのオーディオファイル形式には、ADIFとADTSがあります。
- ADIF:オーディオデータ交換フォーマットオーディオデータ交換フォーマット。この形式の特徴は、オーディオデータストリームの途中でデコードを開始する必要なしに、オーディオデータの先頭を決定論的に見つけることができることです。つまり、そのデコードは明確に定義された先頭で実行する必要があります。したがって、この形式はディスクファイルで一般的に使用されます。
- AACのADIF形式を以下に示します。
- ** ADTS:オーディオデータトランスポートストリーム。**このフォーマットの特徴は、同期ワードを含むビットストリームであり、デコードはこのストリームの任意の位置から開始できることです。その特性は、mp3データストリーム形式に似ています。
- 簡単に言えば、ADTSは任意のフレームでデコードできます。つまり、すべてのフレームにヘッダー情報があります。ADIFには統合ヘッダーが1つしかないため、すべてのデータを取得した後でデコードする必要があります。また、これら2つのヘッダーの形式も異なります。現在、ADTS形式のオーディオストリームは通常、エンコードおよび抽出されます。
- AACベアストリームをエンコードすると、書き込まれたAACファイルをPCやコンピューターで再生できない場合があります。AACファイルのすべてのフレームにADTSヘッダー情報ファイルがない可能性があります。パッケージスプライシング。
- ヘッダーファイルADTSを追加するだけです。AACの元のデータブロックのサイズは可変です。元のフレームにADTSヘッダーを追加し、ADTSをカプセル化してADTSフレームを形成します。
- AACのADTSの一般的な形式を次の図に示します。
- この図は、ADTSの1フレームの簡潔な構造を示しており、両側の紫色の長方形は、1フレームの前後のデータを表しています。
2.ADIFおよびADTSヘッダー
1. ADIFヘッダー情報:
- ADIFヘッダー情報は、AACファイルの先頭にあり、その後に連続した生データブロックが続きます。
- ADIFヘッダー情報を構成するフィールドは次のとおりです。
2. AACオーディオファイルの各フレームは、ADTSヘッダーとAACオーディオデータで構成されています。構造は次のとおりです。
- 各フレームのADTSヘッダーファイルには、オーディオサンプリングレート、チャネル、フレーム長などの情報が含まれているため、デコーダーはそれを分析して読み取ることができます。
- 一般に、ADTSヘッダー情報は7バイトで、次の2つの部分に分かれています。
- adts_fixed_header();
- adts_variable_header();
- 1つは固定ヘッダー情報で、その後に可変ヘッダー情報が続きます。固定ヘッダー情報のデータはすべてのフレームで同じですが、可変ヘッダー情報はフレームごとに異なります
1. ADTSのヘッダー情報を修正しました:
- syncword:同期ヘッダーは常に0xFFFであり、すべてのビットは1である必要があります。これは、ADTSフレームの開始を表します。
- ID:MPEG識別子、MPEG-4の場合は0、MPEG-2の場合は1
- レイヤー:常に: '00'
- protected_absent:エラーコードがチェックされているかどうかを示します。警告、CRCがない場合は1に設定し、CRCがある場合は0に設定します
- プロファイル:01 Low Complexity(LC)-AAC LCなど、使用されているAACのレベルを示します。一部のコアはAACLCのみをサポートします
- MPEG-2AACでは3つのタイプが定義されています
- プロファイルの値は、オーディオオブジェクトタイプの値から1を引いた値に等しく、プロファイル= MPEG-4オーディオオブジェクトタイプ-1
- sample_frequency_index:Sampling Frequencies []配列でサンプリングレートの値を見つけるために、このサブスクリプトを介して使用されるサンプリングレートの添え字を示します。
- channel_configuration:ステレオデュアルチャネルの場合は2など、チャネル数を示します
0: Defined in AOT Specifc Config
1: 1 channel: front-center
2: 2 channels: front-left, front-right
3: 3 channels: front-center, front-left, front-right
4: 4 channels: front-center, front-left, front-right, back-center
5: 5 channels: front-center, front-left, front-right, back-left, backright
6: 6 channels: front-center, front-left, front-right, back-left, backright, LFE-channel
7: 8 channels: front-center, front-left, front-right, side-left, side-right,back-left, back-right, LFE-channel
8-15: Reserved
2. ADTS変数ヘッダー情報:
- frame_length:ADTSフレームの長さには、ADTSヘッダーと元のAACストリームが含まれます。
フレーム長は、この値は、ヘッダ長の7つの又は9バイトを含める必要があります
aac_frame_length =(protection_absent == 1 7:9)+サイズ(AACFrame)
protection_absent = 0时、ヘッダ長= 9bytes
protection_absent = 1时、ヘッダ長= 7bytes
-
adts_buffer_fullness:0x7FFは、ビットレートが可変のストリームであることを意味します。
-
number_of_raw_data_blocks_in_frame:ADTSフレームにnumber_of_raw_data_blocks_in_frame + 1 AAC元のフレームがあることを意味します。したがって、number_of_raw_data_blocks_in_frame == 0は、ADTSフレームに1つのAACデータブロックがあることを意味します。
-
以下は、ADTSのAACファイル部分です。
-
最初のフレームのヘッダー7バイトは次のとおりです。0xFF0xF10x4C0x40 0x20 0xFF0xFC各キー値を分析します。
-
フレーム長を計算します。10進数00001000000111を10進数263に変換します。最初のフレームの長さが実際に263バイトであることに注意してください。計算方法:(フレームサイズは13ビット、unsigned intを使用してフレーム値を格納します)
unsigned int getFrameLength(unsigned char* str)
{
if ( !str )
{
return 0;
}
unsigned int len = 0;
int f_bit = str[3];
int m_bit = str[4];
int b_bit = str[5];
len += (b_bit>>5);
len += (m_bit<<3);
len += ((f_bit&3)<<11);
return len;
}
-
フレーム同期の目的は、ビットストリーム内のフレームヘッダーの位置を見つけることです。13818-7は、aacADTS形式のフレームヘッダー同期ワードが12ビットの「111111111111」であることを規定しています。
-
ADTSのヘッダー情報は2つの部分で構成され、1つは固定ヘッダー情報で、その後に可変ヘッダー情報が続きます。固定ヘッダー情報のデータはフレームごとに同じですが、可変ヘッダー情報はフレームごとに異なります。
5.AAC要素情報
1. AACでは、元のデータブロックの構成に7つの異なる要素が含まれる場合があります。
-
SCE:シングルチャネル要素。単一チャネル要素は、基本的に1つのICSのみで構成されます。元のデータブロックは、おそらく16個のSCEで構成されています。
-
CPE:チャネルペア要素2チャネル要素。サイド情報といくつかのジョイントステレオコーディング情報を共有する可能性のある2つのICSで構成されます。
-
CCE:カップリングチャネル要素カップリングチャネル要素。多言語プログラムのマルチチャネルジョイントステレオ情報またはダイアログ情報のブロックを表します。
-
LFE:低周波要素低周波要素。低サンプリング周波数を強化するチャネルが含まれています。
-
DSE:データストリーム要素データストリーム要素には、音声ではない追加情報が含まれています。
-
PCE:プログラム構成要素プログラム構成要素。チャネル構成情報が含まれています。ADIFヘッダー情報に表示される場合があります。
-
FIL:塗りつぶし要素塗りつぶし要素。いくつかの拡張情報が含まれています。SBR、ダイナミックレンジ制御情報など。
6.AACファイル処理フロー
-
ファイル形式を決定し、ADIFまたはADTSとして決定します
-
ADIFの場合は、ADIFヘッダー情報を解決し、手順6に進みます。
-
ADTSの場合は、同期ヘッダーを探します。
-
ADTSフレームヘッダー情報をデコードします。
-
エラー検出がある場合は、エラー検出を行ってください。
-
情報の非ブロック化。
-
ソリューション要素情報。
7.AACデコードプロセス
- メインコントロールモジュールが実行を開始した後、メインコントロールモジュールはAACビットストリームの一部を入力バッファに入れ、同期ワードを検索してフレームの開始を取得します。それを見つけた後、次の手順に従って続行します。 ISO / IEC 13818-7で説明されている構文ノイズレスデコーディング(ノイズレスデコーディング)、ノイズレスデコーディングは実際にはハフマンデコーディングであり、逆量子化(デクオンタイズ)、ジョイントステレオ(ジョイントステレオ)、知覚ノイズ置換(PNS)、瞬時ノイズシェーピング(TNS)を使用します。 、逆離散コサインこれらのモジュールを変換(IMDCT)および周波数帯域コピー(SBR)した後、左右のチャネルのPCMコードストリームを取得し、メインコントロールモジュールがそれらを出力バッファに入れてサウンド再生に出力します。端末。
8.テクニカル分析
1.メインコントロールモジュール:
- いわゆるメインコントロールモジュール、その主なタスクは、入力バッファと出力バッファを操作し、他のモジュールを呼び出して連携することです。
- その中で、入力バッファと出力バッファは、DSP制御モジュールによってインターフェイスを備えています。
- 出力バッファに保存されているデータは、音声の振幅を表すデコードされたPCMデータです。固定長バッファで構成されており、DSP制御モジュールのインターフェース機能を呼び出すことでヘッドポインタを取得し、出力バッファがいっぱいになると割り込み処理を呼び出してオーディオADCチップ(ステレオオーディオDACとステレオオーディオDAC)に出力します。 I2Sインターフェースに接続されたステレオオーディオDAC)DirectDriveヘッドフォンアンプ)アナログサウンドを出力します。
2.ノイズのないデコード:
- ノイズのないコーディングはハフマンコーディングであり、その機能は、スケールファクターと量子化スペクトルの冗長性をさらに減らすことです。つまり、スケールファクターと量子化スペクトル情報はハフマン符号化されます。
- グローバルゲインは8ビットの符号なし整数にコード化され、最初のスケールファクターとグローバルゲイン値は差分コード化され、次にスケールファクターコード化テーブルがハフマンコード化に使用されます。
- 後続のすべてのスケール係数は、前のスケール係数とは異なってコード化されます。
- 量子化されたスペクトルのノイズのないコーディングには、スペクトル係数の2つの区分があります。
- 1つは4タプルと2タプルの分割で、もう1つはセクション分割です。前の除算では、ハフマンテーブルで見つかった値が4であるか2であるかが決定されます。後者の区分では、どのハフマンテーブルを使用するかが決定され、1つのセクションには複数のスケールファクターバンドが含まれ、各セクションで1つのハフマンテーブルのみが使用されます。
2.1セグメンテーション
- ノイズのないコーディングは、入力1024量子化スペクトル係数をいくつかのセクションに分割します。セクションの各ポイントは同じハフマンテーブルを使用します。コーディング効率を考慮すると、各セクションの境界は同じスケール係数を持つのが最適です。境界は一致します。したがって、必要な各セグメントの送信情報には、セグメントの長さ、セグメントが配置されているスケールファクタバンド、および使用されるハフマンテーブルが含まれている必要があります。
2.2グループ化と交代
- グループ化とは、スペクトル係数が配置されているウィンドウを無視し、同じスケールファクターバンドを持つ連続スペクトル係数を1つのグループにグループ化し、スケールファクターを共有してコーディング効率を向上させることです。
- これを行うと、必然的に交互になります。つまり、係数の配置は元々c [group] [window] [scale factor band] [coefficient index]の順序であり、同じスケール係数の係数がまとめられます。c[ group] [Scale factor band] [window] [coefficient index]これにより、同じウィンドウの係数が交互になります。
2.3大規模な価値の処理
- AACで多数の値を処理する方法は2つあります:ハフマンコードテーブルのエスケープフラグを使用するか、パルスエスケープメソッドを使用します。
- 前者はmp3エンコーディング方法に似ています。多くの大規模な値が表示される場合は特別なハフマンテーブルを使用します。このテーブルは、その使用の後にエスケープ値のペアと値の記号が続くことを意味します。ハフマンコード。
- パルスエスケープ方式を使用する場合、大きな値が差の値から小さな値に減算され、次にハフマンテーブルがエンコードに使用され、続いてパルス構造が差の復元に役立ちます。
3.スケールファクターのデコードと逆量子化
-
AACコーディングでは、スペクトル係数の逆量子化は不均一量子化器によって実現され、その逆演算はデコードに必要です。つまり、サインを保持し、4/3電源操作を実行します。
-
周波数領域で量子化ノイズを調整する基本的な方法は、ノイズシェーピングにスケールファクターを使用することです。スケールファクターは、スケールファクター帯域のすべてのスペクトル係数を変更するために使用される振幅ゲイン値です。スケールファクターを使用するメカニズムは、不均一な量子化器を使用して、周波数領域での量子化ノイズのビット割り当てを変更することです。
3.1スケールファクターバンド
- 周波数線は、人間の耳の聴覚特性に応じて複数のグループに分けられ、各グループはいくつかのスケールファクターに対応します。これらのグループはスケールファクターバンドと呼ばれます。短いウィンドウを含むサイド情報を減らすために、連続する短いウィンドウをグループ化することができます。つまり、複数の短いウィンドウを1つのウィンドウとして一緒に送信し、グループ化されたすべてのウィンドウにスケール係数を適用します。
4.ジョイントステレオ
- ジョイントステレオは、元のサンプルに対して特定のレンダリング作業を実行して、サウンドをより「サウンド」にすることです。
5.知覚ノイズ置換(PNS)
-
知覚ノイズ置換モジュールは、パラメータエンコーディングによってノイズをシミュレートするモジュールです。オーディオ値のノイズを区別した後、ノイズは量子化およびエンコードされませんが、いくつかのパラメーターを使用して、これが特定の種類のノイズであることをデコーダーに通知し、デコーダーはランダムエンコードを使用してノイズを作成しますこのタイプノイズの。
-
特定の動作に関して、PNSモジュールは各スケールファクター帯域で4kHz未満の周波数の信号成分を検出します。この信号がピッチでも時間の強いエネルギー変化でもない場合、それはノイズ信号と見なされます。信号のピッチとエネルギーの変化は、音響心理学モデルで計算されます。
-
デコード時に、ハフマン表13(NOISE_HCB)が使用されていることが判明した場合は、PNSが使用されていることを示します。M / SステレオデコードとPNSデコードは相互に排他的であるため、パラメーターms_usedを使用して、両方のチャネルが同じPNSを使用するかどうかを示すことができます。ms_usedパラメータが1の場合、2つのチャネルは同じランダムベクトルを使用してノイズ信号を生成します。PNSのエネルギー信号はnoise_nrgで表されます。PNSを使用すると、それぞれのスケール係数の代わりにエネルギー信号が送信されます。ノイズエネルギーコーディングは、差分コーディング方式を使用して、スケールファクターと同じです。最初の値はグローバルゲイン値でもあります。強度ステレオ位置値およびスケールファクターと交互に配置されますが、差分デコードでは無視されます。つまり、次のノイズエネルギー値と前のノイズエネルギー値は、標準の差動デコードの強度ステレオ位置またはスケールファクターではありません。ランダムエネルギーは、スケールファクターバンドでnoise_nrgによって計算された平均エネルギー分布を生成します。このテクノロジーは、MPEG-4AACでのみ使用されます。
6.トランジェントノイズシェーピング(TNS)
-
この魔法の手法は、周波数領域での予測を通じて、時間領域での量子化ノイズの分布を変更できます。いくつかの特別な音声の量子化と劇的に変化する信号において、TNSテクノロジーは音質の向上に大きく貢献しています!
-
TNSトランジェントノイズシェーピングは、変換ウィンドウ内のトランジェントノイズシェーピングを制御するために使用されます。これは、単一チャネルのフィルタリングプロセスによって実現されます。従来の変換符号化方式では、時間領域の信号、特に音声信号が大幅に変化するという問題が発生することがよくあります。この問題は、量子化されたノイズ分布が周波数領域で制御されているにもかかわらず、時間領域で定数として分布しているためです。 。変換ブロック内。このブロックの信号が大幅に変化するが、短いブロックにはならない場合、この一定のノイズ分布が聞こえます。
-
TNSの原理は、時間領域と周波数領域の二重性とLPC(Linear Predictive Coding)の時間-周波数対称性を利用します。つまり、一方の領域でのコーディングは、もう一方のドメインでの予測符号化と同等です。あるドメインでコーディングすると、別のドメインでの解像度を上げることができます。量子化ノイズは周波数領域で生成されるため、時間領域での分解能が低下するため、ここでは周波数領域で予測コーディングを行います。AACplusでは、AACプロファイルLCに基づいているため、TNSフィルターの次数は12次に制限されています。
7.逆離散コサイン変換(IMDCT)
- オーディオデータを周波数ドメインから時間ドメインに変換するプロセスは、主に周波数ドメインデータを一連のIMDCTフィルターに入力することによって実現されます。IMDCT変換後、出力値がウィンドウ化されて重ね合わされ、最後に時間領域値が取得されます。
8.周波数帯複製(SBR)
- 簡単に言えば、音楽の主な周波数スペクトルは低周波数帯域に集中しており、高周波数帯域の振幅は小さいですが、音質を決定する重要な要素です。
- 周波数帯域全体がエンコードされている場合、高周波を保護するためには、低周波数のエンコードが詳細になりすぎてファイルが巨大になります。低周波数の主成分が保持され、高周波成分が失われると、音質が失われます。
- SBRは周波数スペクトルをカットします。低周波数は主要コンポーネントを保存するために個別にコード化され、高周波数は音質を保存するために個別に増幅およびコード化されます。「すべての側面を調整および処理」します。また、音質も保存します。ファイルサイズを縮小しながら、この矛盾を完全に解決します。
9.パラメトリックステレオ(PS)
- 以前のステレオファイルの場合、ファイルサイズはモノラルの2倍ですが、2つのチャネルのサウンドにはいくつかの類似点があります。シャノン情報エントロピーコーディング定理によれば、ファイルサイズを小さくするには、相関関係を削除する必要があります。したがって、PSテクノロジは、1つのチャネルのすべての情報を格納し、数バイトをパラメータとして使用して、別のチャネルとそのチャネルの違いを記述します。
参考ブログ:AACファイル形式分析