ヒレガス本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