暑假训练第四天,用python写校歌

今天我们学习了用python写一个校歌,

import wave
import math
import struct

ff = wave.open("henu.wav", "w")#打开一个名为henu.wav的文件,如果没有自己写一个
ff.setframerate(8000)#频率
ff.setnchannels(1)#一个声道
ff.setsampwidth(2)#音宽
def wv(t=0, f=0, v=0.5, wf=ff, sr=8000):#设置一个函数,设置变量
    '''
    t:写入时长
    f:声音频率
    v:音量
    wf:一个可以写入的音频文件
    sr:采样率
    '''
    tt = 0
    dt = 1.0 / sr  #每8000分之一取一次
    while tt <= t:
        s = math.sin(tt * math.pi * 2 * f) * v * math.pow(math.e, -2.5 * tt) * 32768  # 采样,调节音量,映射到[-2^15,2^15)
        s = int(s) #转化为整型数

        fd = struct.pack("h", s)  # 转换成8bit二进制数据
        wf.writeframes(fd)  # 写入音频文件
        tt += dt  # 时间流逝


note = {"-": 0, "0": 0, "1---": 49, "1#---": 52, "2b---": 52, "2---": 55, "2#---": 58, "3b---": 58, "3---": 62,
        "4---": 65, "4#---": 69, "5b---": 69, "5---": 73, "5#---": 78, "6b---": 78, "6---": 82, "6#---": 87,
        "7b---": 87, "7---": 92, "1--": 98, "1#--": 104, "2b--": 104, "2--": 110, "2#--": 117, "3b--": 117, "3--": 123,
        "4--": 131, "4#--": 139, "5b--": 139, "5--": 147, "5#--": 156, "6b--": 156, "6--": 165, "6#--": 175,
        "7b--": 175, "7--": 185, "1-": 196, "1#-": 208, "2b-": 208, "2-": 220, "2#-": 233, "3b-": 233, "3-": 247,
        "4-": 262, "4#-": 277, "5b-": 277, "5-": 294, "5#-": 311, "6b-": 311, "6-": 330, "6#-": 349, "7b-": 349,
        "7-": 370, "1": 392, "1#": 415, "2b": 415, "2": 440, "2#": 466, "3b": 466, "3": 494, "4": 523, "4#": 554,
        "5b": 554, "5": 587, "5#": 622, "6b": 622, "6": 659, "6#": 698, "7b": 698, "7": 740, "1+": 784, "1#+": 831,
        "2b+": 831, "2+": 880, "2#+": 932, "3b+": 932, "3+": 988, "4+": 1047, "4#+": 1109, "5b+": 1109, "5+": 1175,
        "5#+": 1245, "6b+": 1245, "6+": 1319, "6#+": 1397, "7b+": 1397, "7+": 1480, "1++": 1568, "1#++": 1661,
        "2b++": 1661, "2++": 1760, "2#++": 1865, "3b++": 1865, "3++": 1976, "4++": 2093, "4#++": 2217, "5b++": 2217,
        "5++": 2349, "5#++": 2489, "6b++": 2489}

#对照这首歌的谱子打
n = [
    "5-", "1", "1", "1", "7-",
    "1", "3", "3", "3", "2",
    "5", "5", "6", "5",
    "4", "3", "2", "-",
    "3", "2", "1", "7-", "6-",
    "7-", "1", "2", "3", "4",
    "6", "5", "4", "3",
    "2", "3", "1", "5", "-",
    "2", "3", "4", "4",
    "6", "6", "5", "4", "3",
    "4", "2", "3", "5",
    "2", "3", "2", "7-", "5-",
    "1", "3", "5", "6", "5", "-",
    "6", "4", "2", "-",
    "2", "3", "4", "3 ","2", "-",
    "6-", "7-", "1", "-"
]
#调整每个音所持续的时间
tm = [
    2, 2, 2, 1, 1,
    2, 2, 2, 1, 1,
    3, 1, 2, 2,
    2, 2, 2, 2,
    3, 1, 1, 1, 2,
    3, 1, 1, 1, 2,
    2, 2, 2, 2,
    2, 1, 1, 2, 2,
    3, 1, 2, 2,
    3, 1, 1, 1, 2,
    2, 2, 2, 2,
    3, 1, 1, 1, 2,
    1, 1, 1, 1, 2, 2,
    2, 2, 2, 2,
    1, 1, 1, 1, 2, 2,
    3, 1, 3, 4
]

#用一个for循环调用函数,并赋值,开始写歌
for i in range(len(n)):
    wv(tm[i] / 4.0, note[n[i]])

ff.close()#关闭程序

猜你喜欢

转载自blog.csdn.net/weixin_42627450/article/details/81038778
今日推荐