/// <summary> /// Tries to apply a beat effect to the given beat. /// </summary> /// <returns>true if a effect could be applied, otherwise false</returns> private bool ApplyBeatEffect(Beat beat) { var syData = _syData.ToString().ToLower(); if (syData == "f") { beat.FadeIn = true; NewSy(); return(true); } if (syData == "v") { beat.Vibrato = VibratoType.Slight; NewSy(); return(true); } if (syData == "s") { beat.Slap = true; NewSy(); return(true); } if (syData == "p") { beat.Pop = true; NewSy(); return(true); } if (syData == "dd") { beat.Dots = 2; NewSy(); return(true); } if (syData == "d") { beat.Dots = 1; NewSy(); return(true); } if (syData == "su") { beat.PickStroke = PickStrokeType.Up; NewSy(); return(true); } if (syData == "sd") { beat.PickStroke = PickStrokeType.Down; NewSy(); return(true); } if (syData == "tu") { NewSy(); if (_sy != AlphaTexSymbols.Number) { Error("tuplet", AlphaTexSymbols.Number); return(false); } var tuplet = (int)_syData; switch (tuplet) { case 3: beat.TupletNumerator = 3; beat.TupletDenominator = 2; break; case 5: beat.TupletNumerator = 5; beat.TupletDenominator = 4; break; case 6: beat.TupletNumerator = 6; beat.TupletDenominator = 4; break; case 7: beat.TupletNumerator = 7; beat.TupletDenominator = 4; break; case 9: beat.TupletNumerator = 9; beat.TupletDenominator = 8; break; case 10: beat.TupletNumerator = 10; beat.TupletDenominator = 8; break; case 11: beat.TupletNumerator = 11; beat.TupletDenominator = 8; break; case 12: beat.TupletNumerator = 12; beat.TupletNumerator = 8; beat.TupletDenominator = 8; break; } NewSy(); return(true); } if (syData == "tb" || syData == "tbe") { var exact = syData == "tbe"; // read points NewSy(); if (_sy != AlphaTexSymbols.LParensis) { Error("tremolobar-effect", AlphaTexSymbols.LParensis); return(false); } _allowNegatives = true; NewSy(); while (_sy != AlphaTexSymbols.RParensis && _sy != AlphaTexSymbols.Eof) { int offset; int value; if (exact) { if (_sy != AlphaTexSymbols.Number) { Error("tremolobar-effect", AlphaTexSymbols.Number); return(false); } offset = (int)_syData; NewSy(); if (_sy != AlphaTexSymbols.Number) { Error("tremolobar-effect", AlphaTexSymbols.Number); return(false); } value = (int)_syData; } else { if (_sy != AlphaTexSymbols.Number) { Error("tremolobar-effect", AlphaTexSymbols.Number); return(false); } offset = 0; value = (int)_syData; } beat.AddWhammyBarPoint(new BendPoint(offset, value)); NewSy(); } while (beat.WhammyBarPoints.Count > 60) { beat.RemoveWhammyBarPoint(beat.WhammyBarPoints.Count - 1); } // set positions if (!exact) { var count = beat.WhammyBarPoints.Count; var step = (60 / count); var i = 0; while (i < count) { beat.WhammyBarPoints[i].Offset = Math.Min(60, (i * step)); i++; } } else { beat.WhammyBarPoints.Sort((a, b) => a.Offset - b.Offset); } _allowNegatives = false; if (_sy != AlphaTexSymbols.RParensis) { Error("tremolobar-effect", AlphaTexSymbols.RParensis); return(false); } NewSy(); return(true); } if (syData == "gr") { NewSy(); if (_syData.ToString().ToLower() == "ob") { beat.GraceType = GraceType.OnBeat; NewSy(); } else { beat.GraceType = GraceType.BeforeBeat; } return(true); } if (syData == "tp") { NewSy(); var duration = Duration.Eighth; if (_sy == AlphaTexSymbols.Number) { switch ((int)_syData) { case 8: duration = Duration.Eighth; break; case 16: duration = Duration.Sixteenth; break; case 32: duration = Duration.ThirtySecond; break; default: duration = Duration.Eighth; break; } NewSy(); } beat.TremoloSpeed = duration; return(true); } return(false); }