برای تقسیم WAV، بایتهای فایل را به چند قسمت مساوی نبرید. هر خروجی سرآیند و داده کامل خودش را لازم دارد و نقطه برش باید روی مرز فریم صوتی باشد. نمونه این صفحه داده PCM16 را با پایتون کپی میکند؛ نرخ نمونه، کانال و مقادیر نمونه را تغییر نمیدهد.
فریم با بایت چه فرقی دارد؟
در PCM16، نمونه هر کانال دو بایت دارد. فریم تککاناله دو بایت و فریم دوکاناله چهار بایت است. بریدن وسط فریم میتواند آرایش نمونهها را خراب کند. کد تعداد فریم هر قطعه را از مدت هدف و نرخ میگیرد؛ مدت دقیقِ قابل نمایش، مضربی از یک فریم است.
اجرای نمونه
دریافت کد تقسیم PCM16. این نسخه عمداً فقط WAV فشردهنشده تککاناله یا دوکاناله با نمونه۱۶بیتی را میپذیرد. پایتون۳٫۱۲ و کتابخانه استاندارد کافی است؛ کد به سرویس خارجی متصل نمیشود.
python split-pcm16-wav.py "input.wav" "new-parts" --seconds 30
پوشه new-parts باید تازه باشد و والد آن وجود داشته باشد. اگر پوشه قبلاً هست، کد آن را جایگزین نمیکند. فایل اصلی فقط خوانده میشود. اگر خطا رخ دهد، پوشه نیمهکاره ممکن است باقی بماند؛ آن را خروجی کامل معرفی نکنید و برای اجرای دوباره پوشه تازه انتخاب کنید.
دفتر زمان چه چیزی نگه میدارد؟
کنار قطعهها فایل manifest.json ساخته میشود: نام قطعه، شماره فریم شروع، پایان غیرشامل، نرخ و زمان شروع در فایل اصلی. فرض کنید نرخ۸۰۰۰ و طول قطعه۱٫۵ثانیه است؛ مرز قطعه اول ۱۲۰۰۰فریم است. زمان محلی۰٫۲ثانیه در قطعه دوم به۱٫۷ثانیه در اصل برمیگردد. این جمع، تنها وقتی معتبر است که داده قطعه دستکاری زمانی نشده باشد.
چطور مطمئن شویم نمونهها حفظ شدهاند؟
- جمع تعداد فریمهای خروجی را با ورودی مقایسه کنید.
- داده PCM قطعهها را به ترتیب کنار هم بخوانید و با داده PCM ورودی مقایسه کنید؛ مقایسه کل بایت فایل WAV مناسب نیست، چون سرآیندها متفاوتاند.
- ابتدا و پایان قطعهها را گوش دهید. برش فنی میتواند وسط واژه باشد و برای پیادهسازی نامناسب شود.
- شناسه فایل اصلی و دفتر زمان را کنار خروجی نگه دارید؛ زمان قطعه را جای زمان اصل گزارش نکنید.
در آزمون محلی این کد، یک سیگنال ساختگی دوونیمثانیهای به قطعه۱٫۵ثانیه و۱ثانیه تقسیم و داده PCM دوباره مقایسه شد. این کنترل حفظ بایتهای نمونه است؛ کیفیت تشخیص گفتار، شنیداریبودن مرز کلمات یا اجرای مدل آزمایش نشده است.
این روش چه چیزی را حفظ نمیکند؟
کد متادیتای جانبی، نشانگرهای تدوین یا همه جزئیات سرآیند توسعهیافته را کپی نمیکند. خروجی را آرشیو بیتغییر همه فایل ننامید. همچنین overlap برای جلوگیری از قطع واژه ندارد. اگر همپوشانی اضافه کنید، ادغام متن تکراری و نگاشت زمان باید جدا طراحی شود؛ این نمونه چنین کاری نمیکند.
برای مشخصات ورودی از بازرسی محلی WAV استفاده کنید و مفهوم بازنمونهبرداری را جدا نگه دارید. موضوع این صفحه برش واقعی فایل است، نه تقسیم مجموعه ارزیابی.
پیش از فرستادن قطعههای صوت به اپرانگار، درباره نیاز واقعی به تقسیم، حفظ زمان و قالب تحویل با تیم هماهنگ کنید. منبع روش خواندن و نوشتن فریمها: مستند رسمی wave.