Esempio n. 1
0
        private void btnFind_Click(object sender, EventArgs e)
        {
            EnableDisable(false);
            DTAFound = 0;
            DTARead  = 0;
            var sw = new StreamWriter(PS3IP, false);

            sw.WriteLine("PS3_ADDRESS=" + ipAddress.Text);
            sw.WriteLine("PS3_PORT=" + numPort.Value);
            sw.WriteLine("PS3_TIMEOUT=" + numTimeOut.Value);
            sw.WriteLine("PS3_TRIES=" + numTries.Value);
            sw.WriteLine("PS3_WAIT=" + numWait.Value);
            sw.Dispose();
            Tools.DeleteFile(bigDTA);
            Tools.DeleteFile(DTAList);
            if (chkListing.Checked)
            {
                sw = new StreamWriter(DTAList, false);
                sw.WriteLine("\"Short Name\",\"DTA Path\",\"Song ID\",\"Artist\",\"Song Name\"");
                sw.Dispose();
            }
            Log("Connecting to " + ipAddress.Text);
            FoldersToSearch = radioNTSC.Checked ? NTSCFolders : PALFolders;
            startTime       = DateTime.Now;
            CancelProcess   = false;
            backgroundWorker1.RunWorkerAsync();
        }
Esempio n. 2
0
        private void LoadConfig()
        {
            if (!File.Exists(config))
            {
                return;
            }
            var sr = new StreamReader(config);

            try
            {
                sr.ReadLine(); //skip initial line
                var folder = Tools.GetConfigString(sr.ReadLine());
                if (!string.IsNullOrWhiteSpace(folder) && Directory.Exists(folder))
                {
                    Log("Loading last used folder...");
                    txtFolder.Text = folder;
                }
                artistSongTool.Checked   = sr.ReadLine().Contains("True");
                songTool.Checked         = sr.ReadLine().Contains("True");
                songByArtistTool.Checked = sr.ReadLine().Contains("True");
                albumArtTool.Checked     = sr.ReadLine().Contains("True");
                rB3IconTool.Checked      = sr.ReadLine().Contains("True");
                sr.Dispose();
            }
            catch (Exception)
            {
                sr.Dispose();
                Tools.DeleteFile(config);
            }
        }
