← All postsAdaptive Music in Godot 4: A Complete Tutorial
Read in:EnglishفارسیFrançais

آموزش کامل موسیقی تطبیقی در Godot 4

· 2 min readgodottutorialadaptive musicunity alternative

سیستم باس صوتی داخلی Godot 4 قدرتمند است، اما سطحی پایین دارد: کنترل صدا، افکت و مسیریابی کانال را در اختیارتان می‌گذارد، اما مفهومی از «وضعیت‌های بازی» یا کراس‌فید بین آن‌ها ندارد. در این آموزش، این لایه را از صفر می‌سازیم؛ با استفاده از قطعه‌ای خروجی‌گرفته‌شده از Mowjera، به یک اتولود (autoload) قابل‌استفاده‌ی مجدد به‌نام AudioManager می‌رسیم که در پروژه‌های بعدی‌تان هم به کارتان می‌آید.

در پایان این آموزش به چه چیزی می‌رسید

یک سینگلتون (اتولود) که فقط یک تابع بیرون می‌دهد — transition_to(state_name) — و کراس‌فید بین هر تعداد وضعیت موسیقاییِ لوپ‌شونده را با دقت نمونه (sample-accurate) و بدون کوچک‌ترین درزی در صدا مدیریت می‌کند.


گام ۱: خروجی گرفتن از یک قطعه برای Godot

از صفحه‌ی جزئیات هر قطعه در Mowjera، روی دکمه‌ی «دریافت بسته» (Get bundle) کلیک کنید. فایل ZIP شامل یک پوشه‌ی godot/ با فایل Mowjera.gd و یک پوشه‌ی stems/ با یک فایل WAV برای هر ترک در هر وضعیت است:

Mowjera_MyScore/
  godot/
    Mowjera.gd
  stems/
    Explore_melody.wav
    Explore_bass.wav
    Combat_melody.wav
    Combat_bass.wav
    ...

گام ۲: ایمپورت فایل‌های صوتی با لوپ فعال

Godot به‌طور پیش‌فرض فایل‌های WAV را لوپ نمی‌کند. برای هر stem:

۱. فایل را در پنل FileSystem انتخاب کنید. ۲. تب Import را باز کنید. ۳. در بخش Loop Mode، گزینه‌ی Forward را انتخاب کنید. ۴. روی Reimport کلیک کنید.

فراموش‌کردن همین یک گام، رایج‌ترین دلیلی است که یک ترک «لوپ‌شونده» هر بار تکرار می‌شود، یک کلیک شنیدنی دارد.

گام ۳: افزودن اتولود

۱. فایل godot/Mowjera.gd را در پوشه‌ی scripts/ پروژه‌تان کپی کنید. ۲. به مسیر Project → Project Settings → Autoload بروید. ۳. اسکریپت را اضافه کنید و نامش را AudioManager بگذارید.

گام ۴: فراخوانی ترنزیشن‌ها از کد گیم‌پلی

func _on_enemy_spotted():
    AudioManager.transition_to("Combat")

func _on_area_cleared():
    AudioManager.transition_to("Explore")

func _on_boss_defeated():
    AudioManager.transition_to("Victory")

اتولود، محوشدن نودهای AudioStreamPlayer وضعیت قبلی و اوج‌گرفتن نودهای وضعیت جدید را مدیریت می‌کند؛ زمان‌بندی این کار دقیقاً روی مرز میزان بعدی، بر اساس BPM قطعه‌تان انجام می‌شود — همان منطق کراس‌فیدی که Mowjera به‌صورت زنده در ادیتور مرورگر پیش‌نمایش می‌دهد.


نکات و مشکلات رایج مخصوص Godot

تست کراس‌فید

صحنه‌تان را اجرا کنید، یک تغییر وضعیت را trigger کنید و با هدفون گوش بدهید. اگر برای کسری از ثانیه، پیش از محوشدن کامل وضعیت قبلی، ملودی را «دوتایی» شنیدید، طبیعی است — یعنی کراس‌فید دارد درست کار می‌کند. اما اگر یک قطع ناگهانی یا کلیک شنیدید، بررسی کنید که stemهای هر دو وضعیت دقیقاً BPM و طول لوپ یکسانی داشته باشند (Mowjera این را به‌صورت خودکار تضمین می‌کند؛ ویرایش دستی stemها این تضمین را ندارد).

قطعات تطبیقی موجود در مارکت‌پلیس Mowjera را ببینید — همه‌ی آن‌ها با یک بسته‌ی Godot آماده برای همین گردش‌کار عرضه می‌شوند.

Share

Hear it instead of reading about it

Every score on the marketplace plays live in your browser — and the ✨ AI composer drafts an adaptive score from one sentence.

Browse the marketplace