در این مطلب با ساختار فایل‌های WAV آشنا خواهیم شد. WAV زیر مجموعه RIFF ماکروسافت (Microsoft's RIFF specification) برای ذخیره فایل‌های مالتی مدیا است.

فایل‌های RIFF با قستمی با نام header شروع شده و با تعدادی تکه داده (Data chunk) ادامه پیدا می‌کند. فایل WAV نیز به عنوان نوعی RIFF شامل یک قسمت header و دو تکه داده با نام‌های fmt شامل اطلاعاتی درمورد فرمت فایل و data شامل اطلاعات واقعی موج صدا است.

در تصویر زیر هر یک از این سه تکه header و fmt و data نمایش داده شده است.

شروعطولنامتوضیحات
04ChunkIDشامل کلمه  RIFF در فرمت ASCII.
(0x52494646 big-endian form)
44ChunkSize4 + (8 + SubChunk1Size) + (8 + SubChunk2Size) که برابر با اندازه کل تکه‌ی WAV منهای اندازه ChunkID و ChunkSize است. به بیان دیگر هر chunksize اندازه آن تکه منهای ChunkID و ChunkSize خودش است. فایل wav از یک chunk شامل دو SubChunk تشکیل شده است. اندازه هر SubChunk برابر است با SubChunk[x]Size بعلاوه طول فیلدهای Subchunk[x]ID و Subchunk[x]Size که همان عدد 8 در فرمول بالا است. مقدار 4 نیز طول فیلد Format است.
84Formatشامل کلمه  WAVE در فرمت ASCII.
(0x57415645 big-endian form)
124Subchunk1IDشامل کلمه  fmt در فرمت ASCII.
(0x666d7420 big-endian form)
164Subchunk1Sizeاندازه بقیه Chunk
202

AudioFormat یا Compression code

PCM = 1 بیانگر گسسته سازی خطی، هر مقدار غیر 1 بیانگر نوعی فشرده سازی در اطلاعات است. به عنوان مثال 80 (0x0050) مربوط به MPEG است. (لینک‌های انتهای مطلب)
222NumChannelsMono = 1 و  Stereo = 2 و ...
244SampleRate8000 و 44100 و ...
284ByteRate== SampleRate * NumChannels * BitsPerSample/8
322BlockAlign== NumChannels * BitsPerSample/8 - تعداد بایت برای یک نمونه شامل داده‌های همه کانال‌ها
342BitsPerSample8 و 16 و ...
364Subchunk2IDشامل کلمه  data در فرمت ASCII.
(0x64617461 big-endian form)
404Subchunk2Size== NumSamples * NumChannels * BitsPerSample/8 - اندازه بخش مربوط به اطلاعات موج صدا (Data)
44*Dataداده‌های مربوط به موج صدا

نکته: در صورتی که غیر فرمت غیر از PCM باشد بعد از BitsPerSample فیلدهای ExtraParamSize و ExtraParams را خواهیم داشت.

نکته: برخی فیلدها به صورت Big endian و برخی دیگر little endian ذخیره شده اند. به عنوان مثال مقدار BitsPerSample به صورت little endian ذخیره شده است. بنابراین اگر مقدار hex آن برابر با 1000 باشد به این معنی است که مقدار اصلی 0010 بوده و 10 در مکان x از حافظه و 00 در مکان x + 1 از حافظه ذخیره شده است.

نکته: مقداری که از فایل خوانده می‌شود Binary بوده باید بعد از خواندن برای پردازش به hex تبدیل شود. زیرا در این صورت می‌توان با توجه به little endian یا big endian بودن آن را پردازش کرد.

طبقه بندی: 
برچسب ها: 

دیدگاه‌ها

تصویر فرشته

فرشته (تایید نشده)

سلام .میشه خواهش کنم مراحل ایجاد یک فایل wave در ویندوز ۷ رو توضیح بدید.ضبط صدا و تبدیل اون به فرمتwaveبرای پردازش صوت رو ممکنه توضیح بدید لطفا

افزودن نظر جدید