روند طراحي ضبط صدا در Windows Phone7

در يکي از اولين پوسترهاي تبليغاتي که در سال 1984 براي معرفي Macintosh منتشر شد، Apple براي طراحي ماوس خود چنين عنوان کرد که بسياري از ماوس ها داراي دو کليد مي باشند اما مکينتاش داراي يک کليد است. بنابراين بسيار سخت است که دکمه اي را اشتباها فشار داد. به عبارت ديگر شرکت Apple محصول تک دکمه اي خود
شنبه، 19 آذر 1390
تخمین زمان مطالعه:
موارد بیشتر برای شما
روند طراحي ضبط صدا در Windows Phone7

 روند طراحي ضبط صدا در Windows Phone7
روند طراحي ضبط صدا در Windows Phone7


 






 
در يکي از اولين پوسترهاي تبليغاتي که در سال 1984 براي معرفي Macintosh منتشر شد، Apple براي طراحي ماوس خود چنين عنوان کرد که بسياري از ماوس ها داراي دو کليد مي باشند اما مکينتاش داراي يک کليد است. بنابراين بسيار سخت است که دکمه اي را اشتباها فشار داد. به عبارت ديگر شرکت Apple محصول تک دکمه اي خود را با ماوس هاي معمول مقايسه مي کند، شايد براي شما هم بارها اتفاق افتاده است که مثلاً به جاي فشار دادن دکمه چپ ماوس به اشتباه دکمه راست را کليک نموده ايد و يا برعکس. حال تصور کنيد اگر ماوس به جاي دو دکمه، داري يک دکمه بود در نتيجه امکان فشار دادن دکمه اي به اشتباه منتفي است.
البته بايد اذعان داشت که اين حرف کاملاً درست نيست. زماني که ميزان استفاده کاربر از ماوس زياد باشد، باز هم هنگام کار با توابع چندگانه آن هم با ماوسي که فقط داراي يک کليد است، امکان دارد کاربر گمراه شود. اما امکان فشار دادن يک دکمه به اشتباه، قطعاً بحثي قانع کننده براي ساده سازي طراحي UI مي باشد.
حذف موارد زائد UI هنگامي که با برنامه ريزي براي تلفن هاي هوشمند سرو کار داريم، از اهميت بيشتري برخوردار خواهند بود. تلفن ها خيلي بزرگ نيستند. بنابراين امکان طراحي دکمه هاي زياد براي آنها مقدور نمي باشد، و همچنين انگشتاني که با اين دکمه ها سروکار خواهند داشت به دقت انگشتاني که با دکمه هاي ماوس کار مي کنند، نيستند. هنگامي که شما با ماوس کار مي کنيد با انگشت اشاره همان دستي که ماوس را در اختيار داريد دکمه ها را فشار مي دهيد، در صورتي که وقتي با تلفن کار مي کنيد يا از انگشت شصت و يا از انگشت اشاره دست ديگر کمک مي گيريد بنابراين دقت کار پايينتر مي آيد. وجود دکمه هاي زياد هم به معناي افزايش ضريب خطا هنگام فشار دادن اين دکمه ها مي باشد.
بياييد نگاهي به روي ديگر روي سکه بياندازيم، محدودسازي UI اغلب باعث محدود شدن تابعيت برنامه مي شود. بنابراين تصميم گيري براي اينکه کدام خط مشي را دنبال کنيم به يک تنازع و کشمکش تبديل گشته است. زندگي سرشار از قياس ها و تصميم گيري ها است.

روند طراحي ضبط صدا در Windows Phone7

سير تکاملي طراحي
 

