python玩音乐
时间:2021-07-12
本文章向大家介绍python玩音乐,主要包括python玩音乐使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
再Github上看到一个rnn生成音乐的小案例,觉得非常有趣。接下来没事可以玩玩音乐方面的。从零开始学习,记录一下学习笔记。pip install music21
1.音符note
from music21 import * #1.音符类型music.note.Note f=note.Note('F5#')#创建音高维f5#的音符 f.name#音符的音名属性》》'F#' f.step#不包含变化音和八度信息的音级》》'F' f.octave#八度信息》》》5即第5个八度 f.pitch#音符的音高,返回一个音高对象》》》<music21.pitch.Pitch F#5> f.pitch.pitchClassString#音级,以C为0级,》》》'6'》》》意思是有6个半音阶 f.duration#音符的时值,返回一个时值对象》》》<music21.duration.Duration 1.0> f.duration.type#音符的时值类型》》》'quarter' f.octave=6#改变八度 f.octave》》》》6 f.pitch#<music21.pitch.Pitch F#6> f#<music21.note.Note F#> f.pitch.accidental=pitch.Accidental(-1)#pitch.accidental是变化音的类型 f#<music21.note.Note F-> f.duration.dots+=1#改变浮点数量 f.duration#<music21.duration.Duration 1.5> f.duration.quarterLength=2#直接改变时值,以四分音符计 f.duration#<music21.duration.Duration 2.0>
2.和弦
#2.和旋music21.chord.Chord cMajor=chord.Chord(['c4','e4','g4']) print(cMajor)#<music21.chord.Chord C4 E4 G4> cMajor=chord.Chord() cMajor.add(note.Note('c4')) cMajor.add(note.Note('e4')) print(cMajor)#<music21.chord.Chord C4 E4> cMajor.duration#和旋时值》》》<music21.duration.Duration 1.0> cMajor.duration.quarterLength=2#修改和旋时值 cMajor.duration#<music21.duration.Duration 2.0>
3.乐句
#3.乐句streamStream是在music21中类似list的基本单位,它可以储存任意music21对象及其组合。 stream1=stream.Stream() stream1.append(f) stream1#<music21.stream.Stream 0x17aee4a7a08> print(len(stream1))#1 stream1.show('text')#0.0} <music21.note.Note F-> n3=note.Note('D#5') stream1.repeatAppend(n3,4) print(len(stream1))#5 stream1.show('text') '''{0.0} <music21.note.Note F-> {2.0} <music21.note.Note D#> {3.0} <music21.note.Note D#> {4.0} <music21.note.Note D#> {5.0} <music21.note.Note D#>''' for thisNote in stream1: print(thisNote.step) '''F D D D D''' #也支持如列表的查找和删除: noteIndex=stream1.index(f)#找到这个音符的索引值 stream1.pop(noteIndex)#把这个音符删除 》》》<music21.note.Note F-> stream1[2]#<music21.note.Note D#> stream1.show('text') '''{2.0} <music21.note.Note D#> {3.0} <music21.note.Note D#> {4.0} <music21.note.Note D#> {5.0} <music21.note.Note D#>''' #stream可以嵌套使用,形成层级关系。 stream2=stream.Stream() note2=note.Note('D#5') stream2.insert(0,note2)#指定位置插入音符 stream2.append(stream1)#结尾加上乐句 stream2.show('text')#可以看出层级关系 '''{0.0} <music21.note.Note D#> {1.0} <music21.stream.Stream 0x17aeda1a548> {2.0} <music21.note.Note D#> {3.0} <music21.note.Note D#> {4.0} <music21.note.Note D#> {5.0} <music21.note.Note D#>'''
stream2.pitches#列出所有音高
'''[<music21.pitch.Pitch D#5>,
<music21.pitch.Pitch D#5>,
<music21.pitch.Pitch D#5>,
<music21.pitch.Pitch D#5>,
<music21.pitch.Pitch D#5>]'''
stream1.analyze('ambitus')<music21.interval.Interval P1>
4.小结
#4.小节Measure,需要插入到乐句中 m1=stream.Measure(number=0) m1.repeatAppend(f,4) m2=stream.Measure(number=1) m2.repeatAppend(note2,2) stream1=stream.Stream() stream1.append(m1) stream1.append(m2) ts=meter.TimeSignature() ts.denominator=4 ts.numerator=int(m1.duration.quarterLength) m1.insert(0,ts) m1.show('text') '''{0.0} <music21.meter.TimeSignature 8/4> {0.0} <music21.note.Note F-> {2.0} <music21.note.Note F-> {4.0} <music21.note.Note F-> {6.0} <music21.note.Note F->'''
5.生成乐谱
#5.生成乐谱Score,将乐句插入到声部,声部再插入到乐谱 score=stream.Score()#创建一个乐谱对象 part=stream.Part()#添加声部 part.partName='example part' part.append(stream2)#将之前的乐句添加到声部中 score.insert(0,part)#将声部插入到乐谱中 #乐谱添加题目、作者等信息 score.insert(0,metadata.Metadata()) score.metadata.title='example title'#题目 score.metadata.composer='example composer'#作曲家 score.write('xml',fp=r'example.xml')#'D:\\DeepLearning\\example.xml'》》》》生成xml文件
原文地址:https://www.cnblogs.com/Turing-dz/p/13278164.html
- 深入JDK源码之ThreadLocal类
- 独家 | 一文读懂TensorFlow基础
- Webpack中hash与chunkhash的区别,以及js与css的hash指纹解耦方案
- RPC原理及实现
- RMI原理及实现
- webpack多页面开发与懒加载hash解决方案
- 前后端分离和模块化-58到家微信首页重构之路
- Node.js建站笔记-使用react和react-router取代Backbone
- 协同过滤推荐算法Java代码实现
- Nginx模块之Filter解析
- Nodejs建站笔记-注册登录流程的简单实现
- 前端工程化-构建
- [翻译]开发Silverlight 2.0的自定义控件
- LINQ to SQL 辅助工具
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 60亿次for循环,原来这么多东西
- 不要再问我 in,exists 走不走索引了...
- 知乎太可恶了,一言不合就封号?
- 5年Java开发经验,面试挂在MySQL InnoDB上!大厂究竟多看重MySQL?
- 是你们的力量,让知乎看见了!
- 视屏面试传输协议到底是TCP还是UDP
- prometheus学习笔记(1)-mac单机版环境搭建
- Metaspace内存不足导致FGC问题排查
- useful-scripts
- 清空所有 NSUserDefaults 记录
- 重温Java Web的技术细节
- 国密算法SM2加解密_签名验签图形化例子
- 链接脚本linker script的妙用
- 【TBase开源版测评】轻松愉快去O选项:TBase
- Tungsten Fabric知识库丨更多组件内部探秘