private void FamiTone2MusicExport(string filename, bool famiStudio)
        {
            var kernel       = famiStudio ? FamiToneKernel.FamiStudio : FamiToneKernel.FamiTone2;
            var engineName   = famiStudio ? "famistudio" : "famitone2";
            var formatString = ParseOption($"{engineName}-asm-format", "nesasm");

            var format = AssemblyFormat.NESASM;

            switch (formatString)
            {
            case "ca65": format = AssemblyFormat.CA65; break;

            case "asm6": format = AssemblyFormat.ASM6; break;
            }

            var extension       = format == AssemblyFormat.CA65 ? ".s" : ".asm";
            var seperate        = HasOption($"{engineName}-asm-seperate-files");
            var generateInclude = HasOption($"{engineName}-generate-list");

            if (!seperate && !ValidateExtension(filename, extension))
            {
                return;
            }

            var exportSongIds = GetExportSongIds();

            if (exportSongIds != null)
            {
                if (seperate)
                {
                    var songNamePattern = ParseOption($"{engineName}-asm-seperate-song-pattern", "{project}_{song}");
                    var dpcmNamePattern = ParseOption($"{engineName}-asm-seperate-dmc-pattern", "{project}");

                    foreach (var songId in exportSongIds)
                    {
                        var song = project.GetSong(songId);
                        var formattedSongName = songNamePattern.Replace("{project}", project.Name).Replace("{song}", song.Name);
                        var formattedDpcmName = dpcmNamePattern.Replace("{project}", project.Name).Replace("{song}", song.Name);
                        var songFilename      = Path.Combine(filename, Utils.MakeNiceAsmName(formattedSongName) + extension);
                        var dpcmFilename      = Path.Combine(filename, Utils.MakeNiceAsmName(formattedDpcmName) + ".dmc");
                        var includeFilename   = generateInclude ? Path.ChangeExtension(songFilename, null) + "_songlist.inc" : null;

                        Log.LogMessage(LogSeverity.Info, $"Exporting song '{song.Name}' as separate assembly files.");

                        FamitoneMusicFile f = new FamitoneMusicFile(kernel, true);
                        f.Save(project, new int[] { songId }, format, true, songFilename, dpcmFilename, includeFilename, MachineType.Dual);
                    }
                }
                else
                {
                    var includeFilename = generateInclude ? Path.ChangeExtension(filename, null) + "_songlist.inc" : null;

                    Log.LogMessage(LogSeverity.Info, $"Exporting all songs to a single assembly file.");

                    FamitoneMusicFile f = new FamitoneMusicFile(kernel, true);
                    f.Save(project, exportSongIds, format, false, filename, Path.ChangeExtension(filename, ".dmc"), includeFilename, MachineType.Dual);
                }
            }
        }
        private void FamiTone2MusicExport(string filename)
        {
            var formatString = ParseOption("famitone2-format", "nesasm");

            var format = AssemblyFormat.NESASM;

            switch (formatString)
            {
            case "ca65": format = AssemblyFormat.CA65; break;

            case "asm6": format = AssemblyFormat.ASM6; break;
            }

            var extension = format == AssemblyFormat.CA65 ? ".s" : ".asm";
            var seperate  = HasOption("famitone2-seperate-files");

            if (!seperate && !ValidateExtension(filename, extension))
            {
                return;
            }

            var kernelString = ParseOption("famitone2-variant", "famitone2");
            var kernel       = FamitoneMusicFile.FamiToneKernel.FamiTone2;

            switch (formatString)
            {
            case "famitone2fs": kernel = FamitoneMusicFile.FamiToneKernel.FamiTone2FS; break;

            case "famistudio":  kernel = FamitoneMusicFile.FamiToneKernel.FamiStudio;  break;
            }

            var exportSongIds = GetExportSongIds();

            if (exportSongIds != null)
            {
                if (seperate)
                {
                    var songNamePattern = ParseOption("famitone2-seperate-song-pattern", "{project}_{song}");
                    var dpcmNamePattern = ParseOption("famitone2-seperate-dmc-pattern", "{project}");

                    foreach (var songId in exportSongIds)
                    {
                        var song = project.GetSong(songId);
                        var formattedSongName = songNamePattern.Replace("{project}", project.Name).Replace("{song}", song.Name);
                        var formattedDpcmName = dpcmNamePattern.Replace("{project}", project.Name).Replace("{song}", song.Name);
                        var songFilename      = Path.Combine(filename, Utils.MakeNiceAsmName(formattedSongName) + extension);
                        var dpcmFilename      = Path.Combine(filename, Utils.MakeNiceAsmName(formattedDpcmName) + ".dmc");

                        FamitoneMusicFile f = new FamitoneMusicFile(kernel);
                        f.Save(project, new int[] { songId }, format, true, songFilename, dpcmFilename, MachineType.Dual);
                    }
                }
                else
                {
                    FamitoneMusicFile f = new FamitoneMusicFile(kernel);
                    f.Save(project, exportSongIds, format, false, filename, Path.ChangeExtension(filename, ".dmc"), MachineType.Dual);
                }
            }
        }
