Возможная ошибка в NSSpeechSynthesizer? - PullRequest
1 голос
/ 15 декабря 2011

Я пишу приложение для OS X, которое использует NSSpeechSynthesizer для чтения текста пользователю и выделяет слово, которое оно читает, в текстовом поле (NSTextView). Это делается путем реализации метода speechSynthesizer:willSpeakWord:ofString: протокола NSSpeechSynthesizerDelegate. Этот метод обеспечивает диапазон (NSRange) слова, которое он собирается произнести, который я пересылаю методу setSelectedRange моего NSTextView.

Все хорошо, пока я не остановил чтение методом stopSpeaking. Если после этого я установлю его на чтение снова, диапазоны, предоставленные speechSynthesizer:willSpeakWord:ofString:, будут не синхронизированы. Кажется, что он колеблется, звоня speechSynthesizer:willSpeakWord:ofString: в течение нескольких секунд, в результате чего диапазоны немного отстают от речи, когда он, наконец, делает.

Я написал простое приложение, иллюстрирующее проблему, которое можно найти здесь: http://dl.dropbox.com/u/12516679/SpeechTest.zip

Я надеюсь, что кто-то посмотрит на этот код (он действительно прост) и либо подтвердит, что это действительно кажется ошибкой, либо (надеюсь) скажет мне, что я делаю неправильно.

- ОБНОВЛЕНИЕ -

Оказывается, проблема возникает с неанглийскими голосами. Первоначально я использовал Ida, который является датским голосом. Сейчас я проверил его многими разными голосами и могу подтвердить, что он хорошо работает со всеми английскими голосами. Однако он не синхронизировался с датским, шведским, норвежским и голландским языками. Возможно, это влияет и на другие языки, но это те, которые я тестировал до сих пор.

Ответы [ 2 ]

1 голос
/ 27 октября 2012

Это ошибка, но она была исправлена ​​в обновлении голосов Nuance для Mountain Lion.

0 голосов
/ 16 декабря 2011

Хорошо, я нашел источник проблемы и обходной путь. Это не имеет ничего общего с языком как таковым, но тот факт, что большинство неанглийских голосов в OS X Lion - это голоса Nuance (сделанные Nuance Communications). Я подтвердил это тестированием на голосах English Nuance, и они действительно имеют ту же проблему. Похоже, что что-то не так в API для голосов, предоставляемых Nuance. Я создал обходной путь для этой проблемы, создав новый объект NSSpeechSynthesizer после того, как чтение было остановлено. Это не красиво, но это работает:)

...