示例#1
0
        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();
                });
            });
        }
示例#2
0
        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;
            }));
        }