تنظیمکنندهٔ بلندی صدای WAV
هر نمونهٔ یک WAV فشردهنشدهٔ PCM یا IEEE-float را در یک ضریب دامنه ضرب میکند، با یک اسکن اوج اختیاری که تقویت مثبت را به هدروم (فضای خالی تا اوج) موجود محدود میکند. کانتینر اصلی کپی میشود و تنها بایتهای چانک دادهٔ صوتی آن بهصورت محلی بازنویسی میشوند.
یک فایل WAVE با کانتینر RIFF/RF64 و نمونههای PCM یا IEEE-float با ترتیب بایت little-endian، تا ۱۰۰ مگابایت. کدکهای فشردهٔ WAV به رمزگشا نیاز دارند و پذیرفته نمیشوند.
نتیجهها بدون تضمین درستی ارائه میشوند. روش و منابع در پایین صفحه منتشر شدهاند تا بتوانید محاسبه را بررسی کنید.
چگونگی کار
این ابزار چه چیزی را محاسبه میکند
تغییر بلندی صدای WAV یک ضرب است، نه عددی ثابت که به هر نمونه اضافه شود. افزودن یک مقدار ثابت شکل موج را از صفر دور میکند و آفست DC ایجاد میکند. ضرب نمونههای مثبت و منفی در همان ضریب، سکوت را در صفر نگه میدارد، تعادل کانالها را دستنخورده حفظ میکند و دینامیک نسبی ضبط را تا زمانی که مقداری به مرز سخت قالب برسد نگه میدارد.
این ابزار هر دو سوی آن عملیات را گزارش میدهد: بهرهای که واقعاً اعمال شده و اوج نمونهها پیش و پس از آن. وقتی حفاظت یک تقویت را کاهش میدهد، نتیجه این را بهصورت عددی میگوید، نه اینکه عدد درخواستی را موفق جلوه دهد در حالی که عدد دیگری به کار رفته است.
روش
NIST نسبت سطح میدان یا دامنه را با ۲۰ برابر لگاریتم در پایهٔ ۱۰ بیان میکند. حل این رابطه برای ضریب چنین میدهد:
gain dB = 20 × log10(output amplitude / input amplitude)
multiplier = 10^(gain dB / 20)
یک تنظیم منفی ضریبی کوچکتر از یک میدهد. یک تنظیم مثبت ضریبی بزرگتر از یک. -6.0205999 dB دقیقاً برابر 10^(-6.0205999 / 20) = 0.5 است؛ +6.0205999 dB برابر ۲ است.
پیش از دست زدن به نمونهها، پیادهسازی ساختار RIFF را میخواند. چانکها یک شناسهٔ چهارنویسهای، یک اندازهٔ محتوای ۳۲ بیتی و، وقتی طول محتوا فرد است، یک بایت لایهگذاری دارند. RF64 از همان چیدمان استفاده میکند اما طول صدا را در چانک ds64 خود ذخیره میکند. چانک fmt نمایش نمونهها را مشخص میکند و data نمونههای درهمبافتهٔ کانالها را در بر دارد.
نمایشهای پذیرفتهشده عمداً محدود و صریحاند:
| نوع نمونهٔ WAV | محدودهٔ ذخیرهشده | تفسیر تماممقیاس |
|---|---|---|
| PCM ۸ بیتی | بدون علامت ۰ تا ۲۵۵ | ۱۲۸ را کم کنید، سپس بر ۱۲۸ تقسیم کنید |
| PCM ۱۶ بیتی | علامتدار -۳۲٬۷۶۸ تا ۳۲٬۷۶۷ | تقسیم بر ۳۲٬۷۶۸ |
| PCM ۲۴ بیتی | علامتدار -۸٬۳۸۸٬۶۰۸ تا ۸٬۳۸۸٬۶۰۷ | تقسیم بر ۸٬۳۸۸٬۶۰۸ |
| PCM ۳۲ بیتی | علامتدار -۲٬۱۴۷٬۴۸۳٬۶۴۸ تا ۲٬۱۴۷٬۴۸۳٬۶۴۷ | تقسیم بر ۲٬۱۴۷٬۴۸۳٬۶۴۸ |
| شناور ۳۲/۶۴ بیتی | ممیز شناور IEEE | بهطور اسمی -۱ تا +۱ |
تماممقیاس مثبتِ عدد صحیح یک کد کوچکتر از قدر منفی آن است. بنابراین محاسبهٔ هدروم مثبتترین و منفیترین نمونه را جداگانه اندازه میگیرد:
positive headroom = largest positive code / measured positive code
negative headroom = absolute lowest negative code / absolute measured negative code
safe multiplier = min(positive headroom, negative headroom)
applied multiplier = min(requested multiplier, safe multiplier)
سکوت هیچ محدودیت اوج متناهیای ندارد. فایل شناوری که از قبل خارج از محدوده است حالت مقابل است: هیچ ضریب مثبتی نمیتواند آن را به زیر تماممقیاس برگرداند. حفاظت به جای تغییر جهت درخواست، ۰ دسیبل به کار میبرد و نویسنده هر مقدار خارج از محدودهای را که باقی مانده مهار و شمارش میکند.
پیش از ادامهٔ مطلب
بزرگترین نمونهٔ یک WAV برابر ۵۰٪ تماممقیاس است. بزرگترین تقویت ثابت با حفاظت از اوج چقدر است؟
حدود +۶٫۰۲۰۶ دسیبل. ضریب در دسترس ۱ / ۰٫۵ = ۲ است و نسبت دامنهٔ دو برابر ۲۰ × log10(۲) است. این یک نتیجهٔ اوج نمونه است، نه ادعایی دربارهٔ بلندی ادراکشده یا اوج واقعی (true peak) میان نمونهها.
یک مثال حلشده
تست فرمول یک WAV یکثانیهای مونو با PCM ۱۶ بیتی و پنج نمونه در ثانیه میسازد. کدهای نمونهٔ شناختهشدهٔ آن:
0, 16000, -16000, 8000, -8000
بهرهٔ انتخابشده -6.0205999 dB است، بنابراین ضریب دقیقاً ۰٫۵ است:
| مقدار | محاسبه | نتیجه |
|---|---|---|
| اوج پیش از تغییر | ۱۶٬۰۰۰ ÷ ۳۲٬۷۶۸ × ۱۰۰ | ۴۸٫۸۲۸۱۲۵٪ |
| ضریب | ۱۰^(-۶٫۰۲۰۵۹۹۹ ÷ ۲۰) | ۰٫۵ |
| نمونههای خروجی | هر کد منبع × ۰٫۵ | ۰، ۸۰۰۰، -۸۰۰۰، ۴۰۰۰، -۴۰۰۰ |
| اوج پس از تغییر | ۸٬۰۰۰ ÷ ۳۲٬۷۶۸ × ۱۰۰ | ۲۴٫۴۱۴۰۶۳٪ |
| نمونههای محدودشده | هر نتیجه در PCM ۱۶ بیتی جا میگیرد | ۰ |
| مدتزمان | ۵ فریم ÷ ۵ هرتز | ۱ ثانیه |
تست هر نمونهٔ خروجی و هر نتیجهٔ نمایشدادهشده را تأیید میکند. همچنین بایتهای دادهٔ اصلی را در فایل دانلودشده بازمیگرداند و فایل کامل را با منبع مقایسه میکند تا ثابت شود همهٔ بایتهای خارج از محتوای نمونهها بدون تغییر ماندهاند.
جلوگیری از کلیپ شدن چه چیزی را میتواند تضمین کند و چه چیزی را نمیتواند
این حفاظت از نوع اوج نمونه است. نمونههای خروجی ذخیرهشده را درون محدودهٔ عدد صحیح یا محدودهٔ اسمی شناور نگه میدارد. شکل موج آنالوگ بازسازیشده میتواند میان نمونهها به اوج برسد، بنابراین فایلی که از نظر نمونه امن است، بهطور خودکار از نظر اوج واقعی (true peak) برای تحویل پخش همگانی منطبق نیست. اندازهگیری آن به الگوریتم اوج واقعی با فرانمونهبرداری و یک استاندارد مشخص نیاز دارد.
این ابزار همچنین یک بهره برای کل فایل به کار میبرد. لیمیتر یا کمپرسور بهره را در طول زمان تغییر میدهد و نرمالسازی بلندی، انرژی برنامه و وزندهی فرکانسی را اندازه میگیرد. اینها عملیات متفاوتی با انتخابهای کیفی و سیاستی متفاوتاند؛ پشت این کنترل پنهان نشدهاند.
چه چیزی بایتبهبایت دستنخورده میماند
فایل دانلودشده کپی کامل کانتینر RIFF یا RF64 است. چیدمان کانالها، نرخ نمونهبرداری، عمق بیت، توسعهٔ fmt ، موقعیت نشانهها (cue)، توضیحات و چانکهای خصوصی ناشناخته در همان آفستهای بایتی میمانند. فقط بایتهای نمونه درون تنها محتوای data سطح بالا جایگزین میشوند.
این وفاداری یک استثنای عمدی دارد. فراداده میتواند حقایقی دربارهٔ شکل موج داشته باشد نه دربارهٔ خط زمانی آن: اوج ذخیرهشده، بلندی یکپارچه، چکسام یا نتیجهٔ تحلیل پس از هر تغییری در نمونهها کهنه میشود. این ابزار نمیتواند هر چانک خصوصی را با اطمینان تشخیص دهد، بنابراین آن بایتها را حفظ میکند و این محدودیت را صریحاً اعلام میکند، به جای اینکه فراداده را بیاجازه حذف کند یا وانمود کند آن را دوباره محاسبه کرده است.
مراحل انجام کار
- بررسی کنید که فایل یک کانتینر RIFF یا RF64 WAVE با ترتیب بایت little-endian باشد، سپس فهرست چانکهای لایهگذاریشدهٔ آن را پیمایش کنید تا دقیقاً یک بلوک fmt و یک بلوک data پیدا شود. در صورت نیاز، طول دادهٔ ۶۴ بیتی RF64 را از ds64 بخوانید.
- تعداد کانالها، نرخ نمونهبرداری، تراز بلوک، عمق بیت و برچسب قالب را بخوانید. WAVE_FORMAT_EXTENSIBLE را فقط زمانی باز کنید که دقت معتبر آن کل ظرف نمونه را پر کند؛ کدکهای فشرده، RIFX با ترتیب بایت big-endian و عرض فریمهای ناسازگار را رد کنید.
- هر نمونهٔ PCM ۸، ۱۶، ۲۴ یا ۳۲ بیتی، یا هر نمونهٔ IEEE-float ۳۲ یا ۶۴ بیتی را رمزگشایی کنید و بزرگترین دامنهٔ مثبت و منفی را اندازه بگیرید. مقادیر شناور نامتناهی را به جای انتشار NaN یا بینهایت رد کنید.
- تغییر دسیبل درخواستی را با رابطهٔ «ضریب = ۱۰ به توان (بهرهٔ dB تقسیم بر ۲۰)» به یک ضریب دامنه تبدیل کنید. وقتی جلوگیری از کلیپ شدن برای یک تقویت روشن است، آن ضریب را به حد هدروم علامتدار کوچکتر کاهش دهید.
- فایل منبع کامل را در قطعات محدود کپی کنید. در چانک data کپی، هر نمونهٔ هر کانال را در همان ضریب ضرب کنید، PCM عدد صحیح را بهصورت متقارن به نزدیکترین کد گرد کنید و هر نتیجهٔ خارج از محدوده را در تماممقیاس دیجیتال مهار کنید.
- بهرهٔ واقعی، اوجهای اندازهگیریشده، تعداد نمونههایی که نیاز به محدود شدن داشتند و مدتزمان بدون تغییر را گزارش دهید. کانتینر کپیشده را بهعنوان یک دانلود WAV جداگانه ارائه دهید؛ فایل منبع دستنخورده میماند.
فرضها
- صدای پشتیبانیشده PCM عدد صحیح little-endian با ۸، ۱۶، ۲۴ یا ۳۲ بیت، یا IEEE-float با ۳۲ یا ۶۴ بیت است. کدکهای فشردهٔ WAV و RIFX با ترتیب بایت big-endian به رمزگشا یا تبدیل ترتیب بایت نیاز دارند و رد میشوند.
- WAVE_FORMAT_EXTENSIBLE زمانی پشتیبانی میشود که تعداد بیتهای معتبر آن صفر یا برابر با عرض ظرف باشد. نمونههای با دقت کاهشیافته، مانند ۲۴ بیت معتبر که در ظرفهای ۳۲ بیتی چپچین شدهاند، به جای تفسیر با حدس و گمان رد میشوند.
- همان ضریب ثابت به هر نمونه در هر کانال اعمال میشود و تعادل کانالها و دینامیک نسبی حفظ میشود. این تنظیم بهرهٔ اوج است، نه نرمالسازی بلندی بر حسب LUFS، فشردهسازی، لیمیت کردن در طول زمان، نمونهبرداری مجدد یا دیترینگ.
- حفاظت از اوج فقط یک بهرهٔ مثبت درخواستی را محدود میکند. اگر منبع IEEE-float از قبل خارج از محدودهٔ اسمی -۱ تا +۱ باشد، تقویت اعمالشده ۰ دسیبل میشود و آن نمونههای خارج از محدودهٔ موجود همچنان مهار و شمارش میشوند؛ این ابزار یک تقویت را بیسروصدا به تضعیف تبدیل نمیکند.
- PCM عدد صحیح پس از ضرب به نزدیکترین کد نمونهٔ قابل نمایش گرد میشود. در حالتهای دقیقاً نیمه، قدرهای مثبت و منفی برابر بهطور یکسان از صفر دور میشوند تا این عملیات گرد کردنِ وابسته به علامت ایجاد نکند.
- چانکهای RIFF و موقعیتهایشان خارج از محتوای data بایتبهبایت بدون تغییر میمانند. این کار نشانهها (cue) و فرادادهٔ کانالها را سر جای خود نگه میدارد، اما هر فرادادهٔ تعبیهشدهٔ اوج، بلندی، چکسام یا تحلیل میتواند نمونههای قدیمی را توصیف کند و دوباره محاسبه نمیشود.
- ورودی به ۱۰۰ مگابایت محدود است. مرورگر منبع و خروجی کپیشده را همزمان نگه میدارد، در حالی که حلقههای اسکن، کپی و بازنویسی در قطعات محدود نوبت را واگذار میکنند تا نوار پیشرفت و دکمهٔ لغو پاسخگو بمانند.
پرسشهای رایج
آیا تغییر بلندی صدای WAV ضبط را آپلود یا فشرده میکند؟
خیر. مرورگر مقادیر نمونههای فشردهنشده را بهصورت محلی میخواند و بازنویسی میکند، سپس یک دانلود WAV جداگانه ارائه میدهد. از کدک با اتلاف استفاده نمیکند، صدا را دوباره نمونهبرداری نمیکند و فایل را به سرور نمیفرستد.
منفی ۶ دسیبل با شکل موج WAV چه میکند؟
تغییر -۶٫۰۲۰۶ دسیبل دامنهٔ هر نمونه را دقیقاً در یکدوم ضرب میکند. بلندی ادراکشده لزوماً دقیقاً نصف به گوش نمیرسد؛ این ابزار دامنهٔ نمونهها را تغییر میدهد، نه بلندی روانصوتی (سایکوآکوستیک) را بر حسب LUFS.
وقتی یک WAV را بلندتر میکنم، ابزار چگونه از کلیپ شدن جلوگیری میکند؟
ابتدا بزرگترین نمونهٔ مثبت و منفی را اندازه میگیرد، ضریب ثابتی را که هر سمت پیش از رسیدن به تماممقیاس میتواند بپذیرد محاسبه میکند و تقویت درخواستی را به حد کوچکتر محدود میکند. از لیمیتر متغیر با زمان استفاده نمیکند و دینامیک نسبی شکل موج را تغییر نمیدهد.
چرا بهرهٔ اعمالشده با بهرهای که درخواست کردم فرق دارد؟
اوج منبع هدروم دیجیتال کمتری از آنچه تقویت درخواستی نیاز داشت باقی گذاشته بود و جلوگیری از کلیپ شدن فعال بود. نتیجه بهرهٔ ثابت واقعی را نشان میدهد، در حالی که با خاموش کردن حفاظت، درخواست عیناً اعمال میشود و نمونههایی که ناچار مهار شدهاند شمارش میشوند.
آیا تنظیم بهرهٔ WAV تعادل استریو یا مدتزمان را تغییر میدهد؟
خیر. برای هر کانال همان ضریب به کار میرود و تعداد نمونهها، نرخ نمونهبرداری و چیدمان کانالها تغییر نمیکند. بنابراین مدتزمان و موقعیت نشانههای (cue) موجود ثابت میماند.
آیا پس از تغییر بلندی صدا، همهٔ فرادادهٔ WAV هنوز دقیق است؟
هر بایت غیرصوتی حفظ میشود، که فرادادهٔ ساختاری و موقعیتی را سر جای خود نگه میدارد. با این حال، ارقام ذخیرهشدهٔ اوج، بلندی، چکسام یا تحلیل میتوانند شکل موج قدیمی را توصیف کنند؛ وقتی این ارقام بخشی از مشخصات تحویل هستند، آنها را در یک ویرایشگر صوتی آگاه از فراداده دوباره محاسبه کنید.