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;
}
}
}
}