English
FAQサウンド関連
戻る進む
FAQ/サウンド関連

ADPCM



ADPCMの再生に使用するライブラリと方法を教えてください。

Q)
ADPCMの再生に使用するライブラリと方法を教えてください。

A)
SEGA提供のADPCMエンコーダでは、CD-ROM XAの規格のデータを出力します。 エンコードしたファイルにはADPCMのレベルやモードは 記録させていないのでデータ作成時に使用したレベル/モードを覚えておき、 CD-ROMを作成時にサブヘッダに設定する必要があります(Mode2 Form2)。

この再生は、CD-ROMからの再生のみとなり、この読み込みには、 STMライブラリが必要になります。
GFSライブラリでは、サブヘッダの情報を 取得することができないからです。
この再生例は、PCMライブラリの サンプルプログラムに含まれていますので、参照ください(SMPPCM2)。


ADPCMについて教えてください。

Q)
ADPCMについて教えてください。

A)
ADPCMとは、Adaptive Delta Pulse Code Modulationの略で、それ以前の データから、現在のデータをあるアルゴリズムで予測し、その予測値と 実際の値との誤差という形でデータを保存しデータの圧縮を図るという データフォーマットで、CD-ROM XAの規格に含まれます。

ADPCMのデータは再生する際にも、まず予測値を計算し、データ補正を しなければならないため、1サンプルのデータ復号にはPCMデータよりも 時間がかかります。

このデコードの作業をハードウェアで持っているものもありますが、 セガサターンの場合、そういうチップは搭載していませんので全てソフトで復号 します。
この為、セガサターンにおいてはADPCMの再生は非常に負荷のかかる仕事であると お考えください。
CD-ROM XAでは、データ圧縮の条件によって、ADPCMレベルをBとCの2つ設け ています。

 レベル B → サンプル周波数 37.8kHz 4bit FMレベルの音質
 レベル C → サンプル周波数 18.9kHz 4bit AMレベルの音質

上記はそれぞれ、STEREO/MONOのモードに分かれます。

これらの情報は、ファイルに付属させるものではなく、CD-ROM XAの規格で あるサブヘッダ部分のサブモードに記録されます(Mode2 Form2)。
そのため、 再生にはこのサブヘッダ部分を参照してどのレベル(BかC)でどのモード (STEREOかMONO)であるかの情報を取得する必要があります。
SEGA提供のライブラリでは、この情報取得作業をSTMライブラリで行うことが できます。


ADPCMのデータを作成したのですがどんなツールを使えばいいの?

Q)
XAデータのエンコーダとして推奨しているソフトがありましたら、 教えてください。

A)
現在ADPCMエンコーダとして、CRC総合研究所のAudioStackというツールと こちらで提供しているSEGA ADPCM Encoderがあります。
それぞれのツールでは、出力するデータの形式が若干違いますので、再生させる スタイルによって使い分けが必要です。
Audio Stackのほうは、ADPCMデータをAIFFのデータ形式として出力する為、 ヘッダ情報を必要とする、PCM/ADPCM再生ライブラリサンプルを使った On Memory再生ができます。このヘッダ情報を取り除いてADPCMの純粋な データを作れば、CDROM-XA形式のADPCM再生ができます。
SEGA ADPCM Encoderで作ったデータはヘッダの無い純粋なADPCMデータですので、 CDROM-XA形式のADPCM再生ができますが、データ側にヘッダ情報が無い為、 PCM/ADPCM再生ライブラリサンプルを使ったOn Memory再生はできません。

ADPCMのデータに使うAIFFのビット幅はいくつ?

Q)
ADPCM形式に圧縮する際に入力される AIFF形式のファイルのビット数は 何ビットですか

A)
16ビットになります。

ADPCMの単位サンプルのビット幅は?

Q)
ADPCM形式にエンコードされた後の、ADPCM形式の1サンプルのビット数は 何ビットですか

A)
4ビットになります。

ADPCMデータを伸長した際の復元されたサンプルのビット幅は何ビット?

Q)
ADPCM形式のデータを伸張した際の出力データのビット数は何ビットですか

A)
16ビットになります。

ADPCMとPCMストリームではどれくらい負荷が違うもんなんでしょう?

Q)
ADPCMを使用した場合、CDからのPCMストリーム再生と比較して、 転送時の負荷はどのくらい増加しますか。

A)
約倍の時間かかります。

エンコーダーの違いによるノイズ

Q)
SEGA 提供の ADPCM エンコーダーでは出ないノイズが AudioStack では 発生する。
両者の違いとノイズの原因を調べてください。
ノイズの発生して いるデータは「AIFF、18.9KHz、16Bit、mono」です。

