本篇以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