用于Gamelan音乐的Python序列器

gamelan-sequencer的Python项目详细描述


Gamelan序列器

Python Sequencer for Gamelan Music

简介

问题:西方乐谱和MIDI文件不太适合为gamelan乐团创作和演奏乐曲。在

解决方案:Gamelan Sequencer使用Gamelan友好的Kepatian启发的分数格式。当提供乐器样本和乐谱时,提供的Python脚本将生成音乐的录制。在

我很幸运地在网上找到了加州大学戴维斯·加梅兰合唱团的样本,为凯图录制-ketik.com网站由Elisa Hough提供,经允许,我将用这些样本来播种这个系统。在

演示

克隆此存储库并运行以下操作(假设已安装Python):

python -m gamelan_sequencer scores/simple_score.json --mixdown=simple_score.wav

输出应该是一个简单的音乐作品。在

python -m gamelan_sequencer scores/kotekan_sonatina.json --mixdown=kotekan_sonatina.wav

输出应该是这样的:https://youtu.be/6_ZQaYkq0q0

注意:上面视频中的录制使用了--separates选项,而不是--mixdown,这允许我从单个曲目进行自定义合成。

要求

  • Python2.6+或Python3的任何版本
  • (仅当您设置“失谐率”>;0时)scipy库:pip install scipy

使用

从命令行

python -m gamelan_sequencer SCORE_FILE [--mixdown=MIXDOWN_FILE] [--separates=SEPARATES_FOLDER] [--samples=SAMPLES_FILE]

  • SCORE_文件:JSON格式的SCORE的路径
    • 有关示例,请参见scores文件夹
  • 以下参数中的一个(或两个):
    • 合成_文件:录制到单个文件
    • 将_FOLDER:记录分隔到包含多个文件的文件夹中
  • SAMPLES_文件(可选):gamelan JSON文件的路径
    • 默认为提供的javanese_gamelan.json
    • 此JSON引用的所有声音必须是WAV格式,并且具有相同的帧速率/每采样位数/num通道。在

从Python环境

from gamelan_sequencer import Gamelan

gamelan = Gamelan()
score = gamelan.load_score(SCORE_FILE)
if score.load_errors == 0:
   score.write_mixdown(MIXDOWN_FILE)
   -and/or-
   score.write_separates(SEPARATES_FOLDER)

输出

输出将是与示例文件具有相同帧速率/每采样位数/num通道的WAV文件。在

如果您为--mixdown提供一个文件名,则整个录制将混合为一个WAV文件。在

如果您为--separates提供一个文件夹路径,那么您将为每个唯一的仪器/名称对获得一个单独的WAV文件。在

分数格式

有关示例,请参见scores文件夹。在

Gamelan音乐有不同的音阶符号,但通常都是用一个八度音阶内的数字来表示,数字上方或下方的一个点分别代表较低或较高的八度。在

为了方便起见,我在提供的示例中使用了字母数字值:

^{pr2}$

您可以指定在示例JSON文件中选择的任何字符映射(甚至unicode),然后在相应的score JSON文件中使用该映射。在

例如,在默认示例文件javanese_gamelan.json中,我们有以下jenglong示例:

    "jenglong": { 
      "samples": {
      "1": "jenglong5lo.wav", 
      "2": "jenglong4.wav", 
      "3": "jenglong3.wav", 
      "5": "jenglong2.wav", 
      "6": "jenglong1.wav",
      "A": "jenglong5hi.wav"
      }
    }

因此,在我们的乐谱中,我们可以参考以下音符:

{ "instrument": "jenglong", "notes": "5...6...A.6.5...6...A.6.5..." }

如何分开

例如,如果您有这样一个序列:

{ "instrument": "gong",                            "notes": "1..." },
{ "instrument": "bonang", "track_name": "polos",   "notes": "56.5" },
{ "instrument": "bonang", "track_name": "sangsih", "notes": "32.3" }

然后,这些注释将分别记录到以下文件中:

  • 在锣鼓在
  • 博南_马球.wav在
  • 博南_桑西.wav在

它们都是同步的,所以你可以把它们拖到你选择的音频应用程序中进行混合。在

许可证

根据麻省理工学院的许可证。在

注:来自ketuk的样品-ketik.com网站不在本许可证范围内。关于这些在线样品,请参考http://elisahough.com/sounds/sampler.html。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
我可以用C++代码使用java代码吗?   java使用JSR303在派生类中提供更具体的约束   java在这个查找唯一路径数算法中我做错了什么?   java如何为2个不同的服务提供商使用2个不同的SSL证书?   java在Gridview上绘制文本   java使用连接for循环构建字符串名   java StringBuilder拆分无法处理某些文件   java事件关注EditText   Java Web Start“找不到URL的缓存资源”   java程序从命令行运行的速度比在Eclipse中慢   java为什么HttpServletRequest会截断#字符上的url输入?   java自定义折叠工具栏平滑标题大小调整   使用Mockito对安卓 java中调用另一个静态函数的函数进行单元测试   http在java客户机中使用cachecontrol头   java如何使用。是否使用Delimiter从输入文件中排除标点符号和数字?   使用上下文作为参数/参数的java   java更有效地从Jar中提取文件   java为多个JButton提供相同的actionListener