Text to Speech! ... Inside Scrivener?

As a devotee to this wonderful program, let me begin with its absolute praise.
Not taking praise away from God, obviously.

Now during the process of writing I’ve found that during my ‘daze’ of using Word 2000 : That, if you can hear your text being read back to you. Then the process of re-editing is greatly sped up. I used to use a Macro that pulled Excel functions. It worked well! … I can’t get it to work in ‘Word 2003’. It seems to do something differently with the ‘Normal.dot’ file. Anyway. I started think; that having your ‘Prose’, read to you directly within’ Scrivener would be a major improvement. So I went hunting.

The MAC has a screen reader build in and it’s called … VoiceOver. Seems to do the job.

There is one called NVDA that’s written in Ruby, and is a pain to configure, and even a worse pain to uninstall. Not, what I wanted at all.

There are a lot of Screen : Speech -> To -> Text programs that are designed for Windows [tm], but they all suffer from the same fault. Namely; you have to have the Text you want read, inside the program. Only one works outside, and it’s ClaroRead. On the face of it; It seems to fit the bill, but is so tightly intrigued into Word : That it’s not much use with other programs. In that, you have to select the text before it can read it. That process, breaks the flow of your ideas and thoughts. It’s got so bad that even using the mouse becomes a distraction that I refuse to engage in.

What I want is an ‘Add on’ that will work with Scrivener and activated with two key strokes Start at the Text and ‘Stop!’ The Windows API is free to use, and develop with … The Macro I used for windows is below.


Dim speech As SpVoice
Sub SpeakText()
On Error Resume Next
Set speech = New SpVoice
If Len(Selection.Text) > 1 Then
speech.Speak Selection.Text, _
SVSFlagsAsync + SVSFPurgeBeforeSpeak
Else
speech.Speak ActiveDocument.Range(ActiveDocument.Bookmarks(“\startOfSel”).Start, _
ActiveDocument.Characters.Count).Text, _
SVSFlagsAsync + SVSFPurgeBeforeSpeak
End If
Do
DoEvents
Loop Until speech.WaitUntilDone(10)
Set speech = Nothing
End Sub

Sub StopSpeaking()
On Error Resume Next
speech.Speak vbNullString, SVSFPurgeBeforeSpeak
Set speech = Nothing
End Sub

BTW: It uses the 'Microsoft Speech Object Library’ found in Excel:

It’s not all my own work, but a pull from the Web: ‘Based on a macro by Mathew Heikkila’: Credit where credit is due.

Can someone with more time that I’ve got, develop it further? As an ‘Add On’ for Scrivener?

Thanks for reading, Jessica … Praise be the ORI.