private static void AddBeatAndSilenceToVoice(Voice voice, Duration duration) { var beat = new Beat(); beat.Duration = duration; voice.AddBeat(beat); }
private void Bar() { var master = new MasterBar(); _score.AddMasterBar(master); var bar = new Bar(); _track.AddBarToStaff(0, bar); if (master.Index > 0) { master.KeySignature = master.PreviousMasterBar.KeySignature; master.TimeSignatureDenominator = master.PreviousMasterBar.TimeSignatureDenominator; master.TimeSignatureNumerator = master.PreviousMasterBar.TimeSignatureNumerator; bar.Clef = bar.PreviousBar.Clef; } BarMeta(bar); var voice = new Voice(); bar.AddVoice(voice); while (_sy != AlphaTexSymbols.Pipe && _sy != AlphaTexSymbols.Eof) { Beat(voice); } if (voice.Beats.Count == 0) { var emptyBeat = new Beat(); emptyBeat.IsEmpty = true; voice.AddBeat(emptyBeat); } }
private static void AddBeatWithChordToVoice(Voice voice, SongChord2014 sourceChord, Duration duration, Single durationTime) { var beat = new Beat(); beat.Duration = duration; voice.AddBeat(beat); beat.ChordId = sourceChord.ChordId.ToString(); AlphaTab.Model.Chord chord = null; try { chord = beat.Chord; } catch (KeyNotFoundException) { } //Will be non-null if predefined chord exist (and predefined chord should exist if ChordId is present in ChordTemplates) if (chord == null) { beat.ChordId = null; //chord = new global::alphatab.model.Chord(); //voice.bar.track.chords.set(beat.chordId, chord); //Set notes in beat from this chord if (sourceChord.ChordNotes != null) { foreach (var sourceNote in sourceChord.ChordNotes) { var note1 = NoteFromNote(sourceNote, durationTime); beat.AddNote(note1); } } } else { //Set notes in beat from predefined chord for (int i = 0; i < chord.Strings.Count; i++) { var tmpstrFret = chord.Strings[i]; if (tmpstrFret > -1) { var note1 = new Note(); note1.Fret = tmpstrFret; note1.String = i + 1; beat.AddNote(note1); } } } }
private static void AddBeatAndNoteToVoice(Voice voice, SongNote2014 note, Duration duration, Single durationTime) { var beat = new Beat(); beat.Duration = duration; voice.AddBeat(beat); if (note != null) { var destNote = NoteFromNote(note, durationTime); beat.AddNote(destNote); if (note.HammerOn == 1 && _prevConvertedNote != null) { _prevConvertedNote.IsHammerPullOrigin = true; //_prevConvertedNote.slideTarget = destNote; //_prevConvertedNote.slideType = SlideType.Shift; destNote.IsHammerPullOrigin = false; destNote.IsGhost = true; //_prevConvertedNote.hammerPullOrigin = destNote;// _prevConvertedNote; destNote.HammerPullOrigin = _prevConvertedNote; } _prevConvertedNote = destNote; } }
public void ReadBeat(Track track, Bar bar, Voice voice) { var newBeat = new Beat(); var flags = _data.ReadByte(); if ((flags & 0x01) != 0) { newBeat.Dots = 1; } if ((flags & 0x40) != 0) { var type = _data.ReadByte(); newBeat.IsEmpty = (type & 0x02) == 0; } voice.AddBeat(newBeat); var duration = _data.ReadSignedByte(); switch (duration) { case -2: newBeat.Duration = Duration.Whole; break; case -1: newBeat.Duration = Duration.Half; break; case 0: newBeat.Duration = Duration.Quarter; break; case 1: newBeat.Duration = Duration.Eighth; break; case 2: newBeat.Duration = Duration.Sixteenth; break; case 3: newBeat.Duration = Duration.ThirtySecond; break; case 4: newBeat.Duration = Duration.SixtyFourth; break; default: newBeat.Duration = Duration.Quarter; break; } if ((flags & 0x20) != 0) { newBeat.TupletNumerator = ReadInt32(); switch (newBeat.TupletNumerator) { case 1: newBeat.TupletDenominator = 1; break; case 3: newBeat.TupletDenominator = 2; break; case 5: case 6: case 7: newBeat.TupletDenominator = 4; break; case 9: case 10: case 11: case 12: case 13: newBeat.TupletDenominator = 8; break; case 2: case 4: case 8: break; default: newBeat.TupletNumerator = 1; newBeat.TupletDenominator = 1; break; } } if ((flags & 0x02) != 0) { ReadChord(newBeat); } if ((flags & 0x04) != 0) { newBeat.Text = ReadStringIntUnused(); } if ((flags & 0x08) != 0) { ReadBeatEffects(newBeat); } if ((flags & 0x10) != 0) { ReadMixTableChange(newBeat); } var stringFlags = _data.ReadByte(); for (int i = 6; i >= 0; i--) { if ((stringFlags & (1 << i)) != 0 && (6 - i) < track.Tuning.Length) { ReadNote(track, bar, voice, newBeat, (6 - i)); } } if (_versionNumber >= 500) { _data.ReadByte(); var flag = _data.ReadByte(); if ((flag & 0x08) != 0) { _data.ReadByte(); } } }
private void Beat(Voice voice) { // duration specifier? if (_sy == AlphaTexSymbols.DoubleDot) { _allowNegatives = true; NewSy(); _allowNegatives = false; if (_sy != AlphaTexSymbols.Number) { Error("duration", AlphaTexSymbols.Number); } _currentDuration = ParseDuration((int)_syData); NewSy(); return; } var beat = new Beat(); voice.AddBeat(beat); if (voice.Bar.MasterBar.TempoAutomation != null && voice.Beats.Count == 1) { beat.Automations.Add(voice.Bar.MasterBar.TempoAutomation); } // notes if (_sy == AlphaTexSymbols.LParensis) { NewSy(); Note(beat); while (_sy != AlphaTexSymbols.RParensis && _sy != AlphaTexSymbols.Eof) { Note(beat); } if (_sy != AlphaTexSymbols.RParensis) { Error("note-list", AlphaTexSymbols.RParensis); } NewSy(); } // rest else if (_sy == AlphaTexSymbols.String && _syData.ToString().ToLower() == "r") { // rest voice -> no notes NewSy(); } else { Note(beat); } // new duration if (_sy == AlphaTexSymbols.Dot) { _allowNegatives = true; NewSy(); _allowNegatives = false; if (_sy != AlphaTexSymbols.Number) { Error("duration", AlphaTexSymbols.Number); } _currentDuration = ParseDuration((int)_syData); NewSy(); } beat.Duration = _currentDuration; // beat multiplier (repeat beat n times) var beatRepeat = 1; if (_sy == AlphaTexSymbols.Multiply) { NewSy(); // multiplier count if (_sy != AlphaTexSymbols.Number) { Error("multiplier", AlphaTexSymbols.Number); } else { beatRepeat = (int)_syData; } NewSy(); } BeatEffects(beat); for (var i = 0; i < beatRepeat - 1; i++) { voice.AddBeat(beat.Clone()); } }
private void Beat(Voice voice) { // duration specifier? if (_sy == AlphaTexSymbols.DoubleDot) { NewSy(); if (_sy != AlphaTexSymbols.Number) { Error("duration", AlphaTexSymbols.Number); } var duration = (int)_syData; switch (duration) { case 1: case 2: case 4: case 8: case 16: case 32: case 64: _currentDuration = ParseDuration((int)_syData); break; default: Error("duration", AlphaTexSymbols.Number, false); break; } NewSy(); return; } var beat = new Beat(); voice.AddBeat(beat); // notes if (_sy == AlphaTexSymbols.LParensis) { NewSy(); Note(beat); while (_sy != AlphaTexSymbols.RParensis && _sy != AlphaTexSymbols.Eof) { Note(beat); } if (_sy != AlphaTexSymbols.RParensis) { Error("note-list", AlphaTexSymbols.RParensis); } NewSy(); } // rest else if (_sy == AlphaTexSymbols.String && _syData.ToString().ToLower() == "r") { // rest voice -> no notes NewSy(); } else { Note(beat); } // new duration if (_sy == AlphaTexSymbols.Dot) { NewSy(); if (_sy != AlphaTexSymbols.Number) { Error("duration", AlphaTexSymbols.Number); } var duration = (int)_syData; switch (duration) { case 1: case 2: case 4: case 8: case 16: case 32: case 64: _currentDuration = ParseDuration((int)_syData); break; default: Error("duration", AlphaTexSymbols.Number, false); break; } NewSy(); } else { beat.Duration = _currentDuration; } // beat multiplier (repeat beat n times) var beatRepeat = 1; if (_sy == AlphaTexSymbols.Multiply) { NewSy(); // multiplier count if (_sy != AlphaTexSymbols.Number) { Error("multiplier", AlphaTexSymbols.Number); } else { beatRepeat = (int)_syData; } NewSy(); } BeatEffects(beat); for (var i = 0; i < beatRepeat - 1; i++) { voice.AddBeat(beat.Clone()); } }
private void ParseMeasure(IXmlNode element, Track track, bool isFirstMeasure) { var barIndex = 0; if (isFirstMeasure) { _trackFirstMeasureNumber = Std.ParseInt(element.GetAttribute("number")); barIndex = 0; } else { barIndex = Std.ParseInt(element.GetAttribute("number")) - _trackFirstMeasureNumber; } // create empty bars to the current index Bar bar = null; MasterBar masterBar = null; for (int i = track.Bars.Count; i <= barIndex; i++) { bar = new Bar(); masterBar = GetOrCreateMasterBar(barIndex); track.AddBar(bar); for (int j = 0; j < _maxVoices; j++) { var emptyVoice = new Voice(); bar.AddVoice(emptyVoice); var emptyBeat = new Beat { IsEmpty = true }; emptyVoice.AddBeat(emptyBeat); } } bool chord = false; bool isFirstBeat = true; element.IterateChildren(c => { if (c.NodeType == XmlNodeType.Element) { switch (c.LocalName) { case "note": chord = ParseNoteBeat(c, track, bar, chord, isFirstBeat); isFirstBeat = false; break; case "forward": break; case "direction": ParseDirection(c, masterBar); break; case "attributes": ParseAttributes(c, bar, masterBar); break; case "harmony": // TODO break; case "sound": // TODO break; case "barline": // TODO break; } } }); }
private bool ParseMeasure(IXmlNode element, Track track, bool isFirstMeasure) { if (element.GetAttribute("implicit") == "yes" && element.GetElementsByTagName("note").Length == 0) { return(false); } var barIndex = 0; if (isFirstMeasure) { _divisionsPerQuarterNote = 0; _trackFirstMeasureNumber = Std.ParseInt(element.GetAttribute("number")); if (_trackFirstMeasureNumber == int.MinValue) { _trackFirstMeasureNumber = 0; } barIndex = 0; } else { barIndex = Std.ParseInt(element.GetAttribute("number")); if (barIndex == int.MinValue) { return(false); } barIndex -= _trackFirstMeasureNumber; } // try to find out the number of staffs required if (isFirstMeasure) { var attributes = element.GetElementsByTagName("attributes"); if (attributes.Length > 0) { var stavesElements = attributes[0].GetElementsByTagName("staves"); if (stavesElements.Length > 0) { var staves = Std.ParseInt(Std.GetNodeValue(stavesElements[0])); track.EnsureStaveCount(staves); } } } // create empty bars to the current index Bar[] bars = new Bar[track.Staves.Count]; MasterBar masterBar = null; for (int b = track.Staves[0].Bars.Count; b <= barIndex; b++) { for (int s = 0; s < track.Staves.Count; s++) { var bar = bars[s] = new Bar(); if (track.Staves[s].Bars.Count > 0) { var previousBar = track.Staves[s].Bars[track.Staves[s].Bars.Count - 1]; bar.Clef = previousBar.Clef; } masterBar = GetOrCreateMasterBar(barIndex); track.AddBarToStaff(s, bar); for (int v = 0; v < _maxVoices; v++) { var emptyVoice = new Voice(); bar.AddVoice(emptyVoice); var emptyBeat = new Beat { IsEmpty = true }; emptyVoice.AddBeat(emptyBeat); } } } var attributesParsed = false; element.IterateChildren(c => { if (c.NodeType == XmlNodeType.Element) { switch (c.LocalName) { case "note": ParseNoteBeat(c, bars); break; case "forward": ParseForward(c, bars); break; case "direction": ParseDirection(c, masterBar); break; case "attributes": if (!attributesParsed) { ParseAttributes(c, bars, masterBar); attributesParsed = true; } break; case "harmony": ParseHarmony(c, track); break; case "sound": // TODO break; case "barline": ParseBarline(c, masterBar); break; } } }); return(true); }