コード例 #1
0
 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);
         }
     }
 }
コード例 #2
0
        /// <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);
        }