2017-04-05 4 views
0

Discours dans Visual Studio est très confus. Dans d'autres langues et même VB6, j'ai du code qui utilise les objets SAPI 5.4. Je vois qu'il y a les objets Microsoft.Speech et System.Speech dans Visual Studio. Je suppose que c'est ainsi que je peux avoir du code managé. Pouvez-vous encore programmer directement sur SAPI? Que devrais-je savoir pourquoi je voudrais utiliser une méthode ou l'autre? Le code n'est même pas similaire à distance. Cette application s'exécutera sur Windows Server et sera écrite en VB.NETY a-t-il une raison pour laquelle j'utiliserais l'espace de noms Microsoft.Speech au lieu d'utiliser directement SAPI 5.4 dans Visual Studio?

Répondre

0

Vous voudrez peut-être regarder d'abord la réponse à this question.

Étant donné que vous utilisez sur Windows Server, vous voulez certainement Microsoft.Speech plutôt que System.Speech pour les raisons suivantes:

  • Server ne comprend pas tous les moteurs SR par défaut; vous devez installer le pack Desktop Experience;
  • System.Speech nécessite une formation pour bien fonctionner;
  • Microsoft.Speech a des moteurs SR qui fonctionnent bien avec un son de qualité inférieure.

Vous pouvez toujours programmer directement dans SAPI; La seule vraie différence entre Server SAPI et Desktop SAPI est le moteur SR sous-jacent. (L'API côté client est exactement la même.)

La programmation directement dans SAPI est plus compliquée, mais vous donne plus de contrôle. Je ne pourrais pas recommander l'un ou l'autre sans savoir quels sont vos objectifs ultimes.

+0

Il s'agit d'une application de commande et de contrôle de téléphonie. J'ai écrit plusieurs applications à SAPI au cours des années et j'ai essayé de comprendre les nouvelles interfaces compliquées et confuses. Je me demandais ne pas écrire à l'un des espaces de noms et l'utilisation directe de SAPI et MMSYSTEM ne fonctionnerait pas. Je suis d'accord que la version du serveur (microsoft.speech) est ce dont j'ai besoin plutôt que le bureau (system.speech) pour plusieurs raisons, mais je n'ai aucune idée de la façon d'utiliser l'une des entrées du pilote de périphérique audio Wave. Dans un oubli important, Microsoft ne semble pas avoir implémenté .SetInputToAudioDeviceID. – Fred

+0

Ils vous permettent uniquement de .SetInputToDefaultAudioDevice et .SetInputToAudioStream. En SAPI, je peux le faire en VB: Dim MMSysAudioIn1 Comme ISpeechMMSysAudio Set MMSysAudioIn1 = Nouveau SpMMAudioIn AudioIn1.DeviceId = PhoneLine1.WaveRecordID MMSysAudioIn1.Format.Type = SAFT8kHz16BitMono – Fred

+0

J'ai fait des recherches pendant 2 semaines et ne peut pas voir comment pour définir l'entrée pour la reconnaissance vocale sur n'importe quelle entrée installée sur le PC. Je pense que j'ai besoin de .SetInputToAudioStream, mais n'ai aucune idée et ne peut pas trouver le code dans VB.NET pour pointer le "vague dans l'identification d'appareil" d'un dispositif d'onde installé particulier. Et si je voulais même un microphone USB qui n'était pas le périphérique audio par défaut? Comment puis-je le désigner? – Fred