نوشته شده

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

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

Pause کرد صدا

در واقع اکشن اسکریپت متدی برای pause کردن صدا ندارد و عملی که می بایست انجام شود Stop کردن صدا می باشد و برای ادامه می بایست عمل play از محل ادامه تعیین شود.
این عمل نیاز به این دارد که ما آخرین محل در حال پخش را قبل از Stop کردن دریافت کنیم تا در زمان ادامه دادن بتوان با استفاده از play از ادامه صدا عمل پخش را شروع کنیم.
برای این کار نیاز داریم از soundChannel و خصوصیت .position استفاده کنیم تا بتوانیم این مقدار را در مرحله بعد در متد .play استفاده کنیم.

برای شروع این پروژه ابتدا از پانل Components دکمه ای را می کشیم و به Stage وارد می کنیم و instance name آن را play_btn قرار می دهیم و label آن را Play قرار می دهیم و دکمه دیگر با instance name ی با مقدار pause_btn قرار دهید یا lable و instance name مربوطه به مثال قبلی را با مقدار های Pause و pause_btn تغییر دهید. در نهایت می بایست مانند تصیر زیر دو دکمه در صفحه داشته باشید.

حال به بخش اکشن اسکریپت بر می گردیم و ابتدا می بایست همه کد های مربوطه به stop_btn مثال قبلی را حذف نمایید.

کد هایی که می بایست حذف شود:

