افزونه 1 آموزش ساخت يك شبيه ساز گفتار با Flash MX

  • شروع کننده موضوع Mahmoodi
  • تاریخ شروع
M

Mahmoodi

کاربر مهمان
منبع : از مجله شماره چهل و هشتم


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

در نسل قبل از فلش 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) فلش بهره گيريد.
اگر چه در ابتداي اين نوشته به كاربردهايي اشاره شد كه به طور معمول به كار يك كاربر معمولي نمي آيند، اما كاربر دهاي جالب ديگري نيز مي توانيد براي اين پروژه بيابيد . به عنوان مثال شايد بتوانيد نرم افزاري طراحي كنيد كه قرار هاي ملاقات يا برنامه روزانه شما ر ابه صورت صوتي به شما يادآوري مي كند.


منبع فناوري اطلاعات ايران
 

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

بالا