แจกฟรีโค้ดโปรแกรม VB6 โปรแกรมช่วยอ่านข้อความภาษาอังกฤษให้เป็นเสียง

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 23/12/2553   เวลา: 09:28
(อ่าน : 17595)/(ตอบ : 7)  ข้อคิดเห็น   |   พิมพ์   |  
Text To Speech Synthesis หรือ เรียกย่อๆว่า TTS คำจำกัดความสั้นๆก็คือ การแปลงข้อความเป็นคำพูด ... ซึ่งทางต่างประเทศเขาก็พัฒนากันมาไกลมากโขแล้ว หน่วยงานภาครัฐของไทย ก็วิจัยกันมานับสิบปี ... ส่วนภาคเอกชนของไทยก็มีบ้าง แต่ไม่มากนัก ... นี่เลย ... ต้องไปดูของต่างประเทศที่สามารถอ่านคำภาษาไทยได้น่ะครับ www.oddcast.com ผมคิดว่าต้องมีคนไทยร่วมพัฒนาด้วยแน่ๆ แหม อยากรู้จักจริงๆเลยเนี่ย เรียกได้ว่าสุดยอดมากๆ ... ที่จริงแล้วการอ่านข้อความภาษาอังกฤษใน Windows XP ก็จะมีอยู่แล้วที่ Start -> Programs -> Accessories -> Accessibility -> Narrator หรือไปดูที่ Control Panel -> Speech แต่ก็อย่างว่าแหละครับ เราก็คงใช้งานมันเท่าที่มันจะทำได้ เพราะต้องประยุกต์ใช้ประโยชน์ของ TTS ด้วยการเขียนโปรแกรมขึ้นมาใช้งานเอง นอกเหนือไปจากการที่สามารถนำมาใช้ในทางการศึกษาได้แล้ว ก็ยังมีประโยชน์ให้กับกลุ่มผู้พิการทางสายตาได้อีก หรือ ใช้ในธุรกิจแบบระบบตอบรับด้วยเสียง และ การสั่งงานด้วยเสียง ฯลฯ ... แต่บทความนี้จะนำเสนอแนวคิดของการประยุกต์ใช้เทคโนโลยี เพื่อใช้เป็นสื่อในด้านการเรียน การสอนภาษาอังกฤษด้วย MS Visual Basic 6.0/SP6 น่ะครับ

    ก่อนที่จะใช้งาน TTS ใน VB6 ได้ คุณต้องทำการดาวน์โหลดไฟล์ และ ติดตั้งเข้าไปในเครื่องก่อน

    การติดตั้งไฟล์ต่างๆ ค่า Default จะปรากฏที่ C:\Windows\Speech\ น่ะครับผม ... คิดว่าคงไม่ยาก

 

ดาวน์โหลด
ดาวน์โหลด Source Code สำหรับ MS Visual Basic 6.0 - Service Pack 6
 ดาวน์โหลด Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ดาวน์โหลด Microsoft Data Access Object (MDAC) และ Jet 4.0 Update
 ดาวน์โหลด Microsoft Visual Basic Service Pack 6

Project --> Components ... Microsoft Direct Text-To-Speech


Project --> References ... พอเลือก Component เรียบร้อย ไฟล์ตัวนี้มันจะเข้ามาให้ทันทีอัตโนมัติ


การออกแบบ - Design Time


ตอนสั่งให้โปรแกรมทำงาน (Run Time) ... เสียงที่ปรากฏ เขามีชื่อว่า Microsoft Sam


การแสดงทั้งข้อความ รูปภาพ และ เสียง ... สามารถนำไปประยุกต์ใช้ให้กับเด็กๆเรียนรู้เรื่องของคำศัพท์ได้อย่างดีเยี่ยมเลย ...
มาดูโค้ดกันเถอะ ...

Option Explicit

