2025年2月14日 星期五 甲辰(龙)年 腊月十四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

python 音乐常用操作

时间:04-01来源:作者:点击数:35

一,python合成音乐

  • import json
  • import numpy as np
  • import matplotlib.pyplot as plt
  • from scipy.io.wavfile import write
  • # 音阶频率对照表
  • tone_freq_map={"#g3": 1863.7, "#b3": 2348.3, "e1": 329.5, "f2": 739.5, "d1": 293.4, "#c3": 1244.0,
  • "#D": 155.46175, "E": 164.745, "E1": 82.3725, "#a1": 466.0, "d2": 621.8, "d3": 1318.0,
  • "c3": 1174.1, "G1": 97.93175, "C": 130.75, "#C": 138.529625, "#d1": 310.9, "e3": 1479.3,
  • "#b2": 1108.2, "c2": 554.1, "a1": 439.8, "D": 146.766875, "#F1": 92.44,"b1": 493.7,
  • "#F": 184.881, "D1": 73.35075, "#a2": 987.2, "#G": 207.566,"b3": 2216.5, "g3": 1759.1,
  • "#D1": 77.730875, "F1": 87.276, "#c2": 587.1, "B": 246.790625, "#C1": 69.232125,
  • "#f1": 369.8, "#a3": 2092.0, "#d2": 659.0, "#g2": 879.7, "#f2": 783.7, "#b1": 523.0,
  • "#f3": 1660.5, "#g1": 415.0, "f3": 1567.2, "#c1": 276.9, "C1": 65.375, "A": 219.922,
  • "#A1": 116.49825, "A1": 109.9608, "g2": 830.3, "F": 174.5513, "f1": 349.1, "#A": 232.9965,
  • "c1": 261.5, "a2": 932.0, "a3": 1974.6, "#d3": 1396.1, "#G1": 103.750125, "g1": 391.7,
  • "G": 195.928875, "B1": 123.428, "b2": 1046.0, "e2": 698.2}
  • def synthesizer(freq,duration,amp=1.0,sampling_freq=44100):
  • ''' 合成音调 '''
  • t=np.linspace(0,duration,duration*sampling_freq) # 创建时间轴
  • audio=amp*np.sin(2*np.pi*freq*t)
  • audio=audio.astype(np.int16)
  • return audio
  • if __name__=='__main__':
  • lengths=60
  • # 生成2秒的G调
  • #input_tone='G'
  • #duration=12 # 单位:秒
  • amplitude=10000
  • sampling_freq=44100 # 单位:Hz
  • # 音阶及持续时间
  • #tone_seq=[('D',0.3),('G',0.6),('C',0.5),('A',0.3),('#A',0.7)]
  • tone_seq=[]
  • keyss=list(tone_freq_map.keys())
  • keys=[]
  • ind=0
  • for i in range(lengths):
  • try:
  • keys.append(keyss[ind])
  • except IndexError:
  • ind=0
  • keys.append(keyss[ind])
  • ind+=1
  • for i in range(lengths):
  • d=np.random.choice(keys[i:i+3])
  • pl=np.random.randint(2,8)/10
  • tone_seq.append((d,pl))
  • output=np.array([])
  • for i in tone_seq:
  • input_tone=i[0]
  • duration=i[1]
  • # 生成音阶
  • synthesized_tone=synthesizer(tone_freq_map[input_tone],duration,
  • amplitude,sampling_freq)
  • output=np.append(output,synthesized_tone,axis=0)
  • # 将生成信号写入输出文件
  • write('output_tone.wav',sampling_freq,output)
  • print('生成文件: output_tone.wav 成功!')

执行结果如下:

生成文件: output_tone.wav 成功!

二, 播放音乐:

使用 pygame 模块播放

进入命令行安装 pygame: pip install pygame

  • import pygame
  • """
  • pygame -- 音乐 常用方法
  • pygame.init() 进行全部模块的初始化,
  • pygame.mixer.init() 或者只初始化音频部分
  • pygame.mixer.music.load('xx.mp3') 使用文件名作为参数载入音乐 ,音乐可以是ogg、mp3等格式。载入的音乐不会全部放到内容中,而是以流的形式播放的,即在播放的时候才会一点点从文件中读取。
  • pygame.mixer.music.play()播放载入的音乐。该函数立即返回,音乐播放在后台进行。
  • play方法还可以使用两个参数
  • pygame.mixer.music.play(loops=0, start=0.0) loops和start分别代表重复的次数和开始播放的位置。
  • pygame.mixer.music.stop() 停止播放,
  • pygame.mixer.music.pause() 暂停播放。
  • pygame.mixer.music.unpause() 取消暂停。
  • pygame.mixer.music.fadeout(time) 用来进行淡出,在time毫秒的时间内音量由初始值渐变为0,最后停止播放。
  • pygame.mixer.music.set_volume(value) 来设置播放的音量,音量value的范围为0.0到1.0。
  • pygame.mixer.music.get_busy() 判断是否在播放音乐,返回1为正在播放。
  • pygame.mixer.music.set_endevent(pygame.USEREVENT + 1) 在音乐播放完成时,用事件的方式通知用户程序,
  • 设置当音乐播放完成时发送pygame.USEREVENT+1事件给用户程序。 pygame.mixer.music.queue(filename) 使用指定下一个要播放的音乐文件,
  • 当前的音乐播放完成后自动开始播放指定的下一个。一次只能指定一个等待播放的音乐文件。
  • """
  • # 初始化
  • pygame.mixer.init()
  • # 加载音乐
  • pygame.mixer.music.load('道德经.mp3'.encode())
  • # 开始播放
  • pygame.mixer.music.play()
  • # 停止播放
  • # pygame.mixer.music.stop()
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门