Skip to content

MuseScore Plugin API リファレンス

本リファレンスは、主に src/engraving/api/v1/ の実装と、MuseScore PluginAPI Docs(3.5)のクラス構成に基づきます。
QML では import MuseScore 3.0、Extensions macros では api.engravingEngravingApiV1)経由で同等の操作が可能です。

表記: プロパティは読み取り専用の場合「RO」、読み書き可能な場合「RW」と記します。

使用例: 主要クラスのメソッド表の下に、折りたたみ(▼)の短い QML スニペットがあります。複数 API をまたぐ典型フローは 付録 A を参照してください。


目次

  1. PluginAPI(QML: MuseScore)
  2. Score
  3. Cursor
  4. Selection
  5. ScoreElement / EngravingItem
  6. Note / Chord / ChordRest / DurationElement / Tuplet / Beam
  7. Segment / Measure / System / Page
  8. Part / Staff / Instrument / Excerpt / Spanner など
  9. FileIO / QProcess
  10. Fraction / Interval とその他ユーティリティ
  11. 列挙(Enum)
  12. クラス一覧(3.5 Docs との対応)

1. PluginAPI(QML: MuseScore)

実装: qmlpluginapi.h
役割: プラグインのルート。メタ情報、現在のスコア、要素生成、列挙へのアクセスを提供します。

1.1 メタ・実行環境プロパティ

