Tom,

    Below is a Sapi 5 VB script example which will allow you to have speech
and write vb script files and not use html at all. As long as you computer
allows you to run VB script all you have to do is have a file with the
extension .VBS.
    You can copy the stuff below or save the attachment and make sure the
file ends with .vbs.

    The attachment was sent as a .txt text file so it does get posted. When 
saving it, just take out the .txt and change the _ underline with a period 
inside the name.

    This will allow you to test most of your vb examples if
you want. The stuff below uses the class method and after you reach the
class end statement you get into the body of the vb script. There you can
note the formats used to just do a test run of voices.

    The .vbs file can be opened up in Notepad and you can make any kind of
file you want while you are learning.
    Using the class method below and the format in the body beneath the
class to have any prompt messages spoke. Then you can teach yourself all
about .VBS. or scripting. Then get into the Windoweyes scripting after you
have mastered VB scripting.
    See the attached if it gets posted along with this email. Save the 
attached without the .txt and replacing the underline with a period.

        Bruce



'MODIFIED JUNE 30 2010 FOR voicelist redim, tts4 and tts5!
'JUNE 29 2010 FOR CLASS METHOD OF SAPI 5!
'JUNE 26 FOR ALL SPEECH METHODS!
Class createSapiObject
    Private tts5
    Private tts4
    Private sapiQ
    Private voices5count
    Private voices4count
    Private voice5list()
    Private voice4list()
    Private defaultspeed
    Private pitch
    Private defaultvolume
    Private default_spk
    Private sync
    Private async
    Private xml
    Private isfile
    Private no_xml
    Private punc

    Private Sub Class_Initialize
        dim i
        Set tts5 = CreateObject("sapi.spvoice")
        tts5.Speak("")
        Set tts4 = CreateObject("ActiveVoice.ActiveVoice")
        tts4.Speak("")
        sapiMode = 5
        voices5count = tts5.GetVoices.Count
        voices4count = tts4.CountEngines
        if voices4count<=10 then
            ReDim voice4list(10)
        else
            if voices4count<=20 then
                ReDim voice4list(20)
            else
                if voices4count<=30 then
                    ReDim voice4list(30)
                else
                    ReDim voice4list(40)
                end if
            end if
        end if
        if voices5count<10 then
            ReDim voice5list(10)
        else
            if voices5count<20 then
                ReDim voice5list(20)
            else
                if voices5count<30 then
                    ReDim voice5list(30)
                else
                    ReDim voice5list(40)
                end if
            end if
        end if
          for i = 1 to voices4count
              voice4list( i) = tts4.modeName( num)
          next
        for i = 0 to voices5count-1
            voice5list( i) = tts5.GetVoices.Item( i).GetDescription
        next
        defaultspeed = 0
        pitch = 0
        defaultvolume = 100
        default_spk = 0
        sync = 1 'CONTINUOUS SPEECH!
        async = 2 'STOP BEFORE SPEAK!
        xml = 8 'USE XML TAGS!
        isfile = 16 'OPEN WAV FILE WITH TEXT!
        no_xml = 32 'IGNORE XML TAGS!
        punc = 64 'SAY ALL PUNCTUATIONS!
    End Sub

    Public Property Get sapiMode
        sapiMode = sapiQ
    End Property

    Public Property Let sapiMode( num)
        sapiQ = num
    End Property

    Public Property Get voiceCount
        if sapiQ = 5 then
            voiceCount = voices5count
        else
            voiceCount = voices4count
        end if
    End Property

    Public Property Get normRate
        if sapiQ = 5 then
            normRate = 0
        else
            normRate = defaultspeed
        end if
    End Property

    Public Property Get normPitch
        if sapiQ = 5 then
            normPitch = 0
        else
            normPitch = defaultpitch
        end if
    End Property

    Public Property Get normVolume
        if sapiQ = 5 then
            normVolume = 100
        else
             normVolume = defaultvolume
        end if
    End Property

    Public Property Get getDefSpk
        getDefSpk = default_spk
    End Property

    Public Property Get getSync
        getSync = sync
    End Property

    Public Property Get getAsync
        getAsync = async
    End Property

    Public Property Get getXml
        getXml = xml
    End Property

    Public Property Get getIsFile
        getIsFile = isfile
    End Property

    Public Property Get getNoXml
        getNoXml = no_xml
    End Property

    Public Property Get getPunc
        getPunc = punc
    End Property

    Public Property Get Value2Percent( current, min, max)
        'ADJUST VALUE TO PERCENTAGE!
        'MAX VALUE IF ERROR!
        On Error Resume Next
        Err.Clear
        Value2Percent = int( round( abs( (current - min) / (max - min)) *
100.00, 2))
        if Err.Number <> 0 then
            Value2Percent = max
        end if
    End Property

    Public Property Get getRate
        if sapiQ = 5 then
            getRate = tts5.Rate
        else
            getRate = Value2Percent( tts4.Speed, tts4.minSpeed,
tts4.maxSpeed)
        end if
    End Property

    Public Property Get getPitch
        if sapiQ = 5 then
            getPitch = pitch
        else
            getPitch = Value2Percent( tts4.Pitch, tts4.minPitch,
tts4.maxPitch)
        end if
    End Property

    Public Property Get getVolume
        if sapiQ = 5 then
            getVolume = tts5.Volume
        else
            getVolume = Value2Percent( tts4.VolumeLeft, tts4.minVolumeLeft,
tts4.maxVolumeLeft)
        end if
    End Property

    Public Property Get Percent2Value( percent, min, max)