A)
オーディオスタックでは AIFF に準拠したヘッダーがつくのでファイル システムが使えます。セクタごとに再生時に使用されないデータも入ってる のでこれがノイズの原因になることも考えられます。
SEGA 提供のエンコーダーはべたのADPCMデータを並べているだけのもの で、サイズも小さくなります。
ただしストリームシステムでしか使えません。
素材のAIFFに問題があるかもしれないので1度リサンプリングを他の ツール(SD2やアルケミー)で行ってみてください。
AIFF のマーカーチャンクはツールによって出力する形が異なるので弊社の エンコーダーはコンバート時にトーンエディタの仕様に合わせてこのチャンク を変更しています。
べたの ADPCM データの場合は、内部的にどの圧縮アルゴリズムを採用するか で2つのツールで同じデータが出力される場合もあれば違う場合もあります。

ADPCMデータをCD-XAで再生する方法を教えてください。

Q)
ADPCMデータをCD-XAで再生する方法を教えてください。

A)

  1. 弊社提供のADPCMエンコーダーで圧縮する。

  2. VCDスクリプトファイルに作成したデータを記述します。
    ただし CD-XA はMODE2のFORM2でしか使用できないので注意が必要です。

    (例)インターリーブしない場合(37.8KHz,Mono)

     File  SAMPLE1.XA;1
         FileSource  "SAMPLE1.ADP"
         RealTime
         DataType    FORM2
         SourceType  MONO_B
         CodingInformation  0
         EndFileSource
     EndFile
    

  3. ビルド後のディスクイメージ上のファイルを再生する形になります。
    詳しくはSGLのドキュメント「SGL¥DOC¥ADPCM.TXT」を参照してください。

ADPCMデータをオンメモリで再生する方法を教えてください。

Q)
ADPCMデータをオンメモリで再生する方法を教えてください。

A)
弊社提供の「ADPCMエンコーダ」はヘッダ情報のないべたのADPCMデータしか 出力できないため、ヘッダ情報を必要とするオンメモリ再生はできません。
オンメモリ再生には「AudioStack」を使用します。
これはAIFFの データ形式として出力されるので「PCM/ADPCM再生ライブラリ」を利用して 再生できます。
詳しくはサンプルプログラム「SGL¥SAMPLE¥SMPPCM3」を参照してください。

ADPCM再生時に使用するデータの作成手順について教えてください。

Q)
ADPCM再生時に使用するデータの作成手順について教えてください。

A)
ADPCMのデータはCD-XA準拠のADPCM方式とヘッダつきADPCM方式の2種類あります。
サンプリングレイトは2種類だけで、18.9kHz(B MODE)と 37.8kHz(C MODE)に なります。
作成方法ですが、サンプリングしたAIFF波形を市販の波形編集ツール などで、上記サンプリングレイトにリサンプリングします。
ADPCM方式で圧縮する場合はニフティで提供されている弊社ADPCMエンコーダを 使用します。
APCM方式の場合は、

CRC総合研究所

TEL:03-5634-5678

が販売している「AudioStack」というツールで圧縮してデータを作成します。


PCMではきちんと再生される音がADPCMだと最後が切れてしまう。

Q)
サイズに関わらず AIFF では正常に最後まで再生される音声データを オーディオスタックで圧縮して再生してみると、最後がブチっと 切れてしまう。
再生プログラムでは特にループ再生モードを使用したり せずに slSync() のタイミングでタスクを呼んでいる。
終了判定を外して、ステータス変化後0.5秒ほど待つ処理を入れて みたりしたが、症状に変化はありませんでした。

A)
最後が正常に再生されないのはサンプリングレートの問題です。
44.1KHz の約数や 16KHz などの整数部分のみのレートであれば 問題ないですが、18.9KHz や 37.8KHz では以下のピッチの計算で 誤差が生じてしまいます。
これはハード上の制約でどうしようも ありません。

計算式
             -oct
       FNS=(2    ×1024×Fs)/44.1-1024

octの値
       5.5125KHz → -3
      11.0250KHz → -2
      22.0500KHz → -1
      44.1000KHz →  0
      88.2000KHz →  1

 例えばレートが”18.9KHz”の場合ですと
 OCT値は -2 となり、FNSの値は

         -(-2)
 FNS = (2     ×1024×18.9)/44.1-1024

     = (4     ×1024×18.9)/44.1-1024

     = 731.4285714

となりFNS設定は2DB、2DCのどちらでも誤差が生じる事になります。
これを回避するにはデータの最後に無音データを追加して、誤差の影響を 受けないようにします。
データサイズはリングバッファ1つに相当する 1000サンプル分の約0.21秒程度を追加しておけば大丈夫でしょう。


戻る進む
FAQサウンド関連
Copyright SEGA ENTERPRISES, LTD,. 1997