Easy text-to-speech in Lua with MS SAPI ( https://en.wikipedia.org/wiki/Microsoft_Speech_API ).
LuaCOM ( https://github.com/davidm/luacom or maybe better https://github.com/moteus/luacom )
SAPI speech functionality depends on the Microsoft Speech API, which is not included by default in Wine, and SpeechSDK51.exe must be separately installed.
You can install it with winetricks speechsdk
or download it from https://download.microsoft.com/download/B/4/3/B4314928-7B71-4336-9DE7-6FA4CF00B7B3/SpeechSDK51.exe
Function | Arguments | Returns | Description |
---|---|---|---|
say | string message | Speak the given string. | |
pause | Pause speaking. | ||
resume | Resume speaking. | ||
skip_sentence | Stop speaking the current line and move to the next line in the SAPI buffer. | ||
skip_all | Stop speaking and clear the SAPI buffer. | ||
set_voice_by_number | int SAPI_index, [bool quietly] | int SAPI_index, string SAPI_ID | Choose the SAPI voice indexed from 1 to n |
set_voice_by_id | string SAPI_ID, [bool quietly] | int SAPI_index, string SAPI_ID | Choose the SAPI voice by its ID. |
set_rate | int rate, [bool quietly] | int rate | Set the speech rate. |
slower | [bool quietly] | int rate | Increment the speech rate. |
faster | [bool quietly] | int rate | Decrement the speech rate. |
set_filtering_level | int level, [bool quietly] | int level | Set the symbol filtering level, 1 being least and 3 being most filtering. |
set_volume | int volume, [bool quietly] | int volume | Set the speech volume. |
quieter | [bool quietly] | int volume | Decrement the speech volume. |
louder | [bool quietly] | int volume | Increment the speech volume. |
get_voice_id | string SAPI_ID | Return the SAPI voice ID string. | |
get_rate | int rate | Return the speech rate number. | |
get_filtering_level | int level | Return the filtering level number. | |
get_volume | int volume | Return the speech volume number. | |
say_current_voice | Speaks the current voice index and ID. | ||
say_current_rate | Speaks the current speech rate. | ||
say_current_filtering_level | Speaks the current symbol filtering level and description. | ||
say_current_volume | Speaks the current speech volume. | ||
list_voices | Speaks all of the available voices, index and ID. | ||
list_filtering_levels | Speaks all of the filtering levels, index and description. | ||
mute | [bool quietly] | Disables speech. | |
unmute | [bool quietly] | Re-enables speech. | |
speech_demo | Speaks a set of demonstration sentences. | ||
print_spoken | Print spoken lines to the screen to aid debugging. |
Variables | Description |
---|---|
replacements | Table of tables in the form {string pattern, string replacement} for filtering level 3 via string.gsub. |
sapi_interface = require "sapi_interface"
if sapi_interface == -1 then
print([[
Could not open SAPI.
Note for non-Microsoft operating systems...
SAPI speech functionality depends on the Microsoft Speech API.
This is not included by default in Wine, and SpeechSDK51.exe must be separately installed.
You can download it from
https://download.microsoft.com/download/B/4/3/B4314928-7B71-4336-9DE7-6FA4CF00B7B3/SpeechSDK51.exe
]])
return
end
if sapi_interface == -2 then
print("No SAPI voices found.")
return
end
-- add a new filter
table.insert(sapi_interface.replacements, {"%f[%a][gG]clan", " G clan"})
sapi_interface.say("SAPI interface is ready")
sapi_interface.speech_demo()