예제 #1
0
        public void ExportData(Settings settings, InfoProgress progressInfo)
        {
            var activeCardList = GetActiveCards();

            progressInfo.AddSection("Exporting text file", 1);
            progressInfo.AddSection("Exporting snapshots", activeCardList.Count);
            progressInfo.AddSection("Exporting audio files", activeCardList.Count);
            if (settings.NormalizeAudio)
            {
                progressInfo.AddSection("Normalize audio files", activeCardList.Count);
            }
            progressInfo.Update();

            ExportTextFile(activeCardList, settings, progressInfo);

            progressInfo.ProcessedSteps(1);

            var cardSnapshotNameTupleList = new List <Tuple <CardInfo, String> >(activeCardList.Count);
            var cardAudioNameTupleList    = new List <Tuple <CardInfo, String> >(activeCardList.Count);

            foreach (var cardInfo in activeCardList)
            {
                cardSnapshotNameTupleList.Add(new Tuple <CardInfo, String>(cardInfo, GetSnapshotFileName(settings, cardInfo)));
                cardAudioNameTupleList.Add(new Tuple <CardInfo, String>(cardInfo, GetAudioFileName(settings, cardInfo)));
            }

            if (progressInfo.Cancelled)
            {
                return;
            }

            // extract images
            String snapshotsPath = settings.OutputDirectoryPath + Path.DirectorySeparatorChar + settings.DeckName + "_snapshots" + Path.DirectorySeparatorChar;

            UtilsCommon.ClearDirectory(snapshotsPath);
            WorkerSnapshot.ExtractSnaphots(settings, snapshotsPath, cardSnapshotNameTupleList, progressInfo);

            if (progressInfo.Cancelled)
            {
                return;
            }

            // extract audio
            String audioPath = settings.OutputDirectoryPath + Path.DirectorySeparatorChar + settings.DeckName + "_audio" + Path.DirectorySeparatorChar;

            UtilsCommon.ClearDirectory(audioPath);
            WorkerAudio.ExtractAudio(settings, audioPath, cardAudioNameTupleList, progressInfo);

            if (progressInfo.Cancelled)
            {
                return;
            }

            if (settings.NormalizeAudio)
            {
                // normalize all audio files
                foreach (var entry in cardAudioNameTupleList)
                {
                    if (progressInfo.Cancelled)
                    {
                        return;
                    }
                    progressInfo.ProcessedSteps(1);

                    var cardInfo = entry.Item1;
                    if (!cardInfo.HasAudio())
                    {
                        continue;
                    }

                    var filepath         = audioPath + entry.Item2;
                    var audioStreamInfos = StreamInfo.ReadAllStreams(filepath);
                    audioStreamInfos.RemoveAll(streamInfo => streamInfo.StreamTypeValue != StreamInfo.StreamType.ST_AUDIO);
                    if (audioStreamInfos.Count != 1)
                    {
                        Console.WriteLine("Skipped normalizing file \"{0}\" because it contains {1} audio streams", filepath, audioStreamInfos.Count);
                        continue;
                    }
                    try {
                        UtilsAudio.NormalizeAudio(filepath, audioStreamInfos[0]);
                    } catch (Exception e) {
                        Console.WriteLine(e.ToString());
                        continue;
                    }
                }
            }
        }