public static OJM Decode(string filename) { if (!File.Exists(filename)) { return(null); } var ojm = new OJM(); ojm.Filename = filename; var samples = new List <IChartSample>(); if (OMCDecoder.Check(filename)) { ojm.Format = OJM.FileFormat.OMC; var omc = OMCDecoder.Decode(filename); foreach (var sample in omc.WaveSamples) { samples.Add(sample.Value); } foreach (var sample in omc.OggSamples) { samples.Add(sample.Value); } } else if (M30Decoder.Check(filename)) { ojm.Format = OJM.FileFormat.M30; var m30 = M30Decoder.Decode(filename); foreach (var sample in m30.Samples) { samples.Add(sample.Value); } } else { throw new FormatException("Invalid OJM Format."); } ojm.Samples = samples.ToArray(); return(ojm); }
public override Chart Decode(int level) { var diff = (OJN.Difficulty)level; var ojn = OJNDecoder.Decode(Filename); var chart = new Chart(Filename) { Title = ojn.Title, Artist = ojn.Artist, Pattern = ojn.Pattern, BPM = ojn.BPM, Duration = TimeSpan.FromSeconds(ojn.Duration[diff]), ThumbnailData = ojn.Thumbnail, CoverArtData = ojn.CoverArt }; OnChartHeaderDecoded(Filename, chart); OJM ojm = OJMDecoder.Decode(Filename.Replace(Path.GetFileName(Filename), ojn.OJMFileName)); var events = ojn.GetEvents(diff); // Load OJM Samples and assign to events if (ojm != null) { ojn.OJM = ojm; foreach (var sample in ojm.Samples) { var sampleEvents = Array.FindAll(events, (e) => { var se = e as Event.Sound; return(se != null && se.Id == sample.Id && se.Signature != Event.SignatureType.Release); }); if (sampleEvents != null) { foreach (var ev in sampleEvents) { var sound = ev as Event.Sound; sound.Name = sample.Name; sound.Payload = sample.Payload; if (sound.Offset <= (192 / 4)) { sound.Preload(); } } //bool bgm = sample.Id >= 1000; //if (bgm) //{ // //var music = new Music(sample.Payload); // //var stream = new MemoryStream(sample.Payload); // foreach (var ev in sampleEvents) // { // var sound = ev as Event.Sound; // sound.Name = sample.Name; // sound.Payload = sample.Payload; // //sound.Sample = new Music(stream); // } //} //else //{ // //var buffer = new SoundBuffer(sample.Payload); // foreach (var ev in sampleEvents) // { // var sound = ev as Event.Sound; // sound.Name = sample.Name; // sound.Payload = sample.Payload; // //sound.Sample = new Sound(buffer); // } //} } } } chart.Events = events; return(chart); }