Я перемещаю от XP до Windows 7 64 бита. Мое приложение, которое я скомпилировал на своей машине XP, работает правильно над XP. Однако, когда я выполняю exe на своей машине W7, список речи, возвращенной GetVoices, следующие:
Microsoft Anna
Microsoft Mary
Microsoft Mike
Демонстрационная речь TTS.
Проверка Речевого диалогового окна Свойств W7 показывает, что только Microsoft Anna загружается на машине. Проверка реестра в HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Speech/Voices подтверждает это.
Перекомпиляция моего приложения на моей новой машине разработки Windows 7 создает exe, которые копируют вышеупомянутое поведение. (Скомпилированный код XP и скомпилированный код W7 воспроизводят ту же ошибку при выполнении под W7)
Я разрабатываю в Delphi 7 в Windows 7 64 бита, и я использую Microsoft Speech Object Library (Версия 5.4) (примечание: 5.4 что шоу в списке Библиотеки типов Импорта).
Я установил SpeechSDK51.exe на свою машину W7. Это прибыло из:
Следующий код производит список 4 речи в Windows 7 даже при том, что должна только быть одна речь:
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
SOToken: ISpeechObjectToken;
SOTokens: ISpeechObjectTokens;
begin
cbbVoices.Clear;
SOTokens := SpVoice1.GetVoices('', '');
for i := 0 to SOTokens.Count - 1 do begin
SOToken := SOTokens.Item(i);
cbbVoices.AddItem( SOToken.GetDescription(0), TObject(SOToken) );
SOToken._AddRef;
end;
end;
Какие-либо предложения о том, как иметь дело с этой проблемой?
спасибо,
shawnh
Пока не подтверждено, но я думаю, что Microsoft Sam, Microsoft Mike и Microsoft Mary не работают в Windows Vista и более поздних версиях.
Думаю, вы можете установить их с SDK 5.1, чтобы они возвращались при запросе голосов, но, возможно, они не совместимы с движком 5.4, и их нельзя использовать.
Возможно, вы захотите отфильтровать GetVoices с помощью атрибута EngineProperties, чтобы ограничить возвращаемые данные.
Оговорка: все это не проверено/guesswork/doc-reading....