какао: речь и время - PullRequest
       27

какао: речь и время

1 голос
/ 24 октября 2011

Я создаю приложение, часть которого будет говорить время.Тем не менее, когда я передаю свои строки дат (например, 24.10.11) в NSSpeechSynthesizer, он будет произносить их буквально, как «один, ноль, косая черта два четыре косых черты один», то же самое с меткой времени, «восемь двоеточий один один»двоеточие, двоеточие »и т. д.

Я посмотрел документы NSSpeechSynthesizer и, наверное, мне пришлось бы поработать с методом phonemesFromText, но это похоже на тяжелую работу, чтобы заставить приложение говорить времяи дата гладкоЕсть ли более быстрый способ?

Спасибо

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

Вы можете попробовать что-то вроде этого:

@implementation MDAppController
- (id)init {
    if ((self = [super init])) {
    }
    return self;
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    NSDateFormatter *dateParser = [[[NSDateFormatter alloc]
        initWithDateFormat:@"%m/%d/%y" allowNaturalLanguage:YES] autorelease];

    NSDate *date = [dateParser dateFromString:@"10/24/11"];

    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];

    [dateFormatter setTimeStyle:NSDateFormatterNoStyle];
    [dateFormatter setDateStyle:NSDateFormatterLongStyle];

   NSString *string = [dateFormatter stringFromDate:date];

    NSLog(@"string == %@", string);
    // prints "October 24, 2011"

    NSSpeechSynthesizer *alex = [[NSSpeechSynthesizer alloc]
           initWithVoice:[NSSpeechSynthesizer defaultVoice]];
    [alex setDelegate:self];
    [alex startSpeakingString:string];
}

- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender
                   didFinishSpeaking:(BOOL)finishedSpeaking {
    if (finishedSpeaking) [sender autorelease];
}
@end

В основном, это использует 2 NSDateFormatter s: один для "перевода" строкового представления даты в фактический NSDate объект, а затем другой для перевода этого NSDate обратно в более желательное строковое представление.

Очевидно, вам нужно настроить формат dateParser в соответствии с ожидаемым типом входной строки. (Желательно, чтобы вы могли просто использовать входную дату, а не ее строковое представление).

1 голос
/ 24 октября 2011

Почему бы не использовать NSDateComponents для и - [NSString stringWithFormat:] создать голосовое предложение в качестве строки, а затем произнести , что ?

...