如何使用Node.js來製作電子音樂-編寫我們的旋律

山鬼發表於2018-08-23

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

如何使用Node.js來製作電子音樂-編寫我們的旋律

notes: 'c4',
pattern:'x___'
複製程式碼

如何使用Node.js來製作電子音樂-編寫我們的旋律

我們通過使用_來表示音的延續,使用-來表示音的斷開

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');
複製程式碼

以下為鋼琴窗中的顯示,這種為柱式和絃

如何使用Node.js來製作電子音樂-編寫我們的旋律

另外一個就是可以通過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

相關文章