Я вызываю sapi в потоке, получаю код ошибки: OLE error 80045006
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EOleException with message 'OLE error 80045006'.
---------------------------
Break Continue Help
---------------------------
я назвал CoInitialize. Мой код:
hr := CoInitialize(nil);
SpVoice := TSpVoice.Create(Application);
SpVoice.Connect;
SpVoice.Speak('Test text');
CoUninitialize;
и ошибка произошла только тогда, когда я выбрал голос neospeech.
1 ответ
Решение
Ошибка 0x80046005: SPERR_DEVICE_BUSY: аппаратное устройство используется другим потоком или процессом. MSDN говорит: во многих старых системах устройства вывода звука могут быть открыты только одним процессом. В версиях Windows, предшествующих Windows XP, только один процесс может открыть устройство ввода звука. Поэтому SPERR_DEVICE_BUSY вернется, если будет предпринята попытка открыть устройство, которое используется другим процессом или потоком. В Windows XP (и выше) несколько процессов могут открывать одно и то же аудиоустройство