北太天元助你作曲: 使用十二音矩陣創(chuàng)建十二音旋律
2023年8月20日,我參加了交叉學(xué)科大會(huì),有幸聽(tīng)到了許琛老師的報(bào)告。

我在這里與大家分享一點(diǎn)如何用十二音技術(shù)作曲。

下面我們介紹了使用十二音矩陣創(chuàng)作十二音旋律的過(guò)程,并且在北太天元的幫助下可以快速完成。這項(xiàng)技術(shù)是由阿諾德·勛伯格于1921年開(kāi)發(fā)的,其目的是創(chuàng)作十二個(gè)音高中的每一個(gè)都能被同等聽(tīng)到的音樂(lè)。這種技巧可以防止強(qiáng)調(diào)任何一個(gè)音符,從而避免任何關(guān)鍵感或音調(diào)感。
學(xué)習(xí)了這一技巧后,你將能夠在不強(qiáng)調(diào)任何特定音調(diào)的情況下快速為作品創(chuàng)作旋律。借助北太天元,創(chuàng)建十二音矩陣輕而易舉,只需五分鐘即可完成。從這個(gè)矩陣中寫出旋律需要對(duì)樂(lè)譜有基本的理解。
要?jiǎng)?chuàng)建十二音矩陣,你需要能夠加會(huì)使用北太天元的內(nèi)置函數(shù)mod,
mod 函數(shù)是獲得除后的余數(shù)(取模運(yùn)算)。
b = mod(a, m) 返回 a 除以 m 后的余數(shù),其中 a 是被除數(shù),m 是除數(shù)。?? ?
例如:
>> mod(-3,12)
會(huì)得到 9,
>> mod(16, 12)
會(huì)得到 4.
我們的任務(wù)創(chuàng)建一個(gè)12x12的矩陣, 矩陣的元素是1-12之間的數(shù)字。
>> A = zeros(12) ; % 創(chuàng)建一個(gè)全是零元素的矩陣
第一步:在最上面一行寫數(shù)字
將從1到12的整數(shù)中的每一個(gè)寫在網(wǎng)格的頂行上,使每個(gè)數(shù)字只出現(xiàn)一次。
>> A(1,:) = randperm(12,12);? % 這是隨機(jī)生成了第一行, 1-12的一個(gè)隨機(jī)排列
>> A(1,:) = [ 3 1 9 5 4 6? 8 7 12 10 11 2] ; %也可以指定第一行
數(shù)字的順序可以是完全任意的,也可以是精心策劃的。這些數(shù)字之間的音程將成為旋律音高之間的半步數(shù)。有了這些知識(shí),你可以將數(shù)字以預(yù)定的間隔放在這個(gè)矩陣的第一行,以獲得音樂(lè)效果。我已將數(shù)字放在最上面一行,如圖所示。

步驟2:填充第一列
?? ?雖然第一行中的注釋可以按照您選擇的任何順序書(shū)寫,但第一列完全取決于第一行,因此您不應(yīng)以與為第一行選擇數(shù)字相同的方式為該列選擇數(shù)字。
首先確定頂行的前兩個(gè)元素之間的差異。在下面的例子中,前兩個(gè)元素之間的差是-2,因?yàn)?-3=-2。
頂行的前兩個(gè)元素之間的差的對(duì)立面應(yīng)該是第一列的前兩種元素之間的差值。例如,由于第一行的前兩個(gè)元素之間的差是-2,所以第一列的前兩個(gè)子元素之間的差值應(yīng)該是+2。這是通過(guò)在第一個(gè)元素上添加2來(lái)實(shí)現(xiàn)的。由于3+2=5,所以第二個(gè)元素是5。
對(duì)隨后的每組相鄰圖元執(zhí)行相同的過(guò)程。繼續(xù)下面的例子,觀察9和1之間的差是+8。因此,第一列的第二個(gè)元素和第三個(gè)元素之間的差應(yīng)該是-8。5減去8得到-3。請(qǐng)注意,-3不在1和12之間。每當(dāng)遇到不在1和12之間的結(jié)果時(shí),根據(jù)需要將該數(shù)字加上或減去12,使結(jié)果在1和12中。在這種情況下,-3+12=9,因此9顯示為第一列的第三個(gè)元素。
我們可以用下面的北太天元代碼實(shí)現(xiàn)上面的操作,
>> for j = 2:12
? A(j,1) = mod( A(j-1,1) -? (A(1,j)-A(1,j-1) ), 12 ) ;
?? ?if A(j,1) == 0
?? ??? ?A(j,1) = 12;
?? ?end
end
完成的第一行和第一列的矩陣A如下