示例#3
0
        private void ExportFamiTone2Music(bool famiStudio)
        {
            if (!canExportToSoundEngine)
            {
                return;
            }

            var props = dialog.GetPropertyPage(famiStudio ? (int)ExportFormat.FamiStudioMusic : (int)ExportFormat.FamiTone2Music);

            var separate        = props.GetPropertyValue <bool>(1);
            var songIds         = GetSongIds(props.GetPropertyValue <bool[]>(5));
            var kernel          = famiStudio ? FamiToneKernel.FamiStudio : FamiToneKernel.FamiTone2;
            var exportFormat    = AssemblyFormat.GetValueForName(props.GetPropertyValue <string>(0));
            var ext             = exportFormat == AssemblyFormat.CA65 ? "s" : "asm";
            var songNamePattern = props.GetPropertyValue <string>(2);
            var dpcmNamePattern = props.GetPropertyValue <string>(3);
            var generateInclude = props.GetPropertyValue <bool>(4);

            if (separate)
            {
                var folder = lastExportFilename != null ? lastExportFilename : PlatformUtils.ShowBrowseFolderDialog("Select the export folder", ref Settings.LastExportFolder);

                if (folder != null)
                {
                    foreach (var songId in songIds)
                    {
                        var song = project.GetSong(songId);
                        var formattedSongName = songNamePattern.Replace("{project}", project.Name).Replace("{song}", song.Name);
                        var formattedDpcmName = dpcmNamePattern.Replace("{project}", project.Name).Replace("{song}", song.Name);
                        var songFilename      = Path.Combine(folder, Utils.MakeNiceAsmName(formattedSongName) + "." + ext);
                        var dpcmFilename      = Path.Combine(folder, Utils.MakeNiceAsmName(formattedDpcmName) + ".dmc");
                        var includeFilename   = generateInclude ? Path.ChangeExtension(songFilename, null) + "_songlist.inc" : null;

                        Log.LogMessage(LogSeverity.Info, $"Exporting song '{song.Name}' as separate assembly files.");

                        FamitoneMusicFile f = new FamitoneMusicFile(kernel, true);
                        f.Save(project, new int[] { songId }, exportFormat, true, songFilename, dpcmFilename, includeFilename, MachineType.Dual);
                    }

                    lastExportFilename = folder;
                }
            }
            else
            {
                var engineName = famiStudio ? "FamiStudio" : "FamiTone2";
                var filename   = lastExportFilename != null ? lastExportFilename : PlatformUtils.ShowSaveFileDialog($"Export {engineName} Assembly Code", $"{engineName} Assembly File (*.{ext})|*.{ext}", ref Settings.LastExportFolder);
                if (filename != null)
                {
                    var includeFilename = generateInclude ? Path.ChangeExtension(filename, null) + "_songlist.inc" : null;

                    Log.LogMessage(LogSeverity.Info, $"Exporting all songs to a single assembly file.");

                    FamitoneMusicFile f = new FamitoneMusicFile(kernel, true);
                    f.Save(project, songIds, exportFormat, false, filename, Path.ChangeExtension(filename, ".dmc"), includeFilename, MachineType.Dual);

                    lastExportFilename = filename;
                }
            }
        }
