نکات کلیدی

  • برنامه‌های صوتی تعاملی به مدل پخش جریانی متفاوتی نسبت به پخش خطی نیاز دارند، به‌ویژه هنگام جابجایی مکرر بین بخش‌ها یا آهنگ‌ها.
  • تغییر هماهنگ با ضرب هم یک مشکل زمان‌بندی است و هم بافرینگ؛ بنابراین تصمیم‌گیری‌های حساس به زمان باید در مسیر اجرای پخش بومی انجام شوند.
  • واکشی از پیش قطعی بر اساس اقدامات احتمالی بعدی کاربر، گام اولیه عملی قبل از مدل‌های پیش‌بینی مبتنی بر رفتار پیچیده‌تر است.
  • تکه‌های مجازی به سیستم اجازه می‌دهند یک فایل رمزگذاری شده را ذخیره و تنها محدوده بایت‌های اولویت‌بندی شده را واکشی کند.
  • رمزگشایی انتخابی MP3 نیاز به مدیریت مرزهای کدک دارد؛ شروع پخش در تکه‌های دلخواه می‌تواند مصنوعات شنیداری ایجاد کند حتی با محدوده بایت صحیح.

در شرکت Colossal، پیش از تغییر جهت به سمت تجارت عامل‌محور، یک برنامه موبایل کشف ضرب (Beat Discovery) توسعه می‌دادیم. این برنامه به تهیه‌کنندگان اجازه می‌داد ضرب‌ها را آپلود کنند و هنرمندان با کشیدن در یک فید شخصی‌سازی‌شده، که توسط یک توصیه‌گر یادگیری ماشین با سیگنال‌های بلادرنگ رتبه‌بندی می‌شد، به کشف ضرب می‌پرداختند. مدل تعامل اصلی شامل سه عمل بود: پخش آهنگ فعلی از ابتدا، پرش به بخش قبلی یا بعدی، و قفل کردن یک بخش برای جابجایی بین آهنگ‌ها. هر کشیدن یا پرش نیازمند تغییر فوری، هماهنگ با ضرب و بدون مصنوع بود — چالشی بزرگ با وجود تأخیر موبایل و نوسان شبکه.

چالش‌های اصلی طراحی

برای موفقیت سیستم، محدودیت‌های زیر باید همزمان برآورده می‌شدند:

  • تغییر بخش‌ها: فوری، یکپارچه و بدون مصنوع
  • حلقه‌های بخش: بدون کلیک یا شکاف در مرزها
  • انتقال آهنگ: هماهنگ با میزان (bar) برای حفظ تداوم ریتمیک
  • پخش یکپارچه با وجود صرف ۲ تا ۳ ثانیه برای هر ضرب و تغییر ترتیب فید
  • قابلیت استفاده در اتصالات ضعیف 3G

مهم‌ترین بخش، یکپارچه‌سازی کدک، انتقال، بافرینگ، زمان‌بندی و پخش بومی به عنوان یک سیستم واحد بود.

چرا رویکردهای موجود ناکافی بودند؟

پیش از ساخت سیستم سفارشی، سه رویکرد رایج ارزیابی شدند.

پخش‌کننده‌های استاندارد صوتی

کتابخانه‌های پخش استاندارد برای پخش خطی مناسب بودند، اما قابلیت تغییر بخش و آهنگ هماهنگ با ضرب را نداشتند. معماری پل React Native (RN) نیز محدودیت ایجاد می‌کرد؛ تغییر آهنگ با عبور از پل RN حدود ۵ تا ۱۰ میلی‌ثانیه تأخیر و نوسان اضافه می‌کرد.

نمودار تأخیرها در پخش‌کننده‌های استاندارد

پروتکل‌های HLS و DASH

HLS و DASH برای پخش ترتیبی و تطبیقی مناسب‌اند، اما برای تغییرات ناگهانی و هماهنگ با ضرب طراحی نشده‌اند. این پروتکل‌ها وابسته به بافرینگ قطعات هستند و نمی‌توانند بخش‌های دلخواه را هدف‌گیری کنند.

پخش جریانی محدوده HTTP و پخش سمت سرویس‌دهنده

درخواست‌های محدوده HTTP برای واکشی بخش‌های خاص فایل کارآمدند، اما نیاز به بافرینگ و همگام‌سازی دقیق در سمت کلاینت داشتند. پخش سمت سرویس‌دهنده نیز وابستگی زیادی به زمان‌بندی و پهنای باند شبکه دارد.

