Пример #1
0
        /// <summary>
        /// Skip mode changes.
        /// Also adapts the SysExFunction.
        /// </summary>
        private int SkipModeChanges()
        {
            int         offset = 0;
            SysExMemory memory = (SysExMemory)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);
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="filetype"></param>
        /// <param name="modelType"></param>
        public override void ReadContent(Memory.FileType filetype, Models.EModelType modelType)
        {
            switch (filetype)
            {
            case Memory.FileType.Lib:
                ReadLibData();
                break;

            case Memory.FileType.MkP0:
                ReadMkP0Data();
                break;

            case Memory.FileType.Bnk:     // Fall through
            case Memory.FileType.Exl:     // Fall through
            case Memory.FileType.Syx:     // Fall through
            case Memory.FileType.Mid:
                SysExMemory memory = (SysExMemory)CurrentPcgMemory;

                memory.Convert7To8Bits();

                switch (ContentType)
                {
                case PcgMemory.ContentType.CurrentProgram:
                    ReadSingleProgram(SysExStartOffset);
                    memory.SynchronizeProgramName();
                    break;

                case PcgMemory.ContentType.All:
                    ReadAllData();
                    break;

                case PcgMemory.ContentType.AllPrograms:
                    ReadAllData();
                    break;

                default:
                    throw new NotSupportedException("Unsupported SysEx function");
                }
                break;

            default:
                throw new NotSupportedException("Unsupported file type");
            }
        }
Пример #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="filetype"></param>
        /// <param name="modelType"></param>
        public override void ReadContent(Memory.FileType filetype, Models.EModelType modelType)
        {
            SysExMemory memory = SkipSysexModeChange(filetype);

            // 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:
                case PcgMemory.ContentType.AllCombis:
                case PcgMemory.ContentType.AllPrograms:
                    ReadAllData();
                    break;

                case PcgMemory.ContentType.Global:
                case PcgMemory.ContentType.AllSequence:
                    // Do not read anything.
                    break;

                default:
                    throw new NotSupportedException("Unsupported SysEx function");
                }
                break;

            default:
                throw new NotSupportedException("Unsupported file type");
            }
        }
Пример #4
0
        /// <summary>
        /// Skip Mode Change (not for Sysex Manager file and OrigKorg file).
        /// </summary>
        /// <param name="filetype"></param>
        /// <returns></returns>
        private SysExMemory SkipSysexModeChange(Memory.FileType filetype)
        {
            SysExMemory memory = (SysExMemory)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];
                }
                break;

            case Memory.FileType.Mid:
                break;

                // default: // Do nothing.
            }
            return(memory);
        }