本篇以api为主,配以图讲解,结合以前的乐理讲解,相信小伙伴们能够将本身心中的旋律写出来,推荐旋律编写软件为
FL Studio
或者Cubase
,若是没有特别兴趣的能够直接使用自带音源,对于中国风热爱的推荐是民乐Kong,也是我我的最喜好的。javascript
cd xxx
复制代码
npm install Scribbletune
复制代码
var Scribbletune=require('Scribbletune');
复制代码
接下来咱们就可使用Scribbletune来建立咱们的音乐,运行后会生成midi文件,可使用cubase Fl等音频处理软件打开处理java
returns: Array
npm
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);
复制代码
能够快速的构建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之间的音符
复制代码
能够直接经过和弦名来获取和弦
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();
// 列表里的全部和弦
复制代码
如下是能够用的和弦列表以及名称替代: