/// <summary> /// /// </summary> /// <param name="memory"></param> private void ReadSyxMidContent(ISysExMemory memory) { memory.Convert7To8Bits(); switch (ContentType) { case PcgMemory.ContentType.CurrentProgram: ReadSingleProgram(SysExStartOffset); memory.SynchronizeProgramName(); break; case PcgMemory.ContentType.CurrentCombi: ReadSingleCombi(SysExStartOffset); memory.SynchronizeCombiName(); break; case PcgMemory.ContentType.All: // Fall through case PcgMemory.ContentType.AllCombis: // Fall through case PcgMemory.ContentType.AllPrograms: ReadAllData(); break; case PcgMemory.ContentType.Global: // Fall through case PcgMemory.ContentType.AllSequence: // Fall through case PcgMemory.ContentType.Drums: // Do not read anything. break; default: throw new NotSupportedException("Unsupported SysEx function"); } }
/// <summary> /// /// </summary> /// <param name="filetype"></param> /// <param name="modelType"></param> public override void ReadContent(Memory.FileType filetype, Models.EModelType modelType) { ISysExMemory memory = SkipModeChange(filetype); Index = SysExStartOffset; // Continue parsing. switch (filetype) { case Memory.FileType.Syx: // Fall through case Memory.FileType.Mid: memory.Convert7To8Bits(); switch (ContentType) { case PcgMemory.ContentType.CurrentProgram: ReadSingleProgram(SysExStartOffset); memory.SynchronizeProgramName(); break; case PcgMemory.ContentType.CurrentCombi: ReadSingleCombi(SysExStartOffset); memory.SynchronizeCombiName(); break; case PcgMemory.ContentType.All: ReadAllData(); break; case PcgMemory.ContentType.AllCombis: // Not used. break; case PcgMemory.ContentType.AllPrograms: ReadPrograms(memory); break; case PcgMemory.ContentType.Global: case PcgMemory.ContentType.AllSequence: // Do not read anything. break; // default: Do nothing, should result in: No Patch data in file } break; default: throw new NotSupportedException("Unsupported file type"); } }
/// <summary> /// Skip mode changes. /// Also adapts the contentType. /// </summary> private int SkipModeChanges() { int offset = 0; ISysExMemory memory = (ISysExMemory)CurrentPcgMemory; while ((memory.Content[offset] == 0xF0) && // MIDI SysEx (memory.Content[offset + 1] == 0x42) && // Korg (memory.Content[offset + 4] == (int)PcgMemory.ContentType.ModeChange)) { offset += 8; } memory.SysExStartOffset += offset; return(offset); }
/// <summary> /// /// </summary> /// <param name="filetype"></param> /// <param name="modelType"></param> public override void ReadContent(Memory.FileType filetype, Models.EModelType modelType) { ISysExMemory memory = SkipModeChange(filetype); // Continue parsing. switch (filetype) { case Memory.FileType.Syx: // Fall through case Memory.FileType.Mid: ReadSyxMidContent(memory); break; case Memory.FileType.Raw: ReadRawDiskImage(); break; default: throw new NotSupportedException("Unsupported file type"); } }
/// <summary> /// Skip Mode Change (not for Sysex Manager file and OrigKorg file). /// </summary> /// <param name="filetype"></param> /// <returns></returns> private ISysExMemory SkipModeChange(Memory.FileType filetype) { ISysExMemory memory = (ISysExMemory)CurrentPcgMemory; switch (filetype) { case Memory.FileType.Syx: if ((Util.GetChars(memory.Content, 0, 14) != "Sysex Manager-") && (Util.GetChars(memory.Content, 2, 8) != "OrigKorg")) { int offset = SkipModeChanges(); SysExStartOffset += offset; ContentType = (PcgMemory.ContentType)memory.Content[offset + 4]; memory.ContentTypeType = ContentType; } break; // case Memory.FileType.Mid: Do nothing //default: Do nothing } return(memory); }