一、录制每个需要的葫芦丝音节
二、按照一定规则输入乐谱
三、根据乐谱把音节组合成完整的曲子并以mp3格式输出
四、运行代码的准备工作
1.需要安装配置python
2.安装python的ffmpeg库、pydub库
3.安装并配置FFmpeg:
FFmpeg下载地址:https://www.videohelp.com/software/ffmpeg/old-versions
解压后将bin文件夹的路径添加到用户环境变量的路径变量中即可。
五、python源代码
from pydub import AudioSegment
if __name__ == '__main__':
print("请输入乐谱,0表示暂停,*表示重复上一个音符的音,去掉音节开头")
print("可选范围:-3,-5,-6,-7,1,2,3,4,5,6,0,*,两个音节之间不要有其它符号")
#-0.7表示没有开头的深7,7表示有开头的7,-7表示有开头的深7
yuepu=str(input())#输入乐谱
islow=0
newyuepu=[]
repeat=0
#将字符串格式的乐谱转化为列表
for i in range(len(yuepu)):
if (yuepu[i]=='-'):
islow=1
continue
if islow==1 :
newyuepu.append(-int(yuepu[i]))
repeat=-int(yuepu[i])
islow=0
else :
if yuepu[i]!='*':
repeat=int(yuepu[i])
newyuepu.append(yuepu[i])
else :
newyuepu.append(repeat/10)
#创建一个空的音频对象
result=AudioSegment.empty()
isreversed = 0
happen=2
#根据乐谱来组合音节,形成完整的乐曲
for j in range(len(newyuepu)):
print(1)
path='E:/pycharm_project/hulusi/'+str(newyuepu[j])+'.mp3'
print(path)
newmusic=AudioSegment.from_file(path)
#让相邻的相同音来回倒转,减少不适感
if (int(newyuepu[j])>1) or int(newyuepu[j])<-1:
isreversed=0
if (int(newyuepu[j])<1 and int(newyuepu[j])>-1 and isreversed==0):
newmusic=newmusic.reverse()
isreversed=1
happen=1
if (int(newyuepu[j]) < 1 and int(newyuepu[j]) > -1 and isreversed == 1 and happen==0):
isreversed = 0
happen=0
result = result + newmusic
#输出乐曲
result.export("E:/pycharm_project/hulusi/ooo.mp3", format="mp3")
print(newyuepu)
六、代码改进方向
1.可以通过读取每个音节的时长从而调整倍速
2.可以用多个不同调的葫芦丝录制音节从而丰富音调数量
3.可以利用图形界面增加使用体验
4.可以读取每个音节的时长,剪裁部分时长达到倍速效果
5.可以用一堆if....else或者机器学习来添加波音,调整音量等,使输出音频更加悦耳
6..........................................
|