X
تبلیغات
پیکوفایل
رایتل
پشم سنگ عایق الاستومری
دوشنبه 3 اسفند‌ماه سال 1388
توسط: آلفا پک

آموزش ساخت یک شبیه ساز گفتار با Flash MX

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


در نسل قبل از فلش MX،(یعنی نسخه 5) برنامه نویسان Actionscript برای کنترل قطعات صوتی ناگزیر به استفاده از روش های مبتنی بر Keyframe/onEnterFrame بودند . در نسل جدید این نرم افزار،اضافه شدن متد (Sound.onSoundComplete) امکان کنترل بسیار دقیقتر صداها را میسر ساخته است . دقت رویداد OnSoundComplete در حدود یک دهم سرعت فریم است. بدین ترتیب در صورتی که پروژه فلش شما برای سرعت متداول 12فریم در ثانیه تنظیم شده باشد ، آنگاه دقت رویداد فوق در حدود یک صدوبیستم ثانیه خواهد بود که کاربرد مورد نظر ما در این نوشته بسیار مناسب است .
در این جا بد نیست که از ابتدا نکته ای یاد آوری کنیم تا ذهنیت دقیق تری حاصل کار داشته باشید. رویداد OnSoundComplete هم ،مانند دیگر رویدادهای فلش ، در صورتی که عملیات پیچیده و سنگینی همزمان با آن در جریان باشد (مانند انیمیشن های سنگین ) ممکن است دچار تاخیرهای کوتاهی بشود . در نتیجه در زمان بخش صدا، ممکن است Flash player نتواند تمام عملیات بار گذاری شده را با همان دقت مورد نظر شما انجام دهد و نهایتا احتمال ایجاد تاخیرهای ناخواسته به صورت « سکته» وجود دارد. این مساله کاملا به قدرت و سرعت پردازنده سیستم مقصد بستگی دارد و در سیستم های قدیمی تر تبدیل به مساله ای کاملا جدی خواهد شد.(حالا نظری به کد شماره یک بیندازید)
برای آنکه بتوانید کد فوق را آزمایش کنید، باید یک فایل صوتی در کتابخانه وارد کرده باشید و نام groovy را برای آن انتخاب کنید. برای این کار بعد از آن که یک فایل صوتی نمونه ساختید، از طریق منوی فایل و گزینه Import to library ، این فایل را به درون محیط فلش وارد کنید. در مرحله بعدی بر روی فایل صوتی خود که در پنجره کتابخانه باید دیده شود، کلیک راست کنید و از منویی که ظاهر می شود ، گزینه Linkage، پنجره دیگری ظاهر می شود که می توانید پارامترهای مورد نظر خود را در آن تنظیم کنید . در این پروژه ما باید نام groovy را در این پنجره تایپ کنیم .(برای آن که جعبه متنی مورد نظر فعال شود باید گزینه Export for ActionScript را تیک بزنید . با این کار گزینه دیگر Fram Export in the first هم فعال خواهد شد که در کاربرد ما باید چنین باشد .) این وضعیت در شکل 2 نمایش داده شده است . توجه داشته باشید که با این عمل ، از این به بعد می توانید در کدهای خود با قرار دادن نام این قطعه صوتی در درون عملیات های " " به آن ارجاع کنید . در زمان کامپایل شدن پروژه و تولید فایل های swf، نرم افزار فلش مراقب تمام سمبل های مورد استفاده خواهد بود و متصل بودن (Attach) آنها به Timeline را زیر نظر دارد و برهمین اساس محتوای پروژه در فایل swf در شبکه ای نظیر اینترنت جریان می یابد، محتوای پروژه و در واقع همان سمبل ها یکی یکی بر اساس همان ترتیب چیده شده توسط نرم افزار Flash player بار گذاری می شوند. سمبل هایی که فقط با اسکریپ به Timeline متصل شده باشند، به طور پیش فرض توسط فلش در زمان کامپایل شدن دیده نمی شود و در فایل swf قرار نمی گیرند. در واقع فلش به صورت پیش فرض تصور می کند که چنین سمبل هایی بی استفاده بوده اند. گزینه های Frame Export in first و Export for Actionscript برای جبران این موضوع تنظیم می شوند . به این ترتیب به فلش یادآوری می شود که سمبل ها از طریق اسکریپ مورد استفاده قرار گرفته اند و باید در فایل کامپایل شده swf گنجانده شوند .
در قطعه کد یک، قطعه صدایی با نام groovy توسط اسکریپ به Instance صدایی به نام myloop متصل شده است . در زمان اجرا شدن پروژه ، وقتی که پخش صدای myloop پایان می پذیرد، رویداد OnSoundComplete تلبع ( ) nexSound را فرا می خواند که این عمل باعث پخش مجدد صدا خواهد شد .
در اینجا ممکن است با خود فکر کنید، که انجام این کارها برای چیست؟ زیرا این کار را می توانستیم به صورت سر راست تری یعنی همان طور که در کد 2آمده، هم انجام دهیم .
در این روش، ترتیبی داده شده است که صدای groovy به تعداد هزار مرتبه پشت سر هم پخش شود. ویژگی ای که رویداد OnSoundComplete را متمایز می سازد، ذات دینامیک آن است . به این معنی که کاربر می تواند در هر زمان دلخواهی، صدا را تغییر دهد و با این روش پروژه هایی مانند میکسرهای صوتی طراحی کند.(بدین صورت که تابع بازگشتی، (در اینجا ( ) nextSound) می تواند در پایان هر قطعه صدایی، صدای دیگری را راه اندازی کند.)