در ابتدا تصور مي کردم بسيار مضحک خواهد بود که بخواهم برنامه اي براي Windows Phone7 بنويسم که قادر باشد يادداشتهاي آوايي کوتاه را ذخيره نمايد. شايد برايتان اين پرسش پيش آيد که منظور از يادداشت آوايي چيست؟ يادداشتهاي نظير «يادت باشه که لباس ها را از خشک شويي بگيري» و يادداشتهايي از اين دست. چنين برنامه اي بسيار سودمند خواهد بود، اما در اين برنامه ها هنوز ايراداتي وجود دارد که سبب مي گردد ما از بکارگيري اين برنامه ها در مکانهاي عمومي خودداري نماييم، اين امر به نوبه خود سبب گشته است تا فعلاً از ارائه Windows Phone7 چشم پوشي کنيم.
اما طراحي برنامه بيشتر از آنچه که من مي پنداشتم مشکل و پر دردسر بود. حتي پيش از آنکه من يک خط از برنامه را بنويسم، برنامه را چندين بار در ذهنم مرور و مرتب آن را از نو طراحي مي کردم.
در ابتدا، تصور من بر آن بود که بهتر است که فقط دو دکمه طراحي کنم که با واژه هاي Play ,Record برچسب خورده باشند، که هر کدام از آنها مانند يک کليد تبديل وضعيت عمل کنند. يعني بار اول که شما دکمه Record را فشار مي دهيد، عمليات ضبط آوار مورد نظر شما آغاز مي گردد و اگر آن را دوباره فشار دهيد عمليات ضبط متوقف مي شود. برنامه داده هاي آوايي را در جاي اختصاص يافته براي آن ذخيره مي کند. اکنون اگر دکمه Play را فشار دهيد داده هاي آوايي ذخيره شده براي شما پخش مي گردند. هر بار که شما دکمه Record را فشار مي دهيد داده هاي جديد جاي داده هاي پيشين را مي گيرند. به اين صورت برنامه نياز نخواهد داشت تا براي آن يک کليد Delete اختصاصي جهت پاک نمودن داده ها در نظر گرفت.
من حتي با اين موضوع بسيار کلنجار رفتم، بطوريکه قصد داشتم برنامه را طوري تغيير دهم تا فقط به کليد Play وابسته باشد، و براي اينکار مي خواستم با تکميل ويژگي کنش پذيري آوايي (Voice-activation) به مقصود خود دست يابم! اين برنامه به طور پيوسته آواهاي پيرامون شما را ضبط مي کرد و فقط آنهايي را که شامل برخي از صداهاي خاص باشد را ذخيره مي نمود. اما به نظر کار دشواري است زيرا برنامه مي بايست صداهاي زمينه را از صداهاي مورد نظر تشخيص و تفکيک نمايد، که براي اين کار نياز است يک سري تنظيمات آستانه را به صورت دستي روي آن اعمال کنيم. من طراحي تک دکمه اي را به فراموشي سپردم.
طرح و نقشه اصلي من براي يک يادداشت اوايي خوب و مناسب بود، اما هنگامي که سخن از چند يادداشت آوايي به ميان مي آمد، وضعيت به گونه ديگري بود. سپس من اينطور انديشيدم که برنامه يک تک فايل آوايي را ذخيره کند و پس از آن يادداشت هاي آوايي بعدي را به انتهاي فايل هاي پيشين اضافه کند. چون اين فايل آوايي يک فايل بزرگ خواهد شد. کليد Play همه يادداشتهاي آوايي را پشت سرهم پخش خواهد نمود. البته اين برنامه نمي تواند که به اين فايل آوايي اجازه دهد تا بطور نامحدود بزرگ شود، بنابراين مشخصاً وجود دکمه Delete ضروري به نظر مي رسد تا بتواند فايلها را پاک کند ولي چون برنامه تمام فايلها را به يکديگر مي چسباند در نتيجه بطور يکپارچه فايل هاي آوايي را پاک و در نتيجه يادداشتهاي همگي حذف مي گردند.
نه، اين ايده هم جالب به نظر نمي رسد. من نياز دارم برخي از فايل هاي مربوط به يادداشتهاي آوايي خود را نگاه دارم و در صورت تمايل آنها را به طور مجزا حذف نمايم. بنابراين بايد راه کار ديگري را به کاربران ارائه کنم تا برنامه فايل ها را بطور مجزا براي پخش يا حذف کردن در اختيار کاربر قرار دهد، بنابراين کار دشوارتر مي گردد و برنامه پيچيده تر مي شود. آشکارا چيزي که من نياز داشتم يک ListBox بود، و همچنين راه کارهايي که بتوان هر يادداشت را براي کاربر مشخص نمايد، شايد اين کار با دکمه هاي کليدي که توسط کاربر ارائه مي شود بصورت يک نام براي فايل مورد نظر ممکن باشد.

روند طراحي ضبط صدا در Windows Phone7

تلفن ها خيلي بزرگ نيستند. آنها نمي توانند کليدهاي زيادي را در خود جاي دهند.
 

