diff --git a/O2JamConverter/Encoder.cs b/O2JamConverter/Encoder.cs new file mode 100644 index 0000000..ad746c7 --- /dev/null +++ b/O2JamConverter/Encoder.cs @@ -0,0 +1,83 @@ +using System; +using System.Diagnostics; +using TagLib; + +namespace O2JamConverter +{ + public static class Encoder + { + public static bool EncodeToMp3(string wavPath, string mp3Path) + { + // We assume 'lame' is in the system's PATH. + // Using -V 2 for high quality VBR, a good default. + string arguments = $"-V 2 \"{wavPath}\" \"{mp3Path}\""; + try + { + using (var process = new Process()) + { + process.StartInfo = new ProcessStartInfo + { + FileName = "lame", + Arguments = arguments, + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true, + CreateNoWindow = true, + }; + + process.Start(); + string stdOut = process.StandardOutput.ReadToEnd(); + string stdErr = process.StandardError.ReadToEnd(); + process.WaitForExit(); + + if (process.ExitCode != 0) + { + Console.WriteLine("LAME encoder failed."); + Console.WriteLine("STDOUT: " + stdOut); + Console.WriteLine("STDERR: " + stdErr); + return false; + } + return true; + } + } + catch (Exception ex) + { + Console.WriteLine("Failed to run LAME encoder. Is 'lame' installed and in your PATH?"); + Console.WriteLine(ex.Message); + return false; + } + } + + public static void TagMp3(string mp3Path, MusicHeader header) + { + try + { + var file = TagLib.File.Create(mp3Path); + file.Tag.Title = header.Title; + file.Tag.Performers = new[] { header.Artist }; + file.Tag.AlbumArtists = new[] { header.Charter }; // Using AlbumArtists for the charter. + file.Tag.Genres = new[] { MapGenre(header.NewGenreCode) }; + // file.Tag.Track = (uint)header.NewSongID; // NewSongID can be 0, which is invalid for Track. + + file.Tag.Comment = "Generated by O2JamConverter"; + + file.Save(); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to write tags to {mp3Path}: {ex.Message}"); + } + } + + private static string MapGenre(uint genreCode) + { + // This mapping is from the C++ source code. + string[] genres = { "Ballad", "Rock", "Dance", "Techno", "Hip-hop", "Soul/R&B", "Jazz", "Funk", "Classical", "Traditional", "Etc" }; + if (genreCode < genres.Length) + { + return genres[genreCode]; + } + return "Etc"; + } + } +} diff --git a/O2JamConverter/FileFormats.cs b/O2JamConverter/FileFormats.cs new file mode 100644 index 0000000..a1b36d6 --- /dev/null +++ b/O2JamConverter/FileFormats.cs @@ -0,0 +1,65 @@ +namespace O2JamConverter +{ + // Corresponds to the MusicHeader struct in the C++ project. + // Note: The char arrays (strings) will be handled during binary reading. + public class MusicHeader + { + public uint NewSongID; + public uint FileSignature; + public float NewEncVersion; + public uint NewGenreCode; + public float Tempo; + public ushort[] Level { get; set; } = new ushort[3]; + public uint[] NumEvents { get; set; } = new uint[3]; + public uint[] NumNotes { get; set; } = new uint[3]; + public uint[] NumMeasures { get; set; } = new uint[3]; + public uint[] NumNoteSets { get; set; } = new uint[3]; + public ushort OldEncVersion; + public ushort OldSongID; + public string OldGenre { get; set; } = ""; + public uint OldCoverArtSize; + public float NoteChartVersion; + public string Title { get; set; } = ""; + public string Artist { get; set; } = ""; + public string Charter { get; set; } = ""; + public string OJMFile { get; set; } = ""; + public uint NewCoverArtSize; + public uint[] Duration { get; set; } = new uint[3]; + public uint[] DataOffset { get; set; } = new uint[4]; + } + + // Base class for musical events. + public abstract class Event + { + public uint Measure; + public uint Grid; + public float Time; + public bool IsApplied; + } + + // Represents a tempo change event. + public class TempoEvent : Event + { + public float Value; + } + + // Represents a note/sound event. + public class SoundEvent : Event + { + public ushort RefID; + public sbyte Volume; + public sbyte Pan; + public byte NoteType; + } + + // Represents a decoded audio sample. + public class Sample + { + public ushort RefID; + public uint Filesize; + public byte BankType; + public string Name { get; set; } = ""; + // In the C# version, this will hold the raw WAV data. + public byte[]? AudioData { get; set; } + } +} diff --git a/O2JamConverter/MusicRenderer.cs b/O2JamConverter/MusicRenderer.cs new file mode 100644 index 0000000..a21838a --- /dev/null +++ b/O2JamConverter/MusicRenderer.cs @@ -0,0 +1,65 @@ +using NAudio.Wave; +using NAudio.Wave.SampleProviders; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace O2JamConverter +{ + public static class MusicRenderer + { + public static void RenderToFile(string outputPath, List soundEvents, List samples) + { + if (!soundEvents.Any()) + { + Console.WriteLine("No sound events to render."); + return; + } + + // Define a standard output format. NAudio's mixer will resample inputs to match. + var outputFormat = new WaveFormat(44100, 16, 2); + var mixer = new MixingSampleProvider(outputFormat); + + // Create a dictionary of sample data for quick lookup. + var sampleData = samples.Where(s => s.AudioData != null) + .ToDictionary(s => s.RefID, s => s.AudioData); + + foreach (var soundEvent in soundEvents) + { + if (sampleData.TryGetValue(soundEvent.RefID, out var audioBytes)) + { + // For each event, create a new reader from the sample's byte array. + var reader = new WaveFileReader(new MemoryStream(audioBytes!)); + + // Convert to a sample provider. The mixer will handle resampling if needed. + ISampleProvider sampleProvider = reader.ToSampleProvider(); + + // Apply volume and pan if the data is available in the event. + // Note: The original C++ code didn't seem to use volume/pan, but we support it here. + if (soundEvent.Volume != 0 || soundEvent.Pan != 0) + { + var panningProvider = new PanningSampleProvider(sampleProvider); + // Pan is -1 (left) to 1 (right). O2Jam is -100 to 100? Let's assume a simple mapping. + panningProvider.Pan = Math.Max(-1.0f, Math.Min(1.0f, soundEvent.Pan / 100.0f)); + sampleProvider = panningProvider; + + // Volume is not directly available in ISampleProvider, but we can wrap it. + // We'll skip volume for now to keep it simple, as it wasn't used in the C++ source. + } + + // Schedule the sample to be played at the correct time. + var offsetProvider = new OffsetSampleProvider(sampleProvider) + { + DelayBy = TimeSpan.FromMilliseconds(soundEvent.Time) + }; + + mixer.AddMixerInput(offsetProvider); + } + } + + // Render the mixed audio to a 16-bit WAV file. + WaveFileWriter.CreateWaveFile16(outputPath, mixer); + } + } +} diff --git a/O2JamConverter/O2JamConverter.csproj b/O2JamConverter/O2JamConverter.csproj new file mode 100644 index 0000000..8f6f7a8 --- /dev/null +++ b/O2JamConverter/O2JamConverter.csproj @@ -0,0 +1,17 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + + + + diff --git a/O2JamConverter/OjmParser.cs b/O2JamConverter/OjmParser.cs new file mode 100644 index 0000000..7696eb7 --- /dev/null +++ b/O2JamConverter/OjmParser.cs @@ -0,0 +1,208 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace O2JamConverter +{ + public static class OjmParser + { + private static readonly Encoding KoreanEncoding = Encoding.GetEncoding("EUC-KR"); + + private static readonly byte[] RearrangeTable = { + 0x10, 0x0E, 0x02, 0x09, 0x04, 0x00, 0x07, 0x01, 0x06, 0x08, 0x0F, 0x0A, 0x05, 0x0C, 0x03, 0x0D, + 0x0B, 0x07, 0x02, 0x0A, 0x0B, 0x03, 0x05, 0x0D, 0x08, 0x04, 0x00, 0x0C, 0x06, 0x0F, 0x0E, 0x10, + 0x01, 0x09, 0x0C, 0x0D, 0x03, 0x00, 0x06, 0x09, 0x0A, 0x01, 0x07, 0x08, 0x10, 0x02, 0x0B, 0x0E, + 0x04, 0x0F, 0x05, 0x08, 0x03, 0x04, 0x0D, 0x06, 0x05, 0x0B, 0x10, 0x02, 0x0C, 0x07, 0x09, 0x0A, + 0x0F, 0x0E, 0x00, 0x01, 0x0F, 0x02, 0x0C, 0x0D, 0x00, 0x04, 0x01, 0x05, 0x07, 0x03, 0x09, 0x10, + 0x06, 0x0B, 0x0A, 0x08, 0x0E, 0x00, 0x04, 0x0B, 0x10, 0x0F, 0x0D, 0x0C, 0x06, 0x05, 0x07, 0x01, + 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0E, 0x03, 0x10, 0x08, 0x07, 0x06, 0x09, 0x0E, 0x0D, 0x00, 0x0A, + 0x0B, 0x04, 0x05, 0x0C, 0x02, 0x01, 0x0F, 0x04, 0x0E, 0x10, 0x0F, 0x05, 0x08, 0x07, 0x0B, 0x00, + 0x01, 0x06, 0x02, 0x0C, 0x09, 0x03, 0x0A, 0x0D, 0x06, 0x0D, 0x0E, 0x07, 0x10, 0x0A, 0x0B, 0x00, + 0x01, 0x0C, 0x0F, 0x02, 0x03, 0x08, 0x09, 0x04, 0x05, 0x0A, 0x0C, 0x00, 0x08, 0x09, 0x0D, 0x03, + 0x04, 0x05, 0x10, 0x0E, 0x0F, 0x01, 0x02, 0x0B, 0x06, 0x07, 0x05, 0x06, 0x0C, 0x04, 0x0D, 0x0F, + 0x07, 0x0E, 0x08, 0x01, 0x09, 0x02, 0x10, 0x0A, 0x0B, 0x00, 0x03, 0x0B, 0x0F, 0x04, 0x0E, 0x03, + 0x01, 0x00, 0x02, 0x0D, 0x0C, 0x06, 0x07, 0x05, 0x10, 0x09, 0x08, 0x0A, 0x03, 0x02, 0x01, 0x00, + 0x04, 0x0C, 0x0D, 0x0B, 0x10, 0x05, 0x06, 0x0F, 0x0E, 0x07, 0x09, 0x0A, 0x08, 0x09, 0x0A, 0x00, + 0x07, 0x08, 0x06, 0x10, 0x03, 0x04, 0x01, 0x02, 0x05, 0x0B, 0x0E, 0x0F, 0x0D, 0x0C, 0x0A, 0x06, + 0x09, 0x0C, 0x0B, 0x10, 0x07, 0x08, 0x00, 0x0F, 0x03, 0x01, 0x02, 0x05, 0x0D, 0x0E, 0x04, 0x0D, + 0x00, 0x01, 0x0E, 0x02, 0x03, 0x08, 0x0B, 0x07, 0x0C, 0x09, 0x05, 0x0A, 0x0F, 0x04, 0x06, 0x10, + 0x01, 0x0E, 0x02, 0x03, 0x0D, 0x0B, 0x07, 0x00, 0x08, 0x0C, 0x09, 0x06, 0x0F, 0x10, 0x05, 0x0A, + 0x04, 0x00 + }; + + private struct WaveFormatHeader + { + public short AudioFormat; + public short NumChannels; + public int SampleRate; + public int BitRate; + public short BlockAlign; + public short BitsPerSample; + } + + public static List Parse(string ojmFilePath) + { + if (!File.Exists(ojmFilePath)) + throw new FileNotFoundException("OJM file not found.", ojmFilePath); + + using (var reader = new BinaryReader(File.OpenRead(ojmFilePath))) + { + string signature = KoreanEncoding.GetString(reader.ReadBytes(4)); + if (signature.StartsWith("M30")) + { + return ParseM30(reader); + } + else if (signature.StartsWith("OMC") || signature.StartsWith("OJM")) + { + return ParseOMC(reader); + } + else + { + throw new InvalidDataException("Unsupported OJM file format."); + } + } + } + + private static List ParseM30(BinaryReader reader) + { + // Placeholder for M30 parsing. The C++ code didn't detail this as much as OMC. + // For now, returning an empty list as the primary focus is OMC. + return new List(); + } + + private static List ParseOMC(BinaryReader reader) + { + var samples = new List(); + byte accKeyByte = 0xFF; + int accCounter = 0; + + ushort nWav = reader.ReadUInt16(); + ushort nOgg = reader.ReadUInt16(); + uint wavOffset = reader.ReadUInt32(); + uint oggOffset = reader.ReadUInt32(); + reader.ReadUInt32(); // Total filesize, unused + + reader.BaseStream.Seek(wavOffset, SeekOrigin.Begin); + + for (int i = 0; i < nWav; i++) + { + var sample = new Sample { RefID = (ushort)(i + 1) }; + sample.Name = KoreanEncoding.GetString(reader.ReadBytes(32)).TrimEnd('\0'); + + var waveHeader = new WaveFormatHeader + { + AudioFormat = reader.ReadInt16(), + NumChannels = reader.ReadInt16(), + SampleRate = reader.ReadInt32(), + BitRate = reader.ReadInt32(), + BlockAlign = reader.ReadInt16(), + BitsPerSample = reader.ReadInt16() + }; + reader.ReadBytes(4); // "data" chunk id + int chunkSize = reader.ReadInt32(); + + if (chunkSize == 0) continue; + + byte[] encryptedData = reader.ReadBytes(chunkSize); + byte[] decryptedData = DecodeWave(encryptedData, ref accKeyByte, ref accCounter); + + using (var ms = new MemoryStream()) + using (var writer = new BinaryWriter(ms)) + { + writer.Write(Encoding.ASCII.GetBytes("RIFF")); + writer.Write(36 + decryptedData.Length); + writer.Write(Encoding.ASCII.GetBytes("WAVE")); + writer.Write(Encoding.ASCII.GetBytes("fmt ")); + writer.Write(16); // PCM chunk size + writer.Write(waveHeader.AudioFormat); + writer.Write(waveHeader.NumChannels); + writer.Write(waveHeader.SampleRate); + writer.Write(waveHeader.BitRate); + writer.Write(waveHeader.BlockAlign); + writer.Write(waveHeader.BitsPerSample); + writer.Write(Encoding.ASCII.GetBytes("data")); + writer.Write(decryptedData.Length); + writer.Write(decryptedData); + sample.AudioData = ms.ToArray(); + } + samples.Add(sample); + } + + if (oggOffset > 0 && reader.BaseStream.Position != oggOffset) + { + reader.BaseStream.Seek(oggOffset, SeekOrigin.Begin); + } + + for (int i = 0; i < nOgg; i++) + { + var sample = new Sample { RefID = (ushort)(i + 1001) }; + sample.Name = KoreanEncoding.GetString(reader.ReadBytes(32)).TrimEnd('\0'); + int filesize = reader.ReadInt32(); + if (filesize > 0 && reader.BaseStream.Position + filesize <= reader.BaseStream.Length) + { + sample.AudioData = reader.ReadBytes(filesize); + samples.Add(sample); + } + } + + return samples; + } + + private static byte[] DecodeWave(byte[] encryptedData, ref byte accKeyByte, ref int accCounter) + { + int length = encryptedData.Length; + byte[] sourceData = (byte[])encryptedData.Clone(); + byte[] rearrangedData = new byte[length]; + + // 1. Rearrange + int key = ((length % 17) << 4) + (length % 17); + int blockSize = length / 17; + + for (int block = 0; block < 17; block++) + { + int destOffset = blockSize * block; + int srcOffset = blockSize * RearrangeTable[key]; + + if(destOffset + blockSize > length || srcOffset + blockSize > length) continue; + + Buffer.BlockCopy(sourceData, srcOffset, rearrangedData, destOffset, blockSize); + key++; + } + + int remainder = length % 17; + if (remainder > 0) + { + int remainderOffset = blockSize * 17; + Buffer.BlockCopy(sourceData, remainderOffset, rearrangedData, remainderOffset, remainder); + } + + // 2. ACCXOR + byte[] decryptedData = new byte[length]; + byte tmp; + byte currentByte; + + for (int i = 0; i < length; i++) + { + tmp = rearrangedData[i]; + currentByte = rearrangedData[i]; + + if (((accKeyByte << accCounter) & 0x80) != 0) + { + currentByte = (byte)~currentByte; + } + + decryptedData[i] = currentByte; + accCounter++; + + if (accCounter > 7) + { + accCounter = 0; + accKeyByte = tmp; + } + } + + return decryptedData; + } + } +} diff --git a/O2JamConverter/OjnParser.cs b/O2JamConverter/OjnParser.cs new file mode 100644 index 0000000..1431076 --- /dev/null +++ b/O2JamConverter/OjnParser.cs @@ -0,0 +1,179 @@ +using System.IO; +using System.Text; + +namespace O2JamConverter +{ + public static class OjnParser + { + // Note: Call Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); at startup. + private static readonly Encoding KoreanEncoding = Encoding.GetEncoding("EUC-KR"); + + public static MusicHeader ParseHeader(string ojnFilePath) + { + var header = new MusicHeader(); + using (var reader = new BinaryReader(File.OpenRead(ojnFilePath))) + { + header.NewSongID = reader.ReadUInt32(); + header.FileSignature = reader.ReadUInt32(); + + if (header.FileSignature != 7236207) + { + throw new InvalidDataException("The file is not a valid OJN file. Signature mismatch."); + } + + header.NewEncVersion = reader.ReadSingle(); + header.NewGenreCode = reader.ReadUInt32(); + header.Tempo = reader.ReadSingle(); + header.Level[0] = reader.ReadUInt16(); + header.Level[1] = reader.ReadUInt16(); + header.Level[2] = reader.ReadUInt16(); + reader.ReadBytes(2); // Padding + + header.NumEvents[0] = reader.ReadUInt32(); + header.NumEvents[1] = reader.ReadUInt32(); + header.NumEvents[2] = reader.ReadUInt32(); + + header.NumNotes[0] = reader.ReadUInt32(); + header.NumNotes[1] = reader.ReadUInt32(); + header.NumNotes[2] = reader.ReadUInt32(); + + header.NumMeasures[0] = reader.ReadUInt32(); + header.NumMeasures[1] = reader.ReadUInt32(); + header.NumMeasures[2] = reader.ReadUInt32(); + + header.NumNoteSets[0] = reader.ReadUInt32(); + header.NumNoteSets[1] = reader.ReadUInt32(); + header.NumNoteSets[2] = reader.ReadUInt32(); + + header.OldEncVersion = reader.ReadUInt16(); + header.OldSongID = reader.ReadUInt16(); + + header.OldGenre = KoreanEncoding.GetString(reader.ReadBytes(20)).TrimEnd('\0'); + header.OldCoverArtSize = reader.ReadUInt32(); + header.NoteChartVersion = reader.ReadSingle(); + + header.Title = KoreanEncoding.GetString(reader.ReadBytes(64)).TrimEnd('\0'); + header.Artist = KoreanEncoding.GetString(reader.ReadBytes(32)).TrimEnd('\0'); + header.Charter = KoreanEncoding.GetString(reader.ReadBytes(32)).TrimEnd('\0'); + header.OJMFile = KoreanEncoding.GetString(reader.ReadBytes(32)).TrimEnd('\0'); + + header.NewCoverArtSize = reader.ReadUInt32(); + + header.Duration[0] = reader.ReadUInt32(); + header.Duration[1] = reader.ReadUInt32(); + header.Duration[2] = reader.ReadUInt32(); + + header.DataOffset[0] = reader.ReadUInt32(); + header.DataOffset[1] = reader.ReadUInt32(); + header.DataOffset[2] = reader.ReadUInt32(); + header.DataOffset[3] = reader.ReadUInt32(); + } + return header; + } + + public static (List soundEvents, List tempoEvents) ParseEvents(string ojnFilePath, MusicHeader header, int difficulty) + { + if (difficulty < 0 || difficulty > 2) + throw new ArgumentOutOfRangeException(nameof(difficulty), "Difficulty must be between 0 and 2."); + + var soundEvents = new List(); + var tempoEvents = new List(); + + // State for time calculation + float lastRenderGrid = 0.0f; + float lastRenderTime = 0.0f; + float currentRenderTempo = header.Tempo; + + // Local function to replicate C++ CalculateTime + float CalculateTime(uint measure, uint grid) + { + float mspb = 60.0f / currentRenderTempo * 1000.0f; + float totalGrid = (float)measure * 192.0f + (float)grid; + float beats = (totalGrid - lastRenderGrid) / 48.0f; + + float result = mspb * beats; + lastRenderGrid = totalGrid; + lastRenderTime += result; + + return lastRenderTime; + } + + using (var reader = new BinaryReader(File.OpenRead(ojnFilePath))) + { + long startOffset = header.DataOffset[difficulty]; + // if the next offset is 0, it means it's the last difficulty, so we read to the end of the file + long endOffset = (difficulty + 1 < header.DataOffset.Length && header.DataOffset[difficulty + 1] > 0) + ? header.DataOffset[difficulty + 1] + : reader.BaseStream.Length; + + + reader.BaseStream.Seek(startOffset, SeekOrigin.Begin); + + while (reader.BaseStream.Position < endOffset) + { + uint measure = reader.ReadUInt32(); + ushort channel = reader.ReadUInt16(); + ushort numEvents = reader.ReadUInt16(); + + if (numEvents == 0) continue; + + for (int i = 0; i < numEvents; i++) + { + uint grid = (uint)(i * (192.0f / numEvents)); + + if (channel == 1) // Tempo event + { + float tempoValue = reader.ReadSingle(); + if (tempoValue > 0) + { + var tempoEvent = new TempoEvent + { + Measure = measure, + Grid = grid, + Value = tempoValue, + Time = CalculateTime(measure, grid) + }; + currentRenderTempo = tempoValue; + tempoEvents.Add(tempoEvent); + } + } + else if (channel >= 2 && channel <= 8) // Sound events (notes) + { + ushort refId = reader.ReadUInt16(); + if (refId > 0) + { + sbyte volume = reader.ReadSByte(); + sbyte pan = reader.ReadSByte(); + + var soundEvent = new SoundEvent + { + Measure = measure, + Grid = grid, + RefID = refId, + Volume = volume, + Pan = pan, + Time = CalculateTime(measure, grid) + }; + soundEvents.Add(soundEvent); + } + else + { + reader.ReadBytes(2); // Skip volume/pan + } + } + else // Other channels (e.g. time signature, etc.), just skip the data + { + reader.ReadBytes(4); + } + } + } + } + + // Sort events by time, as the rendering logic will rely on this order. + soundEvents = soundEvents.OrderBy(e => e.Time).ToList(); + tempoEvents = tempoEvents.OrderBy(e => e.Time).ToList(); + + return (soundEvents, tempoEvents); + } + } +} diff --git a/O2JamConverter/Program.cs b/O2JamConverter/Program.cs new file mode 100644 index 0000000..9ac173f --- /dev/null +++ b/O2JamConverter/Program.cs @@ -0,0 +1,146 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using CommandLine; + +namespace O2JamConverter +{ + class Program + { + public class Options + { + [Option('i', "input", Required = true, HelpText = "Input OJN file or directory containing OJN files.")] + public string InputPath { get; set; } = default!; + + [Option('o', "output", Required = false, HelpText = "Output directory to save MP3 files. Defaults to a directory named 'output' in the input path.")] + public string? OutputPath { get; set; } + } + + static void Main(string[] args) + { + // Register the provider for handling Korean encodings + Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); + + Parser.Default.ParseArguments(args) + .WithParsed(o => + { + RunConversion(o); + }); + } + + static void RunConversion(Options opts) + { + string inputPath = Path.GetFullPath(opts.InputPath); + string outputRootPath; + + List ojnFiles = new List(); + + if (File.Exists(inputPath)) + { + if (Path.GetExtension(inputPath).ToLower() != ".ojn") + { + Console.WriteLine("Error: Input file must be an .ojn file."); + return; + } + ojnFiles.Add(inputPath); + string? inputDir = Path.GetDirectoryName(inputPath); + outputRootPath = opts.OutputPath ?? Path.Combine(inputDir ?? "", "output"); + } + else if (Directory.Exists(inputPath)) + { + ojnFiles.AddRange(Directory.GetFiles(inputPath, "*.ojn", SearchOption.AllDirectories)); + if (!ojnFiles.Any()) + { + Console.WriteLine($"No .ojn files found in '{inputPath}'."); + return; + } + outputRootPath = opts.OutputPath ?? Path.Combine(inputPath, "output"); + Console.WriteLine($"Found {ojnFiles.Count} .ojn files. Starting batch conversion..."); + } + else + { + Console.WriteLine($"Error: Input path '{inputPath}' is not a valid file or directory."); + return; + } + + foreach (var ojnFile in ojnFiles) + { + string outputDir = outputRootPath; + // If processing a directory, maintain sub-directory structure in the output + if (Directory.Exists(inputPath)) + { + string relativeDir = Path.GetDirectoryName(Path.GetRelativePath(inputPath, ojnFile)) ?? ""; + outputDir = Path.Combine(outputRootPath, relativeDir); + } + ProcessFile(ojnFile, outputDir); + } + Console.WriteLine("\nConversion finished."); + } + + static void ProcessFile(string ojnPath, string outputDir) + { + Console.WriteLine($"\nProcessing '{Path.GetFileName(ojnPath)}'..."); + try + { + // 1. Parse Header + Console.WriteLine(" Parsing OJN header..."); + var header = OjnParser.ParseHeader(ojnPath); + + // 2. Parse OJM Samples + string ojnDir = Path.GetDirectoryName(ojnPath) ?? ""; + string ojmPath = Path.Combine(ojnDir, header.OJMFile); + if (!File.Exists(ojmPath)) + { + Console.WriteLine($" Error: OJM file not found at '{ojmPath}'"); + return; + } + Console.WriteLine(" Parsing OJM samples..."); + var samples = OjmParser.Parse(ojmPath); + + // 3. Parse Events (using Hard difficulty by default, as per original C++ app) + Console.WriteLine(" Parsing note events..."); + var (soundEvents, _) = OjnParser.ParseEvents(ojnPath, header, 2); // 0=E, 1=N, 2=H + + if (!soundEvents.Any()) + { + Console.WriteLine(" No sound events found in the selected difficulty."); + return; + } + + // 4. Render to WAV + Directory.CreateDirectory(outputDir); + string tempWavPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".wav"); + string finalMp3Path = Path.Combine(outputDir, Path.GetFileNameWithoutExtension(ojnPath) + ".mp3"); + + Console.WriteLine(" Rendering to temporary WAV file..."); + MusicRenderer.RenderToFile(tempWavPath, soundEvents, samples); + + // 5. Encode to MP3 + Console.WriteLine(" Encoding to MP3..."); + bool success = Encoder.EncodeToMp3(tempWavPath, finalMp3Path); + + // 6. Clean up temp file + File.Delete(tempWavPath); + + if (success) + { + // 7. Tag MP3 + Console.WriteLine(" Tagging MP3 file..."); + Encoder.TagMp3(finalMp3Path, header); + Console.WriteLine($" Successfully converted to '{finalMp3Path}'"); + } + else + { + Console.WriteLine(" Failed to convert to MP3. Ensure 'lame' is installed and in your system PATH."); + } + } + catch (Exception ex) + { + Console.WriteLine($" An error occurred: {ex.Message}"); + // For debugging: Console.WriteLine(ex.StackTrace); + } + } + } +} diff --git a/O2JamConverter/bin/Debug/net8.0/CommandLine.dll b/O2JamConverter/bin/Debug/net8.0/CommandLine.dll new file mode 100755 index 0000000..3eab2be Binary files /dev/null and b/O2JamConverter/bin/Debug/net8.0/CommandLine.dll differ diff --git a/O2JamConverter/bin/Debug/net8.0/NAudio.Asio.dll b/O2JamConverter/bin/Debug/net8.0/NAudio.Asio.dll new file mode 100755 index 0000000..761ec14 Binary files /dev/null and b/O2JamConverter/bin/Debug/net8.0/NAudio.Asio.dll differ diff --git a/O2JamConverter/bin/Debug/net8.0/NAudio.Core.dll b/O2JamConverter/bin/Debug/net8.0/NAudio.Core.dll new file mode 100755 index 0000000..254cd2c Binary files /dev/null and b/O2JamConverter/bin/Debug/net8.0/NAudio.Core.dll differ diff --git a/O2JamConverter/bin/Debug/net8.0/NAudio.Midi.dll b/O2JamConverter/bin/Debug/net8.0/NAudio.Midi.dll new file mode 100755 index 0000000..c5dcc05 Binary files /dev/null and b/O2JamConverter/bin/Debug/net8.0/NAudio.Midi.dll differ diff --git a/O2JamConverter/bin/Debug/net8.0/NAudio.Wasapi.dll b/O2JamConverter/bin/Debug/net8.0/NAudio.Wasapi.dll new file mode 100755 index 0000000..a28f8ca Binary files /dev/null and b/O2JamConverter/bin/Debug/net8.0/NAudio.Wasapi.dll differ diff --git a/O2JamConverter/bin/Debug/net8.0/NAudio.WinMM.dll b/O2JamConverter/bin/Debug/net8.0/NAudio.WinMM.dll new file mode 100755 index 0000000..62668f7 Binary files /dev/null and b/O2JamConverter/bin/Debug/net8.0/NAudio.WinMM.dll differ diff --git a/O2JamConverter/bin/Debug/net8.0/NAudio.dll b/O2JamConverter/bin/Debug/net8.0/NAudio.dll new file mode 100755 index 0000000..631aac3 Binary files /dev/null and b/O2JamConverter/bin/Debug/net8.0/NAudio.dll differ diff --git a/O2JamConverter/bin/Debug/net8.0/O2JamConverter b/O2JamConverter/bin/Debug/net8.0/O2JamConverter new file mode 100755 index 0000000..2d470b8 Binary files /dev/null and b/O2JamConverter/bin/Debug/net8.0/O2JamConverter differ diff --git a/O2JamConverter/bin/Debug/net8.0/O2JamConverter.deps.json b/O2JamConverter/bin/Debug/net8.0/O2JamConverter.deps.json new file mode 100644 index 0000000..a8569ab --- /dev/null +++ b/O2JamConverter/bin/Debug/net8.0/O2JamConverter.deps.json @@ -0,0 +1,235 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "O2JamConverter/1.0.0": { + "dependencies": { + "CommandLineParser": "2.9.1", + "NAudio": "2.2.1", + "System.Text.Encoding.CodePages": "9.0.9", + "TagLibSharp": "2.3.0" + }, + "runtime": { + "O2JamConverter.dll": {} + } + }, + "CommandLineParser/2.9.1": { + "runtime": { + "lib/netstandard2.0/CommandLine.dll": { + "assemblyVersion": "2.9.1.0", + "fileVersion": "2.9.1.0" + } + } + }, + "Microsoft.NETCore.Platforms/3.1.0": {}, + "Microsoft.Win32.Registry/4.7.0": { + "dependencies": { + "System.Security.AccessControl": "4.7.0", + "System.Security.Principal.Windows": "4.7.0" + } + }, + "NAudio/2.2.1": { + "dependencies": { + "NAudio.Asio": "2.2.1", + "NAudio.Core": "2.2.1", + "NAudio.Midi": "2.2.1", + "NAudio.Wasapi": "2.2.1", + "NAudio.WinMM": "2.2.1" + }, + "runtime": { + "lib/net6.0/NAudio.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.Asio/2.2.1": { + "dependencies": { + "Microsoft.Win32.Registry": "4.7.0", + "NAudio.Core": "2.2.1" + }, + "runtime": { + "lib/netstandard2.0/NAudio.Asio.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.Core/2.2.1": { + "runtime": { + "lib/netstandard2.0/NAudio.Core.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.Midi/2.2.1": { + "dependencies": { + "NAudio.Core": "2.2.1" + }, + "runtime": { + "lib/netstandard2.0/NAudio.Midi.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.Wasapi/2.2.1": { + "dependencies": { + "NAudio.Core": "2.2.1" + }, + "runtime": { + "lib/netstandard2.0/NAudio.Wasapi.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "NAudio.WinMM/2.2.1": { + "dependencies": { + "Microsoft.Win32.Registry": "4.7.0", + "NAudio.Core": "2.2.1" + }, + "runtime": { + "lib/netstandard2.0/NAudio.WinMM.dll": { + "assemblyVersion": "2.2.1.0", + "fileVersion": "2.2.1.0" + } + } + }, + "System.Security.AccessControl/4.7.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "System.Security.Principal.Windows": "4.7.0" + } + }, + "System.Security.Principal.Windows/4.7.0": {}, + "System.Text.Encoding.CodePages/9.0.9": { + "runtime": { + "lib/net8.0/System.Text.Encoding.CodePages.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.925.41916" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.925.41916" + } + } + }, + "TagLibSharp/2.3.0": { + "runtime": { + "lib/netstandard2.0/TagLibSharp.dll": { + "assemblyVersion": "2.3.0.0", + "fileVersion": "2.3.0.0" + } + } + } + } + }, + "libraries": { + "O2JamConverter/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "CommandLineParser/2.9.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OE0sl1/sQ37bjVsPKKtwQlWDgqaxWgtme3xZz7JssWUzg5JpMIyHgCTY9MVMxOg48fJ1AgGT3tgdH5m/kQ5xhA==", + "path": "commandlineparser/2.9.1", + "hashPath": "commandlineparser.2.9.1.nupkg.sha512" + }, + "Microsoft.NETCore.Platforms/3.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==", + "path": "microsoft.netcore.platforms/3.1.0", + "hashPath": "microsoft.netcore.platforms.3.1.0.nupkg.sha512" + }, + "Microsoft.Win32.Registry/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==", + "path": "microsoft.win32.registry/4.7.0", + "hashPath": "microsoft.win32.registry.4.7.0.nupkg.sha512" + }, + "NAudio/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-c0DzwiyyklM0TP39Y7RObwO3QkWecgM6H60ikiEnsV/aEAJPbj5MFCLaD8BSfKuZe0HGuh9GRGWWlJmSxDc9MA==", + "path": "naudio/2.2.1", + "hashPath": "naudio.2.2.1.nupkg.sha512" + }, + "NAudio.Asio/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-hQglyOT5iT3XuGpBP8ZG0+aoqwRfidHjTNehpoWwX0g6KJEgtH2VaqM2nuJ2mheKZa/IBqB4YQTZVvrIapzfOA==", + "path": "naudio.asio/2.2.1", + "hashPath": "naudio.asio.2.2.1.nupkg.sha512" + }, + "NAudio.Core/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-GgkdP6K/7FqXFo7uHvoqGZTJvW4z8g2IffhOO4JHaLzKCdDOUEzVKtveoZkCuUX8eV2HAINqi7VFqlFndrnz/g==", + "path": "naudio.core/2.2.1", + "hashPath": "naudio.core.2.2.1.nupkg.sha512" + }, + "NAudio.Midi/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6r23ylGo5aeP02WFXsPquz0T0hFJWyh+7t++tz19tc3Kr38NHm+Z9j+FiAv+xkH8tZqXJqus9Q8p6u7bidIgbw==", + "path": "naudio.midi/2.2.1", + "hashPath": "naudio.midi.2.2.1.nupkg.sha512" + }, + "NAudio.Wasapi/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lFfXoqacZZe0WqNChJgGYI+XV/n/61LzPHT3C1CJp4khoxeo2sziyX5wzNYWeCMNbsWxFvT3b3iXeY1UYjBhZw==", + "path": "naudio.wasapi/2.2.1", + "hashPath": "naudio.wasapi.2.2.1.nupkg.sha512" + }, + "NAudio.WinMM/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xFHRFwH4x6aq3IxRbewvO33ugJRvZFEOfO62i7uQJRUNW2cnu6BeBTHUS0JD5KBucZbHZaYqxQG8dwZ47ezQuQ==", + "path": "naudio.winmm/2.2.1", + "hashPath": "naudio.winmm.2.2.1.nupkg.sha512" + }, + "System.Security.AccessControl/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==", + "path": "system.security.accesscontrol/4.7.0", + "hashPath": "system.security.accesscontrol.4.7.0.nupkg.sha512" + }, + "System.Security.Principal.Windows/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==", + "path": "system.security.principal.windows/4.7.0", + "hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512" + }, + "System.Text.Encoding.CodePages/9.0.9": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5D+YO1AmHOPmslqlt+QT4zkR9vQRt46OXHRihqN1v0PLKeFe7KO1YuCJeUE4uNiPGJi0T1Y2fC9GHqhwvfkHDA==", + "path": "system.text.encoding.codepages/9.0.9", + "hashPath": "system.text.encoding.codepages.9.0.9.nupkg.sha512" + }, + "TagLibSharp/2.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Qo4z6ZjnIfbR3Us1Za5M2vQ97OWZPmODvVmepxZ8XW0UIVLGdO2T63/N3b23kCcyiwuIe0TQvMEQG8wUCCD1mA==", + "path": "taglibsharp/2.3.0", + "hashPath": "taglibsharp.2.3.0.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/O2JamConverter/bin/Debug/net8.0/O2JamConverter.dll b/O2JamConverter/bin/Debug/net8.0/O2JamConverter.dll new file mode 100644 index 0000000..26a4ccf Binary files /dev/null and b/O2JamConverter/bin/Debug/net8.0/O2JamConverter.dll differ diff --git a/O2JamConverter/bin/Debug/net8.0/O2JamConverter.pdb b/O2JamConverter/bin/Debug/net8.0/O2JamConverter.pdb new file mode 100644 index 0000000..0253d7e Binary files /dev/null and b/O2JamConverter/bin/Debug/net8.0/O2JamConverter.pdb differ diff --git a/O2JamConverter/bin/Debug/net8.0/O2JamConverter.runtimeconfig.json b/O2JamConverter/bin/Debug/net8.0/O2JamConverter.runtimeconfig.json new file mode 100644 index 0000000..becfaea --- /dev/null +++ b/O2JamConverter/bin/Debug/net8.0/O2JamConverter.runtimeconfig.json @@ -0,0 +1,12 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + "configProperties": { + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/O2JamConverter/bin/Debug/net8.0/System.Text.Encoding.CodePages.dll b/O2JamConverter/bin/Debug/net8.0/System.Text.Encoding.CodePages.dll new file mode 100755 index 0000000..27121c3 Binary files /dev/null and b/O2JamConverter/bin/Debug/net8.0/System.Text.Encoding.CodePages.dll differ diff --git a/O2JamConverter/bin/Debug/net8.0/TagLibSharp.dll b/O2JamConverter/bin/Debug/net8.0/TagLibSharp.dll new file mode 100755 index 0000000..cf4ca05 Binary files /dev/null and b/O2JamConverter/bin/Debug/net8.0/TagLibSharp.dll differ diff --git a/O2JamConverter/bin/Debug/net8.0/runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll b/O2JamConverter/bin/Debug/net8.0/runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll new file mode 100755 index 0000000..a8e94dc Binary files /dev/null and b/O2JamConverter/bin/Debug/net8.0/runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll differ diff --git a/O2JamConverter/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/O2JamConverter/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..2217181 --- /dev/null +++ b/O2JamConverter/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/O2JamConverter/obj/Debug/net8.0/O2JamConverter.AssemblyInfo.cs b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.AssemblyInfo.cs new file mode 100644 index 0000000..082099f --- /dev/null +++ b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.AssemblyInfo.cs @@ -0,0 +1,21 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("O2JamConverter")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+0b9269422c244a0178f86bd48a122e4727d0561d")] +[assembly: System.Reflection.AssemblyProductAttribute("O2JamConverter")] +[assembly: System.Reflection.AssemblyTitleAttribute("O2JamConverter")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. diff --git a/O2JamConverter/obj/Debug/net8.0/O2JamConverter.AssemblyInfoInputs.cache b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.AssemblyInfoInputs.cache new file mode 100644 index 0000000..15da537 --- /dev/null +++ b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +b7117fbc2efcb187c06307a978d961d361d425e0d16684c4da65bd7afe929836 diff --git a/O2JamConverter/obj/Debug/net8.0/O2JamConverter.GeneratedMSBuildEditorConfig.editorconfig b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..33aed66 --- /dev/null +++ b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,13 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = O2JamConverter +build_property.ProjectDir = /app/O2JamConverter/ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/O2JamConverter/obj/Debug/net8.0/O2JamConverter.GlobalUsings.g.cs b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/O2JamConverter/obj/Debug/net8.0/O2JamConverter.assets.cache b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.assets.cache new file mode 100644 index 0000000..a20b78e Binary files /dev/null and b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.assets.cache differ diff --git a/O2JamConverter/obj/Debug/net8.0/O2JamConverter.csproj.AssemblyReference.cache b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.csproj.AssemblyReference.cache new file mode 100644 index 0000000..ccd262d Binary files /dev/null and b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.csproj.AssemblyReference.cache differ diff --git a/O2JamConverter/obj/Debug/net8.0/O2JamConverter.csproj.CopyComplete b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/O2JamConverter/obj/Debug/net8.0/O2JamConverter.csproj.CoreCompileInputs.cache b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..01c1516 --- /dev/null +++ b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +57abdccabf69dcc9786fbba78fcb58f47cc9aa11aea83487a4f0276861f2bf08 diff --git a/O2JamConverter/obj/Debug/net8.0/O2JamConverter.csproj.FileListAbsolute.txt b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..a938cf8 --- /dev/null +++ b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.csproj.FileListAbsolute.txt @@ -0,0 +1,27 @@ +/app/O2JamConverter/bin/Debug/net8.0/O2JamConverter +/app/O2JamConverter/bin/Debug/net8.0/O2JamConverter.deps.json +/app/O2JamConverter/bin/Debug/net8.0/O2JamConverter.runtimeconfig.json +/app/O2JamConverter/bin/Debug/net8.0/O2JamConverter.dll +/app/O2JamConverter/bin/Debug/net8.0/O2JamConverter.pdb +/app/O2JamConverter/bin/Debug/net8.0/CommandLine.dll +/app/O2JamConverter/bin/Debug/net8.0/NAudio.dll +/app/O2JamConverter/bin/Debug/net8.0/NAudio.Asio.dll +/app/O2JamConverter/bin/Debug/net8.0/NAudio.Core.dll +/app/O2JamConverter/bin/Debug/net8.0/NAudio.Midi.dll +/app/O2JamConverter/bin/Debug/net8.0/NAudio.Wasapi.dll +/app/O2JamConverter/bin/Debug/net8.0/NAudio.WinMM.dll +/app/O2JamConverter/bin/Debug/net8.0/System.Text.Encoding.CodePages.dll +/app/O2JamConverter/bin/Debug/net8.0/TagLibSharp.dll +/app/O2JamConverter/bin/Debug/net8.0/runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll +/app/O2JamConverter/obj/Debug/net8.0/O2JamConverter.csproj.AssemblyReference.cache +/app/O2JamConverter/obj/Debug/net8.0/O2JamConverter.GeneratedMSBuildEditorConfig.editorconfig +/app/O2JamConverter/obj/Debug/net8.0/O2JamConverter.AssemblyInfoInputs.cache +/app/O2JamConverter/obj/Debug/net8.0/O2JamConverter.AssemblyInfo.cs +/app/O2JamConverter/obj/Debug/net8.0/O2JamConverter.csproj.CoreCompileInputs.cache +/app/O2JamConverter/obj/Debug/net8.0/O2JamConverter.sourcelink.json +/app/O2JamConverter/obj/Debug/net8.0/O2JamConverter.csproj.CopyComplete +/app/O2JamConverter/obj/Debug/net8.0/O2JamConverter.dll +/app/O2JamConverter/obj/Debug/net8.0/refint/O2JamConverter.dll +/app/O2JamConverter/obj/Debug/net8.0/O2JamConverter.pdb +/app/O2JamConverter/obj/Debug/net8.0/O2JamConverter.genruntimeconfig.cache +/app/O2JamConverter/obj/Debug/net8.0/ref/O2JamConverter.dll diff --git a/O2JamConverter/obj/Debug/net8.0/O2JamConverter.dll b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.dll new file mode 100644 index 0000000..26a4ccf Binary files /dev/null and b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.dll differ diff --git a/O2JamConverter/obj/Debug/net8.0/O2JamConverter.genruntimeconfig.cache b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.genruntimeconfig.cache new file mode 100644 index 0000000..e864d4a --- /dev/null +++ b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.genruntimeconfig.cache @@ -0,0 +1 @@ +eb75e4802eeb11520c9d1f45262cb0e18f8ca851a125205b93f5eaef8888071d diff --git a/O2JamConverter/obj/Debug/net8.0/O2JamConverter.pdb b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.pdb new file mode 100644 index 0000000..0253d7e Binary files /dev/null and b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.pdb differ diff --git a/O2JamConverter/obj/Debug/net8.0/O2JamConverter.sourcelink.json b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.sourcelink.json new file mode 100644 index 0000000..684229b --- /dev/null +++ b/O2JamConverter/obj/Debug/net8.0/O2JamConverter.sourcelink.json @@ -0,0 +1 @@ +{"documents":{"/app/*":"https://raw.githubusercontent.com/keyboardzxb/render-ojn/0b9269422c244a0178f86bd48a122e4727d0561d/*"}} \ No newline at end of file diff --git a/O2JamConverter/obj/Debug/net8.0/apphost b/O2JamConverter/obj/Debug/net8.0/apphost new file mode 100755 index 0000000..2d470b8 Binary files /dev/null and b/O2JamConverter/obj/Debug/net8.0/apphost differ diff --git a/O2JamConverter/obj/Debug/net8.0/ref/O2JamConverter.dll b/O2JamConverter/obj/Debug/net8.0/ref/O2JamConverter.dll new file mode 100644 index 0000000..e15ea87 Binary files /dev/null and b/O2JamConverter/obj/Debug/net8.0/ref/O2JamConverter.dll differ diff --git a/O2JamConverter/obj/Debug/net8.0/refint/O2JamConverter.dll b/O2JamConverter/obj/Debug/net8.0/refint/O2JamConverter.dll new file mode 100644 index 0000000..e15ea87 Binary files /dev/null and b/O2JamConverter/obj/Debug/net8.0/refint/O2JamConverter.dll differ diff --git a/O2JamConverter/obj/O2JamConverter.csproj.nuget.dgspec.json b/O2JamConverter/obj/O2JamConverter.csproj.nuget.dgspec.json new file mode 100644 index 0000000..f854b8f --- /dev/null +++ b/O2JamConverter/obj/O2JamConverter.csproj.nuget.dgspec.json @@ -0,0 +1,79 @@ +{ + "format": 1, + "restore": { + "/app/O2JamConverter/O2JamConverter.csproj": {} + }, + "projects": { + "/app/O2JamConverter/O2JamConverter.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/app/O2JamConverter/O2JamConverter.csproj", + "projectName": "O2JamConverter", + "projectPath": "/app/O2JamConverter/O2JamConverter.csproj", + "packagesPath": "/home/jules/.nuget/packages/", + "outputPath": "/app/O2JamConverter/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/home/jules/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "CommandLineParser": { + "target": "Package", + "version": "[2.9.1, )" + }, + "NAudio": { + "target": "Package", + "version": "[2.2.1, )" + }, + "System.Text.Encoding.CodePages": { + "target": "Package", + "version": "[9.0.9, )" + }, + "TagLibSharp": { + "target": "Package", + "version": "[2.3.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/8.0.119/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/O2JamConverter/obj/O2JamConverter.csproj.nuget.g.props b/O2JamConverter/obj/O2JamConverter.csproj.nuget.g.props new file mode 100644 index 0000000..affd0b6 --- /dev/null +++ b/O2JamConverter/obj/O2JamConverter.csproj.nuget.g.props @@ -0,0 +1,15 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + /home/jules/.nuget/packages/ + /home/jules/.nuget/packages/ + PackageReference + 6.8.1 + + + + + \ No newline at end of file diff --git a/O2JamConverter/obj/O2JamConverter.csproj.nuget.g.targets b/O2JamConverter/obj/O2JamConverter.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/O2JamConverter/obj/O2JamConverter.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/O2JamConverter/obj/project.assets.json b/O2JamConverter/obj/project.assets.json new file mode 100644 index 0000000..9fa39ac --- /dev/null +++ b/O2JamConverter/obj/project.assets.json @@ -0,0 +1,655 @@ +{ + "version": 3, + "targets": { + "net8.0": { + "CommandLineParser/2.9.1": { + "type": "package", + "compile": { + "lib/netstandard2.0/CommandLine.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/CommandLine.dll": { + "related": ".xml" + } + } + }, + "Microsoft.NETCore.Platforms/3.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.Win32.Registry/4.7.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "4.7.0", + "System.Security.Principal.Windows": "4.7.0" + }, + "compile": { + "ref/netstandard2.0/Microsoft.Win32.Registry.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Win32.Registry.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard2.0/Microsoft.Win32.Registry.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "NAudio/2.2.1": { + "type": "package", + "dependencies": { + "NAudio.Asio": "2.2.1", + "NAudio.Core": "2.2.1", + "NAudio.Midi": "2.2.1", + "NAudio.Wasapi": "2.2.1", + "NAudio.WinMM": "2.2.1" + }, + "compile": { + "lib/net6.0/NAudio.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/NAudio.dll": { + "related": ".xml" + } + } + }, + "NAudio.Asio/2.2.1": { + "type": "package", + "dependencies": { + "Microsoft.Win32.Registry": "4.7.0", + "NAudio.Core": "2.2.1" + }, + "compile": { + "lib/netstandard2.0/NAudio.Asio.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/NAudio.Asio.dll": { + "related": ".xml" + } + } + }, + "NAudio.Core/2.2.1": { + "type": "package", + "compile": { + "lib/netstandard2.0/NAudio.Core.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/NAudio.Core.dll": { + "related": ".xml" + } + } + }, + "NAudio.Midi/2.2.1": { + "type": "package", + "dependencies": { + "NAudio.Core": "2.2.1" + }, + "compile": { + "lib/netstandard2.0/NAudio.Midi.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/NAudio.Midi.dll": { + "related": ".xml" + } + } + }, + "NAudio.Wasapi/2.2.1": { + "type": "package", + "dependencies": { + "NAudio.Core": "2.2.1" + }, + "compile": { + "lib/netstandard2.0/NAudio.Wasapi.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/NAudio.Wasapi.dll": { + "related": ".xml" + } + } + }, + "NAudio.WinMM/2.2.1": { + "type": "package", + "dependencies": { + "Microsoft.Win32.Registry": "4.7.0", + "NAudio.Core": "2.2.1" + }, + "compile": { + "lib/netstandard2.0/NAudio.WinMM.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/NAudio.WinMM.dll": { + "related": ".xml" + } + } + }, + "System.Security.AccessControl/4.7.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "System.Security.Principal.Windows": "4.7.0" + }, + "compile": { + "ref/netstandard2.0/System.Security.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Security.AccessControl.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Principal.Windows/4.7.0": { + "type": "package", + "compile": { + "ref/netcoreapp3.0/System.Security.Principal.Windows.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Security.Principal.Windows.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Text.Encoding.CodePages/9.0.9": { + "type": "package", + "compile": { + "lib/net8.0/System.Text.Encoding.CodePages.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Text.Encoding.CodePages.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "TagLibSharp/2.3.0": { + "type": "package", + "compile": { + "lib/netstandard2.0/TagLibSharp.dll": { + "related": ".pdb" + } + }, + "runtime": { + "lib/netstandard2.0/TagLibSharp.dll": { + "related": ".pdb" + } + } + } + } + }, + "libraries": { + "CommandLineParser/2.9.1": { + "sha512": "OE0sl1/sQ37bjVsPKKtwQlWDgqaxWgtme3xZz7JssWUzg5JpMIyHgCTY9MVMxOg48fJ1AgGT3tgdH5m/kQ5xhA==", + "type": "package", + "path": "commandlineparser/2.9.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "CommandLine20.png", + "License.md", + "README.md", + "commandlineparser.2.9.1.nupkg.sha512", + "commandlineparser.nuspec", + "lib/net40/CommandLine.dll", + "lib/net40/CommandLine.xml", + "lib/net45/CommandLine.dll", + "lib/net45/CommandLine.xml", + "lib/net461/CommandLine.dll", + "lib/net461/CommandLine.xml", + "lib/netstandard2.0/CommandLine.dll", + "lib/netstandard2.0/CommandLine.xml" + ] + }, + "Microsoft.NETCore.Platforms/3.1.0": { + "sha512": "z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==", + "type": "package", + "path": "microsoft.netcore.platforms/3.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/netstandard1.0/_._", + "microsoft.netcore.platforms.3.1.0.nupkg.sha512", + "microsoft.netcore.platforms.nuspec", + "runtime.json", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "Microsoft.Win32.Registry/4.7.0": { + "sha512": "KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==", + "type": "package", + "path": "microsoft.win32.registry/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net46/Microsoft.Win32.Registry.dll", + "lib/net461/Microsoft.Win32.Registry.dll", + "lib/net461/Microsoft.Win32.Registry.xml", + "lib/netstandard1.3/Microsoft.Win32.Registry.dll", + "lib/netstandard2.0/Microsoft.Win32.Registry.dll", + "lib/netstandard2.0/Microsoft.Win32.Registry.xml", + "microsoft.win32.registry.4.7.0.nupkg.sha512", + "microsoft.win32.registry.nuspec", + "ref/net46/Microsoft.Win32.Registry.dll", + "ref/net461/Microsoft.Win32.Registry.dll", + "ref/net461/Microsoft.Win32.Registry.xml", + "ref/net472/Microsoft.Win32.Registry.dll", + "ref/net472/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/Microsoft.Win32.Registry.dll", + "ref/netstandard1.3/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/de/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/es/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/fr/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/it/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/ja/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/ko/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/ru/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/zh-hans/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/zh-hant/Microsoft.Win32.Registry.xml", + "ref/netstandard2.0/Microsoft.Win32.Registry.dll", + "ref/netstandard2.0/Microsoft.Win32.Registry.xml", + "runtimes/unix/lib/netstandard2.0/Microsoft.Win32.Registry.dll", + "runtimes/unix/lib/netstandard2.0/Microsoft.Win32.Registry.xml", + "runtimes/win/lib/net46/Microsoft.Win32.Registry.dll", + "runtimes/win/lib/net461/Microsoft.Win32.Registry.dll", + "runtimes/win/lib/net461/Microsoft.Win32.Registry.xml", + "runtimes/win/lib/netstandard1.3/Microsoft.Win32.Registry.dll", + "runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll", + "runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.xml", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "NAudio/2.2.1": { + "sha512": "c0DzwiyyklM0TP39Y7RObwO3QkWecgM6H60ikiEnsV/aEAJPbj5MFCLaD8BSfKuZe0HGuh9GRGWWlJmSxDc9MA==", + "type": "package", + "path": "naudio/2.2.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net472/NAudio.dll", + "lib/net472/NAudio.xml", + "lib/net6.0-windows7.0/NAudio.dll", + "lib/net6.0-windows7.0/NAudio.xml", + "lib/net6.0/NAudio.dll", + "lib/net6.0/NAudio.xml", + "lib/netcoreapp3.1/NAudio.dll", + "lib/netcoreapp3.1/NAudio.xml", + "license.txt", + "naudio-icon.png", + "naudio.2.2.1.nupkg.sha512", + "naudio.nuspec" + ] + }, + "NAudio.Asio/2.2.1": { + "sha512": "hQglyOT5iT3XuGpBP8ZG0+aoqwRfidHjTNehpoWwX0g6KJEgtH2VaqM2nuJ2mheKZa/IBqB4YQTZVvrIapzfOA==", + "type": "package", + "path": "naudio.asio/2.2.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/netstandard2.0/NAudio.Asio.dll", + "lib/netstandard2.0/NAudio.Asio.xml", + "naudio-icon.png", + "naudio.asio.2.2.1.nupkg.sha512", + "naudio.asio.nuspec" + ] + }, + "NAudio.Core/2.2.1": { + "sha512": "GgkdP6K/7FqXFo7uHvoqGZTJvW4z8g2IffhOO4JHaLzKCdDOUEzVKtveoZkCuUX8eV2HAINqi7VFqlFndrnz/g==", + "type": "package", + "path": "naudio.core/2.2.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/netstandard2.0/NAudio.Core.dll", + "lib/netstandard2.0/NAudio.Core.xml", + "naudio-icon.png", + "naudio.core.2.2.1.nupkg.sha512", + "naudio.core.nuspec" + ] + }, + "NAudio.Midi/2.2.1": { + "sha512": "6r23ylGo5aeP02WFXsPquz0T0hFJWyh+7t++tz19tc3Kr38NHm+Z9j+FiAv+xkH8tZqXJqus9Q8p6u7bidIgbw==", + "type": "package", + "path": "naudio.midi/2.2.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/netstandard2.0/NAudio.Midi.dll", + "lib/netstandard2.0/NAudio.Midi.xml", + "naudio-icon.png", + "naudio.midi.2.2.1.nupkg.sha512", + "naudio.midi.nuspec" + ] + }, + "NAudio.Wasapi/2.2.1": { + "sha512": "lFfXoqacZZe0WqNChJgGYI+XV/n/61LzPHT3C1CJp4khoxeo2sziyX5wzNYWeCMNbsWxFvT3b3iXeY1UYjBhZw==", + "type": "package", + "path": "naudio.wasapi/2.2.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/netstandard2.0/NAudio.Wasapi.dll", + "lib/netstandard2.0/NAudio.Wasapi.xml", + "lib/uap10.0.18362/NAudio.Wasapi.dll", + "lib/uap10.0.18362/NAudio.Wasapi.pri", + "lib/uap10.0.18362/NAudio.Wasapi.xml", + "naudio-icon.png", + "naudio.wasapi.2.2.1.nupkg.sha512", + "naudio.wasapi.nuspec" + ] + }, + "NAudio.WinMM/2.2.1": { + "sha512": "xFHRFwH4x6aq3IxRbewvO33ugJRvZFEOfO62i7uQJRUNW2cnu6BeBTHUS0JD5KBucZbHZaYqxQG8dwZ47ezQuQ==", + "type": "package", + "path": "naudio.winmm/2.2.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/netstandard2.0/NAudio.WinMM.dll", + "lib/netstandard2.0/NAudio.WinMM.xml", + "naudio-icon.png", + "naudio.winmm.2.2.1.nupkg.sha512", + "naudio.winmm.nuspec" + ] + }, + "System.Security.AccessControl/4.7.0": { + "sha512": "JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==", + "type": "package", + "path": "system.security.accesscontrol/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net46/System.Security.AccessControl.dll", + "lib/net461/System.Security.AccessControl.dll", + "lib/net461/System.Security.AccessControl.xml", + "lib/netstandard1.3/System.Security.AccessControl.dll", + "lib/netstandard2.0/System.Security.AccessControl.dll", + "lib/netstandard2.0/System.Security.AccessControl.xml", + "lib/uap10.0.16299/_._", + "ref/net46/System.Security.AccessControl.dll", + "ref/net461/System.Security.AccessControl.dll", + "ref/net461/System.Security.AccessControl.xml", + "ref/netstandard1.3/System.Security.AccessControl.dll", + "ref/netstandard1.3/System.Security.AccessControl.xml", + "ref/netstandard1.3/de/System.Security.AccessControl.xml", + "ref/netstandard1.3/es/System.Security.AccessControl.xml", + "ref/netstandard1.3/fr/System.Security.AccessControl.xml", + "ref/netstandard1.3/it/System.Security.AccessControl.xml", + "ref/netstandard1.3/ja/System.Security.AccessControl.xml", + "ref/netstandard1.3/ko/System.Security.AccessControl.xml", + "ref/netstandard1.3/ru/System.Security.AccessControl.xml", + "ref/netstandard1.3/zh-hans/System.Security.AccessControl.xml", + "ref/netstandard1.3/zh-hant/System.Security.AccessControl.xml", + "ref/netstandard2.0/System.Security.AccessControl.dll", + "ref/netstandard2.0/System.Security.AccessControl.xml", + "ref/uap10.0.16299/_._", + "runtimes/win/lib/net46/System.Security.AccessControl.dll", + "runtimes/win/lib/net461/System.Security.AccessControl.dll", + "runtimes/win/lib/net461/System.Security.AccessControl.xml", + "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll", + "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.xml", + "runtimes/win/lib/netstandard1.3/System.Security.AccessControl.dll", + "runtimes/win/lib/uap10.0.16299/_._", + "system.security.accesscontrol.4.7.0.nupkg.sha512", + "system.security.accesscontrol.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Security.Principal.Windows/4.7.0": { + "sha512": "ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==", + "type": "package", + "path": "system.security.principal.windows/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net46/System.Security.Principal.Windows.dll", + "lib/net461/System.Security.Principal.Windows.dll", + "lib/net461/System.Security.Principal.Windows.xml", + "lib/netstandard1.3/System.Security.Principal.Windows.dll", + "lib/netstandard2.0/System.Security.Principal.Windows.dll", + "lib/netstandard2.0/System.Security.Principal.Windows.xml", + "lib/uap10.0.16299/_._", + "ref/net46/System.Security.Principal.Windows.dll", + "ref/net461/System.Security.Principal.Windows.dll", + "ref/net461/System.Security.Principal.Windows.xml", + "ref/netcoreapp3.0/System.Security.Principal.Windows.dll", + "ref/netcoreapp3.0/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/System.Security.Principal.Windows.dll", + "ref/netstandard1.3/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/de/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/es/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/fr/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/it/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/ja/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/ko/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/ru/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/zh-hans/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/zh-hant/System.Security.Principal.Windows.xml", + "ref/netstandard2.0/System.Security.Principal.Windows.dll", + "ref/netstandard2.0/System.Security.Principal.Windows.xml", + "ref/uap10.0.16299/_._", + "runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.dll", + "runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.xml", + "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll", + "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.xml", + "runtimes/win/lib/net46/System.Security.Principal.Windows.dll", + "runtimes/win/lib/net461/System.Security.Principal.Windows.dll", + "runtimes/win/lib/net461/System.Security.Principal.Windows.xml", + "runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.dll", + "runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.xml", + "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll", + "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.xml", + "runtimes/win/lib/netstandard1.3/System.Security.Principal.Windows.dll", + "runtimes/win/lib/uap10.0.16299/_._", + "system.security.principal.windows.4.7.0.nupkg.sha512", + "system.security.principal.windows.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Text.Encoding.CodePages/9.0.9": { + "sha512": "5D+YO1AmHOPmslqlt+QT4zkR9vQRt46OXHRihqN1v0PLKeFe7KO1YuCJeUE4uNiPGJi0T1Y2fC9GHqhwvfkHDA==", + "type": "package", + "path": "system.text.encoding.codepages/9.0.9", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Text.Encoding.CodePages.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/System.Text.Encoding.CodePages.targets", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net462/System.Text.Encoding.CodePages.dll", + "lib/net462/System.Text.Encoding.CodePages.xml", + "lib/net8.0/System.Text.Encoding.CodePages.dll", + "lib/net8.0/System.Text.Encoding.CodePages.xml", + "lib/net9.0/System.Text.Encoding.CodePages.dll", + "lib/net9.0/System.Text.Encoding.CodePages.xml", + "lib/netstandard2.0/System.Text.Encoding.CodePages.dll", + "lib/netstandard2.0/System.Text.Encoding.CodePages.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.dll", + "runtimes/win/lib/net8.0/System.Text.Encoding.CodePages.xml", + "runtimes/win/lib/net9.0/System.Text.Encoding.CodePages.dll", + "runtimes/win/lib/net9.0/System.Text.Encoding.CodePages.xml", + "system.text.encoding.codepages.9.0.9.nupkg.sha512", + "system.text.encoding.codepages.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "TagLibSharp/2.3.0": { + "sha512": "Qo4z6ZjnIfbR3Us1Za5M2vQ97OWZPmODvVmepxZ8XW0UIVLGdO2T63/N3b23kCcyiwuIe0TQvMEQG8wUCCD1mA==", + "type": "package", + "path": "taglibsharp/2.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net462/TagLibSharp.dll", + "lib/net462/TagLibSharp.pdb", + "lib/net462/TaglibSharp.xml", + "lib/netstandard2.0/TagLibSharp.dll", + "lib/netstandard2.0/TagLibSharp.pdb", + "lib/netstandard2.0/TaglibSharp.xml", + "taglibsharp.2.3.0.nupkg.sha512", + "taglibsharp.nuspec" + ] + } + }, + "projectFileDependencyGroups": { + "net8.0": [ + "CommandLineParser >= 2.9.1", + "NAudio >= 2.2.1", + "System.Text.Encoding.CodePages >= 9.0.9", + "TagLibSharp >= 2.3.0" + ] + }, + "packageFolders": { + "/home/jules/.nuget/packages/": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/app/O2JamConverter/O2JamConverter.csproj", + "projectName": "O2JamConverter", + "projectPath": "/app/O2JamConverter/O2JamConverter.csproj", + "packagesPath": "/home/jules/.nuget/packages/", + "outputPath": "/app/O2JamConverter/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/home/jules/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "CommandLineParser": { + "target": "Package", + "version": "[2.9.1, )" + }, + "NAudio": { + "target": "Package", + "version": "[2.2.1, )" + }, + "System.Text.Encoding.CodePages": { + "target": "Package", + "version": "[9.0.9, )" + }, + "TagLibSharp": { + "target": "Package", + "version": "[2.3.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/8.0.119/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/O2JamConverter/obj/project.nuget.cache b/O2JamConverter/obj/project.nuget.cache new file mode 100644 index 0000000..2e160e4 --- /dev/null +++ b/O2JamConverter/obj/project.nuget.cache @@ -0,0 +1,22 @@ +{ + "version": 2, + "dgSpecHash": "iT9OJgGzvczGf+OwC/2bHrlirCGHuBIQd2zg8lGAwjfSONVluL3bZSsye4Ck7xJEzUyuERRKykgeMwPRCGQGww==", + "success": true, + "projectFilePath": "/app/O2JamConverter/O2JamConverter.csproj", + "expectedPackageFiles": [ + "/home/jules/.nuget/packages/commandlineparser/2.9.1/commandlineparser.2.9.1.nupkg.sha512", + "/home/jules/.nuget/packages/microsoft.netcore.platforms/3.1.0/microsoft.netcore.platforms.3.1.0.nupkg.sha512", + "/home/jules/.nuget/packages/microsoft.win32.registry/4.7.0/microsoft.win32.registry.4.7.0.nupkg.sha512", + "/home/jules/.nuget/packages/naudio/2.2.1/naudio.2.2.1.nupkg.sha512", + "/home/jules/.nuget/packages/naudio.asio/2.2.1/naudio.asio.2.2.1.nupkg.sha512", + "/home/jules/.nuget/packages/naudio.core/2.2.1/naudio.core.2.2.1.nupkg.sha512", + "/home/jules/.nuget/packages/naudio.midi/2.2.1/naudio.midi.2.2.1.nupkg.sha512", + "/home/jules/.nuget/packages/naudio.wasapi/2.2.1/naudio.wasapi.2.2.1.nupkg.sha512", + "/home/jules/.nuget/packages/naudio.winmm/2.2.1/naudio.winmm.2.2.1.nupkg.sha512", + "/home/jules/.nuget/packages/system.security.accesscontrol/4.7.0/system.security.accesscontrol.4.7.0.nupkg.sha512", + "/home/jules/.nuget/packages/system.security.principal.windows/4.7.0/system.security.principal.windows.4.7.0.nupkg.sha512", + "/home/jules/.nuget/packages/system.text.encoding.codepages/9.0.9/system.text.encoding.codepages.9.0.9.nupkg.sha512", + "/home/jules/.nuget/packages/taglibsharp/2.3.0/taglibsharp.2.3.0.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file