示例#4
0
        private void ExportFamiTone2()
        {
            var props           = formatProps[(int)ExportFormat.FamiTone2];
            var formatString    = props.GetPropertyValue <string>(0);
            var ext             = formatString == "CA65" ? "s" : "asm";
            var separate        = props.GetPropertyValue <bool>(1);
            var songIds         = GetSongIds(props.GetPropertyValue <bool[]>(4));
            var exportFormat    = (FamitoneMusicFile.OutputFormat)Enum.Parse(typeof(FamitoneMusicFile.OutputFormat), formatString);
            var songNamePattern = props.GetPropertyValue <string>(2);
            var dpcmNamePattern = props.GetPropertyValue <string>(3);

            if (separate)
            {
                var folderBrowserDialog = new FolderBrowserDialog();
                folderBrowserDialog.Description = "Select the export folder";

                if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
                {
                    foreach (var songId in songIds)
                    {
                        var song = project.GetSong(songId);
                        var formattedSongName = songNamePattern.Replace("{project}", project.Name).Replace("{song}", song.Name);
                        var formattedDpcmName = dpcmNamePattern.Replace("{project}", project.Name).Replace("{song}", song.Name);
                        var songFilename      = Path.Combine(folderBrowserDialog.SelectedPath, Utils.MakeNiceAsmName(formattedSongName) + "." + ext);
                        var dpcmFilename      = Path.Combine(folderBrowserDialog.SelectedPath, Utils.MakeNiceAsmName(formattedDpcmName) + ".dmc");

                        FamitoneMusicFile f = new FamitoneMusicFile();
                        f.Save(project, new int[] { songId }, exportFormat, true, songFilename, dpcmFilename);
                    }
                }
            }
            else
            {
                var sfd = new SaveFileDialog()
                {
                    Filter = $"FamiTone2 Assembly File (*.{ext})|*.{ext}",
                    Title  = "Export FamiTone2 Code"
                };

                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    FamitoneMusicFile f = new FamitoneMusicFile();
                    f.Save(project, songIds, exportFormat, false, sfd.FileName, Path.ChangeExtension(sfd.FileName, ".dmc"));
                }
            }
        }
示例#5
0
        private void ExportFamiTone2Music()
        {
            var props           = dialog.GetPropertyPage((int)ExportFormat.FamiTone2Music);
            var kernelString    = props.GetPropertyValue <string>(0);
            var separate        = props.GetPropertyValue <bool>(2);
            var songIds         = GetSongIds(props.GetPropertyValue <bool[]>(5));
            var kernel          = (FamitoneMusicFile.FamiToneKernel)Enum.Parse(typeof(FamitoneMusicFile.FamiToneKernel), kernelString);
            var exportFormat    = (AssemblyFormat)Enum.Parse(typeof(AssemblyFormat), props.GetPropertyValue <string>(1));
            var ext             = exportFormat == AssemblyFormat.CA65 ? "s" : "asm";
            var songNamePattern = props.GetPropertyValue <string>(3);
            var dpcmNamePattern = props.GetPropertyValue <string>(4);

            if (separate)
            {
                var folderBrowserDialog = new FolderBrowserDialog();
                folderBrowserDialog.Description = "Select the export folder";

                if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
                {
                    foreach (var songId in songIds)
                    {
                        var song = project.GetSong(songId);
                        var formattedSongName = songNamePattern.Replace("{project}", project.Name).Replace("{song}", song.Name);
                        var formattedDpcmName = dpcmNamePattern.Replace("{project}", project.Name).Replace("{song}", song.Name);
                        var songFilename      = Path.Combine(folderBrowserDialog.SelectedPath, Utils.MakeNiceAsmName(formattedSongName) + "." + ext);
                        var dpcmFilename      = Path.Combine(folderBrowserDialog.SelectedPath, Utils.MakeNiceAsmName(formattedDpcmName) + ".dmc");

                        FamitoneMusicFile f = new FamitoneMusicFile(kernel);
                        f.Save(project, new int[] { songId }, exportFormat, true, songFilename, dpcmFilename, MachineType.Dual);
                    }
                }
            }
            else
            {
                var filename = PlatformUtils.ShowSaveFileDialog("Export FamiTone2 Code", $"FamiTone2 Assembly File (*.{ext})|*.{ext}");
                if (filename != null)
                {
                    FamitoneMusicFile f = new FamitoneMusicFile(kernel);
                    f.Save(project, songIds, exportFormat, false, filename, Path.ChangeExtension(filename, ".dmc"), MachineType.Dual);
                }
            }
        }