' #####################################################
' กดปุ่ม CommandButton แต่ละตัว
' #####################################################
Private Sub cmdShowPicture_Click(Index As Integer)
    txtMessage.Visible = False
    
    ' เลือก Index ตามปุ่ม CommandButton ที่กด
    Select Case Index
        ' Dog
        Case 0:
            Call SpeakEnglish(cmdShowPicture(0).Caption)
            
        ' Cat
        Case 1:
            Call SpeakEnglish(cmdShowPicture(1).Caption)
            
        ' Pig
        Case 2:
            Call SpeakEnglish(cmdShowPicture(2).Caption)
            
        ' Ambulance
        Case 3:
            Call SpeakEnglish(cmdShowPicture(3).Caption)
        
    End Select

End Sub

' #####################################################
' การทำงานคล้ายกัน ซ้ำกัน แยกออกมาเป็นโปรแกรมย่อยซ่ะดีๆ
' โดยส่งค่า Caption ของปุ่มคำสั่งแต่ละตัวมา
' #####################################################
Sub SpeakEnglish(cmdName As String)
  
    Dim ctl As Control
    ' ตรวจสอบก่อนว่ามีการสร้าง Image และ Label Control หรือยัง หากมีให้ลบออกไป
    For Each ctl In Controls
        If ctl.Name = "imageTemp" Then
            Controls.Remove "imageTemp"
            Controls.Remove "LabelTemp"
            Exit For
        End If
    Next
    
    ' ประกาศใช้งานตัวแปร Image Control และ Label Control
    Dim img As Image
    Dim lbl As Label

    ' การสร้าง Image Control แบบ Run Time
    Set img = Controls.Add("VB.Image", "imageTemp")
    ' ตั้งค่าคุณสมบัติ (Properties) แบบ Run Time
    With img
        ' จัดวางตำแหน่งทางมุมซ้ายบนสุด
        .Move 60, 90
        .Visible = True
    End With
    
    ' การสร้าง Label Control แบบ Run Time
    Set lbl = Controls.Add("VB.Label", "LabelTemp")
    ' ตั้งค่าคุณสมบัติ (Properties) แบบ Run Time
    With lbl
        ' จัดวางตำแหน่งตัวอักษรในการแสดงผล
        .Move 60, sldSpeed.Top - 800
        .Font.Name = "Tahoma"
        .Font.Size = 16
        .FontBold = True
        ' ปรับให้พอดีกับข้อความ
        .AutoSize = True
        ' ปรับให้มีขอบแบบ Fixed Single
        .BorderStyle = 1
        ' สีตัวอักษร
        .ForeColor = vbRed
        ' สีพื้นหลัง
        .BackColor = vbYellow
        .Visible = True
    End With
    
    ' เลือกรายการตามป้าย (Caption) ของปุ่มกด (CommandButton) แต่ละตัว
    Select Case LCase(cmdName)
        Case "dog"
            img.Picture = LoadPicture(App.Path & "\images\dog.jpg")
            lbl.Caption = "THEY ARE THE DOGS."
        Case "cat"
            img.Picture = LoadPicture(App.Path & "\images\cat.jpg")
            lbl.Caption = "IT IS A CAT."
        Case "pig"
            img.Picture = LoadPicture(App.Path & "\images\pig.jpg")
            lbl.Caption = "PIG, MOO NOI NOI."
        Case "ambulance"
            img.Picture = LoadPicture(App.Path & "\images\ambulance.jpg")
            lbl.Caption = "THIS IS AN AMBULANCE."
    End Select
    
    ' เคลียร์เสียงเดิมก่อน เพราะอาจมีเสียงเดิมค้างไว้อยู่
    dssSpeak.AudioReset
    ' เริ่มอ่านตามข้อความใน Caption ของ Label Control
    dssSpeak.Speak lbl.Caption

End Sub

' #####################################################
' จะอ่านประโยคตามที่อยู่ใน TextBox Control (txtMessage)
' #####################################################
Private Sub cmdSpeakMessage_Click()

    txtMessage.Visible = True
    ' เคลียร์เสียงเดิมก่อน เพราะอาจมีเสียงเดิมค้างไว้อยู่
    dssSpeak.AudioReset
    ' เริ่มอ่านตามข้อความใน TextBox
    dssSpeak.Speak txtMessage.Text

End Sub