プロパティ説明
menuPathstringRWメニュー配置パス
titlestringRWタイトル
versionstringRWプラグイン版
descriptionstringRW説明
pluginTypestringRW"dialog" など
dockAreastringRWleft / top / bottom / right
requiresScoreboolRWスコア必須(既定 true
thumbnailNamestringRWサムネイル名
categoryCodestringRWカテゴリコード
divisionintRO4分音符あたりの tick 数
mscoreVersionintROバージョン(MMmmuu 形式)
mscoreMajorVersionintROメジャー
mscoreMinorVersionintROマイナー
mscoreUpdateVersionintROアップデート
mscoreDPIrealRODPI
curScoreScoreRO現在のスコア
scoresScore[]RO開いているスコア一覧(3.2+)

1.2 シグナル

シグナルQML ハンドラ説明
run()onRunプラグイン起動時
scoreStateChanged(state)onScoreStateChangedスコア状態変化(3.3+、実験的)
closeRequestedquit() 時など

state の主なフィールド: selectionChanged, excerptsChanged, instrumentsChanged, startLayoutTick, endLayoutTick, undoRedo(3.5+)。

1.3 メソッド

メソッド説明
newScore(name, part, measures)新規スコア作成
newElement(type)要素生成(Element.NOTE 等)
removeElement(element)要素削除
cmd(name)内部コマンド実行(例: "select-all", "escape", "cut"
writeScore(score, name, ext)スコア書き出し
readScore(name, noninteractive=false)スコア読み込み
closeScore(score) / closeScore()スコアを閉じる
fraction(num, den)Fraction 生成
fractionFromTicks(ticks)tick から Fraction
ornamentInterval(step, type)装飾音程
interval(chromatic, diatonic)音程
intervalFromOrnamentInterval(o)装飾音程から音程
newQProcess()外部プロセス(QML 型名 QProcess
log / logn / log2 / openLog / closeLogログ
quit()プラグイン終了
使用例: 要素生成・内部コマンド・スコア I/O
qml
// 要素の生成(配置は Cursor.add などと組み合わせる → 付録 A)
var text = newElement(Element.STAFF_TEXT)
text.text = "Hello"

// 内部コマンド(選択・カット等)
cmd("select-all")

// スコアの読み書き・終了
var score = readScore("/path/to/score.mscz")
writeScore(curScore, "/path/to/out", "mscz")
quit()

1.4 列挙へのアクセス

ルート上のプロパティとして列挙オブジェクトが公開されます。例:

qml
Element.NOTE
Element.CHORD
Placement.ABOVE
Direction.UP
Segment.ChordRest   // セグメント種別(名前は実装の SegmentType に対応)
Cursor.SCORE_START

完全な一覧は §11 を参照。


2. Score

実装: score.h
取得: curScore、または readScore / newScore の戻り値。

2.1 主なプロパティ

プロパティ説明
scoreNamestringRWファイル名(パス・拡張子なし)
titlestringRO作品タイトル(meta workTitle
composerstringRO作曲者
lyriciststringRO作詞者
durationintRO再生時間(秒)
mscoreVersion / mscoreRevisionstringRO最終保存時の版情報
styleMStyleROスタイル設定
keysigintRO開始調号(シャープ正・フラット負)
npages / pagesint / Page[]ROページ(pages は 4.6+)
pageNumberOffsetintRWページ番号オフセット
partsPart[]ROパート一覧
nstaves / stavesint / Staff[]RO五線
ntracksintROトラック数
systemsSystem[]ROシステム(4.6+)
spannersSpanner[]ROスパナー(4.7+)
hasHarmonies / harmonyCountbool / intROコード記号
hasLyrics / lyricCount / lyricsRO歌詞(lyrics は 4.7+)
nmeasuresintRO小節数
firstMeasure / lastMeasureMeasureRO先頭・末尾小節
firstMeasureMM / lastMeasureMMMeasureRO複数小節休符考慮
lastSegmentSegmentRO末尾セグメント
layoutModeintRWレイアウトモード(4.6+)
showInvisibleboolRW表示オプション(4.6+)
selectionSelectionRO選択
excerptsExcerpt[]RO抜粋(リンクパート)

2.2 主なメソッド

メソッド説明
newCursor()Cursor を生成(初期位置なし → rewind が必要)
startCmd(actionName?) / endCmd(rollback?)編集コマンドの開始/終了
metaTag(tag) / setMetaTag(tag, value)メタタグ
appendPart(instrumentId)楽器 ID でパート追加
appendPartByMusicXmlId(id)MusicXML Sound ID で追加
insertPart(instrumentId, index)指定位置に挿入(4.7+)
appendMeasures(n)小節追加
firstSegment(segmentType?)先頭セグメント
findSegmentAtTick(types, tick)指定位置のセグメント検索(4.6+)
tick2measure(tick)tick(Fraction)→ 小節(4.6+)
addText(type, text)テキスト追加
doLayout(startTick, endTick)強制レイアウト(4.6+)
createPlayEvents()再生イベント生成
showElementInScore(element, staffIdx?)要素をスコア上で表示
extractLyrics()歌詞を文字列で抽出
removeParts / removeStavesパート/五線削除(4.7+)
moveParts / moveStaves並び替え(4.7+)
appendStaff / appendLinkedStaff五線追加(4.7+)
setVoiceVisible(staff, voiceIndex, visible)声部表示(抜粋スコア向け、4.7+)
replaceInstrument / replaceDrumset など楽器・ドラムセット操作(4.7+)
使用例: Cursor 生成・編集コマンド・メタタグ・小節追加
qml
var cursor = curScore.newCursor()
cursor.rewind(Cursor.SCORE_START)

curScore.startCmd("my-plugin")
curScore.setMetaTag("workTitle", "Untitled")
console.log(curScore.metaTag("workTitle"))
curScore.appendMeasures(4)
curScore.endCmd()

3. Cursor

実装: cursor.h
取得: score.newCursor()

作成直後は位置が未定義です。rewind / rewindToTick / rewindToFraction で初期化するか、inputStateModeINPUT_STATE_SYNC_WITH_SCORE にしてスコアの入力状態と同期します。

3.1 プロパティ

プロパティ説明
trackintRWトラック
staffIdxintRW五線インデックス(track / 4
staffStaffRW現在の Staff(4.6+)
voiceintRW声部(track % 4
filterintRW移動対象セグメント種別のビットマスク(既定: ChordRest)
tickintROMIDI tick(4.6 以降非推奨。位置取得は fraction を推奨)
utickintROリピートを考慮した tick(4.6+)
fractionFractionRO全音符基準の位置(4.6+)
temporealRO現在テンポ
keySignatureintRO現在の調号
scoreScoreRW関連スコア
elementEngravingItemRO現在トラックの要素
segmentSegmentRO現在セグメント
measureMeasureRO現在小節
stringNumberintRW弦番号(タブ等、3.5+)
inputStateModeenumRW入力状態の同期モード(3.5+)

3.2 列挙

RewindMode

意味
Cursor.SCORE_START (0)スコア先頭
Cursor.SELECTION_START (1)選択開始
Cursor.SELECTION_END (2)選択終了

InputStateMode

意味
Cursor.INPUT_STATE_INDEPENDENTスコア入力状態と独立(既定)
Cursor.INPUT_STATE_SYNC_WITH_SCOREスコア入力状態と同期

3.3 メソッド

メソッド説明
rewind(mode)位置を巻き戻し
rewindToTick(tick)tick へ移動
rewindToFraction(f)Fraction へ移動
time(includeRepeats?)時間(秒)
next() / prev()次/前のセグメントへ(filter 適用)
nextMeasure()次の小節へ
add(element)要素を追加
addNote(pitch, addToChord=false)音符追加
addRest()休符追加
addTuplet(ratio, duration)連符追加
setDuration(z, n)音価設定(n==0 なら 4分)
使用例: 巻き戻し・走査・音符追加
qml
var cursor = curScore.newCursor()
cursor.rewind(Cursor.SCORE_START)
// 選択範囲から始める場合: cursor.rewind(Cursor.SELECTION_START)

curScore.startCmd("add-notes")
cursor.setDuration(1, 4)          // 4分音符
cursor.addNote(60)                // MIDI C4
cursor.next()
cursor.addRest()

// 先頭から ChordRest を走査
cursor.rewind(Cursor.SCORE_START)
while (cursor.segment) {
    var el = cursor.element
    if (el && el.type === Element.CHORD)
        console.log(el.notes[0].pitch)
    if (!cursor.next())
        break
}
curScore.endCmd()
使用例: Fraction 位置への移動と要素の追加
qml
var cursor = curScore.newCursor()
cursor.rewindToFraction(fraction(1, 1))  // 全音符 1 つ分の位置へ

var text = newElement(Element.STAFF_TEXT)
text.text = "mark"
curScore.startCmd()
cursor.add(text)
curScore.endCmd()

4. Selection

実装: selection.h(3.3+)
取得: score.selection

プロパティ説明
elementsEngravingItem[]RO選択中の要素
isRangeboolRO範囲選択か(3.5+)
startSegment / endSegmentSegmentRO範囲の開始(含む)/終了(含まない)
startStaff / endStaffintRO範囲の五線(終了は含む)
メソッド説明
select(e, add=false)要素を選択
selectRange(startTick, endTick, startStaff, endStaff)範囲選択
deselect(e)選択解除
clear()全解除
使用例: 要素選択・範囲選択・解除
qml
var sel = curScore.selection
var cursor = curScore.newCursor()
cursor.rewind(Cursor.SCORE_START)

if (cursor.element)
    sel.select(cursor.element)           // 単一選択
// sel.select(cursor.element, true)      // 追加選択

// 範囲選択(tick は整数。Fraction の ticks を使う例)
var start = fraction(0, 1).ticks
var end = fraction(4, 1).ticks
sel.selectRange(start, end, 0, 0)

console.log(sel.elements.length, sel.isRange)
sel.clear()

5. ScoreElement / EngravingItem

5.1 ScoreElement

実装: scoreelement.h — ほとんどの楽譜オブジェクトの基底。

プロパティ説明
typeElementTypeRO要素型(Element.* と比較)
namestringRO型名(非ローカライズ)
spatiumrealROスペーシウム(4.6+)
eidstringRO要素 ID(4.6+)
メソッド説明
userName()ローカライズされた型名
is(other)同一オブジェクトか

5.2 EngravingItem

実装: elements.h — 記譜上の要素。

主なプロパティ(抜粋):

プロパティ説明
parentEngravingItemRO親要素
staffStaffRO所属五線
staffIdxintRO五線インデックス(4.6+)
offsetX / offsetYrealRWユーザーオフセット(spatium)
pos / posX / posYPointF / realRO基準位置(親相対、spatium)
pagePos / canvasPosPointFROページ/キャンバス座標
bboxRectFROバウンディングボックス
colorcolorRW色(API_PROPERTY / Pid)
visibleboolRW表示/非表示
selectedboolRO選択状態
text / htmlTextvariantRWテキスト系要素向け(htmlText は 4.6+)
メソッド説明
clone()複製(プラグイン所有)

多くの見た目・配置プロパティは内部 Pid 経由の API_PROPERTY マクロで公開されています(配置、フォント、線種など)。詳細は elements.h を参照してください。


6. Note / Chord / ChordRest / DurationElement

6.1 DurationElement

音価を持つ要素の基底。

プロパティ説明
durationFractionRW表記上の音価(和音・休符は 4.6+ で書き込み可)
globalDurationFractionROグローバル音価(親連符比を反映、3.5+)
actualDurationFractionRO実際の音価(連符・局所拍子等を反映、3.5+)
tuplet / topTupletTupletRO所属連符/最外連符(topTuplet は 4.6+)
measureMeasureRO所属小節(4.6+)

6.2 ChordRest

和音・休符の共通基底。

プロパティ説明
lyricsLyrics[]RO歌詞一覧
beamBeamROビーム(3.6+)
elementsEngravingItem[]ROフェルマータ等の付属要素(4.6+)
isFullMeasureRestboolRO全休符か(4.6+)

6.3 Chord

プロパティ説明
notesNote[]RO構成音
graceNotes / graceNotesBefore / graceNotesAfterChord[]RO装飾音符(前後分割は 4.6+)
articulationsEngravingItem[]ROアーティキュレーション(4.6+)
stem / stemSlash / hookEngravingItemRO符幹・スラッシュ・フック(3.6+)
upNote / downNoteNoteRO最高/最低音(4.6+)
arpeggio / tremoloSingleChord / tremoloTwoChordEngravingItemROアルペジオ・トレモロ(4.6+)
playEventTypePlayEventTypeRW再生イベント種別(3.3+)
noteTypeNoteTypeRO音符種別(3.2.1+)
メソッド説明
add(element) / remove(element)子の追加/削除
使用例: 和音内の音符を走査・pitch / tpc を読む
qml
var el = cursor.element
if (el && el.type === Element.CHORD) {
    for (var i = 0; i < el.notes.length; i++) {
        var n = el.notes[i]
        console.log(n.pitch, n.tpc)
    }
}

6.4 Note

プロパティ説明
pitchintRWMIDI 音高
tpcintRW現在の Concert Pitch 設定に応じた TPC
tpc1intRWコンサートピッチの TPC
tpc2intRW移調楽器側の TPC
tuningrealRWチューニング(cents)
userVelocityintRWベロシティ
line / fixed / fixedLineint / bool / intRW五線上の線位置
fret / stringintRWタブ用フレット/弦
deadboolRWデッドノート(4.6+)
accidentalEngravingItemRO臨時記号オブジェクト
accidentalTypeAccidentalTypeRW臨時記号種別
dotsEngravingItem[]RO付点
elementsEngravingItem[]RO子要素(運指・記号など)
playEventsPlayEvent[]RO再生イベント(3.3+)
tieBack / tieForwardTieROタイ(3.3+)
firstTiedNote / lastTiedNoteNoteROタイ連結の端(3.3+)
spannerForward / spannerBackSpanner[]ROスパナー(4.6+)
noteTypeNoteTypeRO音符種別(3.2.1+)
isTrillCueNoteboolROトリル用キューか(4.6+)
メソッド説明
createPlayEvent()PlayEvent 生成(3.3+)
add / remove子要素の追加/削除(3.3.3+)
使用例: pitch の書き換え
qml
curScore.startCmd("transpose-up")
var el = cursor.element
if (el && el.type === Element.CHORD) {
    for (var i = 0; i < el.notes.length; i++)
        el.notes[i].pitch += 12   // 1 オクターブ上げ
}
curScore.endCmd()

6.5 Tuplet

連符。DurationElement を継承(elements.h)。

プロパティ説明
numberTypeintRW数字表示種別(TupletNumberType
bracketTypeintRW囲み種別(TupletBracketType
hasBracketboolRO囲みの有無(4.6+)
actualNotesintRO基準音価に対する実際の音符数
normalNotesintRO対応する「通常」音符数
p1 / p2QPointFRW左端/右端のユーザーオフセット(spatium 単位)
defaultP1 / defaultP2QPointFRO左端/右端の実位置(spatium 単位、4.6+)
elements要素[]RO連符に属する要素(3.5+)

6.6 Beam

ビーム。EngravingItem を継承(elements.h)。

プロパティ説明
growLeft / growRightrealRW左右のフェザリング(羽状ビーム)
isCrossStaffboolROクロススタッフビームか
isFullCrossStaffboolRO全体が別の五線上にあるか
defaultCrossStaffIdxintRO既定のクロススタッフ位置
minCRMove / maxCRMoveintROクロススタッフ位置の最小/最大
elementsChordRest[]ROビームに属する和音・休符

7. Segment / Measure

7.1 Segment

時間位置ごとのコンテナ。

プロパティ説明
annotationsEngravingItem[]ROアノテーション(テキスト・アーティキュレーション等)
next / prevSegmentROスコア内の次/前(小節境界を越える)
nextInMeasure / prevInMeasureSegmentRO小節内の次/前
segmentTypeintRO種別(Segment.*
tickintROtick(整数)
fractionFractionRO位置(4.6+)
メソッド説明
elementAt(track)指定トラックの要素
使用例: セグメントの辿りとトラック要素の取得
qml
var seg = curScore.firstSegment()
while (seg) {
    var el = seg.elementAt(0)   // トラック 0
    if (el)
        console.log(seg.fraction.str, el.type)
    seg = seg.next
}

7.2 Measure / MeasureBase

プロパティ説明
tick / ticksFractionRO開始位置・長さ
elementsEngravingItem[]RO子要素(レイアウト区切り・ジャンプ等、3.3+)
nextMeasure / prevMeasureMeasureRO隣接小節
nextMeasureMM / prevMeasureMMMeasureRO複数小節休符を考慮した隣接(3.6+)
使用例: 小節の列挙
qml
var m = curScore.firstMeasure
while (m) {
    console.log(m.tick.str, m.ticks.str)
    m = m.nextMeasure
}

7.3 System

システム(1 段の譜表)。EngravingItem を継承(elements.h、4.6+)。

プロパティ説明
measuresMeasureBase[]ROこのシステム内の小節・フレーム
firstMeasure / lastMeasureMeasureRO最初/最後の小節
first / lastMeasureBaseRO最初/最後の小節またはフレーム
isLockedboolRWシステムがロックされているか
pageBreakboolRO改ページを持つか
systemDividerLeft / systemDividerRightEngravingItemRO左右のシステム区切り(存在すれば)
メソッド説明
bbox(staffIdx)指定五線のバウンディングボックス
yOffset(staffIdx)最上段譜線からの Y 位置
show(staffIdx)指定五線が表示されているか(Staff.show と異なる場合あり)
setHideStaffIfEmpty(staffIdx, hide)空時の非表示挙動を上書き(AutoOnOff、4.7+)

7.4 Page

ページ。EngravingItem を継承(elements.h)。

プロパティ説明
pageNumberintRO0 始まりのページ番号(表示番号は pageNumber + 1 + score.pageNumberOffset、4.7+)
pagenumberintROpageNumber の別名(後方互換、3.5+)
systemsSystem[]ROこのページ上のシステム一覧(4.6+)

8. Part / Staff / Excerpt など

8.1 Part

パート。ScoreElement を継承(part.h)。

プロパティ説明
startTrack / endTrackintRO先頭トラック/次パート先頭
instrumentIdstringRO先頭楽器の MuseScore 楽器 ID(4.6+)
musicXmlIdstringROMusicXML Sound ID(3.2+)
partNamestringROパート名(Mixer 表示、3.2.1+)
longName / shortNamestringRO現在楽器の長名/短名(3.2.1+)
midiChannel / midiProgramintROMIDI チャンネル/プログラム(3.2.1+)
harmonyCountintROコード記号数(3.2.1+)
hasChordSymbolboolROコード記号を持つか(4.6+)
hasDrumStaff / hasPitchedStaff / hasTabStaffboolRO打楽器/音高/タブ譜を持つか(3.2.1+)
lyricCountintRO歌詞音節数(3.2.1+)
showboolRWパートの表示/非表示(3.6+ で書き込み可)
instrumentsInstrument[]RO楽器一覧(3.5+)
stavesStaff[]RO所属五線一覧(4.6+)
masterPartPartROメインスコア側の対応パート(4.6+)
メソッド説明
instrumentAtTick(tick)指定位置の楽器(int は 3.5+、Fraction は 4.6+)
longNameAtTick(f) / shortNameAtTick(f)指定位置の長名/短名(4.6+)
instrumentNameAtTick(f) / instrumentIdAtTick(f)指定位置の楽器名/ID(4.6+)
currentHarpDiagramAtTick(f)指定位置で有効なハープペダル図(4.6+)
nextHarpDiagramFromTick(f) / prevHarpDiagramFromTick(f)次/前のハープペダル図(4.6+)
tickOfCurrentHarpDiagram(f)有効なハープペダル図の tick(4.6+)

8.2 Staff

五線。ScoreElement を継承(elements.h、3.5+)。

プロパティ説明
partPartRO所属パート
idxintRO五線インデックス(4.6+)
smallboolRW小さい五線
magrealRW拡大率
colorcolorRW五線の色
playbackVoice1playbackVoice4boolRW各声部を再生に含めるか
visibleboolRW五線自体の表示(4.6+)
showboolRO実効的な表示(パート+五線、4.6+)
cutawayboolRWカットアウェイ五線(空小節を隠す、4.6+)
staffInvisibleboolRW譜線を非表示(4.6+)
hideSystemBarLineboolRWシステム小節線を隠す(4.6+)
showMeasureNumbersenumRW小節番号表示(AutoOnOff、4.6+)
mergeMatchingRestsenumRW声部間で休符を統合(AutoOnOff、4.6+)
showIfEntireSystemEmptyboolRWシステム全体が空でも表示(4.6+)
reflectTranspositionInLinkedTabboolRW連動タブ譜に移調を反映(4.6+)
staffBarlineSpan / staffBarlineSpanFrom / staffBarlineSpanTointRW小節線の連結範囲
staffUserdistrealRW五線前の追加スペース
primaryStaffStaffRO元(非リンク)の五線(4.6+)
メソッド(いずれも Fraction tick 指定、4.6+)説明
clefType(f) / key(f) / timeSig(f)音部記号種別/調号/拍子
transpose(f) / timeStretch(f)移調(Interval)/タイムストレッチ比
swing(f) / capo(f)スウィング設定/カポ設定(オブジェクトを返す)
stemless(f) / staffHeight(f)符幹なしか/五線高さ
isPitchedStaff(f) / isTabStaff(f) / isDrumStaff(f)五線種別の判定
lines(f) / lineDistance(f) / isLinesInvisible(f)譜線数/間隔/不可視か
middleLine(f) / bottomLine(f)中央線/最下線
staffMag(f) / spatium(f) / pitchOffset(f)五線倍率/スペーシウム/オッターバによる音高オフセット
isVoiceVisible(voice)パートスコアで指定声部が表示されるか

特定小節から譜線数・記号生成などを変えたい場合は、Staff プロパティではなく Element.STAFFTYPE_CHANGE(譜表タイプ変更)を使います。

8.3 Instrument

楽器定義。QObject 派生(instrument.h、3.5+)。

プロパティ説明
instrumentIdstringROMuseScore 楽器 ID
musicXmlIdstringROMusicXML Sound ID
longName / shortNamestringRO長名/短名
stringDataStringDataRO弦情報(フレット楽器向け)
drumsetDrumsetRO打楽器セット(無音高打楽器向け、4.6+)
channelsChannel[]ROチャンネル一覧
メソッド説明
cloneDrumset()書き換え可能な Drumset の複製を返す(4.7+)
is(other)同一オブジェクトか

8.4 Channel

音色・MIDI チャンネル設定(instrument.h、3.5+)。instrument.channels から取得。

プロパティ説明
namestringROチャンネル名
isHarmonyChannelboolROコード記号の再生を担うか(4.6+)
volume / pan / chorus / reverbintRW音量/パン/コーラス/リバーブ(0–127)
muteboolRWミュート(4.0 以降は非推奨)
midiProgramintRWMIDI プログラム番号(0–127、undo 可)
midiBankintRWMIDI バンク番号(undo 可)

注: volume / pan / chorus / reverb / mute の変更は標準の「元に戻す」で復元されません。midiProgram / midiBank は undo スタックに記録されます。

8.5 StringData

弦データ(instrument.h、3.5+)。

プロパティ説明
stringslistRO弦の一覧。各要素は pitch(0 フレット時の音高)と open(常時開放弦か)を持つ
fretsintROフレット数

8.6 Drumset

打楽器セット(instrument.h、4.6+)。instrument.drumset は読み取り専用。書き換えには Instrument.cloneDrumset() の複製を使い、Score.replaceDrumset() で適用します。

メソッド説明
isValid(pitch)指定 MIDI 音高がセットに含まれるか
noteHead(pitch)符頭グループ(NoteHeadGroup
noteHeads(pitch, type)符頭記号(SymIdtypeNoteHeadType
line(pitch) / voice(pitch) / stemDirection(pitch)譜線位置/声部/符幹方向
name(pitch) / translatedName(pitch) / shortcut(pitch)名称/訳名/ショートカット
variants(pitch)バリアント一覧(pitch / tremolo / articulationName
panelRow(pitch) / panelColumn(pitch)打楽器パネルの行/列
defaultPitchForLine(line)指定線の既定音高
nextPitch(pitch) / prevPitch(pitch)次/前の使用音高
setName / setNoteHead / setLine / setVoice / setStemDirection / setShortcut各設定(複製に対して、4.7+)
is(other)同一オブジェクトか

8.7 Excerpt

抜粋(リンクパート)。QObject 派生(excerpt.h)。score.excerpts から取得。

プロパティ説明
partScoreScoreROこのパートのスコアオブジェクト
titlestringROパートのタイトル
メソッド説明
is(other)同一オブジェクトか(3.3+)

8.8 MStyle

スコアスタイル設定(style.h、3.5+)。score.style から取得。キーは Sid 値の名前。

メソッド説明
value(key)スタイル値を取得(戻り値の型は設定に依存)
setValue(key, value)スタイル値を設定
resetValue(key)スタイル値を既定へリセット(4.7+)
qml
var style = curScore.style
var genClef = style.value("genClef") // 既定 true
style.setValue("genClef", false)

8.9 PlayEvent

再生イベント。mu::engraving::NoteEvent のラッパ(playevent.h、3.3+)。note.playEvents から取得。

プロパティ説明
pitchintRW親音符の実音高に加える相対音高
ontimeintRW発音開始(公称音長の 1/1000 単位)
lenintRWイベント長(同 1/1000 単位)
offtimeintRO消音時刻(ontimelen から導出)

8.10 Spanner / SpannerSegment

スパナー(線的要素)とその表示セグメント。ともに EngravingItem を継承(elements.h、4.6+)。

Spanner

プロパティ説明
spannerTickFractionRW開始 tick
spannerTicksFractionRW継続長
spannerTrack2intRW終了トラック
startElement / endElementEngravingItemRO開始/終了要素
spannerSegmentsSpannerSegment[]RO属するセグメント一覧
ornamentOrnamentRO装飾オブジェクト

SpannerSegment

プロパティ説明
spannerSpannerRO親スパナー
spannerSegmentTypeintROセグメント種別(SpannerSegmentType
pos2QPointFRO終端位置(userOff2 を含む)
userOff2QPointFRW線分の終端オフセット
slurUoff1slurUoff4QPointFRWスラー・タイの各制御点オフセット

8.11 Tie

タイ。Spanner を継承(elements.h、3.3+)。

プロパティ説明
startNote / endNoteNoteRO開始/終了音符
isInsideboolRO内側配置か(4.6+)

8.12 Ornament

装飾記号。EngravingItem を継承(elements.h、4.6+)。

プロパティ説明
hasIntervalAbove / hasIntervalBelowboolRO上/下の音程を持つか
showCueNoteboolROキュー音符を表示するか
accidentalAbove / accidentalBelowEngravingItemRO上/下音程の臨時記号

8.13 Lyrics

歌詞。EngravingItem を継承(elements.h)。

プロパティ説明
plainTextstringRO書式を除いた歌詞テキスト
isMelismaboolROメリスマか
separatorEngravingItemRO歌詞ライン(存在すれば)
syllabicintRW音節種別(Syllabic
lyricTicksFractionRW歌詞の tick 長

8.14 Harmony

コード記号。EngravingItem を継承(elements.h)。

プロパティ説明
plainTextstringRO書式を除いた表記
displayTextstringRO表示テキスト(書式付き)
harmonyNamestringRO図データベース照合用の内部名

8.15 FretDiagram

フレットボード図。EngravingItem を継承(elements.h、4.7+)。

プロパティ説明
harmonyHarmonyRO図に紐づくコード記号(無ければ null)
harmonyPlainText / harmonyDisplayTextstringROコード記号のテキスト
strings / fretsintRO弦数/表示フレット数
fretOffsetintRO開始フレット(0 でナット表示)
メソッド説明
dots()ドット一覧(string / fret / dotType
markers()弦マーカー一覧(string / markerType
barres()バレー一覧(fret / startString / endString
setDot(string, fret, add?, dotType?)ドットの追加/削除(undo 可)
setMarker(string, marker)弦マーカー設定(FretMarkerType
setBarre(string, fret, add?)バレー追加
clear()ドット・マーカー・バレーを全消去

9. FileIO / QProcess

9.1 FileIO

実装: util.h
インポート: import FileIO 3.0

メンバー説明
source操作対象パス
read()内容を文字列で読む
write(data)書き込み(ユーザーデータ配下のみ
writeBinary(data)バイナリ書き込み(同上)
exists() / remove()存在確認/削除
homePath() / tempPath()ホーム/一時パス
userDataPath()MuseScore ユーザーデータ
pluginsUserPath()Plugins フォルダ
userProjectsPath() / userTemplatesPath() / userStylesPath()各ユーザーフォルダ
userSoundFontDirectories()SoundFont ディレクトリ一覧
pluginDirectoryPath()このプラグインのフォルダ
projectPath() / projectDirectoryPath() / isProjectDirectory()現在プロジェクト
isPathWriteable(path)書き込み可否
modifiedTime()更新時刻
error(msg) シグナルエラー通知
使用例: 読み書き
qml
import FileIO 3.0

FileIO {
    id: io
    source: ""
}

// 読み込み
io.source = io.pluginDirectoryPath() + "/config.txt"
if (io.exists())
    console.log(io.read())

// 書き込み(ユーザーデータ配下のみ可)
io.source = io.userDataPath() + "/plugins/my-plugin-out.txt"
io.write("hello\n")

9.2 MsProcess(QML: QProcess)

メソッド説明
start(command)起動(非推奨)
startWithArgs(program, args)引数付き起動(4.3+)
waitForFinished(msecs=30000)終了待ち
readAllStandardOutput()標準出力

10. Fraction とその他ユーティリティ

10.1 Fraction

全音符を 1 とする有理数(apistructs.h、QML 型名は FractionWrapper)。ルートの fraction(n, d) / fractionFromTicks(t) で生成します。

プロパティ説明
numerator / denominatorintRO分子/分母
ticksintROtick 換算(全音符数に相当)
strstringRO文字列表現
realrealRO実数値(例: 1/4 → 0.25、4.6+)
reducedFractionRO約分した分数(4.6+)
inverseFractionRO逆数(4.6+)
absValueFractionRO絶対値(4.6+)
メソッド説明
plus(o) / minus(o)加算/減算(4.6+)
times(o) / times(v)乗算(分数/整数、4.6+)
dividedBy(o) / dividedBy(v)除算(分数/整数、4.6+)
greaterThan(o) / lessThan(o)大小比較(4.6+)
equals(o)値が等しいか(2/4 と 1/2 は true、4.6+)
identical(o)分子・分母が一致するか(2/4 と 1/2 は false、4.6+)

10.2 Interval / OrnamentInterval

音程ラッパ(apistructs.h、4.6+)。ルートの interval(chromatic, diatonic) / ornamentInterval(step, type) で生成します。

IntervalIntervalWrapper

メンバー説明
diatonicintRO全音階ステップ数
chromaticintRO半音ステップ数
isZeroboolRO音程が 0 か
flip()メソッド音程を反転

OrnamentIntervalOrnamentIntervalWrapper

メンバー説明
stepenumRO音程ステップ(IntervalStep
typeenumRO音程種別(IntervalType
isPerfectboolRO完全音程か

11. 列挙(Enum)

QML では Element.NOTE のようにアクセスします。定義の一次ソースは apitypes.h です。

11.1 頻出: Element(ElementType)

値(例)意味
NOTE音符
CHORD和音
REST休符
MEASURE小節
SEGMENTセグメント
STAFF / PART / SCORE五線/パート/スコア
CLEF / KEYSIG / TIMESIG音部記号/調号/拍子
BAR_LINE小節線
TIE / SLUR / BEAMタイ/スラー/ビーム
LYRICS / HARMONY歌詞/コード記号
DYNAMIC / TEMPO_TEXT強弱/テンポ
STAFF_TEXT / SYSTEM_TEXT五線/システムテキスト
FINGERING運指テキスト(Note.add の子として配置)
LAYOUT_BREAK改行・改ページ(layoutBreakType で種別指定)
STAFFTYPE_CHANGE譜表タイプ変更(下記
ARTICULATION / ORNAMENT / FERMATAアーティキュレーション等
HAIRPIN / OTTAVA / VOLTA / PEDAL / TRILL / GLISSANDO各種スパナー
TUPLET連符
PAGE / SYSTEMページ/システム
FRET_DIAGRAMフレット図
その他多数(150+)

11.1.1 StaffTypeChange

配置した位置以降の五線見た目を上書きする要素です。専用の QML クラスはなく、newElement(Element.STAFFTYPE_CHANGE) で得た EngravingItem に対し、API_PROPERTY(内部 Pid)経由で設定します。

使う意図

  • Staff/Part の既定設定はそのままに、特定小節から線数・記号生成・符幹などを切り替えたいとき
  • 数字譜・実験記譜など、「五線譜としての見た目」を局所的に変えたいとき(譜表・記譜操作ガイド

UI の「譜表の種類の変更」と同じ仕組みです。要素を置くと編集用の四角マーカーが出ます(印刷されないことが多い)。

プロパティ説明
staffLinesintRW譜線数(0 で線なし。数字譜向き)
staffInvisibleboolRW譜線を不可視に(「不可視を表示」オンだと灰色で残る)
staffGenClefboolRW音部記号を生成するか
staffGenTimesigboolRW拍子記号を生成するか(4/4 の C 表示も含む)
staffGenKeysigboolRW調号を生成するか
staffStemlessboolRW符幹・旗・連桁を出さない
staffShowLedgerlinesboolRW加線を表示するか
staffShowBarlinesboolRW小節線を表示するか
qml
curScore.startCmd()
var stc = newElement(Element.STAFFTYPE_CHANGE)
cursor.add(stc)
stc.staffLines = 0
stc.staffGenClef = false
stc.staffGenTimesig = false
stc.staffGenKeysig = false
stc.staffStemless = true
stc.staffShowLedgerlines = false
curScore.endCmd()

実装の一次ソース: elements.hAPI_PROPERTY_T(... STAFF_*)、内部は StaffTypeChangesetProperty

注意: Staff.staffInvisible は API 上 RW でも、プラグインからの直接書き込みでは見た目が変わらないことがあります。譜線まわりは StaffTypeChange 側を優先してください。

11.2 PluginAPI 上のその他の列挙プロパティ(抜粋)

QML 名内容
Accidental臨時記号種別
Placement / PlacementH上下/水平配置
Direction / DirectionH方向
Beamビームモード
Segmentセグメント種別
NoteHeadType / NoteHeadGroup / NoteHeadScheme符頭
NoteType音符種別
PlayEventType再生イベント
Tidテキストスタイル
Lyrics歌詞音節(Syllabic)
Spannerスパナーアンカー
LayoutBreak改行・改ページ
SymId記号 ID(3.5+)
ClefType / DynamicType / Key音部/強弱/調(4.6+)
LayoutModeレイアウトモード(4.6+)
OrnamentStyle装飾スタイル
Glissando / GlissandoStyleグリッサンド
HarmonyTypeハーモニー種別(3.5+)

4.6 以降、多数の列挙が追加されています。完全リストは qmlpluginapi.hDECLARE_API_ENUM を参照してください。


12. クラス一覧(3.5 Docs との対応)

PluginAPI Docs: annotated.html に記載の Ms::PluginAPI クラスと、現行実装の対応です。

「クラス」列は本書内の該当節へ、「ソース」列は現行実装のヘッダ(main ブランチ)へのリンクです。

クラス(本書内リンク)現行実装ソース主な用途
PluginAPIPluginAPI(QML: MuseScoreqmlpluginapi.hルート API
CursorCursorcursor.h走査・入力
ScoreScorescore.h楽譜
SelectionSelectionselection.h選択
ScoreElementScoreElementscoreelement.h基底
ElementEngravingItemelements.h記譜要素
DurationElementDurationElementelements.h音価付き
ChordRestChordRestelements.h和音/休符共通
ChordChordelements.h和音
NoteNoteelements.h音符
TupletTupletelements.h連符
BeamBeamelements.hビーム
SegmentSegmentelements.hセグメント
Measure / MeasureBaseMeasureelements.h小節
SystemSystemelements.hシステム
PagePageelements.hページ
PartPartpart.hパート
StaffStaffelements.h五線
InstrumentInstrumentinstrument.h楽器
ChannelChannelinstrument.hチャンネル
StringDataStringDatainstrument.h弦データ
DrumsetDrumsetinstrument.h打楽器セット
ExcerptExcerptexcerpt.h抜粋
MStyleMStylestyle.hスタイル
PlayEventPlayEventplayevent.h再生イベント
Spanner / SpannerSegmentSpannerelements.hスパナー
TieTieelements.hタイ
OrnamentOrnamentelements.h装飾記号
LyricsLyricselements.h歌詞
HarmonyHarmonyelements.hコード記号
FretDiagramFretDiagramelements.hフレット図
FractionWrapperFractionapistructs.h分数
Interval / OrnamentIntervalIntervalWrapper ほかapistructs.h音程
FileIOFileIOutil.hファイル I/O
MsProcessMsProcess(QML: QProcessutil.h外部プロセス
EnumEnumenums.h列挙ラッパ
ScoreViewMuseScore 3 のみ(4 では未登録)(3.x: mscore/plugin/api/util.hダイアログ内のスコアプレビュー
Qml*ListAccess内部(直接は使わない)scoreelement.h ほかnotes 等のリストプロパティ実装

名前空間は Docs では Ms::PluginAPI、現行ソースでは mu::engraving::apiv1 です。QML からの見え方(MuseScore, Element.NOTE 等)は互換を意識して維持されています。

ScoreView(利用シーン)

プラグインのダイアログ UI に、スコアの簡易ビューを埋め込むための QML コンポーネントです(3.2+)。pluginType: "dialog" でプレビューを出したいときに使います。

メソッド / プロパティ説明
setScore(score)表示する Score を設定
setCurrentPage(n) / nextPage() / prevPage()ページ切替
color / scale背景色・拡大率

MuseScore 3 付属の view.qml が典型例です。

qml
ScoreView {
    id: scoreview
    anchors.fill: parent
    color: "white"
    Component.onCompleted: scoreview.setScore(curScore)
}

現行 MuseScore 4 の qmlpluginapi.cpp では ScoreViewqmlRegisterType がコメントアウトされており、4.x のプラグインからは使えません(3.5 Docs との対応表用の行です)。

Qml*ListAccess(利用シーン)

C++ 側のコンテナを QML のリスト(length / 添字アクセス)として公開するための 内部ラッパです。プラグイン作者が QmlListAccess などをインスタンス化することはありません。

代わりに、次のようなプロパティ経由で結果だけを使います。

見えるプロパティ内部クラスソース
chord.notesselection.elementsscores などQmlListAccess(読み取り専用)scoreelement.h
score.excerptsQmlExcerptsListAccessexcerpt.h
note.playEventsQmlPlayEventsListAccessappend / clear あり)playevent.h
qml
// 例: Chord.notes(QmlListAccess 経由)
for (var i = 0; i < chord.notes.length; i++)
    console.log(chord.notes[i].pitch)

// 例: Note.playEvents(装飾音の再生タイミング編集など)
note.playEvents.clear()

Docs のクラス一覧に載っているのは実装詳細の対応用で、日常のプラグイン記述では上記の各プロパティ節を参照すれば十分です。


付録 A: 典型的なコードパターン

各クラス直下の折りたたみ例はメソッド単位の断片です。ここでは複数 API をまたぐ典型フローを示します。

選択範囲の音符を走査

qml
import MuseScore 3.0

MuseScore {
    version: "1.0"
    description: "選択音符の pitch をログ"
    onRun: {
        var cursor = curScore.newCursor()
        cursor.rewind(Cursor.SELECTION_START)
        var endSeg = curScore.selection.endSegment
        curScore.startCmd()
        while (cursor.segment && cursor.segment !== endSeg) {
            var el = cursor.element
            if (el && el.type === Element.CHORD) {
                for (var i = 0; i < el.notes.length; i++)
                    console.log(el.notes[i].pitch, el.notes[i].tpc)
            }
            if (!cursor.next())
                break
        }
        curScore.endCmd()
        quit()
    }
}

要素の新規作成と配置

qml
curScore.startCmd()
var text = newElement(Element.STAFF_TEXT)
text.text = "Hello"
cursor.add(text)
curScore.endCmd()

付録 B: 詳細を調べるとき

目的参照先
プロパティの正確な定義src/engraving/api/v1/*.h
3.5 時代の HTML リファレンスPluginAPI Docs クラス一覧
pitch / tick / tpc の表pitch.htmlticklength.htmltpc.html
Extensions の UI / macrosdocs/apidocs_static/tutorials/
公開ドキュメント生成物musescore.github.io

前章: プラグイン開発の概要