Esempio n. 3
0
        private void lstFiles_SelectedIndexChanged(object sender, EventArgs e)
        {
            var file = folder + lstFiles.SelectedItem;

            if (!File.Exists(file))
            {
                MessageBox.Show("Couldn't find that file!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            var fileSize = new FileInfo(file);
            var info     = "";

            if (extension == ".png_xbox")
            {
                var png = Application.StartupPath + "\\bin\\temp.png";
                Tools.DeleteFile(png);
                if (!Tools.ConvertRBImage(file, png))
                {
                    return;
                }

                var img = Tools.NemoLoadImage(png);
                picImage.Image = img;
                info           = "Dimensions: " + img.Height + "x" + img.Width;
            }

            if (extension == ".mogg")
            {
                var bytes = File.ReadAllBytes(file);

                info = "Encrypted? " + (bytes[0] == 0x0A ? "No" : "Yes (0x" + bytes[0].ToString("X2") + ")");
            }

            var size = "Size: ";

            if (fileSize.Length >= 1048576)
            {
                size = size + (Math.Round((double)fileSize.Length / 1048576, 2)) + " MB";
            }
            else
            {
                size = size + (Math.Round((double)fileSize.Length / 1024, 2)) + " KB";
            }

            lblInformation.Text = size + (string.IsNullOrEmpty(info) ? "" : "   |   " + info);

            if (starting)
            {
                return;
            }

            timer1.Enabled   = false;
            lblTimer.Visible = false;
        }
Esempio n. 4
0
        public BatchExtractor(Color ButtonBackColor, Color ButtonTextColor)
        {
            InitializeComponent();
            Tools               = new NemoTools();
            Parser              = new DTAParser();
            inputFiles          = new List <string>();
            mMenuBackground     = menuStrip1.BackColor;
            menuStrip1.Renderer = new DarkRenderer();
            var formButtons = new List <Button> {
                btnRefresh, btnFolder, btnBegin, btnSelect, btnDeselect, btnConverter
            };

            foreach (var button in formButtons)
            {
                button.BackColor = ButtonBackColor;
                button.ForeColor = ButtonTextColor;
                button.FlatAppearance.MouseOverBackColor = button.BackColor == Color.Transparent ? Color.FromArgb(127, Color.AliceBlue.R, Color.AliceBlue.G, Color.AliceBlue.B) : Tools.LightenColor(button.BackColor);
            }

            //load last used directory if saved and still exists
            Log("Welcome to Batch Extractor");
            Log("Drag and drop the CON /LIVE file(s) here");
            Log("Or click 'Change Input Folder' to select the files");

            config = Application.StartupPath + "\\bin\\config\\extractor.config";
            if (!File.Exists(config))
            {
                return;
            }
            var sr   = new StreamReader(config);
            var line = sr.ReadLine();

            sr.Dispose();
            if (string.IsNullOrWhiteSpace(line))
            {
                Tools.DeleteFile(config);
            }
            else if (line != "" && Directory.Exists(line))
            {
                Log("");
                Log("Loaded last directory used: " + line);
                txtFolder.Text = line;
            }
            else
            {
                Tools.DeleteFile(config);
            }
            if (string.IsNullOrWhiteSpace(txtFolder.Text))
            {
                Log("Ready to begin");
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Extracts images from Milo file and saves textures in "(miloDir)/ext_(milofilename)"
        /// as "texture(int)" starting from zero.
        /// </summary>
        /// <param name="inMilo">Milo file location</param>
        /// <param name="saveDDS">Save DDS?</param>
        /// <param name="saveTEX">Save TEX?</param>
        /// <param name="format">Format to output the images to</param>
        /// <param name="outTexCount">Number of textures in Milo file</param>
        public static void ExtractTextures(string inMilo, bool saveDDS, bool saveTEX, string format, out int outTexCount)
        {
            var texCount = 0;
            var Tools    = new NemoTools();
            var ext      = Path.GetExtension(inMilo);

            if (string.IsNullOrWhiteSpace(ext))
            {
                outTexCount = 0;
                return;
            }
            TexturesFolder = inMilo.Replace(ext, "_textures\\");
            BlocksFolder   = TexturesFolder + "blocks\\";
            FilesFolder    = TexturesFolder + "files\\";

            try
            {
                // Reads first four bytes to check its compression type.
                var br        = new BinaryReader(File.OpenRead(inMilo));
                var firstFour = br.ReadBytes(4);
                br.Close();

                string compressionType;
                if (firstFour.IsMilo(out compressionType))
                {
                    var count = 0;
                    ProcessMilo(inMilo, compressionType, true, saveTEX, ref texCount, false, ref count, false, ref count);
                }
            }
            catch (Exception)
            {}
            outTexCount = texCount;

            //clean up afterwards
            if (outTexCount < 1)
            {
                Tools.DeleteFolder(TexturesFolder, true);
            }
            else
            {
                Tools.DeleteFolder(BlocksFolder, true);
                Tools.DeleteFolder(FilesFolder, true);

                var ddsfiles = Directory.GetFiles(TexturesFolder, "*.dds");
                foreach (var dds in ddsfiles)
                {
                    if (!string.IsNullOrWhiteSpace(format))
                    {
                        Tools.ConvertRBImage(dds, dds, format);
                    }
                    if (!saveDDS)
                    {
                        Tools.DeleteFile(dds);
                    }
                }
            }
            outTexCount = texCount;
        }
Esempio n. 6
0
        private void SaveIndex()
        {
            if (!Songs.Any())
            {
                return;
            }
            Tools.DeleteFile(Index);
            var sw = new StreamWriter(Index, false);

            sw.WriteLine("NewFormat=True");
            sw.WriteLine("IndexedCount=" + Songs.Count);
            foreach (var song in Songs)
            {
                sw.WriteLine("SongName=" + song.Name);
                sw.WriteLine("SongID=" + song.SongID);
                sw.WriteLine("FileLocation=" + song.Location);
            }
            sw.Dispose();
        }
Esempio n. 7
0
        private bool ExtractFile(string extension, bool sublevel, string internalname, string rename, bool keep = false)
        {
            if (xPackage == null || !xPackage.ParseSuccess)
            {
                return(false);
            }

            var outputfolder = txtFolder.Text + "\\" + (organizeFilesByType.Checked ? (extension == "mid" ? "midi" : extension) + "_files\\" : "");
            var ext          = "." + extension;
            var dir          = "songs/" + internalname + (sublevel ? "/gen/" : "/") + internalname;
            var file         = dir + (keep ? "_keep" : "") + ext;

            var xfile = xPackage.GetFile(file);

            if (xfile == null)
            {
                Log("Could not find " + extension.ToUpper() + " file inside " + Path.GetFileName(file));
                return(false);
            }
            try
            {
                var newfile = outputfolder + rename + (keep && !removekeepFromPNGXBOXFiles.Checked ? "_keep" : "") + ext;
                extension = extension.ToLowerInvariant() == "mid" ? "MIDI" : extension.ToUpper();

                Log("Extracting " + extension + " file " + Path.GetFileName(newfile));

                if (!Directory.Exists(outputfolder))
                {
                    Directory.CreateDirectory(outputfolder);
                }

                Tools.DeleteFile(newfile);
                if (xfile.ExtractToFile(newfile))
                {
                    if (Path.GetExtension(newfile) == ".mogg")
                    {
                        Tools.WriteOutData(Tools.ObfM(File.ReadAllBytes(newfile)), newfile);
                    }
                    Log("File " + rename + ext + " extracted successfully");
                }
                else
                {
                    Log("Extracting file " + rename + ext + " failed");
                }
            }
            catch (Exception ex)
            {
                Log("There was an error extracting file " + rename + ext);
                Log("The error says: " + ex.Message);
                return(false);
            }
            return(true);
        }
Esempio n. 8
0
        private void btnExport_Click(object sender, EventArgs e)
        {
            var desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            var sfd     = new SaveFileDialog
            {
                Title            = "Select location to export to",
                FileName         = Tools.CleanString(ActiveSetlist, true).Replace("'", "").Replace(" ", "") + "_details.txt",
                OverwritePrompt  = true,
                AddExtension     = true,
                InitialDirectory = desktop,
                Filter           = "Text Files (*.txt)|*txt"
            };

            if (sfd.ShowDialog() != DialogResult.OK || string.IsNullOrWhiteSpace(sfd.FileName))
            {
                return;
            }

            Tools.DeleteFile(sfd.FileName);

            var sw = new StreamWriter(sfd.FileName, false, System.Text.Encoding.UTF8);

            try
            {
                for (var i = 0; i < lstStats.Items.Count; i++)
                {
                    sw.WriteLine(FormatText(lstStats.Items[i].SubItems[0].Text, lstStats.Items[i].SubItems[1].Text));
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("There was an error exporting the Setlist Details\nThe error says: " + ex.Message, Text,
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                sw.Dispose();
                return;
            }
            sw.Dispose();

            if (MessageBox.Show("Setlist Details exported successfully\nDo you want to open the file now?", Text,
                                MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
            {
                return;
            }
            Process.Start(sfd.FileName);
        }
Esempio n. 9
0
        private bool TakeScreenshot(string path)
        {
            using (var bitmap = new Bitmap(PanelSize.Width, PanelSize.Height))
            {
                //this method doesn't scale when using display/font scaling - needs fixing
                var location = new Point(0, 0);
                Invoke(new MethodInvoker(delegate { location = PointToScreen(panelBackground.Location); }));
                var g = Graphics.FromImage(bitmap);
                g.CopyFromScreen(location, new Point(0, 0), PanelSize, CopyPixelOperation.SourceCopy);

                var myEncoder           = Encoder.Quality;
                var myEncoderParameters = new EncoderParameters(1);
                var myEncoderParameter  = new EncoderParameter(myEncoder, 100L);
                myEncoderParameters.Param[0] = myEncoderParameter;
                var myImageCodecInfo = Tools.GetEncoderInfo("image/jpeg");
                Tools.DeleteFile(path);
                bitmap.Save(path, myImageCodecInfo, myEncoderParameters);
            }
            return(File.Exists(path));
        }
Esempio n. 10
0
 private void GetImage(String file, PictureBox box)
 {
     if (picWorking.Visible)
     {
         return;
     }
     try
     {
         string contentImage = null;
         //if not passed a string path for the image
         //show dialog box to find one
         if (string.IsNullOrWhiteSpace(file))
         {
             var openFileDialog1 = new OpenFileDialog
             {
                 Filter           = "Image Files|*.bmp;*.jpg;*.jpeg;*.png",
                 Title            = "Select an image",
                 InitialDirectory = Application.StartupPath + "\\res\\thumbs"
             };
             if (openFileDialog1.ShowDialog() == DialogResult.OK)
             {
                 contentImage        = openFileDialog1.FileName;
                 Tools.CurrentFolder = Path.GetDirectoryName(openFileDialog1.FileName);
             }
         }
         else
         {
             //if file is not blank, then use that for the image
             if ((file.Contains(".jpg") || file.Contains(".bmp") ||
                  file.Contains(".png") || file.Contains(".jpeg")) && !file.Contains(".png_xbox") && !file.Contains(".png_wii"))
             {
                 contentImage = file;
             }
             else
             {
                 return;
             }
         }
         if (string.IsNullOrWhiteSpace(contentImage))
         {
             return;
         }
         var thumbnail = Tools.NemoLoadImage(contentImage);
         if (thumbnail.Width == 64 && thumbnail.Height == 64)
         {
             box.Image = thumbnail;
             return;
         }
         var newimage = Path.GetTempPath() + Path.GetFileNameWithoutExtension(contentImage) + ".png";
         Tools.ResizeImage(contentImage, 64, "png", newimage);
         if (File.Exists(newimage))
         {
             box.Image = Tools.NemoLoadImage(newimage);
         }
         Tools.DeleteFile(newimage);
     }
     catch (Exception iSuck)
     {
         MessageBox.Show("Error: " + iSuck.Message);
     }
 }
Esempio n. 11
0
        private void ExtractFromSaveFile(string file)
        {
            ClearAll();
            isWorking(true);
            var savefile = file;
            var isXbox   = Path.GetFileName(file).ToLowerInvariant().Contains("xbox") || Path.GetFileName(file) == "band3";

            isWii = Path.GetFileName(file).ToLowerInvariant().Contains("wii");
            isPS3 = Path.GetFileName(file).ToLowerInvariant().Contains("ps3");
            Tools.CurrentFolder = Path.GetDirectoryName(file);
            UserSaveFile        = file;

            if (VariousFunctions.ReadFileType(file) == XboxFileType.STFS)
            {
                isXbox = true;
                isPS3  = false;
                isWii  = false;

                Log("Received save CON file, extracting save.dat file");
                var package = new STFSPackage(file);
                if (!package.ParseSuccess)
                {
                    isWorking(false);
                    package.CloseIO();
                    Log("Couldn't read that CON file, aborting");
                    Log("Ready");
                    return;
                }
                var xent = package.GetFile("save.dat");
                if (xent == null)
                {
                    isWorking(false);
                    package.CloseIO();
                    Log("Couldn't find save.dat in that CON file, aborting");
                    Log("Ready");
                    return;
                }
                var tempdat = EditorFolder + "\\temp.dat";
                Tools.DeleteFile(tempdat);
                if (!xent.ExtractToFile(tempdat))
                {
                    isWorking(false);
                    package.CloseIO();
                    Log("Couldn't extract save.dat from that CON file, aborting");
                    Log("Ready");
                    return;
                }
                savefile = tempdat;
                package.CloseIO();
            }
            Log("Received save file, extracting images...");

            ImageFolder = EditorFolder + Path.GetFileNameWithoutExtension(file) + "_extracted\\";
            Tools.DeleteFolder(ImageFolder, true);

            var success = false;

            if (isXbox)
            {
                success = Tools.ExtractSaveImages(savefile, EditorFolder + Path.GetFileNameWithoutExtension(file));
            }
            else if (isWii)
            {
                success = Tools.ExtractWiiSaveImages(savefile, EditorFolder + Path.GetFileNameWithoutExtension(file));
            }
            else if (isPS3)
            {
                success = Tools.ExtractSaveImages(savefile, EditorFolder + Path.GetFileNameWithoutExtension(file), true);
            }
            else
            {
                switch (MessageBox.Show("Click Yes if this is a *decrypted* PS3 save file\nClick No if this is a Wii save file\nXbox 360 users must use the 'band3' save file\nPress Cancel to go back",
                                        Text, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question))
                {
                case DialogResult.Yes:
                    isPS3   = true;
                    isWii   = false;
                    success = Tools.ExtractSaveImages(savefile, EditorFolder + Path.GetFileNameWithoutExtension(file), true);
                    break;

                case DialogResult.No:
                    isWii   = true;
                    isPS3   = false;
                    success = Tools.ExtractWiiSaveImages(savefile, EditorFolder + Path.GetFileNameWithoutExtension(file));
                    break;

                case DialogResult.Cancel:
                    Log("Extracting cancelled by user");
                    isWorking(false);
                    Log("Ready");
                    return;
                }
            }

            if (!success)
            {
                Log("Extracting from save game file failed");
                isWorking(false);
                Log("Ready");
                return;
            }
            Log("Extracted images from save file successfully");

            if (savefile != file) //i.e. extracted from con
            {
                Tools.DeleteFile(savefile);
            }

            lblFileName.Text = Path.GetFileName(file);
            lblConsole.Text  = isPS3 ? "Playstation 3" : (isWii ? "Wii" : "Xbox 360");
            ChangeImagePadding();
            LoadExtractedImages();
            exportAllImagesToolStripMenuItem.Enabled = true;
            closeFileToolStripMenuItem.Enabled       = true;

            txtBand.Enabled  = true;
            txtBand.Text     = !string.IsNullOrWhiteSpace(Tools.SaveFileBandName) ? Tools.SaveFileBandName : "Unknown";
            txtBand.ReadOnly = isWii;

            isWorking(false);
            Log("Ready");
        }
Esempio n. 12
0
        public AdvancedArtConverter(string Folder, Color ButtonBackColor, Color ButtonTextColor)
        {
            InitializeComponent();

            Tools = new NemoTools {
                TextureSize = 512
            };

            var formButtons = new List <Button> {
                btnRefresh, btnFolder, btnToPS3, btnFromPS3, btnToWii, btnFromWii, btnToXbox, btnFromXbox
            };

            foreach (var button in formButtons)
            {
                button.BackColor = ButtonBackColor;
                button.ForeColor = ButtonTextColor;
                button.FlatAppearance.MouseOverBackColor = button.BackColor == Color.Transparent ? Color.FromArgb(127, Color.AliceBlue.R, Color.AliceBlue.G, Color.AliceBlue.B) : Tools.LightenColor(button.BackColor);
            }

            Log("Welcome to Advanced Art Converter");
            Log("Drag and drop the file(s) to be converted here");
            Log("Or click 'Change Input Folder' to select the files");
            Log("Ready to begin");

            //folder sent via command line is more important
            var pngDir = Folder != "" ? Folder : "";

            //load last used directory if saved and still exists
            config = Application.StartupPath + "\\bin\\config\\art.config";
            if (string.IsNullOrWhiteSpace(pngDir))
            {
                if (File.Exists(config))
                {
                    var sr   = new StreamReader(config);
                    var line = sr.ReadLine();
                    sr.Dispose();
                    if (string.IsNullOrWhiteSpace(line))
                    {
                        Tools.DeleteFile(config);
                    }
                    else if (line != "" && Directory.Exists(line))
                    {
                        Log("Loaded last directory used");
                        pngDir = line;
                    }
                    else
                    {
                        Tools.DeleteFile(config);
                    }
                }
            }
            txtFolder.Text = pngDir;
            imgCounter     = 0;

            wimgt = Application.StartupPath + "\\bin\\wimgt.exe";
            if (File.Exists(wimgt))
            {
                return;
            }
            MessageBox.Show("Can't find wimgt.exe ... I won't be able to convert Wii files without it",
                            "Missing Executable", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            tabWii.Enabled = false;
        }
Esempio n. 13
0
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            foreach (var file in FilesToConvert)
            {
                if (backgroundWorker1.CancellationPending)
                {
                    return;
                }
                var replaced = 0;
                try
                {
                    var xFile = new STFSPackage(file);
                    if (!xFile.ParseSuccess)
                    {
                        ProblemFiles.Add(file);
                        continue;
                    }

                    var xent = xFile.GetFile("/songs/songs.dta");
                    if (xent == null)
                    {
                        xFile.CloseIO();
                        ProblemFiles.Add(file);
                        continue;
                    }

                    var dta1 = Application.StartupPath + "\\bin\\dta1.txt";
                    Tools.DeleteFile(dta1);

                    if (!xent.Extract(dta1))
                    {
                        xFile.CloseIO();
                        ProblemFiles.Add(file);
                        continue;
                    }

                    var dta2 = Application.StartupPath + "\\bin\\dta2.txt";
                    Tools.DeleteFile(dta2);

                    var sr = new StreamReader(dta1, Encoding.Default);
                    var sw = new StreamWriter(dta2, false, Encoding.Default);
                    while (sr.Peek() >= 0)
                    {
                        var line = sr.ReadLine();
                        if (string.IsNullOrEmpty(line.Trim()))
                        {
                            continue;
                        }

                        if (line.Contains(";ORIG_ID="))
                        {
                            if (DoReverseBatch)
                            {
                                var id = line.Replace(";", "").Replace("ORIG_ID=", "").Trim();
                                sw.WriteLine("   ('song_id' " + id + ")");
                                sr.ReadLine();//skip the old song_id line
                                line = sr.ReadLine();
                                TotalSongs++;
                                replaced++;
                            }
                            else
                            {
                                sw.WriteLine(line);
                                line = sr.ReadLine();
                                sw.WriteLine(line);
                                line = sr.ReadLine();
                            }
                        }
                        else if (line.Contains("song_id") && !DoReverseBatch)
                        {
                            if (!Parser.IsNumericID(line))
                            {
                                line = ";ORIG_ID=" + Parser.GetSongID(line);
                                sw.WriteLine(line);
                                line = "   ('song_id' " + mMainForm.GetNumericID() + ")";
                                TotalSongs++;
                                replaced++;
                            }
                            else
                            {
                                SkippedFiles.Add(file);
                            }
                        }

                        if (!string.IsNullOrEmpty(line.Trim()))
                        {
                            sw.WriteLine(line);
                        }
                    }
                    sr.Dispose();
                    sw.Dispose();

                    if (replaced == 0) //don't modify this CON file if nothing is edited in this DTA file
                    {
                        if (!SkippedFiles.Contains(file))
                        {
                            SkippedFiles.Add(file);
                        }
                        xFile.CloseIO();
                        continue;
                    }

                    if (backgroundWorker1.CancellationPending)
                    {
                        xFile.CloseIO();
                        return;
                    }
                    if (!xent.Replace(dta2))
                    {
                        xFile.CloseIO();
                        ProblemFiles.Add(file);
                        continue;
                    }

                    Tools.DeleteFile(dta1);
                    Tools.DeleteFile(dta2);

                    xFile.Header.MakeAnonymous();
                    xFile.Header.ThisType = PackageType.SavedGame;
                    var signature = new RSAParams(Application.StartupPath + "\\bin\\KV.bin");
                    xFile.RebuildPackage(signature);
                    xFile.FlushPackage(signature);
                    xFile.CloseIO();
                    Tools.UnlockCON(file);
                    Tools.SignCON(file);
                    xFile.CloseIO();
                }
                catch (Exception)
                {
                    ProblemFiles.Add(file);
                }
            }
        }
Esempio n. 14
0
        private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            Tools.CurrentFolder = Path.GetDirectoryName(con);
            Log("Reading CON file " + Path.GetFileName(con));

            var dta    = Path.GetTempPath() + "temp_dta.txt";
            var backup = con + "_backup";

            Tools.DeleteFile(backup);

            if (!Parser.ExtractDTA(con))//grab byte[] content of DTA
            {
                Log("Error extracting DTA file");
                ErrorOut();
                return;
            }
            if (!Parser.WriteDTAToFile(dta)) //write it out to file
            {
                Log("Error extracting DTA file");
                ErrorOut();
                return;
            }

            var song = new STFSPackage(con);

            if (backUpCONFile.Checked)
            {
                Log("Found songs.dta file, making a backup of your file before starting");
                Log("THIS STEP MAY TAKE A WHILE. DON'T CLOSE ME DOWN!");

                song.CloseIO();
                File.Copy(con, backup);
                song = new STFSPackage(con);
            }

            var xDTA = song.GetFile("/songs/songs.dta");

            Log("Opening DTA file...");

            var process = Process.Start(dta);

            Log("DTA file is being edited by the user ... waiting...");

            do
            {
                //wait while user has DTA file opened
            } while (!process.HasExited);

            process.Dispose();

            Log("DTA file closed by user, continuing...");
            Log("Replacing old DTA file with modified DTA file");
            Log("THIS STEP MAY TAKE A WHILE. DON'T CLOSE ME DOWN!");

            if (!xDTA.Replace(dta))
            {
                Log("Error replacing DTA file with modified one");
                Tools.DeleteFile(backup);
                ErrorOut();
                return;
            }

            Log("Replaced DTA file successfully");
            song.Header.MakeAnonymous();
            song.Header.ThisType = PackageType.SavedGame;

            var success = false;

            try
            {
                Log("Saving changes to pack ... sit tight");
                Log("THIS STEP MAY TAKE A WHILE. DON'T CLOSE ME DOWN!");

                signature = new RSAParams(Application.StartupPath + "\\bin\\KV.bin");
                song.RebuildPackage(signature);
                song.FlushPackage(signature);
                song.CloseIO();
                success = true;
            }
            catch (Exception ex)
            {
                Log("There was an error: " + ex.Message);
                song.CloseIO();
            }

            if (success)
            {
                Log("Trying to unlock CON file");
                if (Tools.UnlockCON(con))
                {
                    Log("Unlocked CON file successfully");
                }
                else
                {
                    Log("Error unlocking CON file");
                    success = false;
                }
            }

            if (success)
            {
                if (Tools.SignCON(con))
                {
                    Log("CON file signed successfully");
                }
                else
                {
                    Log("Error signing CON file");
                    success = false;
                }
            }

            Tools.DeleteFile(dta);

            Log(success ? "Process completed successfully!" : "Something went wrong along the way, sorry!");
            if (success)
            {
                return;
            }
            if (!backUpCONFile.Checked)
            {
                return;
            }
            Log("Restoring backup file");
            Tools.DeleteFile(con);
            Log(Tools.MoveFile(backup, con) ? "Backup file restored successfully, nothing was lost" : "Sorry, there was an error restoring the backup file");
        }
Esempio n. 15
0
        private bool addFiles()
        {
            if (backgroundWorker1.CancellationPending)
            {
                return(false);
            }

            var name = "song";

            if (chkFTV.Checked)
            {
                name = "ftv";
            }

            var filesAdded = 0;

            if (songsFolder.Substring(songsFolder.Length - 1, 1) != "\\")
            {
                songsFolder = songsFolder + "\\";
            }

            if (Directory.Exists(songsFolder))
            {
                var songsInput    = Directory.GetFiles(songsFolder);
                var enoughFolders = Directory.GetDirectories(songsFolder);
                if (enoughFolders.Any()) //only add if there's at least one folder in there
                {
                    packfiles.AddFolder("songs");

                    foreach (var sFile in songsInput.Where(sFile => sFile.Substring(sFile.Length - 4, 4) != ".dta"))
                    {
                        packfiles.AddFile(sFile, "songs/" + Path.GetFileName(sFile));
                    }

                    //create song folders and add contents to each
                    var subFolders    = Directory.GetDirectories(songsFolder);
                    var sFolderLength = songsFolder;

                    //if songs.dta doesn't exist, create one. if exists, leave it, will be appended
                    if (!(File.Exists(songsFolder + "songs.dta")))
                    {
                        var tempDta = new StreamWriter(songsFolder + "songs.dta", false, Encoding.Default);
                        tempDta.Dispose();
                    }

                    foreach (var songName in from folder in subFolders select folder.Substring(sFolderLength.Length, folder.Length - sFolderLength.Length) into songName select songName.Replace("\\", "") into songName where Directory.Exists(songsFolder + songName) let ending = songName.Substring(songName.Length - 3, 3) where ending != "(1)" && ending != "(2)" && ending != "(3)" && ending != "(4)" && ending != "(5)" select songName)
                    {
                        if (backgroundWorker1.CancellationPending)
                        {
                            return(false);
                        }

                        filesAdded++;
                        Log("Adding files for song " + filesAdded);
                        //add all items at the songfolder level (mostly .mid and .mogg files)
                        packfiles.AddFolder("songs/" + songName);

                        //if songs.dta is there, add to main songs.dta and then delete
                        if (File.Exists(songsFolder + songName + "\\songs.dta"))
                        {
                            var dtaIn  = new StreamReader(songsFolder + songName + "\\songs.dta", Encoding.Default);
                            var dtaOut = new StreamWriter(songsFolder + "songs.dta", true, Encoding.Default);

                            while (dtaIn.Peek() >= 0)
                            {
                                var line = dtaIn.ReadLine();

                                if (string.IsNullOrWhiteSpace(line))
                                {
                                    continue;
                                }
                                line = Tools.FixBadChars(line);

                                if (chkID.Checked)
                                {
                                    //replace short id with custom generated id
                                    if (line == "(")
                                    {
                                        dtaOut.WriteLine(line);
                                        dtaIn.ReadLine();

                                        var month = "0" + nextFriday.Month;
                                        month = month.Substring(month.Length - 2, 2);
                                        var day = "0" + nextFriday.Day;
                                        day = day.Substring(day.Length - 2, 2);

                                        line = "      '" + month + day +
                                               nextFriday.Year.ToString(CultureInfo.InvariantCulture)
                                               .Substring(2, 2) + name + filesAdded + "'";
                                    }
                                    else if (!string.IsNullOrWhiteSpace(line) && (line.Substring(0, 1) == "(" && !line.Contains(")")))
                                    {
                                        line = "(" + nextFriday.Month + nextFriday.Day +
                                               nextFriday.Year.ToString(CultureInfo.InvariantCulture)
                                               .Substring(2, 2) + name + filesAdded;
                                    }
                                }

                                if (chkRename.Checked)
                                {
                                    var replace = defaultTool.Checked ? "RECORDING" : "PREVIEW";
                                    //replace artist names to group all together
                                    if (line.ToLowerInvariant().Contains("(artist"))
                                    {
                                        line = "   (artist \"VIDEO " + replace + "\")";
                                    }
                                    if (line.ToLowerInvariant().Contains("'artist'"))
                                    {
                                        dtaOut.WriteLine(line);
                                        dtaIn.ReadLine();
                                        line = "      \"VIDEO " + replace + "\"";
                                    }
                                }

                                if (chkID.Checked)
                                {
                                    //replace song id with custom generated id
                                    if (line.Contains("song_id"))
                                    {
                                        line = "   ('song_id' " + nextFriday.Month + nextFriday.Day +
                                               nextFriday.Year.ToString(CultureInfo.InvariantCulture)
                                               .Substring(2, 2) + name + filesAdded + ")";
                                    }
                                }

                                //add mute level setting so all instruments are heard even when missed
                                if ((line.Contains("'drum_freestyle'") || line.Contains("(drum_freestyle")) && chkVolume.Checked)
                                {
                                    if (line.Contains("'drum_freestyle'"))
                                    {
                                        dtaOut.WriteLine(line);
                                        line = dtaIn.ReadLine();
                                        dtaOut.WriteLine(line);
                                        line = dtaIn.ReadLine();
                                        dtaOut.WriteLine(line);
                                        line = dtaIn.ReadLine();
                                        dtaOut.WriteLine(line);
                                        line = dtaIn.ReadLine();
                                        dtaOut.WriteLine(line);
                                        line = dtaIn.ReadLine();
                                        dtaOut.WriteLine(line);
                                    }
                                    else if (line.Contains("(drum_freestyle"))
                                    {
                                        dtaOut.WriteLine(line);
                                        line = dtaIn.ReadLine();
                                        dtaOut.WriteLine(line);
                                        line = dtaIn.ReadLine();
                                        dtaOut.WriteLine(line);
                                    }
                                    dtaOut.WriteLine("      (mute_volume 0.0)");
                                    dtaOut.WriteLine("      (mute_volume_vocals 0.0)");
                                    line = dtaIn.ReadLine();
                                }

                                if (line != null && !line.Trim().StartsWith(";;", StringComparison.Ordinal))
                                {
                                    dtaOut.WriteLine(line);
                                }
                            }
                            dtaIn.Dispose();
                            dtaOut.WriteLine(""); //separate entries
                            dtaOut.Dispose();

                            //delete original dta files
                            Tools.DeleteFile(songsFolder + songName + "\\songs.dta");
                        }

                        //add mid, mogg and other files found at the songname folder level
                        var songContents = Directory.GetFiles(songsFolder + songName);
                        if (songContents.Count() != 0)
                        {
                            foreach (var contents in songContents)
                            {
                                if (backgroundWorker1.CancellationPending)
                                {
                                    return(false);
                                }
                                packfiles.AddFile(contents, "songs/" + songName + "/" + Path.GetFileName(contents));
                            }
                        }

                        //all all items at the gen level (mostly png_xbox and milo_xbox files)
                        packfiles.AddFolder("songs/" + songName + "/gen");
                        var subContents = Directory.GetFiles(songsFolder + songName + "\\gen");
                        if (!subContents.Any())
                        {
                            continue;
                        }
                        foreach (var contents in subContents)
                        {
                            if (backgroundWorker1.CancellationPending)
                            {
                                return(false);
                            }
                            packfiles.AddFile(contents, "songs/" + songName + "/gen/" + Path.GetFileName(contents));
                        }
                    }
                    //C16 modification. if multiple songs.dta files are found, combine them
                    var c16Dta = Directory.GetFiles(songsFolder, "*.dta");
                    if (c16Dta.Count() > 1)
                    {
                        //prompt user that multiple dtas were found, and to choose whether to combine them (C16) or not
                        var dialogResult =
                            MessageBox.Show("Found multiple songs.dta files in the 'songs' folder\nDo you want me to merge (YES) or discard (NO) the duplicates?\nUnless you're C16 or you know what you're doing, I suggest you discard the duplicates (NO)",
                                            "C16 Modification Activate!", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                        switch (dialogResult)
                        {
                        case DialogResult.No:
                            foreach (var c16 in c16Dta.Where(c16 => c16.Substring(c16.Length - 9, 9) != "songs.dta"))
                            {
                                Tools.DeleteFile(c16);
                            }
                            break;

                        case DialogResult.Yes:
                        {
                            //create temporary dta file
                            File.Create(songsFolder + "temp_songs.dta").Dispose();

                            //process the duplicate dtas
                            foreach (var c16 in c16Dta)
                            {
                                //read first dta file
                                var dtaIn   = new StreamReader(c16, Encoding.Default);
                                var dtaPack = dtaIn.ReadToEnd();
                                dtaIn.Dispose();

                                //write to temp dta
                                var dtaOut = new StreamWriter(songsFolder + "temp_songs.dta", true, Encoding.Default);
                                dtaOut.Write(dtaPack);
                                dtaOut.Dispose();

                                //delete that dta file
                                Tools.DeleteFile(c16);
                            }

                            //now rename that to songs.dta and just allow existing code to add it to the package
                            Tools.MoveFile(songsFolder + "temp_songs.dta", songsFolder + "songs.dta");
                        }
                        break;
                        }
                    }

                    if (File.Exists(songsFolder + "songs.dta"))
                    {
                        packfiles.AddFile(songsFolder + "songs.dta", "songs/songs.dta");
                    }
                }
            }

            Log("Successfully added files for " + filesAdded + (filesAdded > 1 ? " songs" : " song"));
            if (filesAdded < inputFiles.Count())
            {
                Log("It looks like there were some duplicate songs");
                Log("I skipped: " + (inputFiles.Count() - filesAdded) + (inputFiles.Count() - filesAdded > 1? " songs" : " song"));
            }

            Tools.DeleteFolder(tempFolder + "temp\\", true);
            return(true);
        }
Esempio n. 16
0
        public bool ExtractDecryptMogg(string CON_file, bool bypass, NemoTools tools, DTAParser parser)
        {
            Initialize();
            Tools  = tools;
            Parser = parser;
            Tools.ReleaseStreamHandle();
            var temp_dta  = Path.GetTempPath() + "temp.dta";
            var temp_mogg = Path.GetTempPath() + "temp.mogg";

            Tools.DeleteFile(temp_dta);
            Tools.DeleteFile(temp_mogg);
            if (!Parser.ExtractDTA(CON_file, temp_dta))
            {
                ErrorLog.Add("Couldn't extract songs.dta file from that CON file");
                Tools.DeleteFile(temp_dta);
                return(false);
            }
            if (!Parser.ReadDTA(temp_dta) || !Parser.Songs.Any())
            {
                ErrorLog.Add("Couldn't read that songs.dta file");
                Tools.DeleteFile(temp_dta);
                return(false);
            }
            Tools.DeleteFile(temp_dta);
            if (Parser.Songs.Count > 1)
            {
                ErrorLog.Add("This feature does not support packs, only single songs\nUse the dePACK feature in C3 CON Tools' Quick Pack Editor to split this pack into single songs and try again");
                return(false);
            }
            var internal_name = Parser.Songs[0].InternalName;
            var xCON          = new STFSPackage(CON_file);

            if (!xCON.ParseSuccess)
            {
                ErrorLog.Add("Couldn't parse that CON file");
                xCON.CloseIO();
                return(false);
            }
            var xMogg = xCON.GetFile("songs/" + internal_name + "/" + internal_name + ".mogg");

            if (xMogg == null)
            {
                ErrorLog.Add("Couldn't find the mogg file inside that CON file");
                xCON.CloseIO();
                return(false);
            }
            if (!xMogg.Extract(temp_mogg))
            {
                ErrorLog.Add("Couldn't extract the mogg file from that CON file");
                xCON.CloseIO();
                return(false);
            }
            xCON.CloseIO();
            LoadLibraries();
            if (Tools.DecM(temp_mogg, bypass, false, DecryptMode.ToMemory))
            {
                Tools.DeleteFile(temp_mogg);
                return(true);
            }
            Tools.DeleteFile(temp_mogg);
            ErrorLog.Add("Mogg file is encrypted and I could not decrypt it, can't split it");
            UnloadLibraries();
            Tools.ReleaseStreamHandle();
            return(false);
        }
Esempio n. 17
0
        private bool ProcessFiles()
        {
            var counter = 0;
            var success = 0;

            foreach (var file in inputFiles.Where(File.Exists).TakeWhile(file => !backgroundWorker1.CancellationPending))
            {
                try
                {
                    if (VariousFunctions.ReadFileType(file) != XboxFileType.STFS)
                    {
                        continue;
                    }
                    Song.NewSong();
                    Song.ReplaceGenreWithSub = useSubgenreInsteadOfGenreToolStripMenuItem.Checked;

                    try
                    {
                        if (!Directory.Exists(PSFolder))
                        {
                            Directory.CreateDirectory(PSFolder);
                        }
                        counter++;
                        Parser.ExtractDTA(file);
                        Parser.ReadDTA(Parser.DTA);
                        if (Parser.Songs.Count > 1)
                        {
                            Log("File " + Path.GetFileName(file) + " is a pack, try dePACKing first, skipping...");
                            continue;
                        }
                        if (!Parser.Songs.Any())
                        {
                            Log("There was an error processing the songs.dta file");
                            continue;
                        }
                        if (loadDTA())
                        {
                            Log("Loaded and processed songs.dta file for song #" + counter + " successfully");
                            Log("Song #" + counter + " is " + Song.Artist + " - " + Song.Name);
                        }
                        else
                        {
                            return(false);
                        }

                        var songfolder = PSFolder + Tools.CleanString(Song.Artist, false) + " - " + Tools.CleanString(Song.Name, false) + "\\";
                        if (!Directory.Exists(songfolder))
                        {
                            Directory.CreateDirectory(songfolder);
                        }
                        var internal_name = Parser.Songs[0].InternalName;

                        var xPackage = new STFSPackage(file);
                        if (!xPackage.ParseSuccess)
                        {
                            Log("Failed to parse '" + Path.GetFileName(file) + "'");
                            Log("Skipping this file");
                            continue;
                        }
                        var xArt = xPackage.GetFile("songs/" + internal_name + "/gen/" + internal_name + "_keep.png_xbox");
                        if (xArt != null)
                        {
                            var newart = songfolder + "album.png_xbox";
                            if (xArt.ExtractToFile(newart))
                            {
                                Log("Extracted album art file " + internal_name + "_keep.png_xbox successfully");
                                fromXbox(newart);
                            }
                            else
                            {
                                Log("There was a problem extracting the album art file");
                            }
                        }
                        else
                        {
                            Log("WARNING: Did not find album art file in that CON file");
                        }
                        var xMIDI = xPackage.GetFile("songs/" + internal_name + "/" + internal_name + ".mid");
                        if (xMIDI != null)
                        {
                            var newmidi = songfolder + "notes.mid";
                            if (xMIDI.ExtractToFile(newmidi))
                            {
                                Log("Extracted MIDI file " + internal_name + ".mid successfully");
                                ProcessMidi(newmidi);
                            }
                            else
                            {
                                Log("There was a problem extracting the MIDI file");
                                Log("Skipping this song...");
                                xPackage.CloseIO();
                                continue;
                            }
                        }
                        else
                        {
                            Log("ERROR: Did not find a MIDI file in that CON file!");
                            Log("Skipping this song...");
                            xPackage.CloseIO();
                            continue;
                        }
                        var xMOGG = xPackage.GetFile("songs/" + internal_name + "/" + internal_name + ".mogg");
                        if (xMOGG != null)
                        {
                            var newmogg = songfolder + internal_name + ".mogg";
                            if (radioSeparate.Checked)
                            {
                                xPackage.CloseIO();
                                SeparateAudio(file, newmogg, songfolder);
                            }
                            else if (radioDownmix.Checked)
                            {
                                xPackage.CloseIO();
                                DownMixAudio(file, songfolder);
                            }
                            else
                            {
                                var msg = "Extracting audio file " + (radioAudacity.Checked ? "to send to Audacity" : "and leaving it as is");
                                Log(msg);
                                var mData = xMOGG.Extract();
                                if (mData != null && mData.Length > 0)
                                {
                                    Log("Successfully extracted audio file '" + Path.GetFileName(newmogg) + "'");
                                    if (radioAudacity.Checked)
                                    {
                                        Log("Sending audio file to Audacity now");
                                        Tools.DecM(mData, false, false, DecryptMode.ToFile, newmogg);
                                        Log(Tools.SendtoAudacity(newmogg));
                                    }
                                    else
                                    {
                                        Tools.WriteOutData(Tools.ObfM(mData), newmogg);
                                    }
                                }
                                else
                                {
                                    Log("There was a problem extracting the audio file");
                                    Log("Skipping this song...");
                                    xPackage.CloseIO();
                                    continue;
                                }
                            }
                        }
                        else
                        {
                            Log("ERROR: Did not find an audio file in that CON file!");
                            Log("Skipping this song...");
                            xPackage.CloseIO();
                            continue;
                        }
                        xPackage.CloseIO();

                        if (!Directory.Exists(songfolder))
                        {
                            Directory.CreateDirectory(songfolder);
                        }
                        Song.WriteINIFile(songfolder, !chkNoC3.Checked);

                        var banner = Application.StartupPath + "\\res\\phaseshift\\banner.png";
                        if (File.Exists(banner) && !chkNoC3.Checked)
                        {
                            Tools.DeleteFile(songfolder + "banner.png");
                            File.Copy(banner, songfolder + "banner.png");
                        }
                        var icon = Application.StartupPath + "\\res\\phaseshift\\c3.png";
                        if (File.Exists(icon) && !chkNoC3.Checked)
                        {
                            Tools.DeleteFile(songfolder + "ccc.png");
                            File.Copy(icon, songfolder + "ccc.png");
                        }

                        success++;
                        if (!chkRAR.Checked || backgroundWorker1.CancellationPending)
                        {
                            continue;
                        }
                        var archive = Path.GetFileName(file);
                        archive = archive.Replace(" ", "").Replace("-", "_").Replace("\\", "").Replace("'", "").Replace(",", "").Replace("_rb3con", "");
                        archive = Tools.CleanString(archive, false);
                        archive = PSFolder + archive + "_ps.rar";

                        var arg = "a -m5 -ep1 -r \"" + archive + "\" \"" + songfolder.Substring(0, songfolder.Length - 1) + "\"";
                        Log("Creating RAR archive");

                        Log(Tools.CreateRAR(rar, archive, arg)? "Created RAR archive successfully" : "RAR archive creation failed");
                    }
                    catch (Exception ex)
                    {
                        Log("There was an error: " + ex.Message);
                        Log("Attempting to continue with the next file");
                    }
                }
                catch (Exception ex)
                {
                    Log("There was a problem accessing that file");
                    Log("The error says: " + ex.Message);
                }
            }
            Log("Successfully processed " + success + " of " + counter + " files");
            return(true);
        }
Esempio n. 18
0
        private bool DoSplitMogg(string folder, string StemsToSplit, MoggSplitFormat format, string quality)
        {
            var ext = "ogg";

            if (format == MoggSplitFormat.WAV)
            {
                ext = "wav";
            }
            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
            }
            var drums   = folder + "drums." + ext;
            var drums1  = folder + "drums_1." + ext;
            var drums2  = folder + "drums_2." + ext;
            var drums3  = folder + "drums_3." + ext;
            var bass    = folder + "bass." + ext;
            var rhythm  = folder + "rhythm." + ext;
            var guitar  = folder + "guitar." + ext;
            var keys    = folder + "keys." + ext;
            var vocals  = folder + "vocals." + ext;
            var backing = folder + "backing." + ext;
            var song    = folder + "song." + ext;
            var crowd   = folder + "crowd." + ext;
            var tracks  = new List <string> {
                drums, drums1, drums2, drums3, bass, guitar, keys, vocals, backing, crowd
            };

            foreach (var track in tracks)
            {
                Tools.DeleteFile(track);
            }
            try
            {
                if (!InitBass())
                {
                    return(false);
                }
                SourceStream = Bass.BASS_StreamCreateFile(Tools.GetOggStreamIntPtr(), 0, Tools.PlayingSongOggData.Length, BASSFlag.BASS_STREAM_DECODE);
                var info             = Bass.BASS_ChannelGetInfo(SourceStream);
                var ArrangedChannels = ArrangeStreamChannels(info.chans, true);
                var isSlave          = false;
                if (Parser.Songs[0].ChannelsDrums > 0 && (StemsToSplit.Contains("allstems") || StemsToSplit.Contains("drums")))
                {
                    switch (Parser.Songs[0].ChannelsDrums)
                    {
                    case 2:
                        PrepareChannelsToSplit(0, ArrangedChannels, 2, GetStemVolume(0), drums, format, quality, false);
                        break;

                    case 3:
                        PrepareChannelsToSplit(0, ArrangedChannels, 1, GetStemVolume(0), drums1, format, quality, false);
                        PrepareChannelsToSplit(1, ArrangedChannels, 2, GetStemVolume(1), drums2, format, quality);
                        break;

                    case 4:
                        PrepareChannelsToSplit(0, ArrangedChannels, 1, GetStemVolume(0), drums1, format, quality, false);
                        PrepareChannelsToSplit(1, ArrangedChannels, 1, GetStemVolume(1), drums2, format, quality);
                        PrepareChannelsToSplit(2, ArrangedChannels, 2, GetStemVolume(2), drums3, format, quality);
                        break;

                    case 5:
                        PrepareChannelsToSplit(0, ArrangedChannels, 1, GetStemVolume(0), drums1, format, quality, false);
                        PrepareChannelsToSplit(1, ArrangedChannels, 2, GetStemVolume(1), drums2, format, quality);
                        PrepareChannelsToSplit(3, ArrangedChannels, 2, GetStemVolume(3), drums3, format, quality);
                        break;

                    case 6:
                        PrepareChannelsToSplit(0, ArrangedChannels, 2, GetStemVolume(0), drums1, format, quality, false);
                        PrepareChannelsToSplit(2, ArrangedChannels, 2, GetStemVolume(2), drums2, format, quality);
                        PrepareChannelsToSplit(4, ArrangedChannels, 2, GetStemVolume(4), drums3, format, quality);
                        break;
                    }
                    isSlave = true;
                }
                var channel = Parser.Songs[0].ChannelsDrums;
                if (Parser.Songs[0].ChannelsBass > 0 && (StemsToSplit.Contains("allstems") || StemsToSplit.Contains("bass") || StemsToSplit.Contains("rhythm")))
                {
                    PrepareChannelsToSplit(channel, ArrangedChannels, Parser.Songs[0].ChannelsBass, GetStemVolume(channel), StemsToSplit.Contains("rhythm") ? rhythm : bass, format, quality, isSlave);
                    isSlave = true;
                }
                channel += Parser.Songs[0].ChannelsBass;
                if (Parser.Songs[0].ChannelsGuitar > 0 && (StemsToSplit.Contains("allstems") || StemsToSplit.Contains("guitar")))
                {
                    PrepareChannelsToSplit(channel, ArrangedChannels, Parser.Songs[0].ChannelsGuitar, GetStemVolume(channel), guitar, format, quality, isSlave);
                    isSlave = true;
                }
                channel += Parser.Songs[0].ChannelsGuitar;
                if (Parser.Songs[0].ChannelsVocals > 0 && (StemsToSplit.Contains("allstems") || StemsToSplit.Contains("vocals")))
                {
                    PrepareChannelsToSplit(channel, ArrangedChannels, Parser.Songs[0].ChannelsVocals, GetStemVolume(channel), vocals, format, quality, isSlave);
                    isSlave = true;
                }
                channel += Parser.Songs[0].ChannelsVocals;
                if (Parser.Songs[0].ChannelsKeys > 0 && (StemsToSplit.Contains("allstems") || StemsToSplit.Contains("keys")))
                {
                    PrepareChannelsToSplit(channel, ArrangedChannels, Parser.Songs[0].ChannelsKeys, GetStemVolume(channel), keys, format, quality, isSlave);
                    isSlave = true;
                }
                channel += Parser.Songs[0].ChannelsKeys;
                if (Parser.Songs[0].ChannelsBacking() > 0 && (StemsToSplit.Contains("allstems") || StemsToSplit.Contains("backing") || StemsToSplit.Contains("song")))
                {
                    PrepareChannelsToSplit(channel, ArrangedChannels, Parser.Songs[0].ChannelsBacking(), GetStemVolume(channel), StemsToSplit.Contains("song") ? song : backing, format, quality, isSlave);
                    isSlave = true;
                }
                channel += Parser.Songs[0].ChannelsBacking();
                if (Parser.Songs[0].ChannelsCrowd > 0 && (StemsToSplit.Contains("allstems") || StemsToSplit.Contains("crowd")))
                {
                    PrepareChannelsToSplit(channel, ArrangedChannels, Parser.Songs[0].ChannelsCrowd, GetStemVolume(channel), crowd, format, quality, isSlave);
                }
                while (true)
                {
                    var buffer = new byte[20000];
                    var c      = Bass.BASS_ChannelGetData(Splits[0], buffer, buffer.Length);
                    if (c < 0)
                    {
                        break;
                    }
                    for (var i = 1; i < Splits.Count; i++)
                    {
                        while (Bass.BASS_ChannelGetData(Splits[i], buffer, buffer.Length) > 0)
                        {
                        }
                    }
                }
                foreach (var split in Splits)
                {
                    Bass.BASS_StreamFree(split);
                }
                UnloadLibraries();
                Tools.ReleaseStreamHandle();
            }
            catch (Exception ex)
            {
                ErrorLog.Add("Error splitting mogg file:");
                ErrorLog.Add(ex.Message);
                foreach (var split in Splits)
                {
                    Bass.BASS_StreamFree(split);
                }
                UnloadLibraries();
                Tools.ReleaseStreamHandle();
                return(false);
            }
            return(true);
        }
Esempio n. 19
0
        private void btnBundle_Click(object sender, EventArgs e)
        {
            if (!File.Exists(orig_midi))
            {
                Log("MIDI file " + Path.GetFileName(orig_midi) + " is missing! Did you just delete it?");
                MIDIFixFailed(orig_midi, false);
                return;
            }
            if (!File.Exists(orig_dta))
            {
                Log("DTA file " + Path.GetFileName(orig_dta) + " is missing! Did you just delete it?");
                MIDIFixFailed(orig_dta, false);
                return;
            }

            newMIDI = Path.GetDirectoryName(orig_midi) + "\\" + Path.GetFileNameWithoutExtension(orig_midi) + " (bundled).mid";
            newDTA  = Path.GetDirectoryName(orig_dta) + "\\" + Path.GetFileNameWithoutExtension(orig_dta) + " (bundled).dta";
            var skip_tracks = ignoreNoninstrumentTracks.Checked ? new List <string> {
                "EVENTS", "VENUE", "BEAT"
            } : new List <string>();

            var midi = Tools.NemoLoadMIDI(orig_midi);

            if (midi == null)
            {
                MIDIFixFailed(orig_midi);
                return;
            }

            var harm1 = false;
            var harm2 = false;
            var harm3 = false;

            foreach (var UpgMidi in UpgradeMidis)
            {
                if (!File.Exists(UpgMidi))
                {
                    Log("Upgrade MIDI file " + Path.GetFileName(UpgMidi) + " is missing! Did you just delete it?");
                    continue;
                }
                var upgrade = Tools.NemoLoadMIDI(UpgMidi);
                if (upgrade == null)
                {
                    MIDIFixFailed(UpgMidi);
                    return;
                }
                Tools.DeleteFile(newMIDI);
                Tools.DeleteFile(newDTA);
                var origtracks = new List <string>();
                //check which tracks are in original midi
                for (var i = 0; i < midi.Events.Tracks; i++)
                {
                    var trackname = Tools.GetMidiTrackName(midi.Events[i][0].ToString());
                    if (!origtracks.Contains(trackname) && !skip_tracks.Contains(trackname))
                    {
                        origtracks.Add(trackname);
                    }
                }
                var upgtracks = new List <string>();
                //check what tracks are in the upgrade midi
                //skip track 0 = tempo track
                for (var i = 1; i < upgrade.Events.Tracks; i++)
                {
                    var trackname = Tools.GetMidiTrackName(upgrade.Events[i][0].ToString());
                    if (trackname.Contains("HARM1") || trackname.Contains("VOCALS"))
                    {
                        harm1 = true;
                    }
                    else if (trackname.Contains("HARM2"))
                    {
                        harm2 = true;
                    }
                    else if (trackname.Contains("HARM3"))
                    {
                        harm3 = true;
                    }
                    if (!upgtracks.Contains(trackname) && !skip_tracks.Contains(trackname))
                    {
                        upgtracks.Add(trackname);
                    }
                }
                if (overwriteExistingTrack.Checked) //only remove if checked to overwrite
                {
                    var to_remove = new List <int>();
                    for (var i = 0; i < midi.Events.Tracks; i++)
                    {
                        var trackname = Tools.GetMidiTrackName(midi.Events[i][0].ToString());
                        if (upgtracks.Contains(trackname))
                        {
                            to_remove.Add(i); //remove only if found in the upgrade midi and overwrite is checked
                        }
                    }
                    to_remove.Sort();
                    for (var i = to_remove.Count - 1; i >= 0; i--)
                    {
                        var trackname = Tools.GetMidiTrackName(midi.Events[to_remove[i]][0].ToString());
                        try
                        {
                            midi.Events.RemoveTrack(to_remove[i]);
                        }
                        catch (Exception ex)
                        {
                            Log("There was an error deleting track " + trackname);
                            Log("Error: " + ex.Message);
                        }
                    }
                }
                var rbhp_xkeys = false;
                var rbhp_ekeys = false;
                //combine upgrade with original
                for (var i = 0; i < upgrade.Events.Tracks; i++)
                {
                    var trackname = Tools.GetMidiTrackName(upgrade.Events[i][0].ToString());
                    if (!upgtracks.Contains(trackname) || (origtracks.Contains(trackname) && onlyAddNewTracks.Checked))
                    {
                        continue;
                    }
                    try
                    {
                        if (trackname.Contains("KEYS_X"))
                        {
                            if (!rbhp_xkeys)
                            {
                                midi.Events.AddTrack(upgrade.Events[i]);
                            }
                            rbhp_xkeys = true; //sometimes rbhp uses two pro keys x tracks for whatever reason, only add one
                            continue;
                        }
                        if (trackname.Contains("KEYS_E"))
                        {
                            if (!rbhp_ekeys)
                            {
                                midi.Events.AddTrack(upgrade.Events[i]);
                            }
                            rbhp_ekeys = true; //sometimes rbhp uses two pro keys e tracks for whatever reason, only add one
                            continue;
                        }
                        midi.Events.AddTrack(upgrade.Events[i]);
                    }
                    catch (Exception ex)
                    {
                        Log("There was an error processing the upgrade MIDI file");
                        Log("Error: " + ex.Message);
                    }
                }
            }
            try
            {
                MidiFile.Export(newMIDI, midi.Events);
            }
            catch (Exception ex)
            {
                Log("There was an error exporting the combined MIDI file");
                Log("Error: " + ex.Message);
            }
            if (File.Exists(newMIDI))
            {
                Log("Combined MIDI files successfully");
            }
            else
            {
                Log("There was an error creating the combined MIDI file");
                return;
            }
            if (string.IsNullOrWhiteSpace(orig_con))
            {
                Log("Process completed successfully");
                Log("Bundled MIDI file can be found in:");
                Log(newMIDI);
                return;
            }
            if (!string.IsNullOrWhiteSpace(newsongdta) && File.Exists(newsongdta))
            {
                Log("Replacing original songs.dta with RBHP songs.dta file");
                orig_dta = newsongdta; //if we got RBHP dta, completely replace original one
            }
            if (!string.IsNullOrWhiteSpace(newupgdta) && File.Exists(newupgdta))
            {
                Log("Merging upgrades.dta information into songs.dta file");
                var sr         = new StreamReader(orig_dta, Encoding.Default);
                var sw         = new StreamWriter(newDTA, false, Encoding.Default);
                var doneTuning = false;
                //first pass, replace values if already present
                while (sr.Peek() > 0)
                {
                    var line = sr.ReadLine();
                    if (!string.IsNullOrWhiteSpace(line))
                    {
                        if (line.Contains("rank"))
                        {
                            sw.WriteLine(line);
                            while (line != null && !line.Contains("format"))
                            {
                                line = sr.ReadLine();
                                if (string.IsNullOrWhiteSpace(line))
                                {
                                    continue;
                                }
                                if (line.Contains("bass") && !line.Contains("real_bass"))
                                {
                                    sw.WriteLine(line);
                                    sw.WriteLine(probassdiff);
                                    line = "";
                                }
                                else if (line.Contains("guitar") && !line.Contains("real_guitar"))
                                {
                                    sw.WriteLine(line);
                                    sw.WriteLine(proguitardiff);
                                    line = "";
                                }
                                else if (line.Contains("real_guitar") || line.Contains("real_bass"))
                                {
                                    line = "";
                                }
                                if (!string.IsNullOrWhiteSpace(line))
                                {
                                    sw.WriteLine(line);
                                }
                            }
                        }
                        if (string.IsNullOrWhiteSpace(line))
                        {
                            continue;
                        }
                        if (line.Contains("real_guitar") || line.Contains("real_bass"))
                        {
                            line = "";
                        }
                        else if (line.Contains(";The following values"))
                        {
                            sw.WriteLine(proguitartuning);
                            sw.WriteLine(probasstuning);
                            doneTuning = true;
                        }
                        else if (line == ")" && !doneTuning)
                        {
                            if (sr.Peek() <= 0)
                            {
                                sw.WriteLine(proguitartuning);
                                sw.WriteLine(probasstuning);
                            }
                        }
                    }
                    if (!string.IsNullOrWhiteSpace(line))
                    {
                        sw.WriteLine(line);
                    }
                }
                sr.Dispose();
                sw.Dispose();
                if (File.Exists(newDTA))
                {
                    Log("Merged DTA information successfully");
                }
                else
                {
                    Log("There was an error merging DTA information");
                    return;
                }
            }
            else
            {
                Tools.DeleteFile(newDTA);
                File.Copy(orig_dta, newDTA);
            }
            var vocals = harm3 ? 3 : (harm2 ? 2 : (harm1) ? 1 : 0);

            if (showSongIDPrompt.Checked)
            {
                var popup = new PasswordUnlocker(songID == NA || useUpgradeID.Checked ? upgradeID : songID);
                popup.IDChanger();
                popup.ShowDialog();
                var newID = popup.EnteredText;
                popup.Dispose();
                if (!string.IsNullOrWhiteSpace(newID))
                {
                    songID = newID;
                }
            }
            else if (useUpgradeID.Checked)
            {
                songID = upgradeID;
            }
            Tools.ReplaceSongID(newDTA, songID, vocals.ToString(CultureInfo.InvariantCulture));
            Log("Creating the bundled file");
            EnableDisable(false);
            btnBundle.Visible = false;
            backgroundWorker1.RunWorkerAsync();
        }
Esempio n. 20
0
        private void replaceFileToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (fileList.SelectedIndices.Count == 0)
            {
                return;
            }
            var xent      = (FileEntry)fileList.SelectedItems[0].Tag;
            var extension = Path.GetExtension(fileList.SelectedItems[0].Text);

            if (extension != null)
            {
                var filterFiles = extension.Substring(1).ToUpper() + " File|*." +
                                  extension.Substring(1);
                var file = VariousFunctions.GetUserFileLocale("Open a File", filterFiles, true);
                if (file == null)
                {
                    return;
                }
                Log("Replacing file " + xent.Name);
                var obf_file = Path.GetTempPath() + "m";
                if (Path.GetExtension(file) == ".mogg")
                {
                    Tools.DeleteFile(obf_file);
                    File.Copy(file, obf_file);
                    Tools.WriteOutData(Tools.DeObfM(File.ReadAllBytes(obf_file)), obf_file);
                }
                else
                {
                    obf_file = file;
                }
                if (!xent.Replace(obf_file))
                {
                    Log("Error replacing file " + xent.Name);
                    return;
                }
                Tools.CurrentFolder = Path.GetDirectoryName(file);
            }
            Log("Replaced file " + xent.Name + " successfully");
            ShowChanges(true);
        }