' #####################################################
' เริ่มต้นการทำงาน และ สาธิตการตั้งค่าคุณสมบัติของ Control แบบ Run Time
' #####################################################
Private Sub Form_Load()
    Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2

    ' การตั้งค่าคุณสมบัติของ Control แบบ Run Time
    With dssSpeak
        .MaxPitch = 200
        .MinPitch = 50
        .Pitch = 100
        .MaxSpeed = 450
        .MinSpeed = 30
        .Speed = 150
    End With
    
    ' ตั้งค่า Speed SliderBar ให้ตรงกับ Speed ของ DirectSS
    With sldSpeed
        .Max = 450
        .Min = 30
        .Value = 150
    End With
    
    ' ตั้งค่า Pitch SliderBar ให้ตรงกับ Pitch ของ DirectSS
    With sldPitch
        .Max = 200
        .Min = 50
        .Value = 100
    End With
    
    ' กำหนดประโยคให้กับ TextBox และมีเครื่องหมาย คอมม่า , จะทำให้หยุดรอสักครู่
    txtMessage.Text = "Hello world, my name is thongkorn."
    
End Sub

' #####################################################
' ปรับระดับเสียง
' #####################################################
Private Sub sldPitch_Change()
    dssSpeak.Pitch = sldPitch.Value
End Sub

' #####################################################
' ปรับความเร็วเสียง
' #####################################################
Private Sub sldSpeed_Change()
    dssSpeak.Speed = sldSpeed.Value
End Sub

Private Sub cmdExit_Click()
    
    ' เคลียร์เสียงเดิมก่อน เพราะอาจมีเสียงเดิมค้างไว้อยู่
    dssSpeak.AudioReset
    ' โปรแกรมเมอร์ขี้เล่น และ ขี้เมา 55555+
    dssSpeak.Speak "Ja Joob, Program, chai maii, ha ha ha"
    'dssSpeak.Speak "Ja Joob, Program, Click OK, ha ha ha"
    
    If MsgBox("คุณแน่ใจว่าต้องการจบการทำงานของโปรแกรม ?", vbQuestion + _
        vbOKCancel + vbDefaultButton2, "ยืนยันการจบโปรแกรม") = vbOK Then
        Set frmTextToSpeech = Nothing
        End
    End If
