Я пишу приложение OS X, которое использует NSSpeechSynthesizer
, чтобы читать текст пользователю и выделяет слово, которое он читает в текстовом поле (NSTextView
). Это делается путем реализации метода speechSynthesizer:willSpeakWord:ofString:
протокола NSSpeechSynthesizerDelegate
. Этот метод предоставляет диапазон (NSRange
) слова, которое он собирается говорить, который я пересылаю методу setSelectedRange моего NSTextView
.Возможная ошибка в NSSpeechSynthesizer?
Все хорошо, пока я не прекратил чтение с помощью метода stopSpeaking
. Если после этого я снова заново его прочитаю, диапазоны, заданные speechSynthesizer:willSpeakWord:ofString:
, похоже, не синхронизированы. Кажется, что он колеблется, называя speechSynthesizer:willSpeakWord:ofString:
в течение нескольких секунд, в результате чего диапазоны немного отстают от речи, когда она наконец-то делает.
Я написал простое приложение, иллюстрирующее вопрос, который можно найти здесь: http://dl.dropbox.com/u/12516679/SpeechTest.zip
Я надеюсь, что кто-то будет смотреть на этот код (это действительно просто) и либо подтвердить, что это действительно, кажется, ошибка, или (надеюсь) сказать мне, что я делаю неправильно.
- ОБНОВЛЕНИЕ -
Оказывается, что проблема возникает с неанглийскими голосами. Я изначально использовал Иду, которая датский голос. Я сейчас тестировал его разными голосами, и я могу подтвердить, что он хорошо работает со всеми английскими голосами. Однако он не совпал с датским, шведским, норвежским и голландским. Вероятно, это влияет и на другие языки, но это те, которые я тестировал до сих пор.
Ваше речевое приложение работает нормально, по крайней мере, на моем компьютере. Не могли бы вы более подробно описать свою проблему? Потому что, с моей точки зрения, все работает нормально, даже когда я вызываю метод stopSpeaking и нажимаю play. Синхронизация работает нормально. –
Работаю отлично для меня тоже ... Какая версия OS X вы? – spudwaffle
Ну, я думаю, это хорошая новость. Возможно, есть и надежда для меня :) Моя проблема в том, что после того, как чтение было остановлено, и я снова нажимаю кнопку воспроизведения, синтезатор начинает говорить сразу. Однако первый вызов «speechSynthesizer: willSpeakWord: ofString:», кажется, заходит несколько секунд, в результате чего подсветка не синхронизирована. И диапазоны, которые я распечатываю с помощью NSLog, также ошибочны. У меня есть новый 15-дюймовый MBP, на котором работает Lion. Мы протестировали приложение на новом iMac коллеге (также на котором работает Lion), и у него такая же проблема. – pajevic