سینتی سایزر نرم افزار با فلش
نمی دانم آیا تاکنون به نرم افزارهای ویژه ای که برای کاربران کم بینا طراحی شده اند، نگاهی انداخته اید یا نه؟ (در ویندوز این قابلیت تحت عنوان تنظیمات Accessability وجود دارد. بعضی از سایت های ویژه وب هم به همین منظور قابل استفاده بودند برای کاربران خاص، به چنین مکانیسم هایی مجهز هستند. همچنین ابزارهایی وجود دارند که در صورت عدم پشتیبانی سایت از قابلیت های فوق، باز هم با ارائه خدماتی آن را برای کاربران خاص قابل استفاده می کند.) این نرم افزارها وظیفه دارند تا بخش هایی از صفحه نمایش را که در نزدیکی اشاره گرماوس قرار می کیرند بزرگتر نمایش داده و ضمنا در صورت وجود متن در آن بخش ها، آن را به صورت صوتی ادا کند. به طور معمول حجم این چنین سینیتی سایزرهای نرم افزاری از چند مگا بایت کمتر نیست. اما ما می خواهیم به کمک فلش ابزار بسیار جمع و جوری بسازیم که کارایی نسبتا خوبی در مقایسه با نمونه های تجاری داشته باشد.
سیستم های قدیمی commodore64 و حتی Atary آتاری با آنکه پردازنده های بسیار ضعیفی (در قیاس با نمونه های امروزی) داشتند و کل حافظه آنها 64 کیلو بایت بود (آتاری 32 کیلو بایت حافظه داشت)، قابلیت سینتی سا سلیزر را به خوبی نمایش می گذاشتند. رمز موفقیت چنین سیستم هایی در آن بود که از ترکییب قطعات کوچک صدای انسان که از پیش در حافظه سیستم وجو داشت و allphone نام داشت، استفاده می شد. Allophone ها اصواتی نظیر صدای «ou» یا «th» بودند . بدین ترتیب نرم افزارهای ساده و ابتدایی که برروی سیستم هایی مانند کمودر64اجرا می شد، قادر بودندترکیبات متنی را تجزیه کرده و با چیندن آلوفن ها در کنار یکدیگر، گفتار صوتی را به خوبی شبیه سازی کنند. چرا ما این کار با در اختیار داشتن رویدادOnSoundComplete درفلش انجام ندهیم ؟
تنها مشکل شما تهیه آلوفن خواهد بود. برای این کار چندین راه حل پیش روی شما قراردارد. یکی از ساده ترین راه حل ها، جستجو در اینترنت است . برای اینکار می توانید از عبارت نظیر «speech emulation» یا«allophone» در موتورهای جستجو استفاده کنید.(سایت http://vivismo.com تعدادزیادی ازنشانی های شبیه سازی ها یا emulator رامی تواندبرایتان بیابید).
البته در اینترنت تعداد پروژه های سینتی سایزر سخت افزاری که به کمک پردازنده های بسیار کوچک ( مثلاPIC که در بازار ایران نیز به وفور یافت می شود ) قابل ساخت هستند، فراوان هستند. به طور معمول در این نوع پروژه های سخت افزاری، آلوفن ها به صورت فایل تهیه می شوند و درون حافظه های ویژه ای (مثلا EEPROM) ذخیره می شوند . شما در صورتی که کمی حوصله داشته باشید خواهید توانست از فایل های آماده چنین پروژه هایی نیز استفاده کنید. نشانی یکی از این سایت ها چنین است : http://alphanik.com.au/derekw/pictalker/mainhtm
روش دوم و شاید هم روش بهتر تهیه آلوفن ها ، آن است که خودتان دست به کار شوید و آلوفن های مورد نیاز خود را ظبط کنید، در این صورت اگر چه ممکن است ب هعلت کم تجربگی ، نتیجه اولیه چندان رضایت بخش نباشد ،امدر عوض آلوفن های فارسی در دست خواهید داشت.( این مطلب که آیا تا کنون آلوفن های فارسی تهیه شده باشند، موضوعی است که در حال حاضر بر نویسنده مشخص نیست.)
بازگشت به فلش
منشا فایل های آلوفن هر چه باشد باید آن ها را به درون فلش وارد (import)وارد کنید. یادآوری می کنیم که برای به دست آوردن نتیجه هر چه بهتر لازم است که فایل های آلوفن، دارای هیچ گونه سکوت اضافی در ابتدا و انتهای خود نباشند. برای اطمینان از این مساله می توانید از نرم افزارهای ویرایشگر صوت مانند Audition Adobe یا Cool edite کمک بگیرید.
نکته فنی و ظریف دیگر آن است که برای از بین بردن افکت صوتی مزاحم که به صورت صداهای «کلیک» ممکن است شنیده شوند. باید ابتداو انتهای نمونه های آلوفن ها را شیبدار یا به اصطلاح فنی تر fade in و fade out کنید. بعد ازاین کار لازم است که تمام نمونه ها را نرمالیزه کنید تا صدای یکنواخت و طبیعی تر به دست آورید.(نرمال کردن صدا به این معنی است که دامنه یا شدت صدا از حد مشخصی که آستانه اشباع نامیده می شود، بیشتر نشود. بدین ترتیب بلندترین بخش هریک از نمونه ها با یکدیگر برابر خواهند شد.)
بالاخره در صوترتی که قصد استفاده از این پروژه را در اینترنت داشته باشید، مناسب تر خواهد بود که نمونه های آلوفن ها را بهینه یا Optimize کنید تا از حجم آن ها کاسته شود.
پس از مراحل فوق، کتابخانه ای در فلش خواهید داشت که در آن تمام نمونه ها با نزدیکترین شکل نوشتاری خود نام گذاری شده اند.
سینتی سایزرها ی قدیمی قابلیت تبدیل متون معمولی به گفتار را نداشتند. در نتیجه برای اینکه واژه خاصی را تلفظ کنند، کاربر ناگزیر به نوشت متن دیگری بود که شباهت کمی به نوشته واقعی داشت. به عنوان مثال، برای تلفظ واژه Knowledge از عبارتی شبیه nnoleg استفاده می شد.(برای تلفظ واژه های فارسی این مشکل حادتر هم می شود) به این ترتیب یک سینتی سایزر، به انواع مختلفی تقسیم بندی می شود. سینتی سایزرهایی که قابلیت تبدیل متن به گفتار داشته باشند، سینتی سایزرهای متنی نامیده می شوند و سینتی سایزر از نوعی که تشریح شدو قرار است ما در اینجا آنرا با فلش بسازیم، سینتی سایزر فونتیک نام دارد.( اگر جویای نام هستیدو یا به ماجراجویی علاقه دارید، می توانید در این زمینه ها، خصوصا در مورد زبان فارسی کارکنید. مسلما جامعه ما به شدت به چنین فعالیت هایی نیاز دارد.)
در قطعه کد شماره 3 سورس کدی را ملاحظه می کنید که حجم زیادی از آن را برای پردازش رشته های متنی اختصاص یافته است تا بتواند نوشتار فونتیک(که از همان نامگذاری آلوفن ها بدست آمده است) را تشخیص داده و بر اساس آن قادر باشد آلوفن ها را یکی پس از دیگری بخش کند. در این قطعه کد ازعلامت| برای تفکیک آوفن ها استفاده شده است. البته شما می توانید از روش دیگری هم برای نام گذاری و نتیجه پردازش رشته های متنی استفاده کنید. به این ترتیب که به جای نام گذاری آلوفن ها در کتابخانه فلش به صورت مثلاaa یا uu یا oo و غیره از اسامی ساده مانند 01-02 کمک بگیرید در روش به کار گرفته شده در اینجا برای اینکه واژه Hello را بشنوید، باید تابع say را به صورت زیر فراخوانی کنید: ;Say("h|e|ll|oo|")
این تابع در سورس شماره 3 به صورت زیر عمل می کند:
ابتدا آرایه جدید ساخته کی شود،مثلا:
Aphone[0]="h"
Aphone[0]="e"
Aphone[0]="ll"
Aphone[0]="oo"
در مرحله بعد، نخستین صدا یعنی h به Instance صدا متصل شده توسط رویداد OnSoundComplete پس از تشخیص پایان آن، صداهای بعدی به همین ترتیب پخش می شوند. این عمل توسط تابع () makePhrase انجام می شود که صدای بعدی را در صف آلوفن در یافت کرده و آن را به Intance صدا متصل می سازد.

یک نکته فنی برای کار حرفه ای تر
در سورس کد فوق، تنها از یک Instance صدا استفاده شده است. نرم افزار فلش از چهار کانال صوتی کانال استریو پشتیبانی می کند. شما می توانید برای کاربردهای حرفه ای تر به جای استفاده از یک Instance صدا از تعداد بیشتری از آنها استفاده کنیدو هر یک از آن ها را به یک ()ViaSound.attachSound نسبت دهید. به این ترتیب شما خواهید توانست ازتمام قدرت هشت کانال صوتی (Mono) فلش بهره گیرید.
اگر چه در ابتدای این نوشته به کاربردهایی اشاره شد که به طور معمول به کار یک کاربر معمولی نمی آیند، اما کاربر دهای جالب دیگری نیز می توانید برای این پروژه بیابید . به عنوان مثال شاید بتوانید نرم افزاری طراحی کنید که قرار های ملاقات یا برنامه روزانه شما ر ابه صورت صوتی به شما یادآوری می کند.  

 

منبع :http://www.iritn.com/ITshow-news-5911.htm