private static CueFile TOCtoCUE(List <TOCEntry> tocEntries, string dataPath) { var cueFile = new CueFileEntry() { FileName = dataPath, Tracks = new List <CueTrack>(), FileType = "BINARY" }; var audioLeadin = new IndexPosition { Seconds = 2 }; foreach (var track in tocEntries) { var position = new IndexPosition { Minutes = track.Minutes, Seconds = track.Seconds, Frames = track.Frames, }; var indexes = new List <CueIndex>(); if (track.TrackType == TrackTypeEnum.Audio) { indexes.Add(new CueIndex() { Number = 0, Position = position - audioLeadin, }); } indexes.Add(new CueIndex() { Number = 1, Position = position, }); var cueTrack = new CueTrack() { DataType = TOCHelper.GetDataType(track.TrackType), Indexes = indexes, Number = track.TrackNo }; cueFile.Tracks.Add(cueTrack); } return(new CueFile(new[] { cueFile })); }
static MergedBin MergeBins(string file, CueFile cueFilex, string tempPath) { var mergedBin = new MergedBin(); mergedBin.CueFile = new CueFile(); var cueFilePath = Path.GetDirectoryName(file); long currentFrame = 0; var mergedFilename = Path.GetFileNameWithoutExtension(file) + " - MERGED.bin"; mergedBin.Path = Path.Combine(tempPath, mergedFilename); var mcueFile = new CueFileEntry() { FileName = mergedFilename, FileType = "BINARY", Tracks = new List <CueTrack>() }; mergedBin.CueFile.FileEntries.Add(mcueFile); using (var joinedFile = new FileStream(mergedBin.Path, FileMode.Create)) { foreach (var cueFileEntry in cueFilex.FileEntries) { var binPath = cueFileEntry.FileName; if (Path.GetDirectoryName(binPath) == "" || Path.GetDirectoryName(binPath).StartsWith("..") || Path.GetDirectoryName(binPath).StartsWith(".")) { binPath = Path.Combine(cueFilePath, cueFileEntry.FileName); } using (var srcStream = new FileStream(binPath, FileMode.Open)) { srcStream.CopyTo(joinedFile); foreach (var item in cueFileEntry.Tracks) { var indexes = new List <CueIndex>(); foreach (var idx in item.Indexes) { var newIndex = new CueIndex { Number = idx.Number, Position = idx.Position + TOCHelper.PositionFromFrames(currentFrame) }; indexes.Add(newIndex); } var newTrack = new CueTrack() { DataType = item.DataType, Number = item.Number, Indexes = indexes }; mcueFile.Tracks.Add(newTrack); } var frames = srcStream.Length / 2352; currentFrame += frames; } } } return(mergedBin); }