تلفظ نوشته های تصاویر امنیتی (Speech captcha)
در مقاله "ساخت تصاویر امنیتی" با نحوه ایجاد تصاویر امنیتی آشنا شدیم ، در این مقاله قصد دارم به نحوه خواندن این تصاویر بپردازیم .
قبل از هر چیز می بایست کتابخانه Microsoft Speech را اضافه نمایید ، برای اینکار وارد منوی WebSite شده و گزینه Add Refrence را انتخاب کنید ، سپس از تب COM گزینه Microsoft Speech Object Library را برگزیده تا این کتابخانه به شاخه Bin شما اضافه شود .
اکنون فضا نام مربوط به این کتابخانه را به صفحه مورد نظر اضافه کنید :
Imports SpeechLib
برای تلفظ یک متن از کلاس SpVoice استفاده می کنیم ، بنابراین یک وحله جدید از این کلاس ایجاد کرده :
Dim voice As New SpVoice()
و برای خواندن متن مورد نظر از تابع Speak استفاده می نماییم :
voice.Speak("Hello Ali")
البته لازم به ذکر است که شما نمیتوانید در Asp.NET به همین سادگی صدا را پخش کنید ، راه حل این کار این است که ابتدا صدای تولید شده را در یک فایل wav ذخیره کرده و سپس توسط media Player که به صورت embed به صفحه اضافه می شود آن را پخش نماییم .
خاصیت voice.AudioOutputStream صدای تولید شده را به صورتی Stream در اختیار ما میگذارد ، ما این Stream را توسط کلاس SpFileStream خوانده و ذخیره می کنیم :
Dim SpFileMode As SpeechStreamFileMode = SpeechStreamFileMode.SSFMCreateForWrite
Dim SpFileStream As New SpFileStream
SpFileStream.Open(Server.MapPath("~\Temp\1.wav"), SpFileMode, False)
voice.AudioOutputStream = SpFileStream
voice.Speak("Hello Ali", SpeechVoiceSpeakFlags.SVSFlagsAsync)
voice.WaitUntilDone(Timeout.Infinite)
SpFileStream.Close()
همانطور که ملاحظه می کنید این فایل در پوشه Temp ذخیره می شود .
اکنون کافیست فایل تولید شده را به صورت Embed به صفحه اضافه کنیم ، برای اینکار یک Literal کنترل در صفحه قرار داده و پس از اعمال فوق تگ embed را ساخته و به آن اضافه می کنیم :
Literal1.Text = "<object type='audio/x-wav' height='0px' width='0px'><param name='src' value='Temp/1.wav'></object>"
کار تمام است .
اکنون شما خیلی ساده می توانید از از این روش برای پخش تلفظ متن تصاویر امنیتی استفاده کنید ؛ کافیست به جای متن Hello Ali متن ایجاد شده توسط تصویر امنیتی را قرار دهید .
فایل ضمیمه حاوی پروژه تصاویر امنیتی به همراه امکان تلفظ آن می باشد