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

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 23/12/2553   เวลา: 09:28
(อ่าน : 26409) 
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และอื่นๆได้ ... ก็ลองนำไปใส่ติ่งไอเดีย คิดๆดูกันเอาเองล่ะครับ ... พี่น้อง