[Open Sheet Music Display] 二:左右手及拍號

介紹

之前寫了一篇曲譜的一些操作,包括:音符著色和高亮區(qū)域。最近又有了一些新需求,所以繼續(xù)開坑

需求一:區(qū)分左右手音符

我們的曲譜有上下兩行,分別為右手和左手,前面寫的方法里其實有提到過部分代碼

osmd.cursor.iterator.currentVoiceEntries[0].ParentSourceStaffEntry.parentStaff.id

通過這個id來判斷當(dāng)前音符是左手還是右手,id = 1 為右手,id > 1 為左手

這里要注意下 osmd.cursor.iterator.currentVoiceEntries 有可能是 undefined ,所以要加個判斷

let currentVoiceEntries = osmd.cursor.iterator.currentVoiceEntries
if (typeof currentVoiceEntries != "undefined") {
    for (i = 0; i < currentVoiceEntries.length; i++) {
        // 右手
        if (currentVoiceEntries[i].ParentSourceStaffEntry.parentStaff.id == 1) {
            let note = currentVoiceEntries[i].notes[0]
            drawNoteColor(note, state)
        }
        // 左手
        if (currentVoiceEntries[i].ParentSourceStaffEntry.parentStaff.id > 1) {
            let note = currentVoiceEntries[i].notes[0]
            drawNoteColor(note, state)
        }
    }
}

需求二:獲取曲譜拍號

這個就直接上代碼把哈哈哈

function getRhythm() {
    const firstSourceMeasure = osmd.GraphicSheet.ParentMusicSheet.getFirstSourceMeasure()
    const instruction = firstSourceMeasure.firstInstructionsStaffEntries[0].Instructions[2]
    return { numerator: instruction.numerator, denominator: instruction.denominator }
}

返回的值分別對應(yīng)拍號的分子分母,即一小節(jié)幾拍和幾分音符為一拍

以上為版本 0.9.5 的獲取方式,稍微麻煩點(diǎn),后續(xù)會提供直接獲取的方式,代碼如下:

osmd.sheet.SourceMeasures[0].RhythmPrinted.numerator
osmd.sheet.SourceMeasures[0].RhythmPrinted.denominator

現(xiàn)在 1.0.0 版本已經(jīng)更新,可以使用上述方法了

結(jié)尾

這個 osmd 網(wǎng)上相關(guān)文檔實在是太少了,后來在我一番尋找下找到了一個聊天室,里面有挺多人問了問題,全部看一遍還是能學(xué)到好多的

https://gitter.im/opensheetmusicdisplay/opensheetmusicdisplay

后面不知道還會不會繼續(xù)開坑這個,看還有沒有需求吧哈哈

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容