[oeasy玩python教程]104衔尾蛇贯穿古今:传统首尾吟与 AI MIDI 作曲的韵律共鸣

衔尾蛇贯穿古今:传统首尾吟与 AI MIDI 作曲的韵律共鸣

回环诗_旋律模进_开嗓音频生成_sequence

回忆

  • 从c大调开始

    • 到c大调结束

图片描述

  • 这很像 衔尾蛇

图片描述

  • 绕了一圈 又回到了原点

    • 诗歌 里面也有这种 衔尾蛇 吗?🤔

首尾吟

  • 《首尾吟》

尧夫非是爱吟诗

- 诗是尧夫服老时

简尺每称林下士

- 过从或著道家衣

须将贤杰同星汉

- 直把身心比鹿麋

六十五年无事客

- 尧夫非是爱吟诗
  • 翻译到今天

不是尧夫爱唠叨 - 话到嘴边憋不了

平时都叫随性佬 - 出门常穿破外套

遇事只服硬气佬 - 待人愿当暖心袄

六十多年没烦扰 - 不是尧夫爱唠叨

  • 这 尧夫 谁啊?

    • 这诗 做的 挺饶舌

邵雍

  • 北宋五子之一

    • 邵雍(1011-1077)

    • 字尧夫

    • 号安乐先生

  • 尧夫 就是 邵雍自己

图片描述

  • 《首尾吟》

    • 共135首

    • 均以 尧夫非是爱吟诗

  • 你说他 到底 爱不爱 吟诗?😊

python判断

图片描述

# 1. 无标点的邵雍《首尾吟》全诗(纯文字,直接替换成你的诗歌即可)
pure_poem = "尧夫非是爱吟诗诗到忘言是尽时虽则借言通要妙又须从物见几微羹因不和方知淡乐为无声始识希多少风花待除改尧夫非是爱吟诗"

# 2. 提取前7字(第一句)和后7字(最后一句)
first_7 = pure_poem[:7]  # 取字符串开头7个字符
last_7 = pure_poem[-7:]  # 取字符串结尾7个字符

# 3. 判断是否相等,输出首尾吟验证结果
print("诗歌前7字(第一句):", first_7)
print("诗歌后7字(最后一句):", last_7)
print("-" * 30)
if first_7 == last_7:
    print("✅ 验证通过:前7字与后7字完全一致,符合首尾吟特征!")
else:
    print("❌ 验证未通过:前7字与后7字不一致,不符合首尾吟特征。")
  • 尧夫 唱了(call) 之后

    • 有个人 和(response) 诗

    • 谁呢?

  • 程颢(hào) 、 邵雍

    • 同时代的人

    • 都是 北宋五子

  • 和诗

    • 首尾改为

      • 先生非是爱吟诗

图片描述

  • 《和尧夫首尾吟》

    • 先生非是爱吟诗

    • 为要形容至乐时

    • 醉里乾坤都寓物

    • 閒来风月更输谁

    • 死生有命人何预

    • 消长随时我不悲

    • 直对希夷无事处

    • 先生非是爱吟诗

  • 不过 他的老师

    • 不是 邵雍

北宋五子

  • 他的老师 是

    • 北宋五子男团的精神领袖

    • 周敦颐

图片描述

  • 程颢

    • 北宋五子 男团

    • 里面 氛围担当

北宋五子担当简表

成员核心担当核心理由代表作品舞台风格
周敦颐精神领袖理学开山,《爱莲说》显清雅《爱莲说》
《太极图说》
温润庄重
邵雍民谣主唱
治愈担
著《击壤集》,诗传豁达《击壤集》
《皇极经世书》
亲切松弛
张载队长
正能量发言
“横渠四句”显担当,掌团队方向《正蒙》“横渠四句”挺拔有力
程颢氛围
互动达人
“如坐春风”,善调氛围《识仁篇》“洛学”亲和带综艺感
程颐实力
学术指导
提“格物致知”,控学术质量《伊川易传》
《二程遗书》
严肃输出知识点
  • 周敦颐 是 精神领袖

    • 有什么作品吗?

爱莲说

  • 熟悉他一篇文章

图片描述

  • 花 像人一样 有品格

    • 不像 牡丹一样 富贵

    • 也不像 菊花一样 隐逸

  • 他种了 好些莲花

    • 出淤泥而不染

    • 濯清涟而不妖

    • 中通外直

    • 不蔓不枝

    • 香远益清

    • 亭亭净植

    • 可远观而不可亵玩焉

  • 哲学层面 会影响 到 其他方面

太极图

  • 太极图 是他开始 画的

    • 5 层

      • 万物化生

      • 坤道成女与乾道成男

      • 木火土金水

      • 阴静阳动

      • 无名的圆框

    • 无极而太极

    • 太极生两仪

图片描述

  • 少年王安石 多次拜访 周敦颐

制度改革

  • 王安石 别的没学会

    • 学会了 乾道成男 坤道成女

    • 斗争这一套

图片描述

  • 后来 他

    • 彻底 不合作 了

    • 成了 拗相公

    • 天变都不足畏 了

  • 周敦颐一看 这哪行啊?

圜道

  • 阴阳 是不一样的

    • 但是 也是可以 相互转化的

    • 有周期性 规律的

  • 王安石

    • 太激进

    • 走太远

图片描述

  • 周敦颐 跟他不是一路人

王安石改革(熙宁变法)后新旧党境遇对比

  • 熙宁变法 新旧对比

    • 总会有更新的

