Frage

var speechEngine = new SpVoiceClass();
SetVoice(speechEngine, job.Voice);

var fileMode = SpeechStreamFileMode.SSFMCreateForWrite;
var fileStream = new SpFileStream();
try
{
    fileStream.Open(filePath, fileMode, false);
    speechEngine.AudioOutputStream = fileStream;
    speechEngine.Speak(job.Script, SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak | SpeechVoiceSpeakFlags.SVSFDefault); //TODO: Change to XML
    //Wait for 15 minutes only
    speechEngine.WaitUntilDone((uint)new TimeSpan(0, 15, 0).TotalMilliseconds);
}
finally
{
    fileStream.Close();
}

Das genaue Code funktioniert in einer WinForm app, aber wenn ich es in einem Webservice betreibe ich das folgende

erhalten
System.Runtime.InteropServices.COMException was unhandled
  Message="Exception from HRESULT: 0x80045003"
  Source="Interop.SpeechLib"
  ErrorCode=-2147201021

Hat jemand irgendwelche Ideen, was diesen Fehler verursachen? Die Fehlercodemittel

SPERR_UNSUPPORTED_FORMAT

Für Vollständigkeit ist hier die SetVoice Methode

void SetVoice(SpVoiceClass speechEngine, string voiceName)
{
    var voices = speechEngine.GetVoices(null, null);
    for (int index = 0; index < voices.Count; index++)
    {
        var currentToken = (SpObjectToken)voices.Item(index);
        if (currentToken.GetDescription(0) == voiceName)
        {
            speechEngine.SetVoice((ISpObjectToken)currentToken);
            return;
        }
    }
    throw new Exception("Voice not found: " + voiceName);
}
\ Temp in dem die Datei geschrieben werden soll:

habe ich vollen Zugriff auf Nutzer im Ordner C gegeben. Jede mögliche Hilfe würde geschätzt!

War es hilfreich?

Lösung

Das glaube ich nicht die System.Speech in Windows-Dienst arbeitet. Es sieht aus wie eine ist Abhängigkeit von Shell , die Dienste nicht verfügbar. Versuchen Sie Interop mit SAPI der C ++ Schnittstellen. Einige Klasse in System.Runtime.InteropServices kann auf das helfen.

Andere Tipps

Unsere Namenskonvention erfordert, dass wir eine Nicht-Standard-Dateierweiterung zu verwenden. Dies funktioniert in einer WinForms-Anwendung, aber nicht auf unserem Webserver. Ändern der Dateierweiterung .wav zurück gelöst diesen Fehler für uns.

Stellen Sie sicher, dass Sie explizit das Format auf dem SPFileStream Objekt festgelegt. ISpAudio :: SetState (die aufgerufen wird, eine untere Schicht aus speechEngine.Speak) kehrt SPERR_UNSUPPORTED_FORMAT, wenn das Format nicht unterstützt wird.

Ich habe gerade die webservice eine Konsolenanwendung, um laichen die Verarbeitung zu tun. PITA: -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top