我正在構建一個應用程序,其中的一部分會說時間。然而,當我將日期字符串(如10/24/11)傳遞給NSSpeechSynthesizer時,它會直接說出它們,例如「one,zero,削減兩個四個斜槓之一」,與時間戳相同,「八個冒號one one冒號結腸「等等。可可:語音和時間
我看着NSSpeechSynthesizer文檔,我想我必須使用phonemesFromText方法,但是這似乎很多grunt工作讓應用程序說出時間和日期順利。有更快的方法嗎?
感謝
我正在構建一個應用程序,其中的一部分會說時間。然而,當我將日期字符串(如10/24/11)傳遞給NSSpeechSynthesizer時,它會直接說出它們,例如「one,zero,削減兩個四個斜槓之一」,與時間戳相同,「八個冒號one one冒號結腸「等等。可可:語音和時間
我看着NSSpeechSynthesizer文檔,我想我必須使用phonemesFromText方法,但是這似乎很多grunt工作讓應用程序說出時間和日期順利。有更快的方法嗎?
感謝
你可以嘗試這樣的事:
@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
格式以適合您預期的輸入字符串類型。 (最好是,你可以使用輸入日期而不是它的字符串表示)。
爲什麼不使用NSDateComponents並 - [的NSString stringWithFormat:]構建說出的句子作爲您的字符串,然後說那?
您可以推出自己的日期至語音文本功能,以便將日期爲10/24/11的日期翻譯爲「2011年10月10日」或其他類似內容。 –
謝謝,看起來我會滾動我自己的。 – PruitIgoe