c自然大調_開嗓音頻_123454321_bpm

回憶

  • 上次我們 製作了迴文音符序列
  • 123454321

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_右鍵

  • 要整合成一個
  • 序列不斷升級
  • 從c開始
  • 到c結束

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_ci_02

  • 可以整合嗎?🤔

xstudio編輯

  • 13個小山峯

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_Python_03

  • 這有什麼説法 呢?

八度

  • 觀察 鋼琴捲簾
  • 黑鍵 2個、3個 循環
  • 2個 像筷子
  • 3個 像叉子
  • 每組 循環
  • 叫做 1個 八度
  • octave

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_Python_04

  • 攏共 好幾個八度

觀察

  • 每個八度裏面
  • 12個音
  • 7個白鍵 + 5個黑鍵

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_右鍵_05

  • 如果12個鍵 裏面
  • 只選擇7個白鍵 就構成
  • C大調音階

提問

請幫我使用mido,生成一個 Python,運行後可以生成c大調音階mid

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_ci_06

代碼

  • 複製代碼
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()

粘貼並運行

  • 粘貼代碼後
  • 點擊運行

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_Python_07

運行之後

  • 右鍵文件可以下載到本地

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_右鍵_08

  • 可以用本地的DAW打開
  • Digital Audio Workstation(數字音頻工作站)
  • windows - 水果flstudio
  • mac - 庫樂隊
  • 也可以在線編輯

結果

  • 在線編輯midi
  • https://midi-to-gcode.bambulab.com/edit
  • 看到了 c自然大調 音階
  • C_major_scale
  • 白鍵 一個不落

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_Python_09

  • 什麼是 c自然大調 呢?

c自然大調

  • 使用 這個音程關係(全全半全全全半)
  • 從c開始
  • 到c結束

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_ci_10

  • 有什麼特點呢?

音程關係

  • 自然大調
  • 自然 就 符合規律
  • 大調 就是 在調子裏面
  • 不跑調

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_右鍵_11

  • c自然大調
  • 寫做
  • 1 = c
  • 或 Do = c

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_右鍵_12

  • 大調 可以
  • 不從C 開始 嗎?

更多大調

  • 選中 8個音符
  • 將根音 從C
  • 移動到G
  • 得到 G自然大調
  • 從 G開始
  • 到 G結束
  • G、A、B、C、D、E、F、F#、G

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_Python_13

  • 音程 為 全全半全全全半
  • 所以 同樣是 自然大調音階
  • 依舊自然
  • 依舊不跑調
  • 根音在G的 自然大調
  • G自然大調

起始位置

  • 全全半全全全半的
  • 自然大調音階
  • 從誰 開始都可以
  • 只要保證 音節關係就可以

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_ci_14

  • 每八度 有 12個琴鍵
  • 總共有 12種自然大調

要求

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_右鍵_15

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])
  • 除了省
  • 也可以是
  • 地級市
  • 縣城

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_Python_16

  • 有點像 骨牌

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_Python_17

  • 並列且遞進的感覺

13個山峯

  • 13個山峯
  • 從C大調開始
  • 到C#大調
  • 再到D大調
  • 12個琴鍵都做過大調的基音
  • 回到C大調

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_ci_18

  • 回答最初
  • 形成迴環

動畫電影

  • 就像電影最終
  • 又回到了最開始的地方

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_Python_19

  • 這裏是終點
  • 這裏也是起點

總結🤔

  • 從c大調開始
  • 到c大調結束

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_右鍵_20

  • 這很像 銜尾蛇

103用Python解碼音樂奧秘!自然大調+鋼琴結構+循環美學一次性掌握_右鍵_21

  • 繞了一圈 又回到了原點
  • 詩歌 裏面也有這種 銜尾蛇 嗎?🤔
  • 下次再説 👋