نه، نه، نه. اينطور نيست! من يک نگاه اجمالي به ماشين پاسخگوي تلفن خود انداختم. هر تماس با پيغام بطور مجزا ضبط گرديده است، اما آنها به روشي ساده مرتب و شماره گذاري گرديده اند. کليد Play با کليدهاي انتقال دهنده Next , Previous کامل شده است. هرگاه يکي از اين کليدها را فشار مي دهم به پيغام بعدي و يا پيشين دست پيدا مي کنم. هرگاه که يکي از پيام ها پاک کردند باقي پيام ها از نو مرتب و شماره گذاري مي شوند. من مي دانستم که من نمي خواهم يادداشتهاي خود را شماره گذاري کنم. اما مي توانستم اين مزيت را به تلفن خود اضافه نمايم که قادر باشد جزييات بيشتري مانند زمان ضبط پيام، مدت آن و حجم پيام در اختيارم قرار دهد.
بالاخره من موفق شدم شکافي در دل اين مشکل پديد آورم و گامي به جلو بردارم، زماني امکان انجام اين امر برايم فراهم شد که دريافتم مي توانستم ListBox را روي صفحه نمايش اصلي برنامه قرار دهم و از آن نه تنها براي انتخاب يادداشتها بلکه براي اجراي مجدد استفاده نمايم.

کاربرد برنامه
 

البته طراحي نهايي من مقايسه بود بين ساده سازي هاي صورت گرفته و پيچيدگي يک يادداشت سيستم مديريت. پروژه قابل دانلود SpeakMemo (يادداشت سخنگو) براي Silverlight براي Windows Phone نوشته شده و نيازمند توسعه ابزارهاي Windows Phone7 مي باشد. شما مي توانيد برنامه را روي نمونه ساز تلفن (emulator phone) اجرا نماييد و خواهيد ديد که اين برنامه چقدر عالي کار خواهد کرد، اما آن واقعاً هر صدايي را ضبط يا باز پخش نخواهد کرد.
اولين باري که شما برنامه SpeakMemo را اجرا کنيد، آن برنامه تويري را که در شکل 1 نشان داده شده است به نمايش مي گذارد.
يک کليد! يا، حداقل يک کليد توانمند در يک صفحه نمايش منظم. اين کليد نشان مي دهد که چه مقدار فضا در مکان ذخيره سازي وجود دارد و به چه ميزان با آوايي ضبط شده متناسب است. (نه، برنامه به شما اجازه نخواهد داد که به مدت 17 ساعت صداها و آواهاي اطراف خود را ضبط نماييد و يک فايل صوتي که مدت زمان اجرايش 17 ساعت است را توليد کنيد!)
دکمه Record را فشار دهيد در اين حالت وضعيت دکمه تغيير مي کند و عبارت قرمز رنگ چشمک زني به همراه شاخص زماني آشکار مي گردد که نشان مي دهد که به فايل آوايي پيشين شما چه حجمي افزوده شده است، اين موضوع به وضوح در شکل 2 به نمايش گذاشته شده است.
دکمه ضبط را دوباره فشار دهيد، اکنون فايل ضبط شده در بالاي صفحه نشان داده مي شود، و به همراه اين فايل اطلاعاتي نظير تاريخ و زمان ضبط، مدت و فضاي ذخيره شده را مي توانيد ملاحظه فرماييد، اکنون دکمه play را فشار دهيد همانطور که در شکل 3 نشان داده شده است.
البته شما مي توانيد دکمه Play را فشار دهيد تا فايل شما باز پخش گردد، اين دکمه حالت به نوعي کليد تبديل وضعيت بين حالت اجرا و توقف باشد.
شايد براي يک فايل آوايي زياد مشخص نباشد، اما اگر تعداد فايل هاي ضبط شده بيشتر گردد آنگاه آنها در ListBox برخلاف ترتيب زماني مرتب مي گردند، همانطور که در شکل 4 نشان داده شده است، بنابراين شما مي توانيد تعداد زيادي از اين فايل ها را ذخيره نماييد، و آنها را مرور کنيد و هر کدام را بطور مجزا اجرا نماييد. يکي از نيرومندترين ويژگي هاي Silverlight عبارت است از Data Template که به شما اجازه مي دهد ظاهر بخشهاي گوناگون ListBox را مشخص نماييد.
Data Template مي تواند ديگر کنترل ها را نيز در برگيرد، مانند دکمه ها. من خوشحال بودم که يک کاربرد عملي قرار دادن يک دکمه در يک Data Template گامي به سوي هدف برداشته ام و کمي پيشروي کرده ام.
شما همچنين مي توانيد يادداشتهاي آوايي گردآوري شده را با حذف يک به يک آنها مديريت نماييد. هنگامي که يک يادداشت برگزيده مي شود، دکمه Delete فعال مي شود. شايد اين امر برگرفته از قرار دادن يک دکمه در يک Data Template، من ترفند Silverlight ديگري نيز با قرار دادن دو دکمه اضافي درون کليد Delete را فشار مي دهيد آشکار مي گردند، و آن ها توابع تاييد رايج مي باشند که از شما در مورد درست بودن يا نادرست بودن تصميم پرسيده خواهد شد، همانطور که در شکل5 مي بينيد.

