#VBAではSAPIとTTSは二種類ある
##Oncore系
フォルダ名、ファイル名にOnecoreがつくもの
Speech_Onecore\Common\sapi_oncore.dll
Speech_Onecore\engines\tts\MSTTSengi...
##非OneCore系
フォルダ名、ファイル名のいずれにもOnecoreがつかないもの
Microsoft Speech Object Library
Speech_Onecore\Common\sapi_oncore.dll
##どっちを、いやどれを使うべきか
##ヒント
Excel VBAで音声読み上げ - t-hom's diary
ここではレイトバインディングでGetVoicesが使えている。
##GetVoicesがカギ
実はこのGetVoicesがOnecoreのほうには含まれていない。
このためOnecoreを参照設定するとエラーになる。
###オブジェクトブラウザーでみると
Speech_Onecore\engines\tts\MSTTSengi...
Microsft Speech Object Library
Speech_Onecore\Common\sapi_oncore.dll
該当項目が見つかりません
Microsft Speech Object Library
Sys*\Speech\Common\sapi.dll
Microsoft TTS Engine 10.0 Type Library
Speech\engines\tts\MSTTSengine.dll
Function GetVoices([RequiredAttributes As String], [OptionalAttributes As String]) As ISpeechObjectTokens
SpeechLib.SpVoice のメンバー
GetVoices
#参照設定すべきなのはC:\Windows\Sys*\Speech\Common\Sapi.dll
このようにSapi_Onecore.dllとSapi.Dllの双方で、オブジェクトブラウザーを起動しGetvoicesを検索するとOnecoreは見つからず、Sapi.dllは見つかる。
これが決定的な違いでLate Binding つまり Set sp = CreateObject("Sapi.SpVoice") で呼び出すのはSapi.dllであることがわかる。
ISpTTSEngine (SAPI 5.3)
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms719558(v%3Dvs.85)
これもそれが原因なのかもしれない
##それではOnecore系統とは
話す方にも行き着くが、Sapi_Onecoreの変数を検索すると音声認識もしくは読み上げ認識に行き着く。
今回の検索でははっきりしなかったが、現在の状況だと、音声認識、もしくは読み上げ認識に対応しているようだ。
これに対して、上記は完全にテキストを読み上げる方に比重がある
読み上げに関与しているのは下記でもわかる
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms719574%28v%3dvs.85%29
https://www.ka-net.org/blog/?p=297
#MSTTSEngine.dllは何なのか
これはSpvoice以上に謎だ。これを参照設定して変数を調べてもSAPIにしか行きつかない。Onecore以上に謎だ。
https://social.msdn.microsoft.com/Forums/en-US/354ae87f-abf0-4325-a432-2941f27d4aa0/tapi-amp-pbx?forum=vbinterop
Sub AddEvents(pEventArray As SPEVENT, ulCount As <サポートされていないバリアント型>)
TTSEngineLib.ISpEventSink のメンバー
https://docs.microsoft.com/ja-jp/search/index?search=SEngineLib