Я вызываю 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 (и выше) несколько процессов могут открывать одно и то же аудиоустройство

Другие вопросы по тегам