Giter VIP home page Giter VIP logo

auto-composer's Introduction

Auto Composer Project

Powered by FWERKOR Team, especially by Castronaut.

本项目大致可以分为compose、config、train、resources、output、sound_font等部分

compose部分

本项目的核心,非常重要。

模块划分

  1. 配置加载模块: 导入配置文件config.json,读取各项配置参数,如和弦定义、和弦转移概率、乐器定义、段落结构等。这为后续的音乐生成提供必要的信息。

  2. MIDI文件初始化模块: 初始化MIDI文件song,为不同乐器添加曲谱轨道track。这准备了保存生成音乐的容器。

  3. 和弦选择模块: 定义choose_chord函数,根据上个和弦及转移概率随机选择下一个和弦,实现和弦进展。

  4. 旋律生成模块: 定义generate_melody函数,根据预设样式随机生成旋律音符序列,作为主旋律。

  5. 音符输出模块: 定义write_notes函数,根据乐器类型及通道,将指定的和弦音符添加到对应轨道上。

  6. 段落生成模块: 定义generate_para函数,在给定时间区间内调用write_notes输出各声部的音符,形成完整的段落。

  7. MIDI转换模块: 将生成的MIDI数据转换为多种格式的音频文件和分轨音频文件,实现乐曲的可聆听呈现和版权认证。

  8. 主程序模块: 控制各功能模块的调用,完成从配置解析、旋律生成到段落输出的完整流程,最终形成一首可保存和播放的新作品。

重要技术

  • 声部类型组: 内置7种类型声部处理方案。

  • 情绪处理: 现有自动作曲方式存在无法实现情绪波动,导致作品缺少观赏性的问题。本项目采取原创情绪参数波动方案,有一个mood变量随时间变化,根据配置文件中对于情绪节点和情绪变化自由程度的设定自动计算出合适的段落mood_tendency指数,并基于mood_tendency指数变化mood值。mood值是一个介于0~100之间的整数,表示当前的情绪强度,会影响响度等元素,当mood的值降为0时,作曲结束。mood_node是一个来自配置文件的字典表,表示个别时间节点的mood预设理论值,作为情绪变化的重要依据,辅助实现情绪随时间的合理变化,并帮助再恰当的时间结束歌曲。mood_flexibility是一个正整数,表示情绪变化自由程度,决定了作曲过程中允许计算机以怎样的程度改变mood随时间变化曲线,当mood_flexibility值比较大时,计算机可能自设情绪节点,有助于提升同一配置文件下歌曲创作灵活性与多样性。mood_tendency是针对段落的一个变化建议参数,会影响旋律强度走向。

  • 旋律生成: 根据需要,通过马尔可夫链模型选择需要的和弦或音符,并根据配置文件中存有的时间模板智能生成包含有音符数据和各音符时长的数据集。生成多个这样的数据集即多个旋律,每个旋律都有递减的出现概率,以便区分主旋律和副旋律。

  • 乐器融合: 一个乐器一个音轨。根据配置文件,将乐器划分为多个声部,再将不同声部分入声部类型组。在同一声部内,乐器同时发出相同的旋律。

  • 段落划分: 每个段落的参数包括时间节点和有效声部。段落内只有有效声部中的乐器才会演奏。

声部类型组

声部类型组用于划分乐器组在歌曲中的作用,共有7个,分别是:main_melody、harmony、rhythm、accompaniment、counterpoint、color、effect。每种声部类型组拥有各自的作曲方案。

  1. main_melody主旋律声部(必需): 传递乐曲的主要旋律和主题,是乐曲的核心。通常由主要乐器或人声演唱。

  2. harmony和声声部(推荐): 主旋律提供和声,丰富音乐的垂直结构。包括贝斯声部提供和弦根音。

  3. rhythm节奏声部(可选): 提供明确的节奏感,形成乐曲的骨架。通常由鼓组等打击乐器演奏。

  4. accompaniment伴奏声部(可选): 以重复的节奏/和弦模式补充主旋律,形成支撑。常见的有钢琴、吉他等。

  5. counterpoint对位声部(可选): 与主旋律形成对位线,增加音乐的水平结构对比性。

  6. color色彩声部(可选): 使用各种乐器特有的音色提供增强。如吹奏、弹拨乐器。

  7. effect效果声部(可选): 使用音效处理生成氛围。如混响等。

config部分

配置文件对于作曲过程起非常重要的指引作用。一个配置文件往往决定了歌曲的风格,但不会决定具体的歌曲,一个配置文件依然能够产生接近无数种歌曲。配置文件中的内容可以通过compose部分的介绍理解,在此不作赘述。本项目提供一些比较完善的配置文件,各自代表一种风格。

train部分

基于一系列导入的midi曲谱学习,并且结合用户需求生成配置文件,是作为人工智能机器学习的精髓所在。

resources部分

内含一系列midi文件范例,由用户提供,供train部分学习。

output部分

作曲结果输出至此,每首歌曲都包含有完整的midi曲谱和各常见格式的音频文件,以及可以用于音乐原创版权证明的分轨音频文件。

sound_font部分

不重要,可有可无。一个名为sound_font.sf2的文件,用于midi曲谱转音频。对于不需要自定义声音字体或者直接不需要转音频输出功能的用户来说,这个部分没有用处。只是用于个别特殊需求。

auto-composer's People

Contributors

fwerkor avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.