'ADJUST PERCENTAGE to value!
        Percent2Value = int( round( abs( percent / 100.00) * (max - min), 2)
+ min)
    End Property

    Public Property Let setRate( percent)
        if sapiQ = 5 then
            tts5.Rate = percent
            tts5.Speak("")
        else
            Dim val, max
            max = tts4.maxSpeed-1
            val = Percent2Value( percent, tts4.minSpeed, max+1)
'            SAPI4 DOES NOT LIKE MAX SPEED!
            if val > max then
                val = max
            End If
            tts4.Speed = val
            tts4.Speak("")
        end if
    End Property

    Public Property Let setPitch( percent)
        if sapiQ = 5 then
            pitch = percent
        else
            tts4.Pitch = Percent2Value( percent, tts4.minPitch,
tts4.maxPitch)
        end if
    End Property

    Public Property Let setVolume( percent)
        if sapiQ = 5 then
            tts5.Volume = percent
            tts5.Speak("")
        else
            Dim val
            val = Percent2Value( percent, tts4.minVolumeLeft,
tts4.maxVolumeLeft)
            tts4.VolumeLeft = val
            tts4.VolumeRight = val
            tts4.Speak("")
        end if
    End Property

    Public Property Get getVoice
        if sapiQ = 5 then
            getVoice = tts5.Voice
        else
            getVoice = tts.currentMode
        end if
   End Property

    Public Property Let setVoiceByNum( num)
        if sapiQ = 5 then
            Set tts5.voice = tts5.GetVoices.Item( num)
            tts5.Speak("")
        else
            tts4.currentMode = num
            tts4.Speak("")
        end if
    End Property

    Public Property Get getVoiceNameByNum( num)
        if sapiQ = 5 then
            getVoiceNameByNum = tts5.GetVoices.Item( num).GetDescription
        else
            getVoiceNameByNum = tts4.modeName( num)
        end if
    End Property

    Public Property Get getListVoiceNameByNum( num)
        if sapiQ = 5 then
            getListVoiceNameByNum = voice5list( num)
        else
            getListVoiceNameByNum = voice4list( num)
        end if
    End Property

    Public Property Get getVoiceName
        if sapiQ = 5 then
            getVoiceName = tts5.voice.GetDescription
        else
            getVoiceName = tts4.modeName( tts4.currentMode)
        end if
    End Property

    Public Property Let setVoiceByName( name)
        Dim b, e, i, vn
        name = LCase( name)
        b=0
        e = voices5count-1
        if sapiQ = 4 then
            b=1
            e = voices4count
        end if
        for i = b to e
            vn = LCase( getVoiceNameByNum( i))
            if InStr( vn, name) then
                setVoiceByNum = i
            Exit Property
            End If
        next
    End Property

    Public Sub Talk(txt)
        'VOICE IS SPOKEN IN SAPI 4 AND WAITS UNTIL VOICE IS DONE!
        tts4.Speak txt
        waitFlag = tts4.Speaking
        Do While waitFlag
            WScript.Sleep 10
            waitFlag = tts4.Speaking
        Loop
    End Sub

    Public Sub Speak( txt, flags)
        if sapiQ = 5 then
            tts5.Speak "<pitch absmiddle=""" & CStr( getPitch) & """>" & txt
& "</pitch>", flags
        else
            talk txt
        end if
'        tts.Speak txt, flags
    End Sub
End Class

' LETS START PROGRAM TEST FOR SAPI 5 VOICES!
Dim list, message, txt, i, p, parm, strVal
Set c = new createSapiObject
 c.sapiMode = 5
' c.sapiMode = 4
'NOTE: SET LOOP FOR POINTER VALUES 0 OR 1 IN LIST!
c.Speak c.getVoiceName & " Is Speaking! This is the default Control Panel
voice.", c.getAsync and c.getXml
c.setPitch = 1
c.Speak " This is Sapi: " & c.sapiMode & " and there are " & c.voiceCount &
" Voices!", c.getXml
list = ""
for count = 0 to 2 'c.voiceCount -1
    c.setVoiceByNum = count
    list = list & "(" & count & ") = " & c.getVoiceName & vbCrLf
    c.setPitch = c.getPitch + 1
    txt = count & " is: " & c.getVoiceName & "!"
    c.Speak txt, c.getXml 'or c.getPunc
next
c.setVoiceByName = "mary"
c.setPitch = 0
c.Speak "Hi, " & c.getListVoiceNameByNum( 5) & "!", c.getXml
c.Speak "This is: " & c.getVoiceName & " and this is the end!", c.getXml
c.setVoiceByName = c.getListVoiceNameByNum( 9)
c.Speak "Who is this, " & c.getVoiceName & "?", c.getXml
c.setRate = -1
c.Speak "This is punctuation test and who is this, " & c.getVoiceName & "?",
c.getXml or c.getPunc
c.Speak "<spell> Who is this, " & c.getVoiceName & "?</spell>", c.getXml

To: <[email protected]>
Sent: Saturday, August 21, 2010 9:36 PM
Subject: Re: Window-Eyes Script Writing


And therein lies the problem. I went to the first link and it focuses
strictly on using VBScript within web pages for Internet Explorer. It tells
you that in order to understand the explanations and examples you must first
understand html and xml. While we do use xml in our scripts, I thought, were
I a beginner this would be mind boggling, reading VBScript code within html
code. And the initial examples went straight to using COM automation. Again,
were I a beginner, I'd be totally lost right from the get-go, think this was
all just way over my head, and probably just give up.

Regards,
Tom

'MODIFIED JUNE 30 2010 FOR voicelist redim, tts4 and tts5!
'JUNE 29 2010 FOR CLASS METHOD OF SAPI 5!
'JUNE 26 FOR ALL SPEECH METHODS!
Class createSapiObject
    Private tts5
    Private tts4
    Private sapiQ
    Private voices5count
    Private voices4count
    Private voice5list()
    Private voice4list()
    Private defaultspeed
    Private pitch
    Private defaultvolume
    Private default_spk
    Private sync
    Private async
    Private xml
    Private isfile
    Private no_xml
    Private punc

    Private Sub Class_Initialize
        dim i
        Set tts5 = CreateObject("sapi.spvoice")
        tts5.Speak("")
        Set tts4 = CreateObject("ActiveVoice.ActiveVoice")
        tts4.Speak("")
        sapiMode = 5
        voices5count = tts5.GetVoices.Count
        voices4count = tts4.CountEngines
        if voices4count<=10 then
            ReDim voice4list(10)
        else
            if voices4count<=20 then
                ReDim voice4list(20)
            else
                if voices4count<=30 then
                    ReDim voice4list(30)
                else
                    ReDim voice4list(40)
                end if
            end if
        end if
        if voices5count<10 then
            ReDim voice5list(10)
        else
            if voices5count<20 then
                ReDim voice5list(20)
            else
                if voices5count<30 then
                    ReDim voice5list(30)
                else
                    ReDim voice5list(40)
                end if
            end if
        end if
          for i = 1 to voices4count
              voice4list( i) = tts4.modeName( num)
          next
        for i = 0 to voices5count-1
            voice5list( i) = tts5.GetVoices.Item( i).GetDescription
        next
        defaultspeed = 0
        pitch = 0
        defaultvolume = 100
        default_spk = 0
        sync = 1 'CONTINUOUS SPEECH!
        async = 2 'STOP BEFORE SPEAK!
        xml = 8 'USE XML TAGS!
        isfile = 16 'OPEN WAV FILE WITH TEXT!
        no_xml = 32 'IGNORE XML TAGS!
        punc = 64 'SAY ALL PUNCTUATIONS!
    End Sub

    Public Property Get sapiMode
        sapiMode = sapiQ
    End Property

    Public Property Let sapiMode( num)
        sapiQ = num
    End Property

    Public Property Get voiceCount
        if sapiQ = 5 then
            voiceCount = voices5count
        else
            voiceCount = voices4count
        end if
    End Property

    Public Property Get normRate
        if sapiQ = 5 then
            normRate = 0
        else
            normRate = defaultspeed
        end if
    End Property

    Public Property Get normPitch
        if sapiQ = 5 then
            normPitch = 0
        else
            normPitch = defaultpitch
        end if
    End Property

    Public Property Get normVolume
        if sapiQ = 5 then
            normVolume = 100
        else
             normVolume = defaultvolume
        end if
    End Property

    Public Property Get getDefSpk
        getDefSpk = default_spk
    End Property

    Public Property Get getSync
        getSync = sync
    End Property

    Public Property Get getAsync
        getAsync = async
    End Property

    Public Property Get getXml
        getXml = xml
    End Property

    Public Property Get getIsFile
        getIsFile = isfile
    End Property

    Public Property Get getNoXml
        getNoXml = no_xml
    End Property

    Public Property Get getPunc
        getPunc = punc
    End Property

    Public Property Get Value2Percent( current, min, max)
        'ADJUST VALUE TO PERCENTAGE!
        'MAX VALUE IF ERROR!
        On Error Resume Next
        Err.Clear
        Value2Percent = int( round( abs( (current - min) / (max - min)) * 
100.00, 2))
        if Err.Number <> 0 then
            Value2Percent = max
        end if
    End Property

    Public Property Get getRate
        if sapiQ = 5 then
            getRate = tts5.Rate
        else
            getRate = Value2Percent( tts4.Speed, tts4.minSpeed, tts4.maxSpeed)
        end if
    End Property

    Public Property Get getPitch
        if sapiQ = 5 then
            getPitch = pitch
        else
            getPitch = Value2Percent( tts4.Pitch, tts4.minPitch, tts4.maxPitch)
        end if
    End Property

    Public Property Get getVolume
        if sapiQ = 5 then
            getVolume = tts5.Volume
        else
            getVolume = Value2Percent( tts4.VolumeLeft, tts4.minVolumeLeft, 
tts4.maxVolumeLeft)
        end if
    End Property

    Public Property Get Percent2Value( percent, min, max)
'ADJUST PERCENTAGE to value!
        Percent2Value = int( round( abs( percent / 100.00) * (max - min), 2) + 
min)
    End Property

    Public Property Let setRate( percent)
        if sapiQ = 5 then
            tts5.Rate = percent
            tts5.Speak("")
        else
            Dim val, max
            max = tts4.maxSpeed-1
            val = Percent2Value( percent, tts4.minSpeed, max+1)
'            SAPI4 DOES NOT LIKE MAX SPEED!
            if val > max then
                val = max
            End If
            tts4.Speed = val
            tts4.Speak("")
        end if
    End Property

    Public Property Let setPitch( percent)
        if sapiQ = 5 then
            pitch = percent
        else
            tts4.Pitch = Percent2Value( percent, tts4.minPitch, tts4.maxPitch)
        end if
    End Property

    Public Property Let setVolume( percent)
        if sapiQ = 5 then
            tts5.Volume = percent
            tts5.Speak("")
        else
            Dim val
            val = Percent2Value( percent, tts4.minVolumeLeft, 
tts4.maxVolumeLeft)
            tts4.VolumeLeft = val
            tts4.VolumeRight = val
            tts4.Speak("")
        end if
    End Property

    Public Property Get getVoice
        if sapiQ = 5 then
            getVoice = tts5.Voice
        else
            getVoice = tts.currentMode
        end if
   End Property

    Public Property Let setVoiceByNum( num)
        if sapiQ = 5 then
            Set tts5.voice = tts5.GetVoices.Item( num)
            tts5.Speak("")
        else
            tts4.currentMode = num
            tts4.Speak("")
        end if
    End Property

    Public Property Get getVoiceNameByNum( num)
        if sapiQ = 5 then
            getVoiceNameByNum = tts5.GetVoices.Item( num).GetDescription
        else
            getVoiceNameByNum = tts4.modeName( num)
        end if
    End Property

    Public Property Get getListVoiceNameByNum( num)
        if sapiQ = 5 then
            getListVoiceNameByNum = voice5list( num)
        else
            getListVoiceNameByNum = voice4list( num)
        end if
    End Property

    Public Property Get getVoiceName
        if sapiQ = 5 then
            getVoiceName = tts5.voice.GetDescription
        else
            getVoiceName = tts4.modeName( tts4.currentMode)
        end if
    End Property

    Public Property Let setVoiceByName( name)
        Dim b, e, i, vn
        name = LCase( name)
        b=0
        e = voices5count-1
        if sapiQ = 4 then
            b=1
            e = voices4count
        end if
        for i = b to e
            vn = LCase( getVoiceNameByNum( i))
            if InStr( vn, name) then
                setVoiceByNum = i
            Exit Property
            End If
        next
    End Property

    Public Sub Talk(txt)
        'VOICE IS SPOKEN IN SAPI 4 AND WAITS UNTIL VOICE IS DONE!
        tts4.Speak txt
        waitFlag = tts4.Speaking
        Do While waitFlag
            WScript.Sleep 10
            waitFlag = tts4.Speaking
        Loop
    End Sub

    Public Sub Speak( txt, flags)
        if sapiQ = 5 then
            tts5.Speak "<pitch absmiddle=""" & CStr( getPitch) & """>" & txt & 
"</pitch>", flags
        else
            talk txt
        end if
'        tts.Speak txt, flags
    End Sub
End Class

' LETS START PROGRAM TEST FOR SAPI 5 VOICES!
Dim list, message, txt, i, p, parm, strVal
Set c = new createSapiObject
 c.sapiMode = 5
' c.sapiMode = 4
'NOTE: SET LOOP FOR POINTER VALUES 0 OR 1 IN LIST!
c.Speak c.getVoiceName & " Is Speaking! This is the default Control Panel 
voice.", c.getAsync and c.getXml
c.setPitch = 1
c.Speak " This is Sapi: " & c.sapiMode & " and there are " & c.voiceCount & " 
Voices!", c.getXml
list = ""
for count = 0 to 2 'c.voiceCount -1
    c.setVoiceByNum = count
    list = list & "(" & count & ") = " & c.getVoiceName & vbCrLf
    c.setPitch = c.getPitch + 1
    txt = count & " is: " & c.getVoiceName & "!"
    c.Speak txt, c.getXml 'or c.getPunc
next
c.setVoiceByName = "mary"
c.setPitch = 0
c.Speak "Hi, " & c.getListVoiceNameByNum( 5) & "!", c.getXml
c.Speak "This is: " & c.getVoiceName & " and this is the end!", c.getXml
c.setVoiceByName = c.getListVoiceNameByNum( 9)
c.Speak "Who is this, " & c.getVoiceName & "?", c.getXml
c.setRate = -1
c.Speak "This is punctuation test and who is this, " & c.getVoiceName & "?", 
c.getXml or c.getPunc
c.Speak "<spell> Who is this, " & c.getVoiceName & "?</spell>", c.getXml

Reply via email to