/// <summary> /// /// </summary> /// <param name="song"></param> /// <param name="chunkSize"></param> private void ReadBmt1Chunk(ISong song, int chunkSize) { song.ByteOffset = _index + 0x12C2 + 12; for (int timbre = 0; timbre < NumberOfSongTracks; timbre++) { ITimbre track = song.Timbres.TimbresCollection[timbre]; track.ByteOffset = song.ByteOffset + timbre * SongTrackByteLength; } _index += chunkSize; // Skip chunk }
/// <summary> /// /// </summary> /// <param name="timbre"></param> /// <returns></returns> bool ShowTimbre(ITimbre timbre) { return((!IgnoreMutedOffTimbres || ((timbre.GetParam(ParameterNames.TimbreParameterName.Mute) == null) || (!timbre.GetParam(ParameterNames.TimbreParameterName.Mute).Value) && new List <string> { "Int", "On", "Both" }.Contains(timbre.GetParam(ParameterNames.TimbreParameterName.Status).Value))) && (!IgnoreFirstProgram || ((PcgMemory.ProgramBanks.BankCollection.IndexOf(timbre.UsedProgramBank) != 0) && (timbre.UsedProgramBank.Patches.IndexOf(timbre.UsedProgram) != 0))) && (SelectedProgramBanks.Contains(timbre.UsedProgramBank))); }
/// <summary> /// /// </summary> /// <param name="timbre"></param> /// <param name="clipBoardCombi"></param> private void CopyTimbreOfCombiToClipboard(ITimbre timbre, IClipBoardCombi clipBoardCombi) { IClipBoardProgram clipBoardProgramToAdd = null; var usedProgramBank = timbre.UsedProgramBank; var usedProgram = (usedProgramBank == null) ? null : timbre.UsedProgram; if (ShouldTimbreBeCopied(timbre, usedProgramBank, usedProgram)) { clipBoardProgramToAdd = FindProgram(usedProgram) as IClipBoardProgram ?? CopyProgramToClipBoard(usedProgram, false); } clipBoardCombi.References.CopiedPatches.Add(clipBoardProgramToAdd); }
/// <summary> /// /// </summary> /// <param name="otherTimbre"></param> public virtual void Swap(ITimbre otherTimbre) { if (otherTimbre.TimbresOffset != TimbresOffset) { Util.SwapBytes(PcgRoot, Root.Content, TimbresOffset, Root.Content, otherTimbre.TimbresOffset, TimbresSize); RaisePropertyChanged(string.Empty, false); otherTimbre.RaisePropertyChanged(string.Empty, false); UsedProgram.RaisePropertyChanged(string.Empty, false); otherTimbre.UsedProgram.RaisePropertyChanged(string.Empty, false); RefillColumns(); } }
/// <summary> /// /// </summary> private void MoveDown() { for (int timbreIndex = Combi.Timbres.TimbresCollection.Count - 1; timbreIndex >= 0; timbreIndex--) { ITimbre timbre = Combi.Timbres.TimbresCollection[timbreIndex]; if (Combi.Timbres.TimbresCollection.Where(item => item.IsSelected).Contains(timbre)) { ITimbre otherTimbre = ((ICombi)(timbre.Parent.Parent)).Timbres.TimbresCollection[timbre.Index + 1]; otherTimbre.IsSelected = true; timbre.IsSelected = false; timbre.Swap(otherTimbre); } } UpdateUiContent(); }
/// <summary> /// Initialize as MIDI MPE: /// MIDI Channel equal to timbre nummer. /// Copy all parameters including used program from Timbre 0. /// </summary> public void InitAsMpe() { ITimbre timbre0 = Timbres.TimbresCollection[0]; int midiChannel = 0; timbre0.GetParam(ParameterNames.TimbreParameterName.MidiChannel).Value = midiChannel++; // MIDI channel 1 (value 0) foreach (ITimbre timbre in Timbres.TimbresCollection.Where(timbre => timbre != timbre0)) { timbre.GetParam(ParameterNames.TimbreParameterName.MidiChannel).Value = midiChannel++; // MIDI channel same as timbre number timbre.UsedProgram = timbre0.UsedProgram; ParameterNames.TimbreParameterName[] parameterNames = new ParameterNames.TimbreParameterName[] { ParameterNames.TimbreParameterName.Status, ParameterNames.TimbreParameterName.Mute, ParameterNames.TimbreParameterName.Volume, ParameterNames.TimbreParameterName.BottomKey, ParameterNames.TimbreParameterName.TopKey, ParameterNames.TimbreParameterName.BottomVelocity, ParameterNames.TimbreParameterName.TopVelocity, ParameterNames.TimbreParameterName.OscMode, ParameterNames.TimbreParameterName.OscSelect // "Transpose", "Detune", "Portamento", "Bend Range" are not set since parameters with negative values cannot be set. }; ITimbre timbreToChange = timbre; foreach ( ParameterNames.TimbreParameterName parameterName in parameterNames.Where(parameterName => timbreToChange.GetParam(parameterName) != null)) { try { dynamic parameterValue = timbre0.GetParam(parameterName).Value; timbre.GetParam(parameterName).Value = parameterValue; } catch (Exception) { Console.WriteLine(); } } } }
/// <summary> /// IMPR: Reduce complexity by creating a 'result' structure and split method in several parts. /// </summary> /// <param name="writer"></param> /// <param name="combi"></param> /// <param name="index"></param> private void PrintTimbre(TextWriter writer, ICombi combi, int index) { ITimbre timbre = combi.Timbres.TimbresCollection[index]; dynamic status = timbre.GetParam(ParameterNames.TimbreParameterName.Status).Value; IParameter muteParam = timbre.GetParam(ParameterNames.TimbreParameterName.Mute); bool mute = muteParam != null && (bool)muteParam.Value; string muteString = mute.ToYesNo(); if (!ShowTimbre(timbre)) { return; } IProgram usedProgram = timbre.UsedProgram; string timbreId = (usedProgram == null) ? "???" : timbre.ColumnProgramId; bool isGmProgram = (usedProgram != null) && ((ProgramBank)(timbre.UsedProgram.Parent)).Type == BankType.EType.Gm; int byteOffset = (usedProgram == null) ? 0 : timbre.UsedProgram.ByteOffset; string name = isGmProgram ? "-" : (byteOffset == 0) ? "???" : timbre.ColumnProgramName; string category = isGmProgram ? "-" : (byteOffset == 0) ? "???" : timbre.UsedProgram.CategoryAsName; string subCategory = isGmProgram ? "-" : ((byteOffset == 0) ? "???" : timbre.UsedProgram.SubCategoryAsName); string volume = (string)(timbre.GetParam(ParameterNames.TimbreParameterName.Volume).Value.ToString()); IParameter priority = timbre.GetParam(ParameterNames.TimbreParameterName.Priority); string priorityString = (isGmProgram || (priority == null)) ? "No" : ((byteOffset == 0) ? "???" : ((bool)priority.Value).ToYesNo()); string midiChannelString = ParameterValues.GetStringValue(ParameterNames.TimbreParameterName.MidiChannel, (int)timbre.GetParam(ParameterNames.TimbreParameterName.MidiChannel).Value); string bottomKey = (string)ParameterValues.GetStringValue(ParameterNames.TimbreParameterName.BottomKey, timbre.GetParam(ParameterNames.TimbreParameterName.BottomKey).Value); string topKey = (string)ParameterValues.GetStringValue(ParameterNames.TimbreParameterName.TopKey, timbre.GetParam(ParameterNames.TimbreParameterName.TopKey).Value); string bottomVelocity = (string)timbre.GetParam(ParameterNames.TimbreParameterName.BottomVelocity).Value.ToString(); string topVelocity = (string)timbre.GetParam(ParameterNames.TimbreParameterName.TopVelocity).Value.ToString(); IParameter paramOscMode = timbre.GetParam(ParameterNames.TimbreParameterName.OscMode); string oscMode = (paramOscMode == null) ? "-" : (string)paramOscMode.Value; IParameter paramOscSelect = timbre.GetParam(ParameterNames.TimbreParameterName.OscSelect); string oscSelect = (paramOscSelect == null) ? "-" : (string)paramOscSelect.Value; string transpose = (string)ParameterValues.GetStringValue(ParameterNames.TimbreParameterName.Transpose, timbre.GetParam(ParameterNames.TimbreParameterName.Transpose).Value); IParameter paramDetune = timbre.GetParam(ParameterNames.TimbreParameterName.Detune); string detune = (paramDetune == null) ? "-" : (string)ParameterValues.GetStringValue(ParameterNames.TimbreParameterName.Detune, paramDetune.Value); IParameter paramPortamento = timbre.GetParam(ParameterNames.TimbreParameterName.Portamento); string portamento = (paramPortamento == null) ? "-" : (string)ParameterValues.GetStringValue(ParameterNames.TimbreParameterName.Portamento, paramPortamento.Value); string bendRange = (string)ParameterValues.GetStringValue(ParameterNames.TimbreParameterName.BendRange, timbre.GetParam(ParameterNames.TimbreParameterName.BendRange).Value); writer.Write( $"|{index + 1,2} |{timbreId,-10}|{name,-24}|{category,-24}|{subCategory,-24}|{volume,3}|{status,-3}|{muteString,-4}|{priorityString,-4}|{midiChannelString,-4}|"); // ReSharper disable RedundantStringFormatCall writer.WriteLine( $"{bottomKey,-4}~{topKey,-4}|{bottomVelocity,3}~{topVelocity,3}|{oscMode,-4}|{oscSelect,-4}|{transpose,3}|{detune,5}|{portamento,3}|{bendRange,-3} |"); }