LoginSignup
2
2

More than 3 years have passed since last update.

SAPIの参照設定の違い

Last updated at Posted at 2019-05-24

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
image.png
image.png

TTSEngineLibもない
image.png

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2