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

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

使用npm安装库

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

使用

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

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

Clip

returns: Array

notes {String | Array}

pattern {String}

accentMap {String | Array}

arpegiate {Boolean | Object}

通过这个方法可以创建一个音或者一小段音乐,或者是一小段和弦,可以通过字面量对象的形式来传递参数

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等

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

我们通过使用_来表示音的延续,使用-来表示音的断开

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值