private static void InitializeDefaultAndRankedVoicesFromList(List <string> preferences) { AudioSettingService.preferredVoices.Clear(); for (int i = 0; i < preferences.Count(); i++) { string voiceName = preferences[i].Trim(); IVoice voice = AudioService.GetVoiceFromString(voiceName); voice.Rank = i; if (i == 0) { if (voice is ComputerVoice) { AudioSettingService.selectedVoiceType = VoiceType.ComputerVoice; AudioSettingService.selectedVoice = voice; } else if (voice is AzureVoice && AzureRuntimeService.IsAzureAccountPresentAndValid) { AudioSettingService.selectedVoiceType = VoiceType.AzureVoice; AudioSettingService.selectedVoice = voice; } else if (voice is WatsonVoice && WatsonRuntimeService.IsWatsonAccountPresentAndValid) { AudioSettingService.selectedVoiceType = VoiceType.WatsonVoice; AudioSettingService.selectedVoice = voice; } else { Logger.Log("Error: Voice retrieved has invalid type"); } } else { AudioSettingService.preferredVoices.Add(voice); } } }
/// <summary> /// This function will embed the auto generated speech to the current slide. /// File names of generated audios will be returned. /// </summary> /// <param name="slide">Current slide reference.</param> /// <returns>An array of auto generated audios' name.</returns> private static string[] EmbedSlideNotes(PowerPointSlide slide) { string folderPath = Path.GetTempPath() + AudioService.TempFolderName; string fileNameSearchPattern = string.Format("Slide {0} Speech", slide.ID); Directory.CreateDirectory(folderPath); // TODO: // obviously deleting all audios in current slide may not a good idea, some lines of script // may still be the same. Check the line first before deleting, if the line has not been // changed, leave the audio. // to avoid duplicate records, delete all old audios in the current slide string[] audiosInCurrentSlide = Directory.GetFiles(folderPath); foreach (string audio in audiosInCurrentSlide) { if (audio.Contains(fileNameSearchPattern)) { try { File.Delete(audio); } catch (Exception e) { Logger.LogException(e, "Failed to delete audio, it may be still playing. " + e.Message); } } } bool isSaveSuccessful = OutputSlideNotesToFiles(slide, folderPath); string[] audioFiles = null; if (isSaveSuccessful) { slide.DeleteShapesWithPrefix(SpeechShapePrefix); audioFiles = GetAudioFilePaths(folderPath, fileNameSearchPattern); for (int i = 0; i < audioFiles.Length; i++) { string fileName = audioFiles[i]; bool isOnClick = fileName.Contains("OnClick"); try { Shape audioShape = AudioService.InsertAudioFileOnSlide(slide, fileName); audioShape.Name = string.Format("PowerPointLabs Speech {0}", i); slide.RemoveAnimationsForShape(audioShape); if (isOnClick) { slide.SetShapeAsClickTriggered(audioShape, i, MsoAnimEffect.msoAnimEffectMediaPlay); } else { slide.SetAudioAsAutoplay(audioShape); } } catch (COMException) { // Adding the file failed for one reason or another - probably cancelled by the user. } } } return(audioFiles); }