/// <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"); } }
/// <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); }
/// <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); }
/// <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(); } } }
/// <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); } }
/// <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); }
/// <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); }
/// <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 }