stop_btn.addEventListener(MouseEvent.CLICK, onClickStop);
function onClickStop(e:MouseEvent):void{
myChannel.stop();

برای این که ما آخرین محل پخش شدن را در دسترس داشته باشیم نیاز داریم یک variable ایجاد کنیم و مقدار آخرین محل پخش را در زمان Stop کردن در آن قرار دهیم. ما به راحتی می توانیم یک variable ایجاد کنیم و مقدار آن را به صورت پیش فرض رو صفر ۰ قرار دهیم. ما نام این variable را lastPosition قرار می دهیم به کد زیر دقت نمایید :

var mySound:Sound = new Sound();
var myChannel:SoundChannel = new SoundChannel();
var lastPosition:Number = 0;
mySound.load(new URLRequest(”myFavSong.mp3″));
myChannel = mySound.play();

حال ما به کدهای مربوط به دکمه Pause می پردازیم زمانی که بر روی این دکمه کلیک می شود ما ابتدا به lastPosition مقداری که از SoundChannel ما دریافت می شود و خصوصیت position آن دریافت می کنیم. در زیر به کد مربوطه به pause_btn دقت نمایید :

var mySound:Sound = new Sound();
var myChannel:SoundChannel = new SoundChannel();
var lastPosition:Number = 0;
mySound.load(new URLRequest(”myFavSong.mp3″));
myChannel = mySound.play();
pause_btn.addEventListener(MouseEvent.CLICK, onClickPause);
function onClickPause(e:MouseEvent):void{
lastPosition = myChannel.position;
myChannel.stop();
}

ما حال می بایست در دکمه Play تغییراتی انجام دهیم که تا بتواند در زمان کلیک از آخرین محل عمل پخش را انجام دهد این کار به راحتی با دادن مقدار lastPosition به اولین آرگمان مربوطه به متد Play این کار امکان پذیر می باشد ، اگر توجه کرده باشید در ابتدا مقدار lastPosition را روی ۰ قرار دادیم با این کار در صورتی که تا به حال عمل pause انجام نشده باشد عمل play از محل ۰ که همان ابتدای صوت ما می باشد شروع می شود ، توجه داشته باشید که می بایست متد play را به myChannel نسبت دهید :

var mySound:Sound = new Sound();
var myChannel:SoundChannel = new SoundChannel();
var lastPosition:Number = 0;
mySound.load(new URLRequest("myFavSong.mp3"));
myChannel = mySound.play();
pause_btn.addEventListener(MouseEvent.CLICK, onClickPause);
function onClickPause(e:MouseEvent):void
{
        lastPosition = myChannel.position;
        myChannel.stop();
}
play_btn.addEventListener(MouseEvent.CLICK, onClickPlay);
function onClickPlay(e:MouseEvent):void
{
        myChannel = mySound.play(lastPosition);
}

حالا وقت این رسیده که با Ctrl+Enter پروژه خودتون تست نمایید.

تغییر ولوم (Volume) صدا

در آخر بخش صدا ها به ولوم صدا و کنترل بر آن توسط SoundChannel می پردازیم ، برای تغییر در ولوم صدا نیاز به استفاده از کلاس SoundTransform و خصوصیت SoundChannel.soundTransform می باشد.

کلاس SoundTransform دارای خصوصیات متغیری می باشد که مهم ترین برای ما .volome می باشد. استفاده از SoundTransform بسیار ساده می باشد همه چیزی که نیاز دارید این است که ابتدا یک متغیر بسازید و کلاس را به آن نسبت دهید و خصوصیات را اعمال نمایید و به خصوصیت .soundTransform مربوط به SoundChannel مربوطه متغیر ساخته شده را اعمال نمایید.

در ادامه کار را با ایجاد نمونه ای از کلاس SoundTransform و اعمال آن به myTransform شروع می کنیم :

var mySound:Sound = new Sound();
var myChannel:SoundChannel = new SoundChannel();
var myTransform = new SoundTransform();
var lastPosition:Number = 0;
mySound.load(new URLRequest("myFavSong.mp3"));
myChannel = mySound.play();

pause_btn.addEventListener(MouseEvent.CLICK, onClickPause);

function onClickPause(e:MouseEvent):void
{
        lastPosition = myChannel.position;
        myChannel.stop();
}

play_btn.addEventListener(MouseEvent.CLICK, onClickPlay);

function onClickPlay(e:MouseEvent):void
{
        myChannel = mySound.play(lastPosition);
}

در این مرحله ما می بایست مقداری به خصوصیت .volume  بر روی این نمونه بدهیم.مقداری مربوطه به خصوصیت .volume مقداری بین ۰ تا ۱ می باشد که ۱ به معنای نهایت ولوم و ۰ به معنای بدون صدا بودن می باشد ، شما می توانید مقدار های اعشاری بین ۰ تا ۱ را برای مقدار دهی استفاده کنید به طور مثال ۰.۵ به معنای ۵۰%  صدا می باشد.

در این مرحله ولوم را بر روی ۰.۵ که صدای متوسط می باشد (۵۰%) قرار می دهیم.

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

pause_btn.addEventListener(MouseEvent.CLICK, onClickPause);

function onClickPause(e:MouseEvent):void
{
        lastPosition = myChannel.position;
        myChannel.stop();
}

play_btn.addEventListener(MouseEvent.CLICK, onClickPlay);

function onClickPlay(e:MouseEvent):void
{
        myChannel = mySound.play(lastPosition);
}

حال این transform  را به عنوان خصوصیت .soundTransform مربوطه به SoundChannel اعمال می کنیم.

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

pause_btn.addEventListener(MouseEvent.CLICK, onClickPause);

function onClickPause(e:MouseEvent):void
{
        lastPosition = myChannel.position;
        myChannel.stop();
}

play_btn.addEventListener(MouseEvent.CLICK, onClickPlay);

function onClickPlay(e:MouseEvent):void
{
        myChannel = mySound.play(lastPosition);
}

شما می بایست همیشه به یاد داشته باشید استفاده از .soundTransform می بایست بعد از قرار دادن شی صدا در channel  شما باشد و نه قبل از آن. شما می توانید ولوم را با تست کردن Movie و صدا را به صورت متوسط بشنوید ولی با Pause و Play کردن صدا متوجه خواهید شد صدا دوباره زیاد می شود ، دلیل این می باشد که زمانی که صدای جدیدی به Channel وارد می کنید  همه soundTransform ها حذف می شود. ما این مورد را با اعمال  دوباره خصوصیت .soundTransform واقع در تابع onClickPlay حل می کنیم :

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

pause_btn.addEventListener(MouseEvent.CLICK, onClickPause);

function onClickPause(e:MouseEvent):void
{
        lastPosition = myChannel.position;
        myChannel.stop();
}

play_btn.addEventListener(MouseEvent.CLICK, onClickPlay);

function onClickPlay(e:MouseEvent):void
{
        myChannel = mySound.play(lastPosition);
        myChannel.soundTransform = myTransform;
}

حال movie را تست نمایید و به این نکته دقت کنید که این بار با Pause و Play کردن در ولوم صدا تغییری ایجاد نمی شود.

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


مطالب مرتبط

Molehill تحولی دوباره در دنیای وب!
امیدوارم به همان اندازه که نوشتن و جمع آوری این...
گروه فلش ایرانی در DeviantART
سلام خدمت دوستان دوستان فعال در www.deviantart.com و...
ذخیره محتویات MovieClip به صورت عکس
در این مطلب نحوه ذخیره محتویات یک MovieClip به صورت...
پخش صدا در اکشن اسکریپت ۳ – بخش اول
در این آموزش به پخش صدا در ActionScript 3.0 می پردازیم...

آدرس ایمیل شما :


اشتراک فید نظرات

تا به حال ۶ نظر به این مطلب داده شده است

  1. محمد شمس می‌گه:

    سلام

    موضوه خوبی را انتخاب نمودید.
    در صورت امکان مطلبی هم در مورد sound visualizer های خطی، ستونی، … تهیه بفرمایید که موضوع بسیار کاربردی و جالبی است.

    • ممنون از نظرتون محمد شمس عزیز
      انشاء الله در مطالب بعدی به این مورد خواهم پرداخت ، این موضوع در نسخه های قبلی فلش به صورت کامل قابل اجرا نبود ولی در ورژن جدید امکانات مناسبی برای ساخت نمونه پیشرفته و دقیق این موضوع وجود دارد.
      موفق و پیروز باشید.

  2. مطالب کاربردی که اخیرا منتشر کردید بسیار راه گشاست .
    آیا مطلب از منبعی اختباص شده است ؟

    _______________

    به نظر حقیر ، سایت قدری شلوغ شده و دیر لود می شود . آیا امکان این هست که قدری سایت سبک نر بشود ؟

    • با تشکر از نظر شما، محمد مهدی عزیز…
      این مطالب در واقع ترکیبی از ترجمه و تجربه کم بنده می باشد که به صورت مقاله ای فارسی ارئه شد، خوشحالم که کاربردی می باشد
      در واقع این مطالب چند ماه پیش تهیه شده اند و در انجمنی خصوصی نیز برای کاربران خاص به نمایش گزاشته شده است…
      —————-
      در مورد شلوغی سایت بنده قالب قبلی را به دلیل حجم بالا و شلوغی با قالب جدید تعویض کرده ام که کمی سرعت بارگزاری برای کاربران با اینترنت کم سرعت بهتر شود
      البته با توجه به امکانات سرور سعی می کنم با فعال سازی کش در برخی موارد و فرمت ها سرعت را تا حدی افزایش دهم.

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

  3. مهدی می‌گه:

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

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

    • سلام دوست عزیز
      می بایست یک مورد دیگر مانند mySound تعریف نمایید و با همان مراحل فایل صوتی جدید را بارگزرای و اجرا نمایید
      و یا با استفاده از توابع و ایجاد تابعی برای بارگزای و انجام تمامی مراحل به راحتی این کار را انجام دهید
      در کل اصل و شاکله کلی کار در این آموزش توضیح داده شده که شما می بایست بسته به نیازتان در پروژه خودتان از این موارد بهره ببرید

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

شما می توانید نظر خود را در اینجا وارد نمایید

* بخش های ستاره دار الزامی است

کاربر آنلاین