本篇以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();
// 列表裏的全部和絃
複製代碼
如下是能夠用的和絃列表以及名稱替代: