ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Vorbis デコーダー

この例では、Vorbis デコーダーの実装方法を示します。Vorbis デコーダーは MP3 標準に代わるオープン ソースのフリーウェアです。このオーディオ デコード形式は、ネットワーク伝送を行うための小さいパケットへのエンコード データのセグメント化をサポートします。

Vorbis の基本情報

Vorbis エンコード形式 [1] は、一般に MP3 として知られる MPEG-1 Audio Layer 3 と類似するオープン ソースの非可逆音声圧縮アルゴリズムです。Vorbis には MP3 と同様の多くの機能があるだけでなく、柔軟性と機能性が向上しています。

エンコードは元の信号のフレーム化から開始されます。Vorbis では、異なるサイズのフレームを使用できます。したがって、必要に応じて信号全体の周波数分解能を調整できます。MP3 とは異なり、Vorbis 形式ではサンプリング周波数やビット レートの厳密な指定はありません。ビット レートは、Vorbis と MP3 の信号全体を通して変化できます。

他の非可逆圧縮形式と同様に、Vorbis ではデータ フレームの変換が実行されます。エンコード段階で心理音響モデルが適用されます。このモデルは形式で指定されないため、音質を維持しながらモデルのデータ量を大幅に減らすのは、エンコード開発者の仕事です。

修正離散コサイン変換 (MDCT) [2] とその逆変換は、エネルギー集中が発生する変換領域に信号を変換するために Vorbis で使用されます。Vorbis エンコーダーは、フレームのスペクトル画像を "floor"(負の無限大方向の丸め) と呼ばれるラフな近似とその残りの "residue" (留数) に分割します。

Vorbis 形式の柔軟性は、さまざまな方法を使用して信号の floor 部分と residue 部分を表現およびエンコードできることから明らかです。それらのさまざまな方法を指定して、さまざまなフレームを異なる方法でコーディングするメカニズムとして、アルゴリズムでは "モード" を使用します。

Vorbis では、ハフマン コーディングを使用して、floor 部分と residue 部分に含まれるデータを圧縮します。この手順では、Vorbis のコーディングの効率は MP3 を上回ります。Vorbis では、MPEG-1 Audio Layer 3 の静的な確率モデルではなく、動的な確率モデルを使用します。具体的には、Vorbis は特定のオーディオ信号に対してカスタム コードブックを作成します。これは、"floor" 部分と "residue" 部分、およびフレームごとに異なる場合があります。

すべてのハフマン エンコードが完了すると、フレーム データは論理パケットにビット圧縮されます。Vorbis では、このような一連のパケットの前には常にヘッダーがあります。ヘッダーには、正しいデコードに必要なすべての情報が含まれます。この情報には、コードブックの完全なセット、floor 部分と residue 部分を表す方法の説明、マルチチャネル サポートのためのモードとマッピングなどが含まれます。さらに、ヘッダーにはビット レート、サンプルレート、曲名とアーチスト名などの一般情報も含まれます。

Vorbis には論理パケットをトランスポート ストリームにカプセル化するための 'Ogg' という独自の形式があります。Ogg 形式は、ネットワークを介したデータ転送に必要なフレーム化、同期、位置決め、エラー訂正などのメカニズムを提供します。

問題の概要と設計の詳細

この例の Vorbis デコーダーは、Vorbis I 形式の仕様を実装します。このデコーダーは、すべての機能を備えた Vorbis の一部の機能を表します。このサンプル モデルは、変化する可能性のあるビット レートでカプセル化されたモノラルまたはステレオの圧縮オーディオ信号を使用して、任意の生バイナリ .ogg ファイルをデコードします。サンプル モデルでは、ファイルが Ogg トランスポート ファイルストリームに正しくカプセル化されていれば、さまざまな Vorbis オーディオ ファイルをリアル タイムでデコードおよび再生できます。

