یک WAV را بدون از دست دادن کیفیت برش دهید
بله. زمان شروع و پایان را انتخاب کنید، سپس یک WAV جدید دانلود کنید که فریمهای نمونهٔ نگهداشتهشدهٔ آن بایتبهبایت از نسخهٔ اصلی کپی شده است. از آنجا که صدا هرگز رمزگشایی یا بازرمزگذاری نمیشود، نرخ نمونهبرداری، عمق بیت، کانالها و مقادیر نمونههای آن تغییر نمیکند.
WAV از نوع PCM یا IEEE-float، از جمله RF64 و WAVE_FORMAT_EXTENSIBLE. فایل در همین برگه میماند.
برش بیاتلاف است، زیرا فریمهای نمونهٔ کامل کپی میشوند و از هیچ کدک صوتی عبور نمیکنند.
فایل جدید بلوک فرمت اصلی را نگه میدارد، اما برچسبها، نشانگرها و سایر فرادادهها را عمداً کنار میگذارد.
زمان درخواستی به نزدیکترین فریم نمونه گرد میشود؛ این اختلاف معمولاً بسیار کمتر از یک میلیثانیه است.
چگونگی کار
مراحل انجام کار
- بررسی کنید که دوازده بایت اول، یک فایل WAVE از نوع RIFF یا RF64 لیتلاندین را معرفی کند. فایل RIFX بیگاندین رد میشود، زیرا کپی کردن نمونههای آن در یک کانتینر لیتلاندین معنای آنها را تغییر میدهد.
- فهرست چانکهای RIFF را، با رعایت بایت پرکننده پس از بار دادهٔ با طول فرد، پیمایش کنید تا هر دو چانک fmt و data پیدا شوند. برای RF64، طول ۶۴ بیتی صدا را از چانک ds64 آن بخوانید.
- تعداد کانالها، نرخ نمونهبرداری، همترازی بلوک و عمق بیت را از fmt بخوانید. اگر فرمت WAVE_FORMAT_EXTENSIBLE است، GUID زیرفرمت آن را باز کنید تا PCM از IEEE float تشخیص داده شود.
- بررسی کنید که فرمت، PCM یا IEEE float با عرض ثابت باشد و همترازی بلوک اعلامشده با حاصلضرب تعداد کانالها در بایتهای هر نمونه برابر باشد. فایل فشرده یا ناسازگار در درون خود، به جای برش در یک مرز حدسی، رد میشود.
- طول data را بر همترازی بلوک تقسیم کنید تا تعداد دقیق فریمهای نمونهٔ کامل و از روی آن، مدت ضبط به دست آید.
- هر زمان درخواستی را در نرخ نمونهبرداری ضرب کنید و به نزدیکترین فریم کامل گرد کنید. پایانی فراتر از ضبط را به آخرین فریم آن محدود کنید؛ شروعی در پایان یا فراتر از آن را رد کنید.
- بازهٔ فریم انتخابشده را در قطعههای ۴ مگابایتی در یک WAV تازه کپی کنید. بلوک فرمت حفظ میشود، برای صدای float یک شمارش fact جدید نوشته میشود و اندازههای RIFF و data دوباره محاسبه میشوند.
- چانکهای فراداده را از نتیجه کنار بگذارید، زیرا موقعیت نشانهها، نقاط حلقه و ارجاعهای زمانی آنها ضبطِ برشنخورده را توصیف میکنند. WAV جدیدِ بدون فراداده را برای دانلود ارائه دهید.
فرضها
- فایلهای WAV از نوع PCM و IEEE-float، از جمله WAVE_FORMAT_EXTENSIBLE و RF64، پشتیبانی میشوند. کدگذاریهای فشردهٔ WAV و RIFX بیگاندین پشتیبانی نمیشوند، زیرا برش امن هرکدام به رمزگشایی یا تبدیل ترتیب بایت نیاز دارد.
- زمان درخواستی میتواند بین دو فریم نمونه بیفتد. به نزدیکترین فریم کامل گرد میشود، بنابراین بزرگترین جابهجایی زمانی نیم فریم است — حدود ۰٫۰۱۱ میلیثانیه در ۴۴٫۱ کیلوهرتز.
- زمان پایانِ فراتر از فایل به آخرین فریم کامل محدود میشود. شروعی در آن فریم یا فراتر از آن هیچ صدای قابلپخشی باقی نمیگذارد و به جای تولید یک فایل خالی، رد میشود.
- نرخ نمونهبرداری، تعداد کانالها، عمق بیت، بلوک فرمت و بایتهای نمونهٔ نگهداشتهشده کپی میشوند. هیچ تغییر بهره (گین)، محو تدریجی، نمونهبرداری مجدد، دیدر یا گذر از کدک وجود ندارد.
- فراداده عمداً کپی نمیشود. ارجاعهای زمانی Broadcast Wave، نقاط نشانه، ناحیهها، حلقهها، برچسبها، تصویر جلد و توضیحات در غیر این صورت به خط زمانی قدیمی اشاره میکردند یا جزئیاتی را فاش میکردند که بازدیدکننده قصد نگه داشتن آنها را نداشته است.
- چانک data باید تعداد صحیحی فریم نمونه داشته باشد و درون فایل جا بگیرد. فریم آخرِ ناقص یا طول چانکی که از انتهای فایل میگذرد، ناقصبودن (truncation) فایل تلقی میشود، نه اینکه بیسروصدا ترمیم شود.
- کل ورودی و خروجی برشخورده همزمان در حافظه قرار دارند. بنابراین ورودی به ۲۵۶ مگابایت محدود است و نتیجهٔ RF64 که در این حد باشد بهصورت یک RIFF WAV معمولی نوشته میشود.
پرسشهای رایج
آیا برش بیاتلاف WAV نرخ نمونهبرداری یا عمق بیت را تغییر میدهد؟
خیر. خروجی بلوک فرمت اصلی و فریمهای صوتی کامل را کپی میکند، بنابراین نرخ نمونهبرداری، تعداد کانالها، عمق بیت کانتینر و تکتک مقادیر نمونهها ثابت میمانند.
آیا کپی بایتبهبایت صدا به معنای کپی بایتبهبایت فایل هم هست؟
خیر. بار دادهٔ صوتی نگهداشتهشده یکسان است، اما کانتینر WAV پیرامون آن با فیلدهای اندازهٔ جدید و بدون چانکهای فراداده بازسازی میشود، بنابراین چکسام دو فایل کامل با هم متفاوت است.
منابع
روش کامل، مثال محاسبهشده و همهٔ فرضهای این نتیجه در این صفحه آمده است: برشگر صدای WAV.