قطع شدن صدای فلش

sogoli

Active Member
سلام
من از کد زیر برای اجرای فایلهای فلش استفاده می کنم:
axShockwaveFlash1.Movie = Application.StartupPath + @"\flash\1.swf";
وقتی از صفحه ایی که فلش در ان اجرا می شود، خارج می شوم ، هنو ظاهرا فلش در حال اجراست یعنی اگر فلش مورد نظر صدادار باشد وبه صفحه دیگری برم باز صدای ان شنیده می شود.چگونه می توان تعیین کرد که اگر از صفحه ایی که فلش در ان در حال اجراست ، به صفحه دیگری رفتم صداش قطع بشه. مرسی
 

the_king

مدیرکل انجمن
سلام
من از کد زیر برای اجرای فایلهای فلش استفاده می کنم:
axShockwaveFlash1.Movie = Application.StartupPath + @"\flash\1.swf";
وقتی از صفحه ایی که فلش در ان اجرا می شود، خارج می شوم ، هنو ظاهرا فلش در حال اجراست یعنی اگر فلش مورد نظر صدادار باشد وبه صفحه دیگری برم باز صدای ان شنیده می شود.چگونه می توان تعیین کرد که اگر از صفحه ایی که فلش در ان در حال اجراست ، به صفحه دیگری رفتم صداش قطع بشه. مرسی
لطفا همیشه زبان برنامه نویسی را در عنوان تاپیک مشخص کنید.

من کد نویسی فلش بلد نیستم در نتیجه نمی توانم راهنمایی تون کنم که در فلش چه کدی بنویسید که صداش
قطع بشه، تنها راهی که برای قطع کردن صدا بلدم کم کردن ولوم صدای WaveOut است که شامل صدای فلش
هم میشه.

به ابتدای کلاس فرم تان چند تا توابع API برای دسترسی به ولوم صدا و تشخیص دادن پنجره فعال اضافه کنید.
دو متغیر هم برای تشخیص مقدار ولوم صدا و قطع و وصل بودنش اضافه کنید :
کد:
[COLOR="Gray"]    public partial class Form1 : Form
    {[/COLOR]
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        private static extern IntPtr GetForegroundWindow();

        [System.Runtime.InteropServices.DllImport("winmm.dll")]
        private static extern int waveOutGetVolume(int uDeviceID, out uint dwVolume);
        [System.Runtime.InteropServices.DllImport("winmm.dll")]
        private static extern int waveOutSetVolume(int uDeviceID, uint dwVolume);

        private bool muted = false;
        uint volume = 0;

حالا برای اینکه موقع عوض شدن پنجره فعال صدا رو قطع و وصل کنید یک تایمر Timer1 به فرم اضافه کنید
و Enabled اش را True نمایید. کد های زیر رو در رخداد تایمر اضافه کنید :
کد:
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (this.Handle == GetForegroundWindow())
            {
                if (muted)
                {
                    muted = false;
                    waveOutSetVolume(0, volume);
                }
            }
            else
            {
                if (muted == false)
                {
                    muted = true;
                    waveOutGetVolume(0, out volume);
                    waveOutSetVolume(0, 0);
                }
            }
        }

پروژه نمونه پیوستی را ببینید : FlashMusic.zip
 

پیوست ها

  • FlashMusic.zip
    863.7 کیلوبایت · بازدیدها: 5

bitaroos

Member
سلام
من از کد زیر برای اجرای فایلهای فلش استفاده می کنم:
axShockwaveFlash1.Movie = Application.StartupPath + @"\flash\1.swf";
وقتی از صفحه ایی که فلش در ان اجرا می شود، خارج می شوم ، هنو ظاهرا فلش در حال اجراست یعنی اگر فلش مورد نظر صدادار باشد وبه صفحه دیگری برم باز صدای ان شنیده می شود.چگونه می توان تعیین کرد که اگر از صفحه ایی که فلش در ان در حال اجراست ، به صفحه دیگری رفتم صداش قطع بشه. مرسی

سلام

من چند تا روش پیشنهاد می کنم البته تضمین نمی کنم که جواب بدن

1- با Dispose کردن کنترل axShockwaveFlash1 ، که البته شاید اینکار زیاد جالب نباشه

کد:
axShockwaveFlash1.Dispose();

2- با stop کردن کنترل axShockwaveFlash1 که به احتمال زیاد جواب نمیده. فکر کنم فقط در یه حالت جواب میده، وقتی که فایل صوتی در فلش embed شده باشد.

کد:
axShockwaveFlash1.Stop();

3- اول در برنامه فلش یک پروژه جدید ایجاد کنید و بعد با استفاده از پالت behavior ، دستور stop all sounds رو به فریم اول اضافه کنید و بعد با فرمت swf ذخیره کنید. مثلا اسم اون رو 1.swf میزاریم. حالا با استفاده از کد زیر این فایل رو جایگزین فیلم در حال پخش می کنیم

کد:
axShockwaveFlash1.LoadMovie(1, @"C:\Users\Ali\Desktop\flash\1.swf");

توی دستوری که بالا نوشتم به جای اون یک می تونید اعداد دیگه ای رو هم بزارید که فکر کنم مقدار level مربوط به لایه باهاش کنترل میشه ولی مطمئن نیستم

4- فکر کنم با دستور زیر هم بشه به فریم مورد نظر پرش کرد، پس میایم مثلا توی فریم 100 یه behavior از نوع stop sound میدیم و با دستور زیر فیلم رو به فریم 100 پرش میدیم. البته این متد 2 تا آرگومان میگیره ، اولی مربوط به Target هست که من نمی دونم چیه (چون از برنامه نویسی فلش زیاد سر در نمیارم) و دومیش شماره فریم مقصد هست

کد:
//axShockwaveFlash1.TGotoFrame("????????", 100);

از بین این ها تقریبا مطمئنم که شماره 1 و 3 جواب میده. اگر چه روش های جالبی به نظر نمیان.

__
 

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

بالا