如何使用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
相關文章
相關標籤/搜索