本日はBlender枠です。
昨日BlenderでMusicXMLを読み込んで情報を使用することができました。
今回は違う内容として小節数を出力します。
小節数とテンポを使用することで曲全体の長さを求めることができます。
〇コード
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で割り、四分音符一つ分の秒数を求め、小節数をかけています。
これを実行すると次のようなログを確認できます。

これによって曲の長さが取得できました。
本日は以上です。