public void Run(TextWriter log, Args args) { var outFolder = _argResolver.GetOutputDirectory(args); var files = _argResolver.GetInputFiles(args).ToArray(); Iteration.ForEach(files, file => { var fileName = Path.GetFileNameWithoutExtension(file); using var inStream = _fileSystem.OpenRead(file); var xwbSounds = _xwbStreamReader.Read(inStream).ToArray(); Iteration.ForEach(xwbSounds, xwbSound => { var decoded = _xwbDecoder.Decode(xwbSound); var riff = _riffPcm16SoundEncoder.Encode(decoded); var outPath = Path.Combine(outFolder, fileName, _fileSystem.GetSafeFileName(xwbSound.Name) + ".wav"); using var outStream = _fileSystem.OpenWrite(outPath); _riffStreamWriter.Write(outStream, riff); outStream.Flush(); }); }); }
public ITask CreateExtractXwb() { return(Build("Extract XWB", task => { var files = GetInputFiles(task); if (!files.Any()) { task.Message = "No input files."; return false; } ParallelProgress(task, files, file => { using (var stream = OpenRead(task, file)) { var index = 0; foreach (var sound in _xwbStreamReader.Read(stream)) { var decoded = _xwbDecoder.Decode(sound); var encoded = _riffPcm16SoundEncoder.Encode(decoded); var name = decoded[StringData.Name]; using (var outStream = OpenWriteSingle(task, file, i => $"{name ?? $"{i}{index:0000}"}.wav")) { _riffStreamWriter.Write(outStream, encoded); outStream.Flush(); } index++; } } }); return true; })); }