روند طراحي ضبط صدا در Windows Phone7

يک کليد! يا، حداقل يک کليد توانمند در يک صفحه نمايش منظم
 

اجراي يک يادداشت سبب خواهد شد آن يادداشت توسط برنامه انتخاب گردد، نکته جالبي که در مورد اين برنامه وجود دارد آن است که شما اگر با ناحيه سمت راست کليد Play يک فايل را انتخاب کنيد آن فايل توسط برنامه در نظر گرفته مي شود ولي اجرا نمي گردد، بنابراين با اين ترفند برنامه داراي اين توانايي مي باشد که همزمان فايلي را اجرا کند، و در همان حال فايل ديگري را ضبط نمايد و فايل سومي را حذف نمايد.

تلفن و صدا
 

زماني تصور مي شد که Windows Phone7 داراي برخي از توانايي هاي شناخت گفتاري و خدمات ساخت و ترکيبي که شما مي توانيد در Microsoft.NET Framework System.Speech namespaces بيابيد، مي باشد. اما شايد شاهد اعمال اين خدمات در آينده باشيد، نه اکنون. تا آن زمان شما مي توانيد از ميکروفون تلفن خود صداها را ضبط و سپس با استفاده از رده هايي که در Microsoft.Xna.Framwork.Audio namespace وجود دارد آنها را باز پخش نماييد.
اينها رده هاي XNA هستند، اما شما مي توانيد آنها را در برنامه هاي Silverlight به کار بريد. براي استفاده از رده هاي XNA در پروژه Silverlight کافي است تا يک مرجع به Microsoft.Xna.Framwork dll اضافه کنيد که اين امر يک مرجع به مراجع پروژه مي افزايد و اصلاً به هشدارها توجه ننماييد.
اين رده ها در Microsoft.Xna.Framwork.Audio namespace بطور کل جدا از رده هاي Microsoft.Xna.Framwork.Media namespace مي باشند.
Media namespaces رده هايي را در بر مي گيرد که براي پخش موسيقي از آرشيو موسيقي تلفن به کار مي روند. اين فايلها به صورت قالبهاي WMA . mp3 فشرده شده اند که در واقع قالب ها مختص صوتي مي باشند. من در فصل 18 کتاب خود با عنوان «Programming Windows Phone7» انتشارات مايکروسافت، سال 2010 توضيح داده ام که چگونه به آرشيو موسيقي دست يابيد، شما مي توانيد اين کتاب را به صورت رايگان از bit.ly/droHdz دانلود نماييد.
همچنين در صفحه ورودي وبلاگ من، نشان داده ام که چگونه فايل هاي MP3و WMA که در خود برنامه ذخيره شده اند را اجرا کنيد، يا کدام يک از آنها از طريق اينترنت قابل دانلود مي باشند.

روند طراحي ضبط صدا در Windows Phone7

يک برنامه که نيازمند تبديل متن به گفتار است احتمالاً از خدمات Web بهره خواهد گرفت
 

