خانه » ادوبی فلش » پخش صدا در اکشن اسکریپت ۳ – بخش چهارم

پخش صدا در اکشن اسکریپت ۳ – بخش چهارم

با توجه به این که شاید پروژه نهایی ارائه شده در بخش سوم این آموزش کامل نمی باشد ، سعی می کنیم در این بخش از آموزش نکات ریزی که ممکن هست در کار با صدا ها و مثال های ذکر شده در آموزش قبل به آنها بر بخورید را در این مطلب توضیح دهیم  :

موردی که در آموزش قبلی احتمالا به آن بر خورده اید ، پخش چند باره با کلیک مجدد بر روی دکمه Play می باشد که این امر به دلیل عدم چک کردن در حال پخش بودن می باشد ، ما در این بخش با ایجاد variable ی با نام isPlay از نوع Boolean و مقدار دهی اولیه true به آن می توانیم با مقدار دهی این متغییر در طول برنامه و با شرطی ساده در تابع مربوز به پخش صدا جلوی پخش مجدد را بگیریم.

function onClickPlay(e:MouseEvent)
{
	if (! isPlay)
	{
		myChannel = mySound.play(lastPosition);
		myChannel.soundTransform = myTransform;
		isPlay = true;
	}
}

مورد بعدی برای مواردی که شما نیاز دارید دکمه Stop را هم به همراه Pause و Play داشته باشید که برای این مورد هم در کد زیر بدون حذف این مورد می توانید مشاهده نمایید.

function onClickStop(e:MouseEvent):void
{
	myChannel.stop();
	lastPosition = 0;
	isPlay = false;
}

مورد بعدی برای افرادی که کد را به صورت External می نویسند و نیاز به وارد کردن کلاس ها قبل از استفاده از آنها را دارند نیز در کد زیر مجموعه کلاس ها وارد شده قابل مشاهده می باشد.

این کد برای تمامی ورژن های نرم افزار فلش که اکشن اسکریپت ۳ را پشتبانی می کنند قابل استفاده می باشد

کد نهایی پروژه پخش صدا در اکش اسکریپت ۳ »

import flash.media.Sound;
import flash.net.URLRequest;
import flash.media.SoundChannel;
import flash.events.MouseEvent;
import flash.media.SoundTransform;

var mySound:Sound = new Sound();
var myChannel:SoundChannel = new SoundChannel();
var myTransform:SoundTransform = new SoundTransform();
var lastPosition:Number = 0;
var isPlay:Boolean = true;
mySound.load(new URLRequest("myFavSong.mp3"));
myChannel = mySound.play(0);
myTransform.volume = 0.5;
myChannel.soundTransform = myTransform;

pause_btn.addEventListener(MouseEvent.CLICK , onClickPause);
function onClickPause(e:MouseEvent)
{
	lastPosition = myChannel.position;
	myChannel.stop();
	isPlay = false;
}

play_btn.addEventListener(MouseEvent.CLICK , onClickPlay);
function onClickPlay(e:MouseEvent)
{
	if (! isPlay)
	{
		myChannel = mySound.play(lastPosition);
		myChannel.soundTransform = myTransform;
		isPlay = true;
	}
}

stop_btn.addEventListener(MouseEvent.CLICK, onClickStop);

function onClickStop(e:MouseEvent):void
{
	myChannel.stop();
	lastPosition = 0;
	isPlay = false;
}

توصبه می شود بخش اول مبحث پخش صدا در اکشن اسکریپت ۳ و بخش دوم مبحث پخش صدا در اکشن اسکریپت ۳ و بخش سوم مبحث پخش صدا در اکشن اسکریپت ۳ را نیز مطالعه نمایید

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

Print Friendly
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

درباره بهروز پولادرگ

متولد : ۵ مرداد سال ۱۳۶۷ ، حرفه : ادوبی فلش ، برنامه نویسی و طراحی وب ، طراحی گرافیک ، مالتی مدیا ، نرم افزار های تحت وب

