PCMオーディオサンプリングデータ処理


PCMオーディオサンプリングデータ処理


PCMパルス符号化変調はPulse Code Modulationの略である.パルス符号化変調はデジタル通信の符号化方式の一つである.主なプロセスは、音声、画像などのアナログ信号を一定時間おきにサンプリングし、離散化させるとともに、サンプリング値を階層単位で四捨五入して整量子化するとともに、サンプリング値を1組のバイナリコードでサンプリングパルスの幅値を表す.符号化プロセス:アナログ信号のデジタル化は、音声デジタル化のパルス符号化変調(PCM,Pulse Coding Modulation)技術を実現するために、サンプリング、量子化、符号化の3つのプロセスを経なければならない.

補足:


①PCM 16 LE 2チャネルデータにおける左チャネルと右チャネルのサンプリング値は間隔を置いて記憶されている.各サンプル値は2 Byteのスペースを占有します.サンプリング形式は16 LEです.「16」はサンプリングビット数が16 bitであることを表す.1 Byte=8 bitのため、1チャネルの1サンプル値は2 Byteを占有する.「LE」はLittle Endianを表し、2 Byteサンプリング値を表す格納方式は上位に高いアドレスが存在する.②WAVE形式オーディオ(拡張子「.wav」)は、Windowsシステムで最も一般的なオーディオです.このフォーマットの本質は、PCMファイルの前にファイルヘッダを追加することです.PCMファイルの前にWAVEファイルヘッダを付けることでWAVE形式のオーディオにカプセル化できます.WAVEファイルはRIFF形式のファイルです.その基本ブロック名は「WAVE」であり、2つのサブブロック「fmt」と「data」が含まれている.プログラミングの観点から簡単に言えばWAVE_HEADER、WAVE_FMT、WAVE_DATA、サンプリングデータの4つの部分からなる.その構造は以下の通りです.
WAVE_HEADER
WAVE_FMT
WAVE_DATA
PCMデータ
ここで、前3部の構成は以下の通りである.WAVEファイルヘッダに書き込む際にその中の各フィールドに適切な値を付与すればよい.でもちょっと注意したいことがあります:WAVE_HEADERとWAVE_DATAには、オーディオサンプリングデータが書き込まれてから取得されるファイル長情報のdwSizeフィールドが含まれています.したがって、この2つの構造体は最後にWAVEファイルに書き込まれる.
typedef struct WAVE_HEADER{
    char fccID[4];
    unsigned long dwSize;
    char fccType[4];
}WAVE_HEADER;

typedef struct WAVE_FMT{
    char  fccID[4];
    unsigned long dwSize;
    unsigned short wFormatTag;
    unsigned short wChannels;
    unsigned long dwSamplesPerSec;
    unsigned long dwAvgBytesPerSec;
    unsigned short wBlockAlign;
    unsigned short uiBitsPerSample;
}WAVE_FMT;

typedef struct WAVE_DATA{
    char       fccID[4];
    unsigned long dwSize;
}WAVE_DATA;