public bool Read(string filePath) { // store filepath FilePath = filePath; FXP fxp = new FXP(); fxp.ReadFile(filePath); if (!ReadFXP(fxp, filePath)) { return false; } return true; }
public void LoadFXP(string filePath) { if (filePath == null || filePath == "") { return; } // How does the GetChunk/SetChunk interface work? What information should be in those chunks? // How does the BeginLoadProgram and BeginLoadBank work? // There doesn't seem to be any restriction on what data is put in the chunks. // The beginLoadBank/Program methods are also part of the persistence call sequence. // GetChunk returns a buffer with program information of either the current/active program // or all programs. // SetChunk should read this information back in and initialize either the current/active program // or all programs. // Before SetChunk is called, the beginLoadBank/Program method is called // passing information on the version of the plugin that wrote the data. // This will allow you to support older data versions of your plugin's data or // even support reading other plugin's data. // Some hosts will call GetChunk before calling beginLoadBakn/Program and SetChunk. // This is an optimazation of the host to determine if the information to load is // actually different than the state your plugin program(s) (are) in. bool UseChunk = false; if ((PluginContext.PluginInfo.Flags & VstPluginFlags.ProgramChunks) == 0) { // Chunks not supported. UseChunk = false; } else { // Chunks supported. UseChunk = true; } FXP fxp = new FXP(); fxp.ReadFile(filePath); if (fxp.ChunkMagic != "CcnK") { // not a fxp or fxb file Console.Out.WriteLine("Error - Cannot Load. Loaded preset is not a fxp or fxb file"); return; } int pluginUniqueID = PluginIDStringToIDNumber(fxp.FxID); int currentPluginID = PluginContext.PluginInfo.PluginID; if (pluginUniqueID != currentPluginID) { Console.Out.WriteLine("Error - Cannot Load. Loaded preset has another ID!"); } else { // Preset (Program) (.fxp) with chunk (magic = 'FPCh') // Bank (.fxb) with chunk (magic = 'FBCh') if (fxp.FxMagic == "FPCh" || fxp.FxMagic == "FBCh") { UseChunk = true; } else { UseChunk = false; } if (UseChunk) { // If your plug-in is configured to use chunks // the Host will ask for a block of memory describing the current // plug-in state for saving. // To restore the state at a later stage, the same data is passed // back to setChunk. byte[] chunkData = fxp.ChunkDataByteArray; bool beginSetProgramResult = PluginContext.PluginCommandStub.BeginSetProgram(); int iResult = PluginContext.PluginCommandStub.SetChunk(chunkData, true); bool endSetProgramResult = PluginContext.PluginCommandStub.EndSetProgram(); } else { // Alternatively, when not using chunk, the Host will simply // save all parameter values. float[] parameters = fxp.Parameters; bool beginSetProgramResult = PluginContext.PluginCommandStub.BeginSetProgram(); for (int i = 0; i < parameters.Length; i++) { PluginContext.PluginCommandStub.SetParameter(i, parameters[i]); } bool endSetProgramResult = PluginContext.PluginCommandStub.EndSetProgram(); } } }