public static MIDIConverter DetermineConverter() { MIDIConverter cvtr = MIDIConverter.Invalid; string curdir = GetExePath(); if (File.Exists(curdir + "\\midi2sseq.exe")) { cvtr = MIDIConverter.MIDI2SSEQ; } if (File.Exists(curdir + "\\smfconv.exe") && File.Exists(curdir + "\\seqconv.exe")) { cvtr = MIDIConverter.SmfSeqConv; } return(cvtr); }
/// <summary> /// Generates raw data. /// </summary> /// <returns></returns> private byte[] generateRawData() { MIDIConverter converter = new MIDIConverter(); List <Note> notes = converter.notes; List <byte> outByte = new List <byte>(); outByte.Add(0x00); outByte.Add(0x00); outByte.Add(0x00); outByte.Add(0x0b); outByte.Add(0x00); outByte.Add(0x00); outByte.Add(0x00); outByte.Add(0x40); int numEntries = notes.Count; byte[] numEntries_byte = BitConverter.GetBytes(numEntries).Reverse().ToArray(); outByte.Add(numEntries_byte[0]); outByte.Add(numEntries_byte[1]); outByte.Add(numEntries_byte[2]); outByte.Add(numEntries_byte[3]); outByte.Add(0x00); outByte.Add(0x00); outByte.Add(0x00); outByte.Add(0x04); foreach (Note note in notes) { float offset = (float)note.offset; float length = (float)note.length; byte[] off_byte = BitConverter.GetBytes(offset).Reverse().ToArray(); for (int i = 0; i < off_byte.Length; i++) { outByte.Add(off_byte[i]); } byte[] len_byte = BitConverter.GetBytes(length).Reverse().ToArray(); for (int i = 0; i < len_byte.Length; i++) { outByte.Add(len_byte[i]); } byte[] str = BitConverter.GetBytes(note.stringNum).Reverse().ToArray(); for (int i = 0; i < str.Length; i++) { outByte.Add(str[i]); } byte[] fret = BitConverter.GetBytes(note.fret).Reverse().ToArray(); for (int i = 0; i < fret.Length; i++) { outByte.Add(fret[i]); } byte[] finger = BitConverter.GetBytes(note.finger).Reverse().ToArray(); for (int i = 0; i < finger.Length; i++) { outByte.Add(finger[i]); } byte[] noteOp; switch (note.noteOp) { case 1: noteOp = BitConverter.GetBytes(4).Reverse().ToArray(); break; case 2: noteOp = BitConverter.GetBytes(3).Reverse().ToArray(); break; case 3: noteOp = BitConverter.GetBytes(2).Reverse().ToArray(); break; case 4: noteOp = BitConverter.GetBytes(1).Reverse().ToArray(); break; case 5: noteOp = BitConverter.GetBytes(10).Reverse().ToArray(); break; case 6: noteOp = BitConverter.GetBytes(11).Reverse().ToArray(); break; case 7: noteOp = BitConverter.GetBytes(9).Reverse().ToArray(); break; default: noteOp = BitConverter.GetBytes(0).Reverse().ToArray(); break; } for (int i = 0; i < noteOp.Length; i++) { outByte.Add(noteOp[i]); } byte[] bend = BitConverter.GetBytes(note.bend).Reverse().ToArray(); for (int i = 0; i < bend.Length; i++) { outByte.Add(bend[i]); } byte[] amount = BitConverter.GetBytes((note.amount / 2.0f)).Reverse().ToArray(); for (int i = 0; i < amount.Length; i++) { outByte.Add(amount[i]); } byte[] vibrato = BitConverter.GetBytes(note.vibrato).Reverse().ToArray(); for (int i = 0; i < vibrato.Length; i++) { outByte.Add(vibrato[i]); } byte[] zero = BitConverter.GetBytes(0); for (int i = 0; i < zero.Length; i++) { outByte.Add(zero[i]); } int whatisthis = Convert.ToInt32("427c0000", 16); byte[] what = BitConverter.GetBytes(whatisthis).Reverse().ToArray(); for (int i = 0; i < what.Length; i++) { outByte.Add(what[i]); } for (int i = 0; i < what.Length; i++) { outByte.Add(what[i]); } for (int i = 0; i < zero.Length; i++) { outByte.Add(zero[i]); } for (int i = 0; i < zero.Length; i++) { outByte.Add(zero[i]); } byte[] connect = new byte[1]; if (note.connect != 0) { connect[0] = 1; } else { connect[0] = 0; } for (int i = 0; i < connect.Length; i++) { outByte.Add(connect[i]); } byte[] palm = new byte[1]; if (note.palmMute != 0) { palm[0] = 1; } else { palm[0] = 0; } for (int i = 0; i < palm.Length; i++) { outByte.Add(palm[i]); } byte[] trem = new byte[1]; if (note.tremolo != 0) { trem[0] = 1; } else { trem[0] = 0; } for (int i = 0; i < trem.Length; i++) { outByte.Add(trem[i]); } byte[] zeroBit = new byte[1]; zeroBit[0] = 0; for (int i = 0; i < zeroBit.Length; i++) { outByte.Add(zeroBit[i]); } for (int i = 0; i < zero.Length; i++) { outByte.Add(zero[i]); } } return(outByte.ToArray()); }
private void SequenceImportButton_Click(object sender, RoutedEventArgs e) { bool chplay = false; if (!Stop && Playing) { chplay = true; PlayButton.Content = new PackIcon { Kind = PackIconKind.Play }; Playing = !Playing; } var od = new OpenFileDialog { Title = Utils.GetResource("sound:sequenceReplace"), Filter = Utils.GetResource("sound:midiFile") + " |*.mid|" + Utils.GetResource("sound:sseqFile") + " (SSEQ)|*.sseq", Multiselect = false, }; if (od.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string ext = Path.GetExtension(od.FileName); string sseq = ""; if (ext.EndsWith("sseq")) { sseq = od.FileName; } else if (ext.EndsWith("mid")) { string fname = Path.GetFileNameWithoutExtension(od.FileName); MIDIConverter cvtr = ROMUtils.DetermineConverter(); if (cvtr == MIDIConverter.Invalid) { Utils.ShowMessage(Utils.GetResource("sound:errorMidiConversion")); return; } else if (cvtr == MIDIConverter.MIDI2SSEQ) { string midi2sseq = Utils.GetSelfPath() + "\\midi2sseq.exe"; var p = new Process { StartInfo = new ProcessStartInfo { FileName = midi2sseq, Arguments = "\"" + od.FileName + "\"", UseShellExecute = false, CreateNoWindow = true, } }; p.Start(); p.WaitForExit(); if (!File.Exists(Utils.GetSelfPath() + "\\" + fname + ".sseq")) { Utils.ShowMessage(Utils.GetResource("sound:errorSequenceConversion")); if (chplay) { PlayButton.Content = new PackIcon { Kind = PackIconKind.Pause }; Playing = !Playing; } return; } sseq = Utils.GetSelfPath() + "\\" + fname + ".sseq"; } else if (cvtr == MIDIConverter.SmfSeqConv) { string smfconv = Utils.GetSelfPath() + "\\smfconv.exe"; string seqconv = Utils.GetSelfPath() + "\\seqconv.exe"; var p = new Process { StartInfo = new ProcessStartInfo { FileName = smfconv, Arguments = "\"" + od.FileName + "\"", UseShellExecute = false, CreateNoWindow = true, } }; p.Start(); p.WaitForExit(); string basenoext = Path.GetDirectoryName(od.FileName) + "\\" + fname; if (!File.Exists(basenoext + ".smft")) { Utils.ShowMessage(Utils.GetResource("sound:errorSequenceConversion")); if (chplay) { PlayButton.Content = new PackIcon { Kind = PackIconKind.Pause }; Playing = !Playing; } return; } var p2 = new Process { StartInfo = new ProcessStartInfo { FileName = seqconv, Arguments = "\"" + basenoext + ".smft\"", UseShellExecute = false, CreateNoWindow = true, } }; p2.Start(); p2.WaitForExit(); if (!File.Exists(basenoext + ".sseq")) { Utils.ShowMessage(Utils.GetResource("sound:errorSequenceConversion")); if (chplay) { PlayButton.Content = new PackIcon { Kind = PackIconKind.Play }; Playing = false; Stop = true; } return; } File.Delete(basenoext + ".smft"); sseq = basenoext + ".sseq"; } } Data.FileAllocationTable.Entries[(int)Data.InfoBlock.SequenceInfos[SequencesCombo.SelectedIndex].FileId].Data = File.ReadAllBytes(sseq); Reload(); if (ext.EndsWith("mid")) { File.Delete(sseq); } } if (chplay) { PlayButton.Content = new PackIcon { Kind = PackIconKind.Play }; Playing = false; Stop = true; } }