この例は任意の Vorbis オーディオ ファイルで試すことができます。Vorbis オーディオ ファイルを入手するには、主に Vorbis 形式を使用してオーディオ サンプルを保存している、Wikipedia [3] などの広く使用されているリソースから *.ogg ファイルをダウンロードします。ファイルをモデルに読み込むには、モデルの最上位にある注釈として記載されたコード内のファイル名をテスト対象のファイルの名前で置換します。この手順が完了したら、注釈付きコードをクリックして、新しいオーディオ ファイルを読み込みます。モデルは、入力データの変更により出力サンプルレートが変更された場合、通知するように設定されています。この場合、シミュレーションを再度実行すると、より快適に試聴できます。

Simulink® で Vorbis デコーダーを実装するには、いくつかの技術的問題を解決しなければなりません。その 1 つは、論理データ パケットにはサイズが指定されていないことです。この例では、"OggS" 同期パターンを検出して Ogg ビットストリームのページ全体をキャプチャすることで、この可変サイズの問題に対処しています。実用上、ページは 5500 バイトより小さいものと仮定されます。ページの冒頭でセグメント化テーブルを取得した後、モデルは残りのページから論理パケットを抽出します。そのようなデコード シーケンスに対する非同期制御は、以下に示す Stateflow チャート "Decode All Pages of Data" を使用して実装されます。

最初、このチャートでは 'OggS' 同期パターンを持続的にキャプチャしようとします。パターンが検出されると、チャートは前述のデコード手順に従います。ページのデコードは、Simulink 関数 decodePage を一度呼び出すことによって行われます。これにより、現在のページのデコードが完了し、モデルはすぐに 'OggS' シーケンスの検出に戻ります。状態 'ResetPageCounter' は、圧縮された入力ファイルのループの無限数の反復をサポートするために、前述の Stateflow アルゴリズムと並行して追加されました。

データ ページには、次の異なるタイプの情報が含まれます。ヘッダー、コードブックおよびオーディオ信号データ。Simulink 関数 "decodePage" 内の "Read Setup Info"、"Read the Header"、"Decode Audio" サブシステムは、各種の情報の処理を担当します。

ハフマン デコード プロセスは反復的な性質をもつため、ブロック線図として実装するよりは、MATLAB® コードでテキストとして実装した方が自然です。したがって、デコード プロセスは MATLAB Function ブロックを使用して実装されます。この例に含まれるすべての非自明ビット解凍ルーチンは MATLAB コードを使用して実装されます。

Vorbis のフレームは、信号内で 2 つのサイズをもつことができます。これは、信号の floor 部分と residue 部分の正確な逆変換を明らかにするために IMDCT を実装する必要があることを意味します。モデルでは、この部分に可変サイズの信号を採用して、IMDCT 呼び出しごとにフレームの有効部分のみが処理されるようにしています。可変サイズの信号は、以下のサブシステムでは点線の信号線で示されています。この例では、IMDCT は FFT を使用して計算されます。

デコード プロセスがオーバーラップ加算演算で終了した場合、出力準備のできたデータのサイズは、異なるフレーム長に備えて可変になります。そのようなデータ バーストは、適時に正しくシンクに書き込まれます。このため、サンプル数が維持されます。

モデルの最上位の Output ブロックは、Decode Audio ブロックの出力をシステムのオーディオ再生デバイスに接続します。デコードされた信号の有効な部分を可変サイズの信号として "To Audio Device" ブロックに配信します (Ogg Vorbis は可変ビット レート コーデック)。このブロックはそのような入力を受け入れるように更新されています。

参考文献

[1] Vorbis デコーダー規格の全仕様 http://www.vorbis.com

[2] http://en.wikipedia.org/wiki/Modified_discrete_cosine_transform

[3] http://en.wikipedia.org/wiki/File:06_-_Vivaldi_Summer_mvt_3_Presto_-_John_Harrison_violin.ogg

この情報は役に立ちましたか?