阶段皇权背景旧党核心动态新党核心动态关键事件
变法推行期(新党主导)宋神宗(支持新党)司马光、苏轼反新法
多数被排挤出中央或退隐
王安石掌权,推新法
吸纳章惇等巩固权力
新法颁布
司马光编《资治通鉴》
元祐更化期(旧党复辟)高太后(反新法)核心成员回朝
废新法、打压新党
王安石病逝
核心成员被罢官外放
“元祐更化”
新党失势
绍圣绍述期(新党反攻)宋哲宗(支持新党)被定“元祐奸党”
核心成员被贬偏远地区
章惇、蔡京掌权
复新法、清算旧党
立“元祐党人碑”
苏轼被贬儋州
徽宗至北宋灭亡(两党衰落)宋徽宗(蔡京掌权)集团瓦解
成员多隐居或无实权
新党分裂
蔡京擅权,新法失初衷
靖康之变
北宋灭亡
  • 周而复始

    • 螺旋上升

    • 波浪前进

规律

“历史不会重演,但会押韵”

  • 历史 不会完全复刻过去

    • 不同时期的事情在本质、逻辑或发展轨迹上

      • 存在 相似性

    • 就像 诗歌押韵般

      • 有着呼应的节奏

图片描述

  • 苏轼 人生经历了 这个过程

    • 看透了 这变化

苏轼绝笔

  • 临终写了 首尾吟

庐山烟雨浙江潮 - 未到千般恨不消

到得还来别无事 - 庐山烟雨浙江潮

图片描述

  • 可以让ai帮我们写个首尾吟吗?

提问

图片描述

  • 可以 给首尾吟

    • 谱个曲子 吗?

曲谱

心同濂水净无沙
独爱莲芳自洁华
千载清风传雅韵
心同濂水净无沙

图片描述

根据这首,首尾吟的 28 个字,用python写一个 midi, 每个字对应一个音符。总共四句,这四句中的前六个字呢对应四分音符,最后一个字要押韵,对应一个二分音符。整体的诗歌呢要符合羽调式,所有音符都在羽调式调内,四句话起承转合。每行最后一个音符,尽量押韵。

代码

from mido import Message, MidiFile, MidiTrack, MetaMessage
import random

# 羽调式(A羽)音符库(按音高排序,五声音阶加上高八度羽音)
# A2 (57) 作为基础音(羽音),包含高八度羽音A3 (69)
yu_mode_notes = [57, 60, 62, 64, 67, 69]  # A(57)-羽、C(60)-宫、D(62)-商、E(64)-角、G(67)-徵、A(69)-高八度羽

# 诗句与节奏配置:前6字=四分音符(480 ticks),末字=二分音符(960 ticks)
poem = "心同濂水净无沙独爱莲芳自洁华千载清风传雅韵心同濂水净无沙"
rhythms = [480]*6 + [960]  # 单句节奏模板
all_rhythms = rhythms * 4  # 四句完整节奏

# 创建MIDI文件(1拍=480 ticks,速度120BPM)
mid = MidiFile(type=1, ticks_per_beat=480)
track = MidiTrack()
mid.tracks.append(track)

# 添加乐器(钢琴音色)和速度信息
track.append(Message('program_change', program=0, time=0))
track.append(MetaMessage('set_tempo', tempo=500000, time=0))  # 120BPM

# 生成音符:起承转合对应音高起伏,且第一句和最后一句旋律相同
note_index = 0
first_line_notes = []  # 用于存储第一句的音符序列

# 定义每行最后一个字使用的押韵音符(羽调式主音)
rhyming_note = yu_mode_notes[0]  # 使用基础羽音(57)作为押韵音

for i, char in enumerate(poem):
    # 判断是否为行尾最后一个字(每行第7个字)
    is_end_of_line = (i + 1) % 7 == 0
    
    # 行尾直接使用押韵音
    if is_end_of_line :
        note = rhyming_note  # 行尾使用押韵音
    else:
        # 起承转合音高设计(非行尾音符)
        if i < 7:  # 起句(前7字):中低音区
            note = yu_mode_notes[random.randint(0, 2)]  # 羽、宫、商(低音区)
            first_line_notes.append(note)  # 记录第一句的音符
        elif 7 <= i < 14:  # 承句(中间7字):略升
            note = yu_mode_notes[random.randint(1, 4)]  # 宫、商、角、徵(中高音区)
        elif 14 <= i < 21:  # 转句(后7字):高音区
            note = yu_mode_notes[random.randint(3, 5)]  # 角、徵、高八度羽(高音区)
        else:  # 合句(最后7字):与第一句旋律相同
            note = first_line_notes[i - 21]  # 复用第一句的音符序列
    
    # 添加音符(力度50-70,柔和贴合诗意)
    velocity = random.randint(50, 70)
    track.append(Message('note_on', note=note, velocity=velocity, time=0))
    track.append(Message('note_off', note=note, velocity=0, time=all_rhythms[note_index]))
    note_index += 1

# 保存MIDI文件
mid.save('咏濂溪首尾吟.mid')
print("MIDI文件已生成:咏濂溪首尾吟.mid")

效果

图片描述

  • 别的艺术 也有

    • 这种 首尾循环的吗?

从前有座山

  • 绕口令技巧

图片描述

电影

  • 首尾闭环

图片描述

  • 有这种谱子吗?

旋律

  • 茉莉花

图片描述

  • 西方呢?

西方音乐

  • 棒棒棒棒

图片描述

  • 管这个叫bookend

图片描述

  • 就像 书架两面的挡头

小星星

  • 小星星

    • 1155665 4433221

    • 首尾都有出现

图片描述

再提问

  • 其实我们熟悉的小星星

    • 也有这种 首尾呼应的感觉

图片描述

总结🤔

  • 这次研究了 首尾吟

    • 事情总是 绕圈重复

    • 我们需要 找到规律

图片描述

  • 文字 除了 首尾呼应之外

    • 也可以 层叠递进 吗?

  • 下次再说 👋

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值