c自然大调_开嗓音频_123454321_bpm
回忆
- 上次我们 制作了回文音符序列
- 123454321
- 要整合成一个
- 序列不断升级
- 从c开始
- 到c结束
- 可以整合吗?🤔
xstudio编辑
- 13个小山峰
- 这有什么说法 呢?
八度
- 观察 钢琴卷帘
- <span style="background:black;color:white;">黑键</span> 2个、3个 循环
- 2个 像筷子
- 3个 像叉子
- 每组 循环
- 叫做 1个 八度
- octave
- 拢共 好几个八度
观察
- 每个八度里面
- 有
12个音 - <span style="border:1px solid black;">7个白键</span> + <span style="background:black;color:white;">5个黑键</span>
- 如果12个键 里面
- 只选择7个白键 就构成
C大调音阶
提问
请帮我使用mido,生成一个 Python,运行后可以生成c大调音阶mid
代码
- 复制代码
from mido import Message, MidiFile, MidiTrack, MetaMessage def create_vocal_warmup_midi(output_file="C_major_scale.mid", tempo=500000, note_duration=500): # 创建 MIDI 文件和音轨 mid = MidiFile() track = MidiTrack() mid.tracks.append(track) # 设置速度(微秒/拍,默认中速) track.append(MetaMessage('set_tempo', tempo=tempo)) # 定义开嗓音阶(C大调音阶:C4到C5再下行,对应MIDI音符60-67-60) scale_notes = [60, 62, 64, 65, 67, 69, 71, 72] # 音符序列(C4, D4, E4, F4, G4, A4, B4, C5) # 生成音符事件 for note in scale_notes: # 音符开启(力度64) track.append(Message('note_on', note=note, velocity=64, time=0)) # 音符持续时间(以 ticks 为单位,需转换:1拍=480 ticks,假设4分音符为note_duration毫秒) ticks = int((note_duration / 1000) * (mid.ticks_per_beat)) # 音符关闭 track.append(Message('note_off', note=note, velocity=64, time=ticks)) # 保存 MIDI 文件 mid.save(output_file) print(f"MIDI 文件已生成:{output_file}") if __name__ == "__main__": create_vocal_warmup_midi()
粘贴并运行
- 粘贴代码后
- 点击运行
运行之后
- 右键文件可以下载到本地
- 可以用本地的DAW打开
- Digital Audio Workstation(数字音频工作站)
- windows - 水果flstudio
- mac - 库乐队
- 也可以在线编辑
结果
- 在线编辑midi
- 看到了 c自然大调 音阶
- C_major_scale
- 白键 一个不落
- 什么是 c自然大调 呢?
c自然大调
- 使用 这个音程关系(全全半全全全半)
- 从c开始
- 到c结束
- 有什么特点呢?
音程关系
- 自然大调
- 自然 就 符合规律
- 大调 就是 在调子里面
- 不跑调
- c自然大调
- 写做
- 1 = c
- 或 Do = c
- 大调 可以
- 不从C 开始 吗?
更多大调
- 选中 8个音符
- 将根音 从C
- 移动到G
- 得到 G自然大调
- 从 G开始
- 到 G结束
- G、A、B、C、D、E、F、F#、G
- 音程 为 全全半全全全半
- 所以 同样是 自然大调音阶
- 依旧自然
- 依旧不跑调
- 根音在G的 自然大调
- G自然大调
起始位置
- 全全半全全全半的
- 自然大调音阶
- 从谁 开始都可以
- 只要保证 音节关系就可以
- 每八度 有 12个琴键
- 总共有 12种自然大调
要求
from mido import Message, MidiFile, MidiTrack, MetaMessage base_note = 60 # C4 note_offsets = [0, 2, 4, 5, 7, 5, 4, 2, 0] # 123454321音程 bpm = 120 ticks_per_beat = 480 time_per_beat = 60 / bpm time_per_tick = time_per_beat / ticks_per_beat note_duration = 0.5 # 前8音时长,最后音4拍 track_separator = int(2 * time_per_beat / time_per_tick) # 调间间隔2拍 mid = MidiFile(ticks_per_beat=ticks_per_beat) track = MidiTrack() mid.tracks.append(track) # 添加速度控制(可选) track.append(MetaMessage('set_tempo', tempo=int(bpm * 500000 / 60))) # 转换为微秒/拍 for transpose in range(13): # 升0~12半音(C4到C5) current_note = base_note + transpose for i, offset in enumerate(note_offsets): note_num = current_note + offset # 音符按下 track.append(Message('note_on', note=note_num, velocity=64, time=0)) # 计算时长 if i == len(note_offsets) - 1: tick_duration = int(4 * time_per_beat / time_per_tick) else: tick_duration = int(note_duration / time_per_tick) # 音符松开 track.append(Message('note_off', note_num, velocity=64, time=tick_duration)) # 调间间隔(2拍休止符) track.append(Message('note_off', note=0, velocity=0, time=track_separator)) # 空事件表示休止 mid.save('all_scales_sequential.mid') print("合并后的MIDI文件已生成(同一音轨顺序演奏)")
歌词
- 从南到北
海南渔舟荡舟渔南海 台湾渔帆扬帆渔湾台 云南普洱香洱普南云 广西漓水清水漓江广 广东粤茶香茶粤东广 福建闽剧演剧闽建福 贵州黔茶绿茶黔州贵 湖南湘茶香茶湘南湖 江西赣江流江赣西江 浙江西湖美湖西江浙 湖北黄鹤立鹤黄北湖 安徽黄山秀山黄徽安 江苏评弹唱弹评苏江 四川蜀锦艳锦蜀川四 重庆山城雾城山重川 青海盐湖映湖海盐青 甘肃祁连秀连祁肃甘 陕西秦俑立俑秦西陕 宁夏塞漠孤漠塞夏宁 新疆胡杨挺杨胡疆新 河南殷墟藏墟殷南河 山东花生盛生花东山 山西悬空寺空悬西山 河北渤海涌海渤北河 天津海河映河海津天 京香山云绕云山香京 内蒙草原牧原草蒙内 辽宁辽塔耸塔辽宁辽 吉林雾凇凝凇雾林吉 龙江冰雕映雕冰江龙
- 如何改成从北到南?
歌词生成
s = "海南渔舟荡舟渔南海台湾渔帆扬帆渔湾台云南普洱香洱普南云广西漓水清水漓江广广东粤茶香茶粤东广福建闽剧演剧闽建福贵州黔茶绿茶黔州贵湖南湘茶香茶湘南湖江西赣江流江赣西江浙江西湖美湖西江浙湖北黄鹤立鹤黄北湖安徽黄山秀山黄徽安江苏评弹唱弹评苏江四川蜀锦艳锦蜀川四重庆山城雾城山重川青海盐湖映湖海盐青甘肃祁连秀连祁肃甘陕西秦俑立俑秦西陕宁夏塞漠孤漠塞夏宁新疆胡杨挺杨胡疆新河南殷墟藏墟殷南河山东花生盛生花东山山西悬空寺空悬西山河北渤海涌海渤北河天津海河映河海津天京香山云绕云山香京内蒙草原牧原草蒙内辽宁辽塔耸塔辽宁辽吉林雾凇凝凇雾林吉龙江冰雕映雕冰江龙" print(s[::-1])
- 除了省
- 也可以是
- 地级市
- 县城
- 有点像 骨牌
- 并列且递进的感觉
13个山峰
- 13个山峰
- 从C大调开始
- 到C#大调
- 再到D大调
- 12个琴键都做过大调的基音
- 回到C大调
- 回答最初
- 形成回环
动画电影
- 就像电影最终
- 又回到了最开始的地方
- 这里是终点
- 这里也是起点
总结🤔
- 从c大调开始
- 到c大调结束
- 这很像 衔尾蛇
- 绕了一圈 又回到了原点
- 诗歌 里面也有这种 衔尾蛇 吗?🤔
- 下次再说 👋
浙公网安备 33010602011771号