步驟4:填寫剩余行
?? ?剩余的行應(yīng)該以與填充第二行相同的方式完成。
確定未完成的最低行的第一個(gè)元素與該行正上方行的第一元素之間的差異。此差異應(yīng)在該行的其余部分復(fù)制。回到我們的例子,我們可以觀察到9和5之間的差是4,因此第三行的每個(gè)元素應(yīng)該比它上面的單元格中的元素大4。
for j=2:12
?? ?for k=2:12
?? ??? ?A(j,k) = A(j,k-1) + A(1,k) - A(1,k-1);
?? ??? ?A(j,k) = mod( A(j,k), 12);
?? ??? ?if A(j,k) == 0
?? ??? ??? ?A(j,k) = 12;
?? ??? ?end
?? ?end
end
每一行都以這種方式完成,得到的完整矩陣如下所示。

您可以看到從1到12的每個(gè)數(shù)字在每行和每列中只出現(xiàn)一次。
你還可以看到沿著從矩陣左上角到右下角的對(duì)角線進(jìn)行查看。每個(gè)單元格中的數(shù)字應(yīng)該相同。在我們的例子中,情況就是這樣;數(shù)字3出現(xiàn)在對(duì)角線的每個(gè)單元格中。
第五步:把數(shù)字翻譯成音高
現(xiàn)在矩陣已經(jīng)完成,您可以選擇幾行或幾列,并將它們“翻譯”為音樂(lè)。根據(jù)該列表,每個(gè)數(shù)字對(duì)應(yīng)于一個(gè)特定的音高。
C 1
C#/Db 2
D 3
D#/Eb 4
E 5
F 6
F#/Gb 7
G 8
G#/Ab 9
A 10
A#/Bb 11
B 12
從矩陣中選擇一行或多列,并將它們轉(zhuǎn)換為間距??梢詮淖蟮接一驈挠业阶笞x取行,也可以從上到下或從下到上讀取列。
回到我們的例子,第七行(從左到右)被選為旋律的前半部分。第十列,從下到上讀,被選為旋律的后半部分。行和列的翻譯如下。
第7行:
10 8 4 12 11 3 2 7 5 6 9
A G D#B Bb C D Db Gb E F Ab
第10列:
11 2 3 1 6 5 7 9 8 4 12 10
Bb C#D C F E Gb Ab G Eb B A
? ? ? ? ? ? ? ? ??
第六步:創(chuàng)作音樂(lè)?
這個(gè)需要學(xué)會(huì)五線譜,就是下面這個(gè)樣子的東西

另外,tone(音調(diào))的高低和聲音振動(dòng)的頻率有關(guān),可以看下圖

用音高做一首旋律。確保你不會(huì)改變音高順序,因?yàn)楦淖円舾唔樞驎?huì)破壞創(chuàng)建矩陣的目的。
回想一下,在步驟5中生成的音高如下:
A G D#B Bb C D Db Gb E F Ab
Bb C#D C F E Gb Ab G Eb B A
我們已經(jīng)完成了我們的例子,用這些音高寫音樂(lè)。
以任何你喜歡的方式選擇你的時(shí)間特征、節(jié)奏和動(dòng)態(tài)。請(qǐng)注意,使用調(diào)號(hào)是不必要的,因?yàn)槟愕男蓻](méi)有任何調(diào)號(hào)感或調(diào)性感。20世紀(jì)的作曲家以創(chuàng)作特定的動(dòng)態(tài)、發(fā)音和節(jié)奏標(biāo)記而聞名,所以你也可以通過(guò)具體組合這些因素來(lái)模仿這種風(fēng)格。 我們已經(jīng)在我們這個(gè)例子中做到了這一點(diǎn)。
我們完成的旋律將是無(wú)調(diào)性的,并與阿諾德·勛伯格和其他20世紀(jì)作曲家所采用的方法相一致。
附上北太天元用到的所有代碼 musicEx1.m
% 北太天元 作曲? musicEx1.m
A = zeros(12);
A(1,:) = [3??? 1??? 9??? 5??? 4??? 6??? 8??? 7?? 12?? 10?? 11??? 2];
for j = 2:12
? A(j,1) = mod( A(j-1,1) -? (A(1,j)-A(1,j-1) ), 12 ) ;
?? ?if A(j,1) == 0
?? ??? ?A(j,1) = 12;
?? ?end
end
for j=2:12
?? ?for k=2:12
?? ??? ?A(j,k) = A(j,k-1) + A(1,k) - A(1,k-1);
?? ??? ?A(j,k) = mod( A(j,k), 12);
?? ??? ?if A(j,k) == 0
?? ??? ??? ?A(j,k) = 12;
?? ??? ?end
?? ?end
end
A
