/// <summary>
        /// Prepare an audio file. This will be a single segment of a larger audio file, modified based on the analysisSettings.
        /// </summary>
        /// <param name="outputDirectory">
        /// The analysis Base Directory.
        /// </param>
        /// <param name="source">
        /// The source audio file.
        /// </param>
        /// <param name="outputMediaType">
        /// The output Media Type.
        /// </param>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <returns>
        /// The prepared file.
        /// </returns>
        public static AudioUtilityModifiedInfo PrepareFile(
            DirectoryInfo outputDirectory,
            FileInfo source,
            string outputMediaType,
            AudioUtilityRequest request,
            DirectoryInfo temporaryFilesDirectory,
            bool oldFormat = true)
        {
            var outputFileName = GetFileName(
                source.Name,
                outputMediaType,
                request.OffsetStart,
                request.OffsetEnd,
                oldFormat: oldFormat);

            var outputFile = new FileInfo(Path.Combine(outputDirectory.FullName, outputFileName));

            return(PrepareFile(source, outputFile, request, temporaryFilesDirectory));
        }
        /// <summary>
        /// The prepare file.
        /// </summary>
        /// <param name="request">
        ///   The request.
        /// </param>
        public static AudioUtilityModifiedInfo PrepareFile(FileInfo sourceFile, FileInfo outputFile, AudioUtilityRequest request, DirectoryInfo temporaryFilesDirectory)
        {
            var    audioUtility    = new MasterAudioUtility(temporaryFilesDirectory);
            var    sourceMimeType  = MediaTypes.GetMediaType(sourceFile.Extension);
            var    outputMimeType  = MediaTypes.GetMediaType(outputFile.Extension);
            string outputDirectory = Path.GetDirectoryName(outputFile.FullName);

            if (!Directory.Exists(outputDirectory))
            {
                Directory.CreateDirectory(outputDirectory);
            }

            audioUtility.Modify(
                sourceFile,
                sourceMimeType,
                outputFile,
                outputMimeType,
                request);

            var result = new AudioUtilityModifiedInfo
            {
                TargetInfo = audioUtility.Info(outputFile),
                SourceInfo = audioUtility.Info(sourceFile),
            };

            return(result);
        }