public NSObject GetObjectValue(NSTableView tableView, NSTableColumn tableColumn, int row) { NSDictionary dict = NSSpeechSynthesizer.AttributesForVoice(mVoices[row]); // See all of the keys and Value types // var keys = dict.Keys; // var values = dict.Values; // for (int i = 0; i < dict.Count; i++) { // if (keys[i].ToString() != "VoiceIndividuallySpokenCharacters" && keys[i].ToString() != "VoiceSupportedCharacters") // Console.WriteLine("Key {0} = {1}, Value = {2}", i, keys[i], values[i].GetType()); // } var name = dict.ObjectForKey(new NSString("VoiceName")); var age = dict.ObjectForKey(new NSString("VoiceAge")); var lang = dict.ObjectForKey(new NSString("VoiceLanguage")); NSString full = new NSString(String.Format("{0}, Age {1}, Language {2}", name, age, lang)); return(full); }
internal MacAvailableVoice(string name) { Name = name; // Ask OSX for properties of this voice NSDictionary props = NSSpeechSynthesizer.AttributesForVoice(name); NSString gender = (NSString)props.ValueForKey(NSSpeechSynthesizer.NSVoiceGender); // TODO Deal with neuter voices // TODO Deal with multiple languages. if (gender == NSSpeechSynthesizer.NSVoiceGenderMale) { Male = true; } else { Male = false; } }
Task <IEnumerable <Locale> > PlatformGetLocalesAsync() => Task.FromResult(NSSpeechSynthesizer.AvailableVoices .Select(voice => NSSpeechSynthesizer.AttributesForVoice(voice)) .Select(attribute => new Locale(attribute["VoiceLanguage"]?.ToString(), null, attribute["VoiceName"]?.ToString(), attribute["VoiceIdentifier"]?.ToString())));