diff --git a/English.lproj/MainMenu.xib b/English.lproj/MainMenu.xib index d8e9857..1026753 100644 --- a/English.lproj/MainMenu.xib +++ b/English.lproj/MainMenu.xib @@ -1,14 +1,14 @@ - 1090 + 101000 14A389 - 6245 + 6154.17 1343.14 755.00 com.apple.InterfaceBuilder.CocoaPlugin - 6245 + 6154.17 NSCustomObject @@ -18,6 +18,8 @@ NSPopUpButtonCell NSScrollView NSScroller + NSSlider + NSSliderCell NSTextView NSToolbar NSToolbarFlexibleSpaceItem @@ -1321,6 +1323,48 @@ 1 1 + + 6B9D411D-B22D-42EF-A3C2-F6BC2192030C + Volume + Volume + + + + 268 + {{0, 14}, {96, 26}} + + + + _NS:9 + YES + + -2080374784 + 0 + + _NS:9 + + 100 + 0.0 + 50 + 0.0 + 6 + 1 + NO + NO + + NO + + + + + {96, 21} + {96, 26} + YES + YES + 0 + YES + 0 + BB31836C-C94C-4C54-B51B-8C9C9A2D1280 @@ -1334,6 +1378,7 @@ {{0, 14}, {264, 25}} + _NS:868 YES @@ -1586,10 +1631,12 @@ + - + + @@ -1803,12 +1850,12 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA YES - + NSSpeechSynthesizer - + terminate: @@ -2521,6 +2568,38 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA 595 + + + synth + + + + 621 + + + + setVolume: + + + + 636 + + + + value: values.volume + + + + + + value: values.volume + value + values.volume + 2 + + + 639 + @@ -3519,6 +3598,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA + @@ -3642,8 +3722,29 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA - 582 - + 598 + + + + + + + + 596 + + + + + + + + 597 + + + + + 620 + @@ -3708,6 +3809,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + {359.5, 917.5} com.apple.InterfaceBuilder.CocoaPlugin {{422, 131}, {500, 371}} @@ -3811,7 +3913,10 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3828,28 +3933,40 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA - 595 + 639 + + FirstResponder + + IBUserSource + + + SpeakerAppDelegate NSObject id id + NSSlider id - + seekBack: id - + seekForward: id - + + setVolume: + NSSlider + + speakAction: id @@ -3858,27 +3975,32 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA NSMenu NSPopUpButton NSToolbarItem + NSSpeechSynthesizer NSTextView NSWindow - + languageMenu NSMenu - + languageMenuPopupButton NSPopUpButton - + speakButton NSToolbarItem - + + synth + NSSpeechSynthesizer + + textView NSTextView - + window NSWindow @@ -3893,6 +4015,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA id id + NSSlider id @@ -3904,6 +4027,10 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA seekForward: id + + setVolume: + NSSlider + speakAction: id @@ -3914,11 +4041,51 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA ../SpeakerAppDelegate.m + + SpeakerAppDelegate + NSObject + + id + id + NSSlider + id + + + + + + + + + NSMenu + NSPopUpButton + NSToolbarItem + NSSpeechSynthesizer + NSTextView + NSWindow + + + + + + + + + + + IBProjectSource + ./Classes/SpeakerAppDelegate.h + + 0 IBCocoaFramework NO + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 diff --git a/SpeakerAppDelegate.h b/SpeakerAppDelegate.h index fb1fbe4..9f87f6f 100644 --- a/SpeakerAppDelegate.h +++ b/SpeakerAppDelegate.h @@ -13,7 +13,6 @@ NSTextView *textView; NSMenu *__weak languageMenu; NSPopUpButton *__weak languageMenuPopupButton; - NSSpeechSynthesizer *synth; NSRange oldRange; BOOL isNewLocation; NSArray *languages; @@ -24,10 +23,12 @@ @property (weak) IBOutlet NSMenu *languageMenu; @property (weak) IBOutlet NSPopUpButton *languageMenuPopupButton; @property (weak) IBOutlet NSToolbarItem *speakButton; +@property (weak) IBOutlet NSSpeechSynthesizer *synth; -(IBAction)speakAction:(id)sender; -(IBAction)seekForward:(id)sender; -(IBAction)seekBack:(id)sender; +-(IBAction)setVolume:(NSSlider *)sender; -(void)stopSpeaking; -(void)startSpeaking; diff --git a/SpeakerAppDelegate.m b/SpeakerAppDelegate.m index 4c30f3b..2687c81 100644 --- a/SpeakerAppDelegate.m +++ b/SpeakerAppDelegate.m @@ -16,12 +16,11 @@ @synthesize languageMenu; @synthesize languageMenuPopupButton; @synthesize speakButton; +@synthesize synth; @synthesize window, textView; - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { - // Insert code here to initialize your application - synth = [[NSSpeechSynthesizer alloc] init]; synth.delegate = self; oldRange = NSMakeRange(-1, -1); isNewLocation = YES; @@ -37,6 +36,13 @@ [textView scrollRangeToVisible:aRange]; } + float volume = [defaults floatForKey:@"volume"]; + if (volume == 0.0) { + synth.volume = 1.0; + } else { + synth.volume = volume / 100; + } + [self initLanugageMenu]; } @@ -126,6 +132,8 @@ } -(void)startSpeaking { + + [synth stopSpeaking]; [textView setEditable:NO]; @@ -145,13 +153,9 @@ } else { // only pointer text = [wholeText substringWithRange:NSMakeRange(range.location, [wholeText length] - range.location)]; } - - [synth stopSpeaking]; [self setVoiceForLanguage:[self findLanguageFromString:text]]; - [synth startSpeakingString:text]; - oldRange = range; } @@ -173,6 +177,19 @@ } +- (IBAction)setVolume:(NSSlider *)sender { + BOOL restart = NO; + if ([synth isSpeaking]) { + restart = YES; + [self stopSpeaking]; + } + synth.volume = sender.floatValue / 100; + + if (restart) { + [self startSpeaking]; + } +} + - (void)speechSynthesizer:(NSSpeechSynthesizer *)sender willSpeakWord:(NSRange)wordToSpeak ofString:(NSString *)text { NSRange range = NSMakeRange(oldRange.location + wordToSpeak.location, wordToSpeak.length); [textView scrollRangeToVisible:range]; @@ -194,7 +211,7 @@ { NSArray *tagschemes = [NSArray arrayWithObjects:NSLinguisticTagSchemeLanguage, nil]; NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:tagschemes options:0]; - [tagger setString:text]; + [tagger setString:[[[text componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet] invertedSet]] componentsJoinedByString:@" "] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]]; NSString *language = [tagger tagAtIndex:0 scheme:NSLinguisticTagSchemeLanguage tokenRange:NULL sentenceRange:NULL]; return language;