Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Задания к лабам / 2 / itzi02 / Формат WAV-файлов(WAV-files format)

.htm
Скачиваний:
77
Добавлен:
16.04.2013
Размер:
8.46 Кб
Скачать

жПТНБФ WAV-ЖБКМПЧ(WAV-files format) жПТНБФ WAV-ЖБКМПЧ

            дБООЩЕ, ЙНЕАЭЙЕ ПФОПЫЕОЙЕ Л НХМШФЙНЕДЙБ (ЪЧХЛ, ЧЙДЕП Й Ф. Р.) ИТБОСФУС Ч ЖБКМБИ Ч ФБЛ ОБЪЩЧБЕНПН RIFF-ЖПТНБФЕ (Resource Interchange File Format - ЖПТНБФ ЖБКМБ ДМС ПВНЕОБ ТЕУХТУБНЙ). лБЛ wav-ЖБКМЩ, УПДЕТЦБЭЙЕ ЪЧХЛ, ФБЛ Й avi-ЖБКМЩ, УПДЕТЦБЭЙЕ ЧЙДЕПЙОЖПТНБГЙА, ЙНЕАФ ЖПТНБФ RIFF.

        жБКМ Ч ЖПТНБФЕ RIFF УПДЕТЦЙФ ЧМПЦЕООЩЕ ЖТБЗНЕОФЩ (chunk's). чОЕЫОЙК ЖТБЗНЕОФ УПУФПЙФ ЙЪ ЪБЗПМПЧЛБ Й ПВМБУФЙ ДБООЩИ (ТЙУ. 1).

DWORD

DWORD

  "RIFF"

тБЪНЕТ

дБООЩЕ

    тЙУ. 1. жТБЗНЕОФ "RIFF"

    рЕТЧПЕ ДЧПКОПЕ УМПЧП ЪБЗПМПЧЛБ УПДЕТЦЙФ ЮЕФЩТЕИВХЛЧЕООЩК ЛПД FOURCC, ЛПФПТЩК ЙДЕОФЙЖЙГЙТХЕФ ДБООЩЕ, ИТБОСЭЙЕУС ЧП ЖТБЗНЕОФЕ. чФПТПЕ ДЧПКОПЕ УМПЧП ЪБЗПМПЧЛБ - ТБЪНЕТ ПВМБУФЙ ДБООЩИ Ч ВБКФБИ (ВЕЪ ХЮЕФБ ТБЪНЕТБ УБНПЗП ЪБЗПМПЧЛБ).

    пВМБУФШ ДБООЩИ ЙНЕЕФ РЕТЕНЕООХА ДМЙОХ, ПДОБЛП ПОБ ДПМЦОБ ВЩФШ ЧЩТБЧОЕОБ ОБ ЗТБОЙГХ УМПЧБ Й РТЙ ОЕПВИПДЙНПУФЙ ДПРПМОЕОБ Ч ЛПОГЕ ОХМЕЧЩН ВБКФПН ДП ГЕМПЗП ЮЙУМБ УМПЧ.

    ъБНЕФЙН, ЮФП ЖПТНБФ RIFF ОЕ ПРЙУЩЧБЕФ ЖПТНБФ ДБООЩИ. рТБЛФЙЮЕУЛЙ ЖБКМ Ч ЖПТНБФЕ RIFF НПЦЕФ УПДЕТЦБФШ МАВЩЕ ДБООЩЕ ДМС НХМШФЙНЕДЙБ, РТЙЮЕН ЖПТНБФ ДБООЩИ ЪБЧЙУЙФ ПФ ФЙРБ ДБООЩИ.

    пВМБУФШ, ПВПЪОБЮЕООБС ОБ ТЙУ. 1 ЛБЛ "дБООЩЕ", НПЦЕФ УПДЕТЦБФШ ЧОХФТЙ УЕВС ДТХЗЙЕ ЖТБЗНЕОФЩ. дМС ЖБКМБ, Ч ЛПФПТПН ИТБОСФУС ЪЧХЛПЧЩЕ ДБООЩЕ (wav-ЖБКМ), ЬФБ ПВМБУФШ УПДЕТЦЙФ ЙДЕОФЙЖЙЛБФПТ ДБООЩИ "WAVE", ЖТБЗНЕОФ ЖПТНБФБ ЪЧХЛПЧЩИ ДБООЩИ "fmt " (ФТЙ УЙНЧПМБ "fmt" Й РТПВЕМ ОБ ЛПОГЕ), Б ФБЛЦЕ ЖТБЗНЕОФ ЪЧХЛПЧЩИ ДБООЩИ (ТЙУ. 2). жБКМ НПЦЕФ ДПРПМОЙФЕМШОП УПДЕТЦБФШ ЖТБЗНЕОФЩ ДТХЗЙИ ФЙРПЧ, РПЬФПНХ ОЕ УМЕДХЕФ ДХНБФШ, ЮФП ЪБЗПМПЧПЛ wav-ЖБКМБ ЙНЕЕФ ЖЙЛУЙТПЧБООЩК ЖПТНБФ. оБРТЙНЕТ, Ч ЖБКМЕ НПЦЕФ РТЙУХФУФЧПЧБФШ ЖТБЗНЕОФ "LIST" ЙМЙ "INFO", УПДЕТЦБЭЙК ЙОЖПТНБГЙА П РТБЧБИ ЛПРЙТПЧБОЙС Й ДТХЗХА ДПРПМОЙФЕМШОХА ЙОЖПТНБГЙА. нЩ ОЕ ВХДЕН ТБУУНБФТЙЧБФШ ЖПТНБФЩ ДТХЗЙИ ЖТБЗНЕОФПЧ, РТЙ ОЕПВИПДЙНПУФЙ ЧЩ НПЦЕФЕ ХЪОБФШ ЙИ ЙЪ ДПЛХНЕОФБГЙЙ, ЛПФПТБС РПУФБЧМСЕФУС Ч УПУФБЧЕ Microsoft SDK for Windows.

DWORD

DWORD

  "RIFF"

тБЪНЕТ

дБООЩЕ   "WAVE" "fmt " тБЪНЕТ жПТНБФ ДБООЩИ жТБЗНЕОФ "data"   "data" тБЪНЕТ ъЧХЛПЧЩЕ ДБООЩЕ тЙУ. 2. жПТНБФ wav-ЖБКМБ

    пВМБУФШ, ПВПЪОБЮЕООБС ОБ ТЙУ. 2 ЛБЛ "жПТНБФ ДБООЩИ", ПРЙУЩЧБЕФ ЪЧХЛПЧЩЕ ДБООЩЕ. жПТНБФ ЬФПК ПВМБУФЙ ДМС ЖБКМПЧ тун (ЪБРЙУБООЩИ У ЙУРПМШЪПЧБОЙЕН ЙНРХМШУОП-ЛПДПЧПК НПДХМСГЙЙ) УППФЧЕФУФЧХЕФ УФТХЛФХТЕ PCMWAVEFORMAT, ПРТЕДЕМЕООПК Ч ЖБКМЕ mmsystem.h УМЕДХАЭЙН ПВТБЪПН:

typedef struct pcinwaveformat_tag {

    WAVEFORMAT wf;

    WORD vBitsPerSample;

} PCMWAVEFORMAT;

typedef PCMWAVEFORMAT *PPCMWAVEFORMAT;

    уФТХЛФХТБ WAVEFORMAT ФБЛЦЕ ПРЙУБОБ Ч ЖБКМЕ mmsystem.h:

typedef struct waveformat_tag {

    WORD wFormatTag; // ФЙР ЖПТНБФБ

    WORD nChannels; // ЛПМЙЮЕУФЧП ЛБОБМПЧ (НПОП ЙМЙ УФeТЕП)

    DWORD nSamplesPerSec; // ЮБУФПФБ ДЙУЛТЕФЙЪБГЙЙ

    DWORD nAvgBytesPerSec; // УЛПТПУФШ РПФПЛБ ДБООЩИ

    WORD nBlockAlign; // ЧЩТБЧОЙЧБОЙЕ ВМПЛБ ДБООЩИ

} WAVEFORMAT;

typedef WAVEFORMAT *PWAVEFORMAT;

    рПМЕ wFormatTag ПРЙУЩЧБЕФ ФЙР ЖПТНБФБ ЪЧХЛПЧЩИ ДБООЩИ. дМС ЙНРХМШУОП-ЛПДПЧПК НПДХМСГЙЙ тун, ЛПФПТБС РПДДЕТЦЙЧБЕФУС УФБОДБТФОПК ВЙВМЙПФЕЛПК mmsystem.dll, Ч ЬФПН РПМЕ ДПМЦОП ОБИПДЙФШУС ЪОБЮЕОЙЕ WAVE_FORMAT_PCM, ПРТЕДЕМЕООПЕ Ч ЖБКМЕ mmsystem.h:

#define     WAVE_FORMAT_PCM     1

    рПМЕ nChannels УПДЕТЦЙФ ЛПМЙЮЕУФЧП ЛБОБМПЧ. ч ОЕН НПЗХФ ОБИПДЙФШУС ЪОБЮЕОЙЕ 1 (НПОП) ЙМЙ 2 (УФЕТЕП).

    ч РПМЕ nSamplesPerSec ЪБРЙУБОБ ЮБУФПФБ ДЙУЛТЕФЙЪБГЙЙ, ФП ЕУФШ ЛПМЙЮЕУФЧП ЧЩВПТПЛ УЙЗОБМБ Ч УЕЛХОДХ. ч ЬФПН РПМЕ НПЗХФ ОБИПДЙФШУС УФБОДБТФОЩЕ ЪОБЮЕОЙС (11025 ЛзГ, 22 050 ЛзГ ЙМЙ 44100 ЛзГ) МЙВП ОЕУФБОДБТФОЩЕ ЪОБЮЕОЙС, ФБЛЙЕ, ЛБЛ 5000 ЛзГ ЙМЙ 4400 ЛзГ. хЮФЙФЕ, ЮФП ОЕ ЧУЕ ДТБКЧЕТЩ ЪЧХЛПЧЩИ БДБРФЕТПЧ НПЗХФ

ТБВПФБФШ У ОЕУФБОДБТФОЩНЙ ЮБУФПФБНЙ ДЙУЛТЕФЙЪБГЙЙ.

    рПМЕ nAvgBytesPerSec УПДЕТЦЙФ УТЕДОАА УЛПТПУФШ РПФПЛБ ДБООЩИ, ФП ЕУФШ ЛПМЙЮЕУФЧП ВБКФ Ч УЕЛХОДХ, РЕТЕДБЧБЕНЩИ ДТБКЧЕТХ ХУФТПКУФЧБ ЙМЙ РПМХЮБЕНЩИ ПФ ОЕЗП. ьФБ ЙОЖПТНБГЙС НПЦЕФ ВЩФШ ЙУРПМШЪПЧБОБ РТЙМПЦЕОЙЕН ДМС ПГЕОЛЙ ТБЪНЕТБ ВХЖЕТБ, ОЕПВИПДЙНПЗП ДМС ТБЪНЕЭЕОЙС ЪЧХЛПЧЩИ ДБООЩИ. дМС НПОПЖПОЙЮЕУЛПЗП УЙЗОБМБ У ДЙУЛТЕФОПУФША 8 ВЙФ ЮЙУМЕООПЕ ЪОБЮЕОЙЕ УЛПТПУФЙ УПЧРБДБЕФ УП ЪОБЮЕОЙЕН ЮБУФПФЩ ДЙУЛТЕФЙЪБГЙЙ. дМС УФЕТЕПЖПОЙЮЕУЛПЗП УЙЗОБМБ У ДЙУЛТЕФОПУФША 8 ВЙФ ПОБ Ч ДЧБ ТБЪБ ЧЩЫЕ. фПЮОПЕ ЪОБЮЕОЙЕ ЧЩ НПЦЕФЕ РПДУЮЙФБФШ РП ЖПТНХМЕ

nAvgBytesPerSec = (nChannels * nSamplesPerSec * wBitsPerSanipIe) / 8

    ч РПМЕ nBlockAlign ОБИПДЙФУС ЧЩТБЧОЙЧБОЙЕ ВМПЛБ Ч ВБКФБИ, ЛПФПТПЕ РПДУЮЙФЩЧБЕФУС РП ЖПТНХМЕ

nBlockAlign = (nChannels * wBitsPerSample) / 8

    рПМЕ wBitsPerSainple ОБИПДЙФУС Ч УФТХЛФХТЕ PCMWAVEFORMAT Й УПДЕТЦЙФ ДЙУЛТЕФОПУФШ УЙЗОБМБ, ФП ЕУФШ ЛПМЙЮЕУФЧП ВЙФ, ЙУРПМШЪХЕНЩИ ДМС РТЕДУФБЧМЕОЙС ПДОПК ЧЩВПТЛЙ УЙЗОБМБ. пВЩЮОП ЙУРПМШЪХАФУС ЪОБЮЕОЙЕ 8 ЙМЙ 16.

    юФП ЦЕ ЛБУБЕФУС ЖПТНБФБ УБНЙИ ЪЧХЛПЧЩИ ДБООЩИ, ФП ПО ЪБЧЙУЙФ ПФ ЛПМЙЮЕУФЧБ ЛБОБМПЧ Й ПФ ДЙУЛТЕФОПУФЙ.

дМС НПОПЖПОЙЮЕУЛПЗП УЙЗОБМБ У ДЙУЛТЕФОПУФША 8 ВЙФ ЪЧХЛПЧЩЕ ДБООЩЕ РТЕД УФБЧМСАФ УПВПК НБУУЙЧ ПДОПВБКФПЧЩИ ЪОБЮЕОЙК, ЛБЦДПЕ ЙЪ ЛПФПТЩИ СЧМСЕФУС ЧЩВПТ-ЛПК УЙЗОБМБ.

    дМС УФЕТЕПЖПОЙЮЕУЛПЗП УЙЗОБМБ У ДЙУЛТЕФОПУФША 8 ВЙФ ЪЧХЛПЧЩЕ ДБООЩИ ЙНЕАФ ЖПТНБФ НБУУЙЧБ ДЧХИВБКФПЧЩИ УМПЧ, РТЙЮЕН НМБДЫЙК ВБКФ УМПЧБ УППФЧЕФУФЧХЕФ МЕЧПНХ ЛБОБМХ, Б УФБТЫЙК - РТБЧПНХ.

    жПТНБФ ЪЧХЛПЧЩИ ДБООЩИ У ДЙУЛТЕФОПУФША 16 ВЙФ ЧЩЗМСДЙФ БОБМПЗЙЮОП. дМС НПОПЖПОЙЮЕУЛПЗП УЙЗОБМБ ДБООЩЕ ИТБОСФУС Ч НБУУЙЧЕ 16-ВЙФПЧЩИ УМПЧ. дМС УФЕТЕП-ЖПОЙЮЕУЛПЗП ЙУРПМШЪХЕФУС НБУУЙЧ ДЧПКОЩИ УМПЧ, РТЙЮЕН НМБДЫЕНХ УМПЧХ УППФ-ЧЕФУФЧХЕФ МЕЧЩК ЛБОБМ, Б УФБТЫЕНХ - РТБЧЩК.

    дЙБРБЪПО ЙЪНЕОЕОЙС ЪОБЮЕОЙК ЧЩВПТПЛ УЙЗОБМБ ПРТЕДЕМСЕФУС ДЙУЛТЕФЙЪБГЙЕК. дМС 8-ВЙФПЧЩИ ДБООЩИ ПО УПУФБЧМСЕФ ПФ 0 ДП 255 (пИff), РТЙЮЕН ПФУХФУФЧЙА УЙЗОБМБ (РПМОПК ФЙЫЙОЕ) УППФЧЕФУФЧХЕФ ЪОБЮЕОЙЕ 128 (0И80). дМС 16-ВЙФПЧЩИ ДБООЩИ ДЙБРБ-ЪПО ЙЪНЕОЕОЙС УПУФБЧМСЕФ ПФ -32768 (-0И8000) ДП 32767, (Ox7fff), ПФУХФУФЧЙА УЙЗОБМБ УППФЧЕФУФЧХЕФ ЪОБЮЕОЙЕ 0.

уЧЕДЕОЙС ЧЪСФЩ ЙЪ ЛОЙЗЙ

жТПМПЧ б.ч, жТПМПЧ з.ч "нХМШФЙНЕДЙБ ДМС Windows", нПУЛЧБ, "дЙБМПЗ-нйжй", 1995 З.