2011-10-24 48 views
1

我正在構建一個應用程序,其中的一部分會說時間。然而,當我將日期字符串(如10/24/11)傳遞給NSSpeechSynthesizer時,它會直接說出它們,例如「one,zero,削減兩個四個斜槓之一」,與時間戳相同,「八個冒號one one冒號結腸「等等。可可:語音和時間

我看着NSSpeechSynthesizer文檔,我想我必須使用phonemesFromText方法,但是這似乎很多grunt工作讓應用程序說出時間和日期順利。有更快的方法嗎?

感謝

+0

您可以推出自己的日期至語音文本功能,以便將日期爲10/24/11的日期翻譯爲「2011年10月10日」或其他類似內容。 –

+0

謝謝,看起來我會滾動我自己的。 – PruitIgoe

回答

2

你可以嘗試這樣的事:

@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

爲什麼不使用NSDateComponents並 - [的NSString stringWithFormat:]構建說出的句子作爲您的字符串,然後說

+0

你還需要一些方法,從10→「十」,2011→「二千一十」或「二十一」或任何 – jrturton

+0

正確。這是一個單獨的(即使相關的)問題。下面是對此的答案:http://stackoverflow.com/questions/1666164/how-convert-date-in-words –

+0

謝謝約書亞,這是一個很好的提示,也不知道NSDateComponents,好東西。 – PruitIgoe