End Sub
Conclusion:
นี่เป็นแค่การนำเสนอบางเสี้ยว บางตอนเท่านั้นเองน่ะครับ เผื่อครู อาจารย์ท่านใดที่สอนภาษาอังกฤษอยู่ จะได้มีไอเดียปิ๊งกระฉูด นำไปประยุกต์ใช้ ในการจัดทำสื่อการเรียน การสอน ให้เด็กๆไทยเราได้พัฒนาทักษะ ทั้งด้านการฟัง การอ่าน ทั้งด้านคำศัพท์ หรืออื่นๆอีก ... ซึ่งหากจะพัฒนาให้ดีกว่านี้ ก็คงต้องศึกษา เรียนรู้ระบบฐานข้อมูล (DataBase) เข้ามาด้วย เพื่อช่วยจัดเก็บข้อมูลคำศัพท์ คำอธิบาย ตำแหน่งเก็บรูปภาพ ตำแหน่งการเก็บเสียงแปล (ก็อัดเสียงจากที่นี่ไปเลย www.oddcast.comและอื่นๆได้ ... ก็ลองนำไปใส่ติ่งไอเดีย คิดๆดูกันเอาเองล่ะครับ ... พี่น้อง

ร่วมแสดงความคิดเห็น

[ความเห็นที่:  1] จากคุณ : ditasilk เมื่อ 23/12/2553 10:40:49  IP: 113.53.63.122

ตอนแรกเข้าใจว่าบทความที่แล้ว เป็นบทความสุดท้าย แต่อดเข้ามาดูไม่ได้ เลยได้ของดี ไว้ต่อยอด ขอบคุณครับ
สอบถามหน่อยครับ ว่ามันแตกต่างกับ SAPI อย่างไร  แล้วการพัฒนา การสั่งด้วยเสียงควรเริ่มอย่างไรดีครับ

[ความเห็นที่:  2] จากคุณ : Mr.Den เมื่อ 23/12/2553 10:52:54  IP: 61.90.91.217

ไม่มีคำพูดใดนอกจาก..
ขอบคุณ...ขอบคุณ...คร๊าบบบบ

[ความเห็นที่:  3] จากคุณ : ทองก้อน เมื่อ 23/12/2553 11:10:50

ตอบคุณ ditasilk:
Microsoft Speech SDK 5.1 เป็นชุดพัฒนาทั้งแบบอ่านข้อความเป็นเสียง (เหมือนบทความนี้) และสามารถพูด (ไส่ไมโครโฟน) เป็นภาษาอังกฤษ (หรือจีน/ญี่ปุ่น) จากนั้นก็ให้แสดงออกมาเป็นตัวอักษร (คือกลับกัน) ... สามารถหาข้อมูล และ ดาวน์โหลดทดสอบได้ที่ 
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=5e86ec97-40a7-453f-b0ee-6583171b4530&displaylang=en

หากติดตั้ง SpeechSDK เรียบร้อย ...
ให้ไปดูที่ตัวอย่าง TTS ที่ลึกกว่าบทความของผมที่ ...
C:\Program Files\Microsoft Speech SDK 5.1\Samples\VB\TTSAppVB

หรือ การฝึกอ่านออกเสียงภาษาอังกฤษเป็นตัวอักษร (ข้อความ) ให้ไปดูที่ (เอาไว้ฝึกพูด English)
C:\Program Files\Microsoft Speech SDK 5.1\Samples\VB\SimpleDict

หรือ หากอยากศึกษาค้นคว้าวิธีการจดจำ (Recognition) ให้ไปดูที่
C:\Program Files\Microsoft Speech SDK 5.1\Samples\VB\RecoVB

SimpleDict ผมทดสอบแล้ว แต่มันจะเป็นเพราะตัว API ของ MS หรือเพราะการอ่านออกเสียงภาษาอังกฤษของผมไม่ได้เรื่อง ก็ไม่รู้น่ะครับ ... ตัวอักษรที่ได้ออกมาก็เลยไม่ค่อยตรงนัก 55555+

[ความเห็นที่:  4] จากคุณ : ditasilk เมื่อ 23/12/2553 12:07:26  IP: 113.53.63.122

ขอบคุณครับ มันน่าติดตามครับ แต่ด้วยสติ   สตังค์ เท่าที่มี คงจะได้ทำ แต่ทำได้คงต้องรอ ท่านทอง ช่วยแนะครับ
เดี๋ยวหาน้องดาวก่อน แล้วจะไปศึกษาดูครับ  จะติดตามผลงานท่านทอง ต่อไป กำลังลุ้นจะมีบทความก่อนเมา หรือจะเมาก่อน ปีใหม่ หรือเปล่าเนี่ย

[ความเห็นที่:  5] จากคุณ : MR.pong เมื่อ 24/12/2553 1:45:12  IP: 124.121.137.176

ผมอยากให้มีนักพัฒนาโปรแกรมเก่งๆ ที่เข้าใจได้ง่าย สําหรับคนไทย และเด็กไทยโดยเฉพาะผู้ที่ขาดโอกาสทางการศึกษาที่มีอยู่ทั่วประเทศในขณะนี่ จะได้มีการต่อยอด เพื่ออนาคตไทยจะได้สู้กับต่างประเทศได้ ในทุกๆด้านและผมคิดว่าถึงเวลาแล้ว ที่เราควรร่วมมือกันสานฝันในครั้งนี้      

[ความเห็นที่:  6] จากคุณ : yunkun เมื่อ 12/5/2554 14:58:48  IP: 110.168.9.186

ขอคุณครับ

[ความเห็นที่:  7] จากคุณ : ภีมมมม เมื่อ 9/11/2554 19:07:06  IP: 101.108.220.175

อยากให้มันอ่านไทยได้ทำยังไงครับ ใส่ภาษาไทยลงไปแล้วอ่านไทยอ่ะ !!