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

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

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

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 کردن در ولوم صدا تغییری ایجاد نمی شود.

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

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

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

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

15 نظر

  1. سلام

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

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

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

    _______________

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

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

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

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

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

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

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

  4. با سلام مجدد و خداقوت
    اول تشکر کنم بابت ایجاد قسمت پیوست در سایتتون
    من به مشکل جدیدی برخوردم من ۳تا senec دارم که در هر senec یک آهنگ جدا گانه برای پخش قرار داده ام
    اما موقع اجرا پخش این آهنگ ها باهم تداخل ایجاد میکنند، هر آهنگی در بخش مربوطه خود پایان نمی یابد
    (اکشن اسکریپت۲)
    مثلا در۳senec دکمه ای برای رفتن به۲ senenc دارم که بعد از رفتن به این قسمت پخش آهنگ از کار میفته و صدا پخش نمیکنه و در حالت عادی پخش میشه و با رفتن به senec اول این آهنگ علاوه بر آهنگ خود این بخش اجرامیشه
    باتشکر

  5. مشکل پخش صدا و فیلم

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

    و یه مشکل دیگر که قسمتی براش در سایت ندیدم تا همون جا مشکلم رو بیان کنم پخش فیلم بود
    یک فیلم در یکی از senec هام قرار دادم که موقع اجرا در سیستم خودم اجرا میشه اما وقتی خروجی نهایی رو میگیرم و در سیستم دیگر تست میکنم فیلم پخش نمیشه با این خود فیلم رو هم در پوشه خروجی نهایی قرار دادم و فکر هم نمیکنم ربطی به مدیای سیستم آنها داشته باشه چون فیلم در حالت عادی در سیستم های دیگه پخش میشه اگر راه حلی به ذهنتون میرسه ممنون میشم مثل همیشه کمکم کنید
    باتشکر

    • سلام
      برای مورد اول از فریم استفاده کنید و از scene ها استفاده نکنید
      برای مورد دوم احتمالا در آدرس دهی به صورت مطلق آدرس دهی کرده اید مثلا C:// و… شما می بایست نسبت به محل آدرس دهی کنید مثلا اگر فیلم کنار فایل فلش شماست تنها کافیست نام فیلم را وارد نمایید
      البته توجه داشته باشید اگر فایل را در صفحه وب قرار دهید می بایست یا آدرس دهی مطلق وب (http://www.iflashlord.com/test.flv) داشته باشید یا متد Base را در تگ Object مقدار دهی کنید و آدرس محل فایل فلش را بدهید تا فلش بتواند به صورت نسبی آدرس دهی کند
      موفق و پیروز باشید

  6. سلام
    بسیار بسیار ممنون

  7. سلام
    یک مشکلی در روال انجام آموزش بود، اینکه وقتی ایست و اجرا می کردیم درست بود، ولی وقتی دوبار روی پلی کلیک شود، یا بیشتر! دکمه ایست تنها یکی را نگه میدارد. چطور باید رفع کرد؟

    اگر بخواهیم تنها یک کلیک دیده شود، وقتی در حال اجراست، کلید ایست دیده شود، با زدن آن، کلید به حالت اجرا تبدیل شده و صدا قطع شود، چگونه باید کد زد؟

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

  8. با سلام و تشکر از سایت خوبتون سوالی داشتم.من میخوام دکمه کنترل صدا طراحی کنم بطوری که کاربر خودش صدا رو به صورت دلخواهش کم یا زیاد یا بیصدا بکنه لطفا راهنمایی بفرمایید

    • سلام

      شما مثلا یک شی طراحی می کنید که با Drag کردن طبق نیاز شما در محدوده ای حرکت کند.
      حال می بایست از مختصات شی که حرکت می کند یک عدد بین ۰ تا ۱۰۰ برای اکشن دو بین ۰ تا ۱ برای اکشن ۳ ایجاد کنید
      می بایست موقعیت کنونی را با تقسیم کردن بر کل طول مجاز حرکتی و ضرب در ۱۰۰ به صورت یک درصد به دست بیاروید برای اکشن سه ۰.۵ برابر با ۵۰ درصد می باشد و اکشن دو باید همان ۵۰ وارد شود

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

      اگر به توضیح بیشتری نیاز دارید بفرمایید تا راهنمایی کنم

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

ارسال جواب

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

*

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