1. Wave File 구조
    • 3개의 Chunk로 이루어져 있다.
    • Chunk란 말이 생소하다면 블록이라 생각하시면 이해가 쉬울것이다.
    • 음성이나 여상 파일은 다른 파일에 비해 매우 크다. 이런 이유 때문에여러 개의 블록으로 나누어 저장하는 방식을 취한다.
    • 이러한 방식의 파일을 RIFF(Resoure Interchange File Format)이라 한다.
    • 멀티이디어의 특별한 유형의 파일 포맷이다.
    • 나뉘어 지는 블록이 Chunk인데 보통 세 개의 Chunk로 나뉘어 진다.
  2. 첫 번째 Chunk는 부모 Chunk라 하여 여기에는
    • 자신의 Chunk ID와
    • 파일의 종류를 알려주는 fccType
    • Data Field를 가지고 있다.

    부모 Chunk ckid="RIFF"
    cksize
    fccType="WAVE"

    Data Field

    자식 Chunk

    Format Chunk

    Chunk ID="fmt"
    Chunk Size=16 byte
    Format data

    Data Chunk

    ckid="data"
    cksize
    Data

  3. 부모 Chunk
    • Chunk ID(ckid) => 자신의 Chunk ID
    • fccType = > 파일의 종류를 알려주기 위한 4 개의 문자로 구성되어 있다.
                         Wave파일에는 "WAVE"로 되어 Type를 알려준다.
    • cksize
    • Data Field => 자식Chunk Format Chunk 와 Data chunk로 구성 되어있다.
  4. 자식 Chunk
    • Format Chunk
      • chunk ID(ckid) => "fm t"라는 무자가 들어가 있음.
        * 중요
        chid,fccType는 항상 4개의 문자로 채워져야 합니다.
        따라서 fmt 다음에 공백("fmt ")까지 포함되어 있어야 합니다.
      • cksize => Wave파일에서는 16 byte 크기의 Foramt data를 가지고 있음.
      • Wave Format = >이 정보는 WAVEFORMATEX 구조체가 가지고 있음.
      • WAVEFORAMTEX의 구조

        typedef struct {
            WORD  wFormatTag;
            WORD  nChannels;
            DWORD nSamplesPerSec;
            DWORD nAvgBytesPerSec;
            WORD  nBlockAlign;
            WORD  wBitsPerSample;
            WORD  cbSize;
        } WAVEFORMATEX;

        멤버 변수 설 명
        wFormatTag Wave Format의 형식
        nChannels Wave 파일에서 사용하는 채널 수
        nSamplesPerSec 초당 sample 수
        nAvgBytesPerSec 초당 데이터의 평균 바이트 수
        nBlockAlign 샘플당 바이트수 * 채널 수
        wBitsPerSample 샘플당 bit 수
        cbSize 항상 0
    • Data Chunk(실제적인 파일의 data를 가지고 있음.)<

+ Recent posts