سؤال

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();
}

وهذا الرمز المحدد يعمل في التطبيق WinForm، ولكن عندما تشغيله داخل خدمة ويب أحصل على ما يلي

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

هل لديها أي أفكار ما يمكن أن يسبب هذا الخطأ؟ وسائل رمز الخطأ

SPERR_UNSUPPORTED_FORMAT

لاكتمال هنا هو الأسلوب SetVoice

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);
}

ولقد أعطيت حق الوصول الكامل إلى المستخدمين في المجلد C: \ temp حيث كان الملف هو أن تكون مكتوبة. سيكون موضع تقدير أي مساعدة!

هل كانت مفيدة؟

المحلول

وأنا لا أعتقد أن System.Speech يعمل في خدمة ويندوز. يبدو هناك التبعية لشل ، التي لا تتوفر على الخدمات. حاول إمكانية التشغيل المتداخل مع واجهات C ++ SAPI ل. بعض الطبقة في System.Runtime.InteropServices قد تساعد على ذلك.

نصائح أخرى

واصطلاح التسمية لدينا تتطلب منا أن استخدام ملحق ملف غير قياسي. هذا يعمل بشكل جيد في التطبيق WinForms عناصر، لكنه فشل في خادم الويب لدينا. تغيير امتداد الملف إلى الرعايا حل هذا الخطأ بالنسبة لنا.

تأكد قمت بتعيين شكل على الكائن SPFileStream. ISpAudio :: SetState (والذي يحصل على استدعاء في فإن الطبقة السفلى من speechEngine.Speak) عودة SPERR_UNSUPPORTED_FORMAT إذا لم يتم اعتماد الشكل.

وأنا فقط حصلت على خدمة ويب لتفرخ التطبيق وحدة للقيام بهذه المعالجة. PITA: -)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top