PDA

View Full Version : شبیه سازی با C# و DirectSound



m_amin_t
سه شنبه 09 مرداد 1386, 10:10 صبح
سلام
من دارم روی یک پروژه شبیه سازی کار میکنم که توی بخش صداش به یه مشکلی برخورد کردم. پروژه من شبیه سازی حرکت یک هواپیمای مافوق صوت هستش. این پروژه به زبان C# و با استفاده از DirectX نوشته شده. موقعیت لحظه ای هواپیما تقریبا در هر ثانیه 500 بار برای بخش صدا فرستاده میشه. این رو هم بگم که بخش صدا رو با DirectSound پیاده سازی کردم. طبق قوانین فیزیک و جهان واقعی صدای یک شیء پرنده که بالاتر از سرعت صوت حرکت میکنه باید عقب تر از خود شیء حرکت کنه به عبارت دیگه مثلا اگه هواپیما داره از بالای سر ما رد میشه، بعد از رد شدن تازه ما باید صداش رو بشنویم. امیدوارم متوجه شده باشین که چی میگم. DirectSound امکاناتی از قبیل شبیه سازی پدیده داپلر رو داره ولی امکانی برای اینکه این تاخیر صدایی رو برای اشیاء پرنده ایجاد کنیم نداره. راه های مختلفی رو امتحان کردم و توی اینترنت هم زیاد گشتم ولی ظاهرا تا به حال کسی این کار رو نکرده و باید خودم یه الگوریتم جدید پیاده سازی کنم. آخرین الگوریتمی که خواستم باهاش این نیاز رو برطرف کنم این بود که در هر بار که موقعیت هواپیما برام فرستاده میشد با توجه به سرعت و جهت هواپیما، وضعیت هواپیما رو توی یک پشته یا صف ذخیره میکردم. در اصل 2 تا صف داشتم و یک پشته. یکی از صف ها برای حالت سرعت مافوق صوت ولی دورشونده از شنونده، یکی از صف ها برای سرعت پایین تر از سرعت صوت، پشته هم برای سرعت مافوق صوت و نزدیک شونده به شنونده. با استفاده از 3تا thread این پشته و صف ها رو کنترل میکردم که در هر زمان که وقتش رسید (یعنی اون مدت زمان تاخیر سپری شد (فاصله بخش بر سرعت صوت)) موقعیت هواپیما ست بشه و پخش بشه. این الگوریتم ظاهرا از نظر تئوری مشکلی نداره ولی در عمل علاوه بر حجم بالای پردازش و پایین آوردن سرعت برنامه، یه جاهایی از برنامه هم آنطور که باید جواب نمیداد و خراب میشد و گیر میکرد. برای همین از این الگوریتم هم بیخیال شدم. حالا میخواستم اگه راه حلی دارین لطف کنید و راهنماییم کنید. ممنون
یا علی

omid_Ahmadi
سه شنبه 09 مرداد 1386, 12:06 عصر
پست یک تاپیک در بیش از یک تالار ممنوعه!
موفق باشید.