Rainbow-Dreamer / musicpy

Musicpy is a music programming language in Python designed to write music in very handy syntax through music theory and algorithms.
https://musicpy.readthedocs.io/en/latest/
GNU Lesser General Public License v2.1
1.27k stars 124 forks source link

关于track类型与build函数的几个问题(可能是bug) #29

Closed oxygen-dioxide closed 3 years ago

oxygen-dioxide commented 3 years ago
  1. 用build函数创建piece,传入track时,只有当所有的track都有名称track_name时,输出piece的音轨才有名称。如果输入的某个track没有名称,则其他音轨的名称在piece中丢失 image 查看了代码,发现是写死在代码里面的。 https://github.com/Rainbow-Dreamer/musicpy/blob/ead467d168569d2cc4fd1191d788370118a5694c/musicpy/musicpy.py#L3019-L3020 是故意这样设计的吗?
  2. build不支持将数量不确定的track构建为一个piece。例如,这些track不是由用户在代码中写入的,而是由其他文件转换过来的,存放在一个list中,只能用append一个一个加。(这个设计不是很pythonic,像numpy这样的库会要求用户将所有的track先装入一个list,再传入函数,例如build([track1,track2,track3]),而不是build(track1,track2,track3)
  3. build不支持track与列表形式混输
Rainbow-Dreamer commented 3 years ago
  1. 目前是故意这样设计的,传入的音轨的属性中,只有当所有的音轨都有这一属性的时候才会给生成的乐曲类型赋予这一属性。这个我可以改进一下,改成只有当所有的音轨都没有这一属性才不进行赋值。(除了通道编号这个属性,必须所有的音轨都有通道编号的设定才赋予乐曲类型channels的属性,否则如果是按照剩下的未使用的通道编号来分配也是容易造成混乱)
  2. 其实这种情况可以使用python的可迭代对象拆包语法,比如build(*[track1,track2,track3]),就可以解决问题。不过我可以对这个函数增加音轨的列表的读取的功能。
  3. 这个也可以增加支持。 感谢你的反馈和改进意见 :) 下个版本中这些功能都可以实现
oxygen-dioxide commented 3 years ago
  1. 其实这种情况可以使用python的可迭代对象拆包语法,比如build(*[track1,track2,track3]),就可以解决问题。不过我可以对这个函数增加音轨的列表的读取的功能。

那还是别添加支持了,把可迭代对象拆包语法写进文档就行。做一件事情的方法太多的话,用户写调用这个库的代码不好维护。

Rainbow-Dreamer commented 3 years ago
  1. 其实这种情况可以使用python的可迭代对象拆包语法,比如build(*[track1,track2,track3]),就可以解决问题。不过我可以对这个函数增加音轨的列表的读取的功能。

那还是别添加支持了,把可迭代对象拆包语法写进文档就行。做一件事情的方法太多的话,用户写调用这个库的代码不好维护。

我认为构建乐曲类型还是应该添加对于可迭代对象的原生支持的,一直用拆包也不是很好看XD 目前的改进中,我已经把传入列表的所有参数个数必须相同的限制去掉了,如果参数个数不同,会进行默认值补余。音轨类型和列表的混输也已经实现,不过暂时还在测试中,等全部case通过了就更新版本。

Rainbow-Dreamer commented 3 years ago

已更新版本,wiki会跟着更新,感谢你为这个项目做出的改进 :)