10

speech API またはSAPIを使用する C# のこれら 2 つのメソッドの違いは何ですか?

using SpeechLib;
SpVoice speech = new SpVoice();
speech.Speak(text, SpeechVoiceSpeakFlags.SVSFlagsAsync);

アパセラの声を返し、

SpeechSynthesizer ss = new SpeechSynthesizer();
ss.SpeakAsync ("Hello, world");

アパセラの声には対応していません。

最初のものはすべてのボイスを返しますが、2 番目のものは少数のボイスのみを返します。これは SAPI 5.1 および SAPI 5.3 に関連するものですか?

動作は Vista と XP で同じです。SpVoice は Apacela の音声を検出できましたが、SpeechSynthesizer を使用すると、XP と Vista の両方で音声が検出されません。

XP は SAPI 5.1 を使用し、Vista は SAPI 5.3 を使用していると思いますが、なぜすべての OS で同じ動作をするのに、API の動作が異なるのでしょうか?

また、どちらの API がより強力で、2 つの方法/API の違いは何ですか?

4

2 に答える 2

6

SpeechLib は、従来の COM ベースの SAPI を内部で利用する相互運用 DLL です。System.Speech は、マネージ コード内から直接音声合成 (および音声認識) を操作するために Microsoft によって開発されました。

一般に、マネージド アプリケーションを作成するときは、マネージド ライブラリ (System.Speech) を使用する方がクリーンです。

SAPI のバージョンとはまったく関係ありません。ここで最も可能性の高い問題は、音声ベンダー (この場合は Acapela) が特定の System.Speech 機能のサポートを明示的に実装する必要があることです。あなたが持っているアカペラの声は、必要なすべてをサポートしている可能性がありますが、そうでない可能性もあります。最善の策は、アカペラ グループに直接問い合わせることです。

声は HKLM\SOFTWARE\Microsoft\Speech\Tokens に登録されており、Windows の組み込みの声と、追加した Acapela の声がそこにリストされているはずです。登録方法に明らかな違いがある場合は、たとえば MS-Anna の登録と一致させることで、アカペラの声を機能させることができる場合があります。

しかし、最も可能性が高いのは、Acapela の音声が System.Speech に必要なすべてのインターフェイスをサポートするように更新されていないことです。

于 2009-02-26T03:27:38.370 に答える
3

SpeechLib は相互運用 DLL であるため、作成されたバージョンの SpeechLib にマップされます (プロパティを確認できます)。

System.Speech.* は、.NET フレームワークでの音声の "公式" サポートです。SpeechSynthesizer は、実行時に使用する音声ライブラリを選択します (System.Web.Mail クラスが行ったように)。

異なる数のボイスが返される理由はわかりませんが、使用されている SAPI バージョンに関連している可能性があります。

于 2009-02-12T09:39:02.143 に答える