Esempio n. 1
0
        /// <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);
        }
Esempio n. 4
0
        /// <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");
            }
        }
Esempio n. 5
0
        /// <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);
        }