夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

MusicXMLをBlenderに読み込み小節数と曲の長さを出力する

本日はBlender枠です。

昨日BlenderMusicXMLを読み込んで情報を使用することができました。

redhologerbera.hatenablog.com

今回は違う内容として小節数を出力します。

小節数とテンポを使用することで曲全体の長さを求めることができます。

〇コード

from music21 import *

def get_animation_length_from_musicxml(file_path):
    # MusicXMLファイルを読み込む
    score = converter.parse(file_path)

    # メトロノームマークがある場合、そのテンポ情報を取得
    metronome_marks = score.flat.getElementsByClass('MetronomeMark')
    
    if metronome_marks:
        tempo = metronome_marks[0].getQuarterBPM()
        print(f"テンポ: {tempo} BPM")
    else:
        print("メトロノームマークが見つかりませんでした。")
        return

    # 小節の長さを取得
    measures = len(score.parts[0].getElementsByClass(stream.Measure))
    print(f"小節の数: {measures}")

    # アニメーションの長さを計算
    quarter_note_duration = 60 / tempo  # テンポによる一拍の時間(秒)

    animation_length = quarter_note_duration * 4 * measures  # 四分音符の数 × 小節の数
    return animation_length

if __name__ == "__main__":
    # 読み込むMusicXMLファイルのパス
    musicxml_path = "C:\\XXX.mxl"

    # アニメーションの長さを取得
    animation_length = get_animation_length_from_musicxml(musicxml_path)

    if animation_length:
        print(f"アニメーションの長さ: {animation_length} 秒")

こちらのコードでは店舗を60で割り、四分音符一つ分の秒数を求め、小節数をかけています。

これを実行すると次のようなログを確認できます。

これによって曲の長さが取得できました。

本日は以上です。