写在前面
那年夏天,有《纸短情长》,有《稻香》,有《可不可以》,有《体面》,还有《起风了》……本期小编给大家分享Python弹奏的《起风了》钢琴曲,一起来看看吧!
《起风了》
《起风了》是一首深情流行的中文歌曲,最初发行于2017年2月22日,由买辣椒也用券和米果填词,基于日本音乐人高桥优的作品《ヤキモチ》改编而来。这首歌以其深刻的歌词和悠扬旋律迅速走红,讲述了一位少年从青涩到成熟的心路历程,以及对爱情和人生的深刻感悟。它描绘了对世界的无限好奇与留恋,表达了即使面对重重困难也勇于追寻梦想与爱情的勇气。
起风了歌词
我曾将青春翻涌成她
也曾指尖弹出盛夏
心之所动 且就随缘去吧
这一路上走走停停
顺着少年漂流的痕迹
迈出车站的前一刻
竟有些犹豫
不禁笑这近乡情怯
仍无可避免
而长野的天
依旧那么暖
风吹起了从前
从前初识这世间
万般流连
看着天边似在眼前
也甘愿赴汤蹈火去走它一遍
如今走过这世间
万般流连
翻过岁月不同侧脸
措不及防闯入你的笑颜
我曾难自拔于世界之大
也沉溺于其中梦话
不得真假 不做挣扎 不惧笑话
我曾将青春翻涌成她
也曾指尖弹出盛夏
心之所动 且就随缘去吧
逆着光行走 任风吹雨打
Python起风了
完整代码
import ctypes
import threading
import time
winmm = ctypes.windll.winmm
……
sleep = 0.35
for i in wind:
if i == -1:
break
if i == 0:
sleep = 0.172
continue
if i == 700:
time.sleep(0.172)
continue
if i == 300:
sleep = 0.35
continue
if i == Voice._:
time.sleep(0.25)
continue
back = playNote(handle, 0, instrument, i, velocity, sleep)
print(back, end="\n")
# time.sleep(sleep)
# MIDI_MAPPER 常量
MIDI_MAPPER = 0xFFFFFFFF
# 创建一个变量来接收 MIDI 输出句柄
hMidiOut = ctypes.c_void_p()
# 调用 midiOutOpen 函数
result = winmm.midiOutOpen(ctypes.byref(hMidiOut), MIDI_MAPPER, 0, 0, 0)
if result == 0:
print("midiOutOpen succeeded")
# go(hMidiOut,107)
……
代码分析
这段代码是一个使用 MIDI 协议生成音乐的 Python 脚本,具体分析如下。
Scale 和 Voice 类: 这些类定义了音乐音阶和音符,使用 MIDI 音符编号。每个常量对应一个特定的 MIDI 音符。
playNote 函数: 这个函数播放一个 MIDI 音符。它接受参数,如 MIDI 输出句柄 (hmo)、通道、乐器、音符、速度和可选的持续时间。它发送音符开启和(如果指定了持续时间)音符关闭的 MIDI 消息。
go 函数: 这个函数定义了要播放的音符序列。它遍历了一个 MIDI 音符号的列表,并为每个音符调用 playNote。它还包含处理特殊情况的逻辑,如暂停和速度变化。
MIDI_MAPPER和hMidiOut: 这些变量用于使用winmm库的midiOutOpen函数打开 MIDI 输出设备。
线程创建和执行: 创建了两个线程来同时播放不同的旋律。每个线程使用不同的乐器和速度参数调用go函数。
线程加入和 MIDI 输出关闭: 线程执行结束后,它们被加入,然后使用midiOutClose关闭 MIDI 输出。
总的来说,这个脚本通过向输出设备发送 MIDI 消息来生成音乐,创建多个线程同时播放不同的旋律。
系列推荐
写在最后
我是一只有趣的兔子,感谢你的喜欢!