Beispiel #1
0
        private void backgroundWorkerAudio_DoWork(object sender, DoWorkEventArgs e)
        {
            InfoCombined selectedComb = currentInfoComb;
            DateTime     startTime    = selectedComb.Subs1.StartTime;
            DateTime     endTime      = selectedComb.Subs1.EndTime;
            string       outMp3File   = Path.Combine(previewWorkerVars.MediaDir, ConstantSettings.TempAudioFilename);
            string       outWavFile   = Path.Combine(previewWorkerVars.MediaDir, ConstantSettings.TempAudioPreviewFilename);


            if (audioPreviewNeedsUpdating)
            {
                audioPreviewNeedsUpdating = false;

                if (Settings.Instance.AudioClips.UseAudioFromVideo)
                {
                    if (Settings.Instance.VideoClips.Files.Length > 0)
                    {
                        string videoFileName = Settings.Instance.VideoClips.Files[selectedEpisodeIndex];

                        // Apply pad (if requested)
                        if (Settings.Instance.AudioClips.PadEnabled)
                        {
                            startTime = UtilsSubs.applyTimePad(selectedComb.Subs1.StartTime, -Settings.Instance.AudioClips.PadStart);
                            endTime   = UtilsSubs.applyTimePad(selectedComb.Subs1.EndTime, Settings.Instance.AudioClips.PadEnd);
                        }

                        UtilsAudio.ripAudioFromVideo(videoFileName,
                                                     Settings.Instance.VideoClips.AudioStream.Num,
                                                     startTime, endTime,
                                                     Settings.Instance.AudioClips.Bitrate, outMp3File, null);
                    }
                }
                else // Audio file is provided
                {
                    if (Settings.Instance.AudioClips.Files.Length > 0)
                    {
                        string fileToCut      = Settings.Instance.AudioClips.Files[selectedEpisodeIndex];
                        bool   inputFileIsMp3 = (Path.GetExtension(fileToCut).ToLower() == ".mp3");

                        // Apply pad (if requested)
                        if (Settings.Instance.AudioClips.PadEnabled)
                        {
                            startTime = UtilsSubs.applyTimePad(startTime, -Settings.Instance.AudioClips.PadStart);
                            endTime   = UtilsSubs.applyTimePad(endTime, Settings.Instance.AudioClips.PadEnd);
                        }

                        if (ConstantSettings.ReencodeBeforeSplittingAudio || !inputFileIsMp3)
                        {
                            UtilsAudio.ripAudioFromVideo(fileToCut,
                                                         "0",
                                                         startTime, endTime,
                                                         Settings.Instance.AudioClips.Bitrate, outMp3File, null);
                        }
                        else
                        {
                            UtilsAudio.cutAudio(fileToCut, startTime, endTime, outMp3File);
                        }
                    }
                }

                // If no external audio player is specified, convert the .mp3 to .wav so that it can be played with SoundPlayer
                if (File.Exists(outMp3File))
                {
                    UtilsAudio.convertAudioFormat(outMp3File, outWavFile, 2);
                }
            }
        }