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;
}