Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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());
        }
Esempio n. 3
0
        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;
            }
        }