راهکار نهایی: تکه‌های مجازی و پخش بومی

طراحی نهایی از بارگذاری کامل فایل جلوگیری کرد و با ذخیره یک فایل MP3 رمزگذاری‌شده برای هر ضرب، تولید توصیف‌گرهای فشرده تکه، واکشی محدوده بایت‌های اولویت‌بندی‌شده، رمزگشایی با زمینه گرم‌کننده MP3، و زمان‌بندی تغییرات در حلقه کنترل صوتی بومی، به نتیجه رسید.

تکه‌های مجازی و واکشی محدوده بایت

سیستم با تعریف تکه‌های مجازی (Virtual Chunks) که به محدوده بایت‌های خاصی اشاره دارند، امکان واکشی انتخابی را فراهم کرد. این تکه‌ها شامل فراداده‌ای مانند شناسه، زمان شروع، طول و اولویت هستند. با این روش، نیازی به دانلود کل فایل نیست و فقط بخش‌های ضروری واکشی می‌شوند.

رمزگشایی انتخابی MP3 و مدیریت مرزهای کدک

رمزگشایی انتخابی MP3 یکی از چالش‌های اصلی بود. کدک MP3 برای رمزگشایی به زمینه قبلی نیاز دارد؛ بنابراین شروع از یک تکه دلخواه می‌تواند مصنوعات شنیداری ایجاد کند. راهکار استفاده از زمینه گرم‌کننده (warm-up context) از تکه قبلی و استفاده از قاب‌های MP3 مجاور بود. برای این کار، سیستم رمزگشا را با یک بافر زمینه (معمولاً ۵۲۸۰ نمونه قبل از تکه هدف) مقداردهی اولیه می‌کند.

نمودار فرآیند رمزگشایی انتخابی MP3 با زمینه گرم‌کننده

زمان‌بندی بومی برای هماهنگی با ضرب

زمان‌بندی تغییرات درون حلقه کنترل صوتی بومی (native audio control loop) انجام می‌شود. این حلقه با فرکانس بالا وضعیت پخش را بررسی کرده و در زمان دقیق ضرب، تغییر اعمال می‌کند. برای اطمینان از هماهنگی با ضرب، سیستم از موقعیت ضرب فعلی و تأخیر تخمینی برای زمان‌بندی دقیق استفاده می‌کند. یک بافر دایره‌ای کوچک (معمولاً ۳۲ قاب صوتی) برای جبران نوسان‌های زمان‌بندی و اطمینان از عدم قطع صدا استفاده می‌شود.

واکشی پیش‌بینی‌کننده و مدل آینده

سیستم از واکشی قطعی بر اساس اقدامات احتمالی بعدی کاربر استفاده می‌کند. به عنوان مثال، پس از پخش یک بخش، تکه‌های بخش بعدی از قبل واکشی می‌شوند. گام بعدی می‌تواند معرفی مدل‌های پیش‌بینی مبتنی بر رفتار کاربر (مانند زنجیره مارکوف) باشد.

نتایج و دستاوردها

این سیستم در هر دو پلتفرم iOS و اندروید پیاده‌سازی و آزمایش شد. نتایج نشان داد که زمان تغییر بخش به کمتر از ۲۰ میلی‌ثانیه کاهش یافت و در ۹۹٪ موارد بدون مصنوع شنیداری بود. مصرف پهنای باند نیز به طور میانگین ۷۰٪ نسبت به دانلود کامل فایل کاهش یافت. این راهکار در اتصالات 3G و حتی با نوسان شبکه به خوبی عمل کرد.

نمودار عملکرد سیستم در مقایسه با روش‌های سنتی

جمع‌بندی

راهکار ارائه‌شده با ترکیب تکه‌های مجازی، واکشی محدوده بایت، رمزگشایی انتخابی با زمینه گرم‌کننده، و زمان‌بندی بومی، چالش پخش جریانی صوتی هماهنگ با ضرب را در موبایل حل می‌کند. این رویکرد می‌تواند در برنامه‌های مشابه مانند پخش موسیقی تعاملی، بازی‌های ریتمیک و اپلیکیشن‌های آموزشی صوتی نیز به کار گرفته شود.

برای مطالعه بیشتر درباره کدک MP3 می‌توانید به ویکی‌پدیا مراجعه کنید. همچنین اطلاعات کاملی درباره AVAudioPlayer و MediaPlayer در مستندات رسمی موجود است.