你好,我是拂晓东夕~
有专业生成生成歌曲的软件,今天想到怎么样用代码去作曲,于是就去试了试,用python代码怎么为诗歌谱曲
素材——我的藏头诗
常怀雅致任君行,
晓月银钩显豪情,
东旭冉升平湖越,
男儿有志八方名。
提示词模板实例
用python为"常怀雅致任君行,晓月银钩显豪情,东旭冉升平湖越,男儿有志八方名"这首藏头诗谱曲,生成一个midi文件,每个字对应一个音符,总共四句,这四句中前六个字对应四分音符,最后一个字对应二分音符,整体的格式要符合羽调式,四句起承转合
核心代码(AI)
import midofrom mido import MidiFile, MidiTrack, Message# 羽调式(Yu Mode)的音高序列(基于C大调的A羽调:A B C E F A)yu_mode_notes = {'C': 60, 'D': 62, 'E': 64, 'F': 65, 'G': 67, 'A': 69, 'B': 71, 'C5': 72, 'D5': 74, 'E5': 76, 'F5': 77, 'G5': 79, 'A5': 81}title = "常怀雅致任君行,晓月银钩显豪情,东旭冉升平湖越,男儿有志八方名"phrases = title.split(",")# 创建MIDI文件mid = MidiFile()track = MidiTrack()mid.tracks.append(track)# 设置速度(BPM)track.append(mido.MetaMessage('set_tempo', tempo=mido.bpm2tempo(100)))# 各句的音高序列,体现起承转合# 起句(第一句):平稳开头,建立主题tune_1 = [yu_mode_notes['A'], yu_mode_notes['B'], yu_mode_notes['C'], yu_mode_notes['E'], yu_mode_notes['F'], yu_mode_notes['A'], yu_mode_notes['C5']]# 承句(第二句):延续主题,略有发展tune_2 = [yu_mode_notes['B'], yu_mode_notes['C'], yu_mode_notes['E'], yu_mode_notes['F'], yu_mode_notes['A'], yu_mode_notes['B'], yu_mode_notes['D5']]# 转句(第三句):转折对比,推向高潮tune_3 = [yu_mode_notes['C'], yu_mode_notes['E'], yu_mode_notes['G'], yu_mode_notes['A'], yu_mode_notes['B'], yu_mode_notes['E5'], yu_mode_notes['G5']]# 合句(第四句):回归主题,圆满结束tune_4 = [yu_mode_notes['A'], yu_mode_notes['G'], yu_mode_notes['F'], yu_mode_notes['E'], yu_mode_notes['C'], yu_mode_notes['A'], yu_mode_notes['A5']]tunes = [tune_1, tune_2, tune_3, tune_4]# 写入音符for i, phrase in enumerate(phrases):for j, char in enumerate(phrase):# 前六个字是四分音符,最后一个字是二分音符 duration = 480 if j < 6 else 960 note = tunes[i][j]# 发送音符开始消息 track.append(Message('note_on', note=note, velocity=64, time=0))# 发送音符结束消息(间隔时间为音符时长) track.append(Message('note_off', note=note, velocity=64, time=duration))# 句间停顿(四分音符时长) track.append(Message('note_off', note=60, velocity=64, time=480))# 保存MIDI文件mid.save('poem_melody.mid')print("MIDI文件生成完成:poem_melody.mid")
格式转换网站
https://www.online-convert.com/
生成音频