ヒレガス本Chapter6
つくるサンプルはChapter5のつづきになります。
#import <Cocoa/Cocoa.h> @interface AppController : NSObject { IBOutlet NSButton *stopButton; IBOutlet NSButton *startBUtton; IBOutlet NSTextField *textField; IBOutlet NSTableView *tableView; NSArray *voiceList; NSSpeechSynthesizer *speechSynth; } -(IBAction)sayIt:(id)sender; -(IBAction)stopIt:(id)sender; @end
#import "AppController.h" @implementation AppController -(id)init { [super init]; NSLog(@"init"); speechSynth = [[NSSpeechSynthesizer alloc] initWithVoice:nil]; [speechSynth setDelegate:self]; voiceList = [[NSSpeechSynthesizer availableVoices] retain]; return self; } -(void)speechSynthesizer:(NSSpeechSynthesizer *)sender didFinishSpeaking:(BOOL)complete { NSLog(@"complete = %d", complete); [stopButton setEnabled:NO]; [startBUtton setEnabled:YES]; [tableView setEnabled:YES]; } -(IBAction)sayIt:(id)sender { NSString *string = [textField stringValue]; if([string length] == 0) { NSLog(@"string from %@ is of zero-length", textField); return; } [speechSynth startSpeakingString:string]; NSLog(@"Have started to say: %@", string); [stopButton setEnabled:YES]; [startBUtton setEnabled:NO]; [tableView setEnabled:NO]; } -(IBAction)stopIt:(id)sender { NSLog(@"stopping"); [speechSynth stopSpeaking]; } -(int)numberOfRowsInTableView:(NSTableView *)tv { return [voiceList count]; } -(id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row { NSString *v = [voiceList objectAtIndex:row]; NSDictionary *dict = [NSSpeechSynthesizer attributesForVoice:v]; return [dict objectForKey:NSVoiceName]; } -(void)tableViewSelectionDidChange:(NSNotification *)notification { int row = [tableView selectedRow]; NSLog(@"row = %d", row); if(row == -1) { return; } NSString *selectedVoice = [voiceList objectAtIndex:row]; [speechSynth setVoice:selectedVoice]; NSLog(@"new voice = %@", selectedVoice); } -(void)awakeFromNib { NSString *defaultVoice = [NSSpeechSynthesizer defaultVoice]; int defaultRow = [voiceList indexOfObject:defaultVoice]; [tableView selectRow:defaultRow byExtendingSelection:NO]; [tableView scrollRowToVisible:defaultRow]; } -(BOOL)respondsToSelector:(SEL)aSelector { NSString *methodName = NSStringFromSelector(aSelector); NSLog(@"respondsToSelector:%@", methodName); return [super respondsToSelector:aSelector]; } @end