40 نظر

  1. سلام

    مطلب خوبی بود.
    دو سوال:
    ۱. شما کرک MDMZinc 3.0.20 سراغ نداری؟ برای FP10.1.5 اصلا MDM کرک شده هست؟
    ۲. جهت حفظ امنیت پروژه، به غیر از swf-encrypt از ابزار مناسبی دیگری استفاده کرده‌اید؟؟

    تشکر و موفق باشید

    • سلام ، ممنون برای نظرتون محمد شمس عزیز
      ۱ – خیر متاسفانه این نسخه هنوز کرک نشده است… ولی برای ورژن فلش پلیر ۹ ورژن MDM ZINC 3.0 نسخه Silent موجود می باشد(کرک شده)
      ۲ – در واقع روش اصلی همان Swf Encrypt می باشد که هم برای حفظ کد و هم الگوریتم های اتصال به سمت سرور مورد استفاده قرار می گیرد که برای بیچیده شدن خروجی حاصله از این نرم افزار می توان رشته های متنی را با چند پیوند از رشته متنی ایجاد نمود تا امنیت بالا تری داشته باشد
      البته می توان با تغییرات در پسوند و…. هم کارهایی کرد که خیلی موثر نمی باشد ، و به نظر بنده لازم هم نیست ،البته برای استفاده برای ملتی مدیا هم فکر می کنم روش دیگری برای تغییر Header فرمت فایل وجود دارد که بنده تا به حال از این روش استفاده نکرده ام و اطلاعات زیادی در مورد این روش ندارم (در کل این روش را اصولی نمی بینم و توصیه هم نمی کنم)

      موفق و پیروز باشید

  2. سلام

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

    موفق باشید

    • سلام محمد شمس عزیز ، ممنون برای نظرات دقیق و زیباتون…
      خوب، توی دنیایی مجازی هم خوبه سعی کنیم کم مصرف باشیم ، و اون رو رواج بدیم 😉
      رنگ موها کاراکتر آواتار بنده یه داستانی داره که بماند…
      باز هم ممنون از دقت نظر و لطف شما
      موفق و پیروز باشید

  3. سلام بهروز جان…
    بلاگت خیلی قشنگ شده…

    مطالب واقعا مفیده!
    هر موضوع که تموم شد(مثلا پخش صدا)، یه کتاب PDF به همراه چند سورس نمونه قرار بده تا کاربردی تر و قابل دسترس تر بشه… 😉
    همیشه موفق و پیروز باشی…

  4. سلام دوباره…
    بهروز جان یه قالب خیلی قشنگ وردپرس پیدا کردم در باب سایت(نجوم و…)
    گفتم ببینم اگه وقت و حوصله داری با هم فارسیش کنیم! تقریبا کار اولم حساب میشه ولی به غیر از CSS هاش و نامنظم نشان دادن در IE هیچ مشکل حادی ندارم…
    اگه مشکلی نداشتی منتظرتم 😉
    EruDiTe.iR | MHM5000

  5. سلام استاد

    اگه وقت داری یه قالب برای من طراحی کنه داداش من هم یه کاربر تو مجید
    آنلاین است ولی هنوز یه قالب برا من درست نکرده !

  6. سلام آقا بهروز

    یه سوال داشتم و اونم اینکه من اگر بخوام بجای یک آهنگ از چند آهنگ استفاده کنم و به کارم دکمه های next و bak قرار دهم تا بتونم اهنگ ها رو عوض کنم باید در کد بالا چه تغییراتی بدم

    • سلام مهدی عزیز
      می توانید تابعی مانند نمونه زیر ایجاد کنید و برای هر مورد به صورت ساده فراخوانی کنید.

      function newSoundPlay(soundfile:String):void {
      mySound.load(new URLRequest(soundfile));
      myChannel = mySound.play(0);
      myTransform.volume = 0.5;
      myChannel.soundTransform = myTransform;
      }
      

      یک مثال ساده :

      newSoundPlay("newMp3file.mp3");
      

      موفق و پیروز باشید

  7. جناب آقای پولادرگ بنده بنده خیلی با کدها سروکار ندارم ولی قسمتی از فایل فلش را میخواهم بصورت کد باشد و شما خواهش میکنم جواب این سوال را برایم ارسال کنید :
    چگونه میتوانم فریمی را stop کنم و بعد از play شدن محتوای آن movieClip ، به فریم ۲ برود و فریم ۲ را نیز تا انتهای محتوای آن play کند؟
    شدیدا منتظر پاسخ شما هستم
    با تشکر فراوان استاد گرامی

  8. سلام
    رو این یه موضوع موندم و هر چی بیشتر فک میکنم به جایی نمیرسم
    تا حالا ۱۰۰ بار مطالبتون رو خوندم ولی شما هم اشاره نکردید :(
    میخوام بعد اجرای فلش هیج صدایی پخش نشه و زمانی که play میکنم پخش بشه(دقیقا همین نکته)با کلیک پخش کنه!
    اگه میشه لطف کنید یه مطلب مختصر یا یه فایل خیلی جزیی بذارید که همچین قابلیتی داشته باشه ممنون میشم.
    تشکر

  9. عـلیـــــرضــ ــا

    سلام آقای پولادرگ

    مرسی بابت آموزش کاملی که ارائه دادین. خیلی دنبالش بودم. واقعا ممنونم

    فقط یه خواهشی دارم! اگه میشه بگید چه قطعه کدی رو کجا باید اضافه کنم تا موزیک بعد از اتمامش چند بار یا بی نهایت تکرار بشه؟

    یه دنیا ممنون میشم اگه راهنماییم کنین

    • سلام

      راه اول راه ساده

      sound.play(0, 9999); //
      

      را دوم به صورت استفاده از رویداد complete و شروع مجدد در زمان تمام شدن پخش

      var sound:Sound = new Sound();
      var soundChannel:SoundChannel;
      
      sound.addEventListener(Event.COMPLETE, onSoundLoadComplete);
      
      sound.load("iflashlord.mp3");
      
      function onSoundLoadComplete(e:Event):void{
          sound.removeEventListener(Event.COMPLETE, onSoundLoadComplete);
          soundChannel = sound.play();
          soundChannel.addEventListener(Event.SOUND_COMPLETE, onSoundChannelSoundComplete);
      }
      
      function onSoundChannelSoundComplete(e:Event):void{
          e.currentTarget.removeEventListener(Event.SOUND_COMPLETE, onSoundChannelSoundComplete);
          soundChannel = sound.play();
      }
      

      موفق و پیروز باشید

  10. عـلیـــــرضــ ــا

    سلام
    خیلی ممنون
    من از روش اول که ساده تره استفاده کردم!

    یه سوال دیگه داشتم از حضورتون. من فایل صوتی رو به صورت خارجی بار گذاری کردم حالا اگه بخوام فایل SWF رو آپلود کنم(برای ساختن کد موزیک وبلاگ) باید فایل صوتی هم کنارش کنارش قرار بدم بعد اسم فایل صوتی رو اینجوری
    mySound.load(new URLRequest(”myFavSong.mp3″)); داخل پرانتز بنویسم یا باید آدرس اینترنتی فایل رو داخل پرانتز بجای اسم فایل بنویسم مثلا اینجوری
    mySound.load(new URLRequest(”http://alireza.persiangig.com/01.Mano%20Baroon%20%28ft%20Babak%29.mp3/″));

    امیدوارم تونسته باشم منظورمو برسونم

    • سلام
      مورد اول این که باید فایل رو در سرورهایی آپلود کنید که امکان دانلود بدون واسطه را برای شما فراهم می کنند که موردی که شما انتخاب کردید این امکان را ندارد
      مورد دوم این که برای نمونه مورد استفاده شما آدرس دهی به روشی که انجام دادید بهتر هست و لازم نیست فایل ها کنار هم باشد ولی اگر باشد بهتر هست
      مورد سوم این که آدرس فایل mp3 شما نباید به / تمام شود باید به .mp3 ختم شود
      موفق و پیروز باشید

  11. عـلیـــــرضــ ــا

    سلام
    مرسی

    به یه مشکل دیگه برخوردم! این دستور myChannel = voice.play(0,999); فقط تا وقتی که روی دکمه ی pause کلیک نشده پخش آهنگ رو تکرار می کنه بعد از کلیک روی pause و بعد از اون کلیک روی play این دستور اجرا میشه

    function onClickPlay(e:MouseEvent)
    {
    if (! isPlay)
    {
    myChannel = voice.play(lastPosition);
    isPlay = true;
    }
    }
    که فقط یه بار پخش میشه !
    از روش دوم هم استفاده کردم اونم همین مشکل رو داشت

  12. عـلیـــــرضــ ــا

    سلام
    من این کارو قبلا کرده بودم ولی وقتی یه جا روی pause کلیک کردم آهنگ از اونجا تکرار شد (یعنی ازlastPosition) نه از اول .

  13. عـلیـــــرضــ ــا

    سلام

    خب این کارو تو این قسمت انجام دادم:

    pause_btn.addEventListener(MouseEvent.CLICK , onClickPause);
    function onClickPause(e:MouseEvent)
    {
    lastPosition = myChannel.position;
    myChannel.stop();
    isPlay = false;
    }

    مشکل اینجاس که بعد از کلیک کردن رو pause و بعد از اون کلیک کردن رو play این کد اجرا میشه:
    myChannel = voice.play(lastPosition,999);
    که بعد از اتمام پخش ، آهنگ از اول تکرار نمیشه! از زمانی که روی دکمه ی pause کلیک کردیم پخش میشه!

    ببخشید اینقد مزاحم میشم…

    • سلام
      باید از رویداد complete برای زمان اتمام فایل صوتی استفاده کنید

      // این متغییر را در ابتدای کد تعریف کنید
      var soundChannel:SoundChannel;
       
      
      soundChannel = sound.play();
      soundChannel.addEventListener(Event.SOUND_COMPLETE, soundPlaybackEnded);
      
      function soundPlaybackEnded(event:Event):void
      {
          trace("sound playback ended");
      //اینجا کد پخش دوباره را قرار دهید
      }
      

      موفق و پیروز باشید

  14. عـلیـــــرضــ ــا

    مــــــرسی

    درست شد

  15. محمدحسن رمضانیان

    سلام

    این قسمت از آموزش مجموعه ی آموزش هاتون خیلی عالی و کامل بود.

    اما برای اینکه از اجرای چندباره موسیقی با کلیک بر روی دکمه Play جلوگیری کنید نظری دارم.

    می توانید از کاری که Media Player ویندوز ۷ یا در نسخه انجام شده ایده گرفت این کار بر این اساس است که دو دکمه

    Play و Pause را بر روی یکدیگر قرار دهید و در حال و اولین خط visible دکمه Pause را برابر با False.

    یعنی pause_btn.visible = false

    و به دکمه Play در هنگامی که رویداد Mouse_Click انجام می شود دکمه Pause ظاهر شود و دکمه Play پنهان و به

    صورت بالعکس برای رویداد Mouse_Click دکمه Pause انجام شود.

    یعنی در رویداد Mouse_Click دکمه Play

    play_btn.visible = false
    pause_btn.visible = true

    ……………………………………………………….
    ……………………………………………………….

    یعنی در رویداد Mouse_Click دکمه Pause

    play_btn.visible = true
    pause_btn.visible = flase

    امیدوارم مفید و کاربردی باشد آقای پولادرگ.

    • سلام
      بله این روش در اکثر پلیرهایی که با فلش هم ساخته می شود انجام می شود ، البته می توان یک دکمه هم ساخت و نماد درون آن را هم یک مووی کلیپ ایجاد کرد که در هر فریمش نماد ایست و یا پخش باشد و به جای مخفی و نمایان کردن فریم این شی را تغییر داد
      و صدها راه دیگر با توجه خلاقیت طراح و برنامه نویس …

      با تشکر از نظر شما دوست گرامی
      موفق و پیروز باشید

  16. محمدحسن رمضانیان

    سلام

    شما لطف کردید کد های AS3 و AS2 را برای Minimize کردن صفحه برای من قرار دادید اما من متوجه نشدم که این

    کدها را باید در نرم افزار Flash و در قسمت Action و فریم مورد نظرم قرار بدهم و خروجی بگیرم یا نه باید در نرم افزار

    MDM ZINC 4 قرار بدهم و در حقیقت مراحل کار رو نمی دونم که در حقیقت باید جه کارهایی باید انجام دهد تا بتواند

    صفحه مورد نظرم که با Flash Player اجرا می شود را Minimize کنم.

    مراحل کار به جه صورتی است و جه باید بکنم؟ خواهشمندم یه مقدار بازتر توضیح بدید چون من اولین بار است که با MDM

    ZINC کار می کنم.

  17. سلام. خسته نباشید بابت سایت فوق العادتون. من یه سوال داشتم اونم اینکه من یه سی دی مالتی مدیا ساختم که آهنگ پس زمینه داره. چندتا فایل ویدیویی هم دارم. میخوام وقتی ویدیوها پلی شد. آهنگ پس زمینه قطع بشه.راستی من با اکشن ۲ دارم کار میکنم. میشه منو راهنمایی کنید چیکار باید کنم؟

    • سلام
      شما تنها کافیست در بخش مربوطه به پخش ویدئو یا ولوم صدای مربوطه را ۰ نمایید ، یا کلا همه صدا ها را قطع نمایید ، یا این که دستور مربوطه به Stop شدن صدا را فعال کنید
      برای این که می بایست در بخشی پروژه خود که پلیر را تعریف نموده اید تابعی به این منظور تعریف کنید ،تابعی برای قطع موقت و تابعی برای فعال سازی مجدد ، و یک متغیر که فعال بودن یا نبود صدا را در آن ذخیره می کنید وقتی که تابع قطع اجرا شود می بایست این متغیر ما مثلا مقدار true بگیرد در ضمن این موارد را به صورت _global و یا root تعریف کنید تا در کل پروژه به آنها دسترسی داشته باشید
      در هر بخش شما ابتدا تست می کنید اگر صدا توسط این توابع قطع شده باشد متغیر شما true هست و حال اگر در بخشی غیر از ویدئو کاربر وارد شد شما می بایست صدا را با تابع دوم دوباره پخش نمایید این شرط می بایست روی دکمه همه بخش های باشد و برای بخش ویدئو برعکس باشد در صورتی که بخش ویدئو اجرا شد و مقدار false بود ، پخش قطع شود و در واقع مقدار true شود.
      همین کار را می توانید برای ولوم صدا نیز انجام دهید.

      در صورتی که موفق به انجام نشدید بخش کد پلیر صوتی خود را ارسال نمایید تا بر طبق کد شما بیشتر توضیح دهم
      موفق و پیروز باشید

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

    • سلام در مباحث بعدی به این موارد هم اشاره خواهد شد

      البته اصل یکی با چند مورد فرقی ندارد

      شما می توانید در زمان رویداد پایان یک فایل دستور تغییر فایل را اجرا کنید
      یا لیست فایل های صوتی را در یک آرایه قرار دهید با دکمه بعدی به اندیس بعدی آرایه برای پخش اشاره شود و…

      در کل کلیت پخش مهم هست و باقی موارد با تغییر در همین موارد قابل اجرا هست

      موفق و پیروز باشید

  19. سلام
    سایتتون بسیار عالیه و مفید
    تشکر
    من ی مشکل دارم، ممنون میشم کمکم کنید ، چطوری میشه تو فلش ، ی صوت پخش بشه و بعدش منتظر کلیک صحیح از کاربر بود و اگه غلط بود ، اخطار داده بشه و دوباره منتظر کلیک صحیح کاربر باشیم … راهکار کلیش چطوره ؟!

    • سلام

      ساختار کلی پخش صدا در مجموعه آموزشی که این مطلب بخش چهارم آن هست وجود دارد

      در مورد بخش اول که صدا پخش شود که طبعتا مشکلی ندارید

      حال دو گذینه مثلا دکمه به کاربر نشان می دهید که مربوطه به مثلا سوال اول هست ، شما در ابتدا در یک آرایه جواب های درست را مشخص کرده اید مثلا برای سوال یک گذینه دو و…

      حال با کلیک روی دکمه ها تابعی برسی جواب درست را فراخوانی می کنید مثلا checkAnswer( 1 , 2 ); که مثلا به سوال یک کاربر گذینه دو را جواب داده است

      در این تابع برسی می کنید که آیا جواب سوال یک ۲ بوده است اگر ۲ بود که یک صدا را طبق الگو پخش می کنید و اگر مثلا ۱ بود صدایی دیگر این بخش را توسط یک شرط ساده می توانید پیاده سازی کنید

      موفق و پیروز باشید

      موفق و پیروز باشید

  20. عالی آقای پولادرگ واقا عالی خیلی جالب و خیلی هم ساده و گویا توضیح دادین ممنون

ارسال جواب

آدرس رایانامه شما منتشر نخواهد شد.فیلد های اجباری علامت گزاری شده اند *

*

رفتن به بالای صفحه