Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="osc"></param>
        /// /// <param name="zone"></param>
        /// <param name="waveSequence"></param>
        public override void SetWaveSequence(int osc, int zone, IWaveSequence waveSequence)
        {
            IntParameter parameter = new IntParameter();

            // ReSharper disable once SwitchStatementMissingSomeCases
            switch (PcgRoot.Model.OsVersion)
            {
            case Models.EOsVersion.EOsVersionKronos10_11:     // FALL THROUGH
            case Models.EOsVersion.EOsVersionKronos15_16:
                var bankIndex = ((IBank)waveSequence.Parent).Index;
                if (bankIndex >= 0x40)
                {
                    bankIndex -= 0x40;     // 40..46.. U-A..U-G
                }

                parameter.Set(Root, Root.Content, GetZoneMsByteOffset(osc, zone) + 1, 7, 0, false, this);
                parameter.Value = bankIndex;

                parameter.Set(Root, Root.Content, GetZoneMsByteOffset(osc, zone) + 2, 7, 0, false, this);
                parameter.Value = waveSequence.Index;
                break;

            case Models.EOsVersion.EOsVersionKronos2x:     // FALL THROUGH
            case Models.EOsVersion.EOsVersionKronos3x:
                parameter.SetMultiBytes(Root, Root.Content, GetZoneMsByteOffset(osc, zone), 2, false, false, null);
                parameter.Value = GetWaveSequenceIndex(waveSequence);
                break;

            default:
                throw new ApplicationException("Illegal (non Kronos) model");
            }
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="osc"></param>
        /// /// <param name="zone"></param>
        /// <param name="waveSequence"></param>
        public override void SetWaveSequence(int osc, int zone, IWaveSequence waveSequence)
        {
            IntParameter parameter = new IntParameter();

            parameter.SetMultiBytes(Root, Root.Content, GetZoneMsByteOffset(osc, zone), 2, false, false, null);
            parameter.Value = GetWaveSequenceIndex(waveSequence);
        }
Пример #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="waveSequence"></param>
        /// <returns></returns>
        int GetWaveSequenceIndex(IWaveSequence waveSequence)
        {
            var bank = (IWaveSequenceBank)waveSequence.Parent;

            var index = PcgRoot.WaveSequenceBanks.BankCollection.TakeWhile(
                bankIterator => bank != bankIterator).Sum(bankIterator => bankIterator.Patches.Count);

            index += waveSequence.Index;

            return(index);
        }
Пример #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="waveSequence"></param>
        /// <param name="clearAfterCopy"></param>
        public void CopyWaveSequenceToClipBoard(IWaveSequence waveSequence, bool clearAfterCopy)
        {
            // Copy wave sequence.
            if (waveSequence.PcgRoot.Content != null)
            {
                var clipBoardWaveSequence = new ClipBoardWaveSequence(waveSequence);
                WaveSequences.CopiedPatches.Add(clipBoardWaveSequence);

                if (clearAfterCopy)
                {
                    waveSequence.Clear();
                }
            }
        }
Пример #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="waveSequence"></param>
        public ClipBoardWaveSequence(IWaveSequence waveSequence)
            : base(waveSequence.PcgRoot.Content, waveSequence.ByteOffset, waveSequence.ByteLength)
        {
            OriginalLocation = waveSequence;

            if ((waveSequence.Root is KronosPcgMemory memory) && (memory.PcgRoot.Model.OsVersion == Models.EOsVersion.Kronos15_16))
            {
                KronosOs1516Bank =
                    Util.GetInt(memory.Content, ((KronosWaveSequence)waveSequence).Wsq2BankOffset, 1);

                KronosOs1516Patch =
                    Util.GetInt(memory.Content, ((KronosWaveSequence)waveSequence).Wsq2PatchOffset, 1);
            }
        }
Пример #6
0
        /// <summary>
        ///
        /// </summary>
        /// /// <param name="osc"></param>
        /// <param name="zone"></param>
        /// <returns></returns>
        public override IWaveSequence GetUsedWaveSequence(int osc, int zone)
        {
            IWaveSequence waveSequence = null;

            if (GetZoneMsType(osc, zone) == EMode.WaveSequence)
            {
                var parameter = new IntParameter();
                var waveSequenceByteOffset = GetZoneMsByteOffset(osc, zone);
                int bankIndex;
                int patchIndex;

                // ReSharper disable once SwitchStatementMissingSomeCases
                switch (PcgRoot.Model.OsVersion)
                {
                case Models.EOsVersion.EOsVersionKronos10_11:     // FALL THROUGH
                case Models.EOsVersion.EOsVersionKronos15_16:
                    parameter.Set(Root, Root.Content, waveSequenceByteOffset + 16, 1, 0, false, this);
                    bankIndex = parameter.Value;
                    if (bankIndex >= 0x40)
                    {
                        bankIndex -= 0x40;     // 40..46.. U-A..U-G
                    }
                    parameter.Set(Root, Root.Content, waveSequenceByteOffset + 17, 1, 0, false, this);
                    patchIndex   = parameter.Value;
                    waveSequence = (IWaveSequence)PcgRoot.WaveSequenceBanks[bankIndex].Patches[patchIndex];
                    break;

                case Models.EOsVersion.EOsVersionKronos2x:     // FALL THROUGH
                case Models.EOsVersion.EOsVersionKronos3x:
                    parameter.Set(Root, Root.Content, waveSequenceByteOffset + 16, 2, 0, false, this);
                    int waveSequenceIndex = parameter.Value;

                    GetWaveSequenceIndices(waveSequenceIndex, out bankIndex, out patchIndex);
                    waveSequence = (IWaveSequence)PcgRoot.WaveSequenceBanks[bankIndex].Patches[patchIndex];
                    break;

                default:
                    throw new ApplicationException("Illegal (non Kronos) model");
                }
            }

            return(waveSequence);
        }
Пример #7
0
        /// <summary>
        ///
        /// </summary>
        /// /// <param name="osc"></param>
        /// <param name="zone"></param>
        /// <returns></returns>
        public override IWaveSequence GetUsedWaveSequence(int osc, int zone)
        {
            IWaveSequence waveSequence = null;

            if (GetZoneMsType(osc, zone) == EMode.WaveSequence)
            {
                IntParameter parameter = new IntParameter();
                int          waveSequenceByteOffset = GetZoneMsByteOffset(osc, zone);
                int          bankIndex;
                int          patchIndex;

                parameter.Set(Root, Root.Content, waveSequenceByteOffset + 16, 2, 0, false, this);
                int waveSequenceIndex = parameter.Value;

                GetWaveSequenceIndices(waveSequenceIndex, out bankIndex, out patchIndex);
                waveSequence = (IWaveSequence)PcgRoot.WaveSequenceBanks[bankIndex].Patches[patchIndex];
            }

            return(waveSequence);
        }
Пример #8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="osc"></param>
 /// /// <param name="zone"></param>
 /// <param name="waveSequence"></param>
 public virtual void SetWaveSequence(int osc, int zone, IWaveSequence waveSequence)
 {
     // Default without implementation
 }