import QtQuick 2.0 import MuseScore 3.0 MuseScore { menuPath: "Plugins.Next played note" description: "Moves note input cursor to the next note skipping rests and tied notes, plays the relevant note." version: "1.0" function findSegment(branch) { while (branch && branch.type != Element.SEGMENT) branch = branch.parent; return branch } function skipElement(element) { if (element.type != Element.CHORD) return true var notes = element.notes var allNotesTied = true for (var i = 0; i < notes.length; ++i) { if (!notes[i].tieBack) { allNotesTied = false; break } } return allNotesTied } function playNext(chord) { var segment = findSegment(chord) var cursor = curScore.newCursor() cursor.track = chord.track cursor.rewind(0) while (cursor.element){ if(segment.is(cursor.segment)) break cursor.next() } cursor.next() while (cursor.element){ if(skipElement(cursor.element)){ cmd("select-next-chord") } else{ cmd("next-chord") break } cursor.next() } if(!cursor.element) cmd("escape") } function playFirst() { var cursor = curScore.newCursor() cursor.rewind(0) while (cursor.element) { cmd("next-chord") if (cursor.element.type == Element.CHORD) break cursor.next() } } function findSelectedChord() { var selectedElements = curScore.selection.elements; for (var i = 0; i < selectedElements.length; ++i) { var e = selectedElements[i]; if (e.type == Element.NOTE) { return e.parent; } } return null; } function start(){ var selectedChord = findSelectedChord(); if (!selectedChord) playFirst() else playNext(selectedChord) } onRun: { if(curScore) start() Qt.quit() } }