برعکس، رده هاي موجود در Microsoft.Xna.Framwork.Audio namespace با داده هاي آوايي غير فشرده در قالب استاندارد PCM کار مي کنند، که همان روش مشابهي است که در CDها و فايل هاي Windows WAV به کار مي رود. با PCM، دامنه آواهاي پيوسته يا به اصطلاح آنالوگ به آهنگ يکنواختي نمونه برداري مي شدند (معمولاً اين نمونه برداري در گسترده 8000 تا48000 نمونه در ثانيه انجام مي گيرد) و هر نمونه عموماً در يک فضاي 8 بيتي يا 16 بيتي ذخيره مي گردد. ذخيره سازي که براي يک فايل صوتي مورد نياز است عبارت است از حاصل ضرب مدت زماني فايل صوتي برحسب ثانيه، آهنگ نمونه گيري و تعداد بايت در هر نمونه اگر فايل به صورت استريو ذخيره گرد و قدار حاصل را در 2 ضرب نماييد.
اگر شما به خدمات شناسايي گفتاري در Windows phone7 application نياز داريد، بايد خود به شخصه آنرا فراهم کنيد و براي اينکار احتمالاً بايد از خدمات وي کمک گيريد. به طور مشابه احتمالاً برنامه اي که نيازمند تبديل متن به گفتار است از خدمات وب استفاده نمايد، يا اينکه بايد به انتظار بماند تا اين تلفن خدمات مورد نظر را پشتيباني کند.
Microsoft Translator app براي Windows phone اين کار را با به کارگيري خدمات Microsoft Translator (Microsoft Translator.com) انجام مي دهد. کد برنامه و اسناد مربوط به Translator Starter Kit روي آدرس هاي زير موجود است:
MSDN (msdn.micrisoft.com/library/gg521144(VS.92)aspx
AppHub (creat.msdn.com/rduction/catalog/sample/translatorstarterkit)
هنگام به کارگيري خدمات آوايي XNA يک برنامه Silverlight بايد static Framework Dispatcher را فراخواني کند. روش به روز رساني روي Windows Phone7 تقريباً 30 بار در ثانيه است. در مقاله «Enable XNA Framework Events in Windows Phone7 Application» در اسناد آن لاين XNA (msdn.microsoft.com/library/ff842408)
توضيح داده شده است که چطور بايد اين کار را انجام داد.
در SpeakMemo رده Xna FrameworkDispatcjerService اين کار را برعهده دارد. اين رده در فايل App.xaml معرفي شده است.

روند طراحي ضبط صدا در Windows Phone7

ضبط آواها
 

براي ضبط آواها با استفاده از ميکروفون تلفن، شما رده Microphone را بکار گيريد. احتمالاً ويژگي استاتيکي Default قادر خواهيد بود تا يک نمونه از اين رده را پديد آوريد:
Microphone microphone= Microphone.Default
در ادامه ويژگي استاتيکي All مجموعه اي از پروژه هاي microphone فراهم مي کند، اما احتمالاً شما مي خواهيد اين ليست را در اختيار کاربران قرار دهيد تا يکي از آنها را انتخاب نماييد. آهنگ نمونه گيري ثابت است و نمي تواند تغيير کند و ويژگي SampleRate به شما اعلام مي کند که آهنگ نمونه اي عبارت است از 16000 نمونه در ثانيه. بنابر تئوري نمونه گيري نايکوييست، اين آهنگ نمونه گيري براي ضبط آواهايي که گستره فرکانسي بيشينه آنها 8000 هرتز مي باشد، مناسب است. براي آواها اين آهنگ نمونه گيري خوب است، اما براي ضبط موسيقي نبايد انتظار نتايج شگرفي باشيم. هر نمونه به اندازه 2 بايت پهنا دارد و يک نمونه تک فرکانس مي باشد (يا به عبارتي نمونه تک صدا يا Monaural)، که به اين معنا است که هر ثانيه از ضبط آوا نيازمند 32000 بايت مي باشد، و هر دقيقه به 1/9 مگابايت فضا احتياج دارد.
داده ميکروفون به بافرهاي برنامه شما ارسال مي گردد که يک آرايه ساده از بايت ها هستند. شما احتياج خواهيد داشت که گرداننده را براي هر رخدادي که براي Buffer Reader پيش مي آيد را نصب نماييد و سپس Start را براي شروع ضبط فراخواني کنيد.
هنگامي که Microphone باعث ايجاد رخداد Buffer Ready مي گردند، کد برنامه شما GetData را با يک آرايه از بايت ها فراخواني مي کند. در بازگشت از GetData، بافر با داده هاي PCM پر مي شود. هنگامي که برنامه شما بخواهد عمليات ضبط را متوقف سازد، يک بار ديگر GetData را براي به دست آوردن آخرين بخش بافر فرا مي خواند. اين روش تعداد بايت هايي را که به آرايه انتقال داده مي شوند را گزارش مي دهد. سپس Stop فراخوانده مي شود. تنها گزينه اي که Microphone به شما اجازه مي دهد در آن دخل و تصرف داشته باشيد، عبارت است از مشخص نمودن اندازه بايت ها بافر که شما به GetData مي فرستيد. ويژگي BufferSize عبارت است از يک اندازه TimeSpan که بايد بين 100 تا 1000 ميلي ثانيه (1ثانيه)، با گام هاي 10 ميلي ثانيه اي باشد. در SpeakMemo من مقدار پيش فرض 1000 را در نظر گرفتم. براي آسودگي شما رده Microphone دو روش براي تبديل اندازه هاي بافر و زمان را بکار مي گيرد. متأسفانه اين روش ها کمي گيج کننده هستند، زيرا نام ها به «نمونه» اشاره دارند.
روش GetSampleDuration اساساً اندازه يک بايت را بخش بر 32000 مي کند و آن را به TimeSpan باز مي گرداند که نشان دهنده ثانيه هاي بيشماري است. GetSampleSize InBytes را ضرب در يک دوره TimeSpan کنيد واحد آن بر حسب ثانيه بر 32000 مي باشد. هنگامي که SpeakerMemo در حال ضبط است، آن برنامه قادر است چندين 32000 بافرهاي بايت را در يک مجموعه List کلي گردآوري نمايد. وقتي عمليات ضبط کردن متوقف شد، برنامه همه بافرهاي مجزا را در يک فايل جداگانه ذخيره خواهد کرد.
برنامه به شما اجازه مي دهد که يک يادداشت را اجرا نماييد، همزمان با آن يادداشت ديگري را ضبط و يادداشت سومي را حذف کنيد.
يک بار تصميم گرفتم که براي مشخص کردن يادداشتهاي از ويژگي واژه کليدي استفاده نکنم، من مي خواستم که يک فايل شامل فقط داده هاي PCM باشد و هيچ اطلاعات تکميلي ديگري را در برنگيرد. اما من کاملاً نگران بودم که اين موضوع را آشکار کنم که رده IsolatedStorageFile در Silverlight براي Windows Phone روش هايي را که براي دست يابي به زمان ايجاد فايل به کار مي روند را پشتيباني نمي کند، اين مشکل براي دستيابي به زمان آخرين نگارش نيز وجود دارد، من به اين اطلاعات که بسيار تعيين کننده بودند را از ديدگاه يک کاربر مي نگريستم.
اين به آن معنا است که نام فايل به خودي خود شامل تاريخ و زمان خواهد بود. نخست من تلاش کردم تا يک نام فايل را از يک مورد DataTime با استفاده از گزينه هاي قالب بندي «s» و «u» ايجاد نمايم، اما اين راه سرانجام خوشي نداشت و من به بن بست رسيدم. (چرا اين روش کار نمي کند، من اين موضوع را به عنوان يک تمرين براي شما خواننده عزيز باقي مي گذارم.) سپس من رشته نام فايل خود را ساختم، من با تکه کردن مولفه هاي گوناگون زمان و تاريخ از يکديگر به اين هدف دست يافتم.

بازپخش آواي XNA
 

Microsoft.xnz.framework.audio namespaces به شما اجازه خواهد داد که آواهايي که پيشتر ضبط شده اند را بازپخش نماييد، اين کار به کمک رده هاي SoundEffectlnstanceو SoundEffect صورت مي گيرد، همانطور که از اسم آنها پيداست آنها توابع متداول در زمينه بازي XNA مي باشند!
اما روش استاتيک SoundEffect.FromStream نيازمند يک فايل Stream مي باشد که اين فايل به يک فايل استاندارد Windows WAV که با سربرگ RIFF کامل مي شود اشاره دارد، من نمي خواستم بيش از اين با قالب ها فايلها باعث آزردگي کاربران شوم.

روند طراحي ضبط صدا در Windows Phone7

داده ميکروفون به بافرهاي برنامه شما ارسال مي شود که يک آرايه ساده از بايت ها مي باشد.
 

براي کار کردن با داده هاي خام PCM به جاي فايل هاي WAV، شما رده DynamicSoundEffectlnstance که از SoundEffectlnstance مشتق شده، را به کار خواهيد گرفت. اين رده براي توليد داده از رده Microphone يا براي برنامه اي که قادر است بطور پويا داده هاي مربوط به سيگنال هاي ديجيتال را ايجاد نمايد، بسيار ايده آل است، يکي از برنامه هايي که قادر است امواج صوتي ايجاد کند عبارت است از ترکيب کننده هاي موسيقيايي (Music Syntheesize Proframs).
DYnamicSoundEffectlnstance constructor به يک آهنگ نمونه گيري و تعدادي کانال نياز دارد. اگر شما اين رده را با داده هايي که از ميکروفون توليد شده اند به کار بريد آنگاه پر واضح است که شما مي خواهيد آن را سازگار با برنامه خود نماييد:
=ynamicsoundEffectlnstance playback
new DynamicSoundEffectlnstance(-microphone.Sampler.ate,AudioChannels.mono
به عبارت ديگر اگر شما بخواهيد صداي مانند يک گفتار سريع مثل صداي يک موش خرمايي را بازپخش کنيد، تمام مواردي را که تاکنون درباره آنها بحث کرديم را در دو ضرب کنيد.
DynamicSoundEffectlnstance نياز به داده هاي دارد که اندازه نمونه گيري آنها 16 بيتي هستند. اين رده داراي روشهاي Stop.Play,Pause,resume براي کنترل بازپخش مي باشند و يک ويژگي State که وضعيت کنوني را نشان مي دهد. اين رده کمي برخلاف رده Microphone عمل مي کند: هنگامي که اين رده به يک بافر جديد نياز داشته باشد آن يک رخداد BufferNedded را هدف مي گيرد. کار شما اين است که يک بافر را با داده هاي PCM پر نماييد و SubmitBuffer را فراخواني نماييد.
SpeakMemo يادداشتهاي ضبط شده را در محلي جداگانه ذخيره مي نمايد.
براي پرهيز از شکاف هاي صوتي (که در اصطلاح عامه به آن خش مي گوييم) در صداها، در حالت کلي شما مي خواهيد يک رديف از بافرهاي جديد داشته باشيد در حاليکه بافرهاي پيشين هنوز در حال اجرا هستند. اين رده با يک ويژگي PendingBufferCount که تعداد بافرهاي موجود در يک رديف را نشان مي دهد در خدمت شما خواهد بود. هنگامي که PendeingBufferCount تغيير مي کند و کوچکتر مساوي است، رخداد BufferNeeded عمل مي کند.
اما اگر شما نياز داشته باشيد تا يک قطعه کامل را از يک داده PCM اجرا نماييد، اين امکان وجود دارد بدون ايجاد مزاحمت براي رخدادهاي BufferNeeded, SuybMitBuffer را فراخواند، در ابتدا اين کار همان چيزي بود که نشان مي داد من چگونه اين رده را در برنامه SpeakMemo به کار بردم، اما من دريافتم امکان ندارد که مشخص کرد چه زماني بافر اجرا را کامل خواهد کرد.
هيچ رخداد «state changed» وجود ندارد، و حتي اگر هم وجود مي داشت DynamicSoundEffectlnstance قادر به سوييچ آن از حالت play به حالت Stop نبود آن هم در زماني که با اين بافر به اتمام مي رسيد. هنوز نياز به بافرهاي بيشتري احساس مي شود. بدون دانستن اين اطلاعات برنامه قادر نيست تا به درستي وضعيت تبديل دکمه Play/Puas را تشخيص دهد.
من بررسي و دستکاري رخداد BufferNeeded را به پايان بردم، اما فقط فرصتي مي خواهم تا کمي به ويژگي PendingBufferCount رسيدگي کنم. هنگامي کهPendingBufferCount تا صفر کاهش مي يابد، بافر باز پخش را به اتمام رسانده است.

روند طراحي ضبط صدا در Windows Phone7

مبحث ذخيره سازي
 

SpeakMemo يادداشتهاي ضبط شده را در محلي جداگانه ذخيره مي نمايد. از لحاظ مفهومي محل جداگانه براي ذخيره سازي عبارت است از فضايي خصوصي براي کاربردها، اما از لحاظ فيزيکي اين فضا بخشي از ناحيه کل ذخيره سازي است که شبيه به ديسک سخت کامپيوتر مي باشد. همه کاربردهاي قابل اجرا در اين محل ذخيره مي گردند، از جمله اين کاربردها مي توان به آرشيو عکسهاي تلفن، آرشيو موسيقي، آرشيو ويدئو و نظير آنها اشاره نمود. مشخصات سخت افزاري براي Windows phone عبارت است از تلفني که داراي حداقل8 گيگابايت حافظه آني (Flash Memory) براي ناحيه مورد نياز جهت ذخيره سازي داشته باشد، هنگامي که فضاي ذخيره سازي کاهش يابد تلفن خود به کاربر هشدار مي دهد.
براي من ذخيره سازي فايل هاي آوايي در مرکز توجه قرار نداشت. من بيشتر نگران محل ذخيره نمودن برنامه بودم. در کنار حافظه آني، مشخصات سخت افزاري Windows phone7 نياز به 256 مگابايت حافظه موقت RAM دارد. اين ميزان فضايي است که يک کاربر هنگام اجرا اشغال مي کند و اينکه کدام حافظه، فضاي محلي مورد نياز برنامه را فراهم مي نمايد. تجربيات من نشان دادند که SpeakMemo مي توانست تا حداکثر 90 گيگابايت را پيش از آنکه پيغام خطاي خارج از حافظه(out of memory) ظاهر شود، به خود اختصاص دهد. اين فضا معادل است با 47 دقيقه ضبط صدا از ميکروفون.
اين به آن معنا نيست که برنامه Windows phone7 ضرورتاً محدود به 47 دقيقه ضبط صدا مي باشد. اما يک برنامه که مي خواهد به طور پيوسته صدا را ضبط نمايد بايد به طور تصاعدي بافرها را در فضاي ذخيره سازي جداگانه نگاه دارد تا حافظه را تا حد ممکن آزاد سازد. و سپس زماني که فايل ها را باز پخش مي نمايد، فايل ها به صورت پله اي اجرا شوند. بين اين کار و روشي که Speak Memo را ايجاد کرديم، تفاوت عمده اي وجود دارد. در عوض اين برنامه مي تواند کل فايل ها را ذخيره و اجرا نمايد و من قصد ندارم ساده سازي بيشتري را انجام دهم. به همين دليل من به سادگي يک بيشينه 10 دقيقه اي براي مدت يادداشتها قرار دادم. هنگامي که زمان ضبط به اين مدت مقرر نزديک مي شود عمليات ضبط به طور خودکار به پايان مي رسد و فايل ذخيره مي گردد (که خود اين عمليات قطع و ذخيره سازي چند ثانيه به طول مي انجامد. هيچ توصيه و هشداري به ذهن نمي رسد تا سادگي برنامه حفظ شود. عمليات ضبط به سادگي متوقف مي شود اگر کاربر دکمه را فشار دهد. اين توقف و ذخيره سازي خودکار همچنين مي تواند هنگامي که برنامه منقضي شد يا به نوعي غيرفعال گرديد، انجام پذيرد.
البته اجراي 10 دقيقه يادداشت آوايي زياد راحت نيست. دکمه Play عمليات تبديل وضعيت بين PlayوPause را به عهده دارد اما هيچ راهي وجود ندارد تا فايل را با سرعت جلو برد و يا به عقب برگرداند. اين خصيصه ها مي توانستند اضافه گردند، اما شما مي دانيد براي اين کار چه چيزهايي نياز است، درست نمي گويم؟
بله ما نياز به دکمه هاي بيشتري داريم و حتي شايد يک Slider.
منبع: نشريه بزرگراه رايانه، شماره 141.



 



ارسال نظر
با تشکر، نظر شما پس از بررسی و تایید در سایت قرار خواهد گرفت.
متاسفانه در برقراری ارتباط خطایی رخ داده. لطفاً دوباره تلاش کنید.
موارد بیشتر برای شما
شهرستان لردگان کجاست؟ از پیش شماره این شهر تا مناطق گردشگری و مشاهیر آن
شهرستان لردگان کجاست؟ از پیش شماره این شهر تا مناطق گردشگری و مشاهیر آن
شهرستان هشترود کجاست؟ از پیش شماره این شهر تا مناطق گردشگری و مشاهیر آن
شهرستان هشترود کجاست؟ از پیش شماره این شهر تا مناطق گردشگری و مشاهیر آن
شهرستان کردکوی کجاست؟ از پیش شماره این شهر تا مناطق گردشگری و مشاهیر آن
شهرستان کردکوی کجاست؟ از پیش شماره این شهر تا مناطق گردشگری و مشاهیر آن
معنی اسم بهناز و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم بهناز و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم هوتن و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم هوتن و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم بیتا و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم بیتا و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم بهنام و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم بهنام و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم یسنا و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم یسنا و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم کیومرث و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم کیومرث و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم علیهان و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم علیهان و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم جابر و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم جابر و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم دایانا و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم دایانا و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم آیهان و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم آیهان و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
استوری ازدواج حضرت علی و حضرت زهرا علیهما السلام
play_arrow
استوری ازدواج حضرت علی و حضرت زهرا علیهما السلام
معنی اسم عذرا و نام های هم آوا با آن + میزان فراوانی در ثبت احوال
معنی اسم عذرا و نام های هم آوا با آن + میزان فراوانی در ثبت احوال