如何使用Node.js来制做电子音乐-编写咱们的旋律

本篇以api为主,配以图讲解,结合以前的乐理讲解,相信小伙伴们能够将本身心中的旋律写出来,推荐旋律编写软件为FL Studio者Cubase,若是没有特别兴趣的能够直接使用自带音源,对于中国风热爱的推荐是民乐Kong,也是我我的最喜好的。javascript

使用npm安装库

cd xxx
复制代码
npm install Scribbletune
复制代码

使用

var Scribbletune=require('Scribbletune');
复制代码

接下来咱们就可使用Scribbletune来建立咱们的音乐,运行后会生成midi文件,可使用cubase Fl等音频处理软件打开处理java

Clip

returns: Arraynpm

notes {String | Array}api

pattern {String}数组

accentMap {String | Array}bash

arpegiate {Boolean | Object}dom

经过这个方法能够建立一个音或者一小段音乐,或者是一小段和弦,能够经过字面量对象的形式来传递参数ui

var scribble = require('scribbletune');
// 建立一个c4的音阶,而且定义它的节拍
var clip = scribble.clip({
notes: 'c4', //音阶
pattern: 'x________________' //节拍
});
//渲染生成midi文件
scribble.midi(clip, 'hats.mid');
复制代码

在钢琴窗中,咱们能够看到一共有C0-C10的音区,这些包含了低音区,中音区,高音区,咱们能够根据须要来调整数值,C4到C5之间还有D4,E4等spa

notes: 'c4',
pattern:'x___'
复制代码

咱们经过使用_来表示音的延续,使用-来表示音的断开code

notes: 'c4 d4 e4', // Or ['c4',d4', 'e4']
pattern: 'x_x_x'
//能够看做是c4_d4_e4
复制代码

经过设置accentMap能够告诉Clip当前音阶的强度。这是一个x和 - (连字符)字符串。一个x意味着力度更强,一个-(连字符)意味着力度变弱。

这是你如何使用accentMap。在下面的例子中,咱们有一个模式,指示Scribbletune的Clip方法在16个节拍条的每一个节拍上建立一个音符。而后,它继续设置一个accentMap参数,该参数指示哪一个音符点击更难x,哪一个点击更柔和-

var scribble = require('scribbletune');

var clip = scribble.clip({

notes: 'c3',

pattern: 'xxxxxxxxxxxxxxxx',

accentMap: 'x---x-x-x---x-x-'

});

scribble.midi(clip, 'hats.mid');
复制代码

accentMap也能够由单个音符值设置。您能够传递一组数值来代表当前音的强弱。

使用String.repeat功能,您能够快速将以前的设置重复

var scribble = require('scribbletune');



var clip = scribble.clip({

notes: 'c4',

pattern: 'x'.repeat(16), //将x重复16次,等价于xxxxxxxxxxxxxxxx

accentMap: [5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 127, 127, 127]

});



scribble.midi(clip);
复制代码

accentHi {Number} default 127

若是你使用一个字符串来设置一个accentMap,那么这个属性可让你定义每一个x的级别。

accentLow {Number} default 70

若是你使用的字符串设置一个accentMap,那么这个属性可让你定义每一个级别- 。

shuffle (Boolean) default: false

设置此属性将随机将您在Clip方法中设置notes的顺序排序。

sizzle {Boolean}

使音符更具备弹性感

noteLength {String}

恶意经过设置其属性来调节节拍,例如

var scribble = require('scribbletune');
//音符是节拍,四分音符为一排,一拍的长短会根据歌曲来调整


// 16分音符的节拍,也是默认节拍

var clip1 = scribble.clip({

notes: 'c4',

pattern: 'x'.repeat(12)

});



// 经过noteLength将默认的16分设置为32分

var clip2 = scribble.clip({

notes: 'c4',

pattern: 'x_xxx_x_',

noteLength: '1/32'

});

scribble.midi(clip1.concat(clip2, 'music.mid'));
复制代码

arpegiate {Boolean | Object}

将这个属性设置为true时,会自动把音符转换为八分音符

var scribble = require('scribbletune');

var clip = scribble.clip({

notes: 'c3',

pattern: 'x_'.repeat(8),

arpegiate: true

});



scribble.midi(clip);
复制代码

同时也能够经过设置对象的形式来设置其的节拍与间隔

var scribble = require('scribbletune');

var clip = scribble.clip({

notes: 'c3',

pattern: 'x_'.repeat(8),

arpegiate: {

distance: 7,

steps: 11

}

});

scribble.midi(clip);
复制代码

scale/modereturns: Array

能够快速的构建notes

  • root {String}
  • scale {String}
  • octave {Number} default: 4
  • addRootFromNextOctave {Boolean} default: true
var scribble = require('scribbletune');

var cMinor = scribble.scale('c minor'); // [ 'c4', 'd4', 'd#4', 'f4', 'g4', 'g#4', 'a#4', 'c5' ]

cMinor = scribble.mode('c minor'); // [ 'c4', 'd4', 'd#4', 'f4', 'g4', 'g#4', 'a#4', 'c5' ]

cMinor = scribble.mode('c aeolian 4'); // [ 'c4', 'd4', 'd#4', 'f4', 'g4', 'g#4', 'a#4', 'c5' ]
// 默认是c4,以上直接获取c4-c5之间的音符

cMinor = scribble.mode('c', 'aeolian', 3); // [ 'c3', 'd3', 'd#3', 'f3', 'g3', 'g#3', 'a#3', 'c4' ]
// 获取c3-c4之间的音符
复制代码

chord

能够直接经过和弦名来获取和弦

var scribble = require('scribbletune');


var clip = scribble.clip({
// C和弦 F和弦 G和弦 C和弦,都是大三和弦

notes: 'CMaj, FMaj, GMaj, CMaj',
pattern: 'x---'.repeat(4)
});

scribble.midi(clip, 'chords.mid');
复制代码

如下为钢琴窗中的显示,这种为柱式和弦

另一个就是能够经过chord来获取单个和弦的值,返回数组

var scribble = require('scribbletune');

var cMajorChord = scribble.chord('CMaj'); // [ 'c4', 'e4', 'g4' ]
复制代码

经过listChords来获取全部能够用的和弦

var scribble = require('scribbletune');

var availableChords = scribble.listChords();
// 列表里的全部和弦
复制代码

如下是能够用的和弦列表以及名称替代:

  • 6th | Sixth | sixth
  • maj | Maj
  • min | Min | m
  • sus2 | Sus2
  • sus4 | Sus4
  • maj7 | Maj7
  • min7 | Min7
  • dom7 | Dom7 | 7th
  • dim | Dim
  • dim7 | Dim7
  • aug | Aug
相关文章
相关标签/搜索