65.9K
CodeProject 正在变化。 阅读更多。
Home

使用半音格键盘进行微音音乐学习

2017年9月1日

MIT

17分钟阅读

viewsIcon

63925

downloadIcon

545

一个纯粹的Web浏览器应用程序,用于在不同音调系统中进行高级音乐和声研究

 

31-EDO Keyboard, harmonic seventh chord

 

目录

引言
现场演奏
为什么选择微音?
支持的音调系统
特点
使用应用程序
微音调系统比较
微音色度晶格
实现
为什么要有开始按钮?
声音合成
音质
可缩放矢量图形
视觉开发
程序化开发
兼容性
版本

引言

这是本系列第二篇关于使用基于计算机键盘的专用键盘进行音乐研究的文章

  1. 使用等距计算机键盘进行音乐学习
  2. 本文
  3. 声音构建器,Web Audio 合成器
  4. 多点触控支持,用于十指弹奏

在我本系列第一篇文章中,我试图解释非常基础的音乐数学和物理方面,并提出了一个键盘结构,该结构非常暗示音乐和声。然而,该应用程序在常规音乐实践音调系统的一个不太通用的案例基础上说明了所有内容。

本文和下一篇文章将介绍基于浏览器的微音音乐研究、作曲家实验等平台,名为Microtonal Fabric

本文描述了两个Microtonal Fabric应用程序。第一个对应于文章标题所述主题,名为Multi-EDO Chromatic Lattice;其源代码可在“Multi-EDO”中找到。

“Microtonal Fabric”这个名字是在这两个应用程序发布后创建的。其“Fabric”一词与两件事有关。首先,这是音乐的实质,其物质结构。其次,它表明该产品不仅仅是一组共享某些公共代码的浏览器应用程序。它实际上是一个用于制作应用程序的平台,实现了任何可想象的音乐音调系统、调律和键盘布局。

我提出的微音键盘为该领域的非常基础的研究提供了更灵活的方式。我将经常参考我上一篇文章中的某些观点。在本文中,我将不深入理论推理,主要是因为我对微音音乐自己的研究才刚刚开始。

第二个应用程序是用于研究和比较不同音调系统的辅助应用程序,源代码可在“tone-system-comparison”中找到。它有助于理解不同的EDO系统如何工作。特别是,它可以用于播放和收听和弦,以检测传统当今常规实践12-EDO系统的妥协的谐波质量。

在此,“EDO”代表“八度等分”,在对数尺度上。例如,12-EDO表示最广泛使用的八度等分为12个“半音”间隔。另一个术语是“12-TET”,它代表“十二音等律”。一些作者不认为EDO和TET术语等效,理由如下:EDO一词并不意味着“律制”,因为如果我们仅仅将八度分成任意数量的间隔,我们可以获得与和谐音程非常远的音程。然而,在本文中,我们将只考虑那些非常接近和谐音程的音调系统,因此它们可以被认为是律制的。

另请参阅我在微音社区网站Xenharmonic Wiki上的我的页面。除了Microtonal Fabric链接外,还有一些关于不同微音主题和人物的有用链接。

现场演奏

现在可用的即玩应用程序,目前在Microtonal Fabric中,可以在Microtonal Fabric主文档页面上找到。您可以直接在Web浏览器中试用这些应用程序并演奏音乐。

本文讨论的应用程序名为Multi-EDO Chromatic Lattice,可在此处播放

本文讨论的另一个应用程序是用于微音系统比较的应用程序。

为什么选择微音?

这个问题可以有很多答案。我不打算涵盖这个主题,而是试图指出我认为最基本的四个方面

  1. 传统的西方等律系统12-EDO面临严重问题。严格来说,它的和声听起来并不完全谐和。和声的基本意义基于独立于特定文化的根本物理和数学原理。同时,移调等效性无法通过严格的谐波实现——在我之前的文章中,我试图解释它。然而,听到这些缺陷需要相当训练有素的耳朵。所以,这是第一个原则:使用微音系统,可以演奏听起来非常传统但和声有所改进的音乐。同时,也可以演奏一些非常不同和不寻常的东西。

  2. 历史上的乐器调音和音调系统可以被认为是微音的,原因如下:它们无法使用现代常规音乐实践方法和12音系统、12-EDO来呈现。然而,它们也无法用微音系统很好地近似。这些历史系统在音乐和声方面通常更精致。这些系统的问题在于乐曲的固定调性,以及缺乏移调等效性,因此任意移调是不可能的。历史音调系统的呈现可以被认为是实际的,特别是对于所谓的历史演绎法

  3. 在非西方文化中,微音方法更为实际。传统调音系统可以比十二个音符多,它们可以使用不同于EDO的原理。Microtonal Fabric有助于呈现任何这些系统。例如,Microtonal Playground(源代码:“playground”)应用程序包含了印度shruti、中国传统以及其他系统的实现。Microtonal Playground值得单独一篇文章。

  4. 创作新音乐的可能性如何?乍一看,这似乎不可能。我经常听到人们,包括音乐家,说这种音乐很糟糕,而且“走调”。真的吗?我认为,这取决于。它可以听起来完全xenharmonic,但这实际上取决于听者。感知微音音乐的能力可能受到与当前文化环境过于牢固的联系的限制。音乐感是自然法则和文化复杂结合的产物——我也试图解释它,非常粗略。这仅仅意味着理解任何可以称为“音乐”的东西总是需要参与文化和大量的听觉经验。微音音乐只是需要参与更广泛的文化背景和更多的经验。

支持的音调系统

Multi-EDO Chromatic Lattice应用程序支持以下系统

29-EDO由一个单独的应用程序支持(源代码:“29-EDO”)。该应用程序更高级,目前定期用于著名的国际Brainin音乐学校的音乐教学。它值得单独写一篇文。

可以使用Microtonal Playground(源代码:“playground”)创建任何任意音调系统,

特点

  • 对于三个色度音系统,使用相同的键盘;音系统可以选择可以动态改变
  • 由于非常特殊的键盘布局,在一个音系统上获得的和学到的基本演奏技巧可以立即应用于其他音系统
  • 并排比较不同音系统中音符和和弦的声音
  • 选择5种乐器或4种基本波形
  • 和弦生成
  • 可选和弦可视化
  • 兼容的浏览器包括但不限于Google Chrome、Mozilla Firefox、Mozilla SeaMonkey和Opera。

自v. 4.0起

  • 触摸屏支持。使用触摸屏,您可以十指弹奏,任何和弦和滑音(重要),以任何组合。

使用应用程序

本文介绍的应用程序是两个独立的单页应用程序

  1. 微音调系统比较基于四个色度圆键盘。和弦可以直接在色度圆键盘上定义,并快速连续比较演奏。
  2. Multi-EDO Chromatic Lattice键盘,可演奏多种音符。和弦可以通过和弦表定义,自动生成,并通过单击或按键即可演奏。

可以下载完整的源代码,但无需下载软件即可使用——所有内容都可以在Microtonal Fabric主文档页面上直接播放。

微音调系统比较

微音系统比较页面上,所有圆形都可以用作乐器键。低八度音接近中心。中心区域用于演奏和弦。中心的圆形区域被隐藏,并在和弦中添加至少一个音符时显示。Shift+音符切换和弦中的一个音符(双击清除和弦)。例如,顶部的图片显示了在31-EDO系统中,和弦的转位,在演奏时。

可以通过单击圆形区域的中心来演奏和弦。此外,如果选择了两个以上和弦,可以在特殊的“Compare (Ctrl+ ← →)”控件上快速交替收听两个不同的律制。当声音激活时,鼠标指针在两个半圆之间快速移动会改变和弦

Chord Comparer

现在,让我们考虑用于研究不同音调系统的圆形键盘。

纯律与12-EDO(灰色)的比较
Just Intonation Keyboard

纯律与常规实践 12-EDO半音的位置进行了比较,这些半音显示为灰色放射线。这张图揭示了12-EDO调音准确性的更大问题:第六个音符,更重要的是,第三个音符(非常重要的大三和弦的中心音符)的纯净呈现。误差是第六个音符的15.6 音分,第三个音符的13.7音分。大多数人很可能能听到相当细微的差异,也许在经过一定的训练后,但在乐器(如钢琴或吉他)的弦间共鸣明显的情况下,这种差异会更加明显。

请注意,纯律基于音符之间的纯粹谐波关系,对于比较音调系统非常重要,但由于缺乏移调等效性,对于演奏大多数音乐作品来说相当不切实际。

12-EDO:
12-EDO Keyboard

19-EDO:
19-EDO Keyboard

使用19-EDO大音阶的音级之间有两个不同的间隔:2(用于B-C和E-F间隔)或3微音。因此,只有一个种类的升号和一个种类的降号,±1微音。然而,我避免在小二度音程中使用♯和♭,以避免选择等音记法(enharmonically equivalent),因为在微音系统中,等音通常不能假定——3微音小二度音程的情况并非如此。

31-EDO:
31-EDO Keyboard

使用31-EDO,有两种升号和降号的间隔,2和4微音。“倒置”的♯和♭顺序不是错误的,因为它们是基于不同音符的升号和降号。例如,C到D和B到C之间的所有音符是

C — D♭² — Db — C♯ — C♯² — D B — C♭ — B♯ — C

在这里,我用D♭²表示“双降号”(也称为半升号,如果从C计算)和(也称为半降号,如果从D计算)C♯²。半/双升/降号的Unicode字符尚未标准化(并且许多其他音乐记谱字符在大多数系统上默认不实现),因此我决定使用我自己的记法,这在小键上不显示。

这样,只有一个种类的♯和一个种类的♭:±2微音。

因此,大音阶的音级之间有两种不同的间隔:5或3(在B和C之间,以及E和F之间)微音。这使得31微音和对大音阶的渲染非常好。同时,变化音程和和弦听起来可能大不相同。

定义和弦的另一种方法是基于音阶的音级,这些音级可以从表格中选择。

这是19-EDO的表格示例,显示了默认选择的大三和弦

19-EDO Chord Table

对于31-EDO,表格更宽,因为增加了两列:“Double ♯”和“Double ♭”。

对于纯律12-EDO,我施加了一些约束,以使和弦与“有效”和弦的定义相匹配,该定义被接受为现代音乐术语。例如,对于12-EDO,大/小/减/增三和弦始终存在,或者被挂留二或挂留四代替——查看最后一行

12-EDO Chord Table

微音系统的情况并非如此。为了保持一致性、通用性和简化,可以选择任何音符子集,甚至是空集,但每个区域最多只能有一个变化。请注意,对于微音系统,第6和第7区域不联合,因为通常第6和第7-之间没有等音;出于同样的原因,没有空表单元格用于变化音符。

和弦转位是通过复选框“/2”和“/4”创建的,它们将音符降低一个或两个八度。

用于“大”色度晶格键盘的也是相同的和弦选择系统,这得益于共享的JavaScript代码。这种选择提供了仅通过一次点击来演奏和弦的唯一方法。

微音色度晶格

基本上,晶格的思想基于Wicki-Hayden布局,但几何形状不同。它不是六边形的,而是矩形的,这更简单,并且更好地匹配音程关系网格的对称性。

键盘采用与上一篇文章中提供的键盘相同的份额、尺寸和结构。其片段显示了31-EDO

Microtonal Chromatic Lattice

绿色区域用于通过物理计算机键盘演奏部分音符(抱歉,模型基于标准美式键盘布局,没有任何选项;任何需要其他东西的人都欢迎联系我)。

控件不同。首先,任何时候都可以选择三个音调系统和四个布局(12-EDO,12-EDO的Jankó布局19-EDO31-EDO)之一。

其他控件允许可选地高亮显示和弦(通过Ctrl+前缀演奏),这些和弦从上面描述的表格中选择,并通过音阶级表示法标记和弦音符。

第一个令人惊讶的事情是,音符布局看起来几乎与12-EDO相同。这种布局非常特殊:1)它非常暗示音符之间的和声关系;2)不同音系统的布局是“局部相同的”。例如,在尝试进行和声转调时,差异会显现出来,尽管由于键盘的色度性质,这非常容易。它是如何工作的?

布局的结构如下

Fundamental Domain

半音的间隔取决于音调系统

12-EDO K=2 L=5 M=7
19-EDO K=3 L=8 M=11
31-EDO K=5 L=13 M=18

显然,3/2、4/3和9/8的比率值只能通过微音音程近似,因为等律无法实现有理频率比值

实现

实现部分不涵盖所有Microtonal Fabric技术,它只专注于与本文介绍的两个应用程序相关的某些关键或有趣的方面。有些可能需要单独的文章来介绍。

为什么要有开始按钮?

两个应用程序都有“开始”或电源power-on按钮。在用户单击按钮之前,没有任何可播放的内容显示。为什么?基本上,这是为了避免用户第一次弹奏的音符丢失。这会因为Web Audio的自动播放阻止而发生。在用户与网站进行交互(通过单击、点击、按键等)后,音频才可用。有关更多详细信息,请参阅[自动播放文档]。

Microtonal Fabric应用程序的初始化大部分发生在响应此按钮单击时。特别是,键盘变得可见,并且AudioContext被初始化。如果在第一次用户输入事件之前初始化了AudioContext,那么第一个声音激活将被Web Audio系统忽略。h

声音合成

首先,声音合成完全基于几乎所有主要浏览器都实现的Web Audio API。目前,它基于2017年8月的W3C工作草案

自v. 5.0起,合成完全基于Sound Builder的代码及其生成的乐器数据。有关更多详细信息,请参阅关于Sound Builder的文章

音质

由于上述问题,我认为音质基本可接受,但远非良好。首先,我未能找到足够好的采样。我很乐意尝试使用任何数据或建议。也许从头开始进行无采样声音合成。也许基于Web Audio API从头开始进行无采样声音合成会更合适。

可缩放矢量图形

Mictotonal Fabric应用程序的屏幕键盘使用基于嵌入式<svg> 元素的可缩放矢量图形。应用程序使用两种键盘初始化方法。

第一种方法基于键盘的视觉开发。整个键盘使用某种矢量图形编辑器进行准备。我使用并推荐开源的InkScape。在代码中,键盘是基于预先创建的SVG元素初始化的。

第二种方法是对空或动态创建的<svg>元素进行程序化填充。

对于不同的应用程序,这两种方法都很有用。让我们来讨论它们。

视觉开发

当键盘不规则且不太大时,这种方法可能对临时编程很有用。它用于音调系统比较应用程序。

当使用矢量图形编辑器创建键盘时,可以对其进行清理:可以删除冗余的元数据和标识符,并且代码中使用的元素应命名一致。此外,数字颜色最好替换为合适的CSS名称。并非所有元素都需要通过id属性进行标识;可以通过枚举获得其中大多数元素的引用。此技术显示在源代码文件“tone-system-comparison/main-circular.js”中。

const populateKeyboard = function (keyboard, chordActivator, toneSet, tonalSystem) {

    const frequencyArray = [];
    const keyMap = new Map();

    let instrument;
    const soundHandler = (key, on) => {
        instrument.play(on, keyMap.get(key).index);
    }; //soundHandler

    chordActivator.chord = { count: 0 };

    const octaveGroups = [];
    for (let node of keyboard.childNodes) {
        if (node.constructor != SVGGElement) continue;
        let circleCount = 0;
        for (let circle of node.childNodes)
            if (circle.constructor == SVGCircleElement)
                circleCount++;
        if (circleCount > 5) {
            const octave = [];
            for (let circle of node.childNodes)
                if (circle.constructor == SVGCircleElement)
                    octave.push(circle);
            octaveGroups.push(octave);
        } //if
    } //loop counting

    // populate keyboard with event handlers, etc.

};

最好使用Document.querySelector获取通过其id属性标识的元素的引用。

程序化开发

在大多数情况下,程序化SVG开发更易于维护,尤其是在图形更复杂和规则的情况下,这对于基于某些规则音系统构建的音乐键盘来说是这种情况。因此,它用于Multi-EDO Chromatic Lattice应用程序。

SVG填充的骨架示例显示在“Multi-EDO/keyboard.js”中。

"use strict";

const keyboard = (definitionSet) => {

    const svgPreparer = (function (svg) {
        const findNamespace = () => {
            for (let index in svg.attributes) {
                const attribute = svg.attributes[index];
                if (attribute.localName == "xmlns:svg")
                    return attribute.value;
            } // loop
        } //findNamespace
        const namespace = findNamespace(svg);
        return { svg: svg, elementCreator: (tagName) => {
            return document.createElementNS(namespace, tagName); } };
    })(definitionSet.elements.keyboard);
        
    const keyboardStructure = { rows: []};

    const svg = svgPreparer.svg;

    svg.style.display = "none"; // to be visualized after initialization

    // populate keyboardStructure with keys, using svgPreparer
    // ...

    return keyboardStructure;

};

键盘结构用于创建键盘事件处理程序,有关详细信息,请参阅“multi-EDO/keyboard-handler.js”。

有关详细信息,请参阅完整的源代码。

兼容性

在撰写本文时,Web Audio API作为W3C编辑的2022年11月7日草案存在。尽管如此,本文介绍的应用程序在大多数主流浏览器上都可以运行。

另一个高级方面是使用嵌入在HTML中的SVG。此功能目前是2014年10月28日W3C推荐的一部分,并且也应该相当可用。

此外,还使用了更现代的JavaScript语法,包括constletfor... of,这些语法不受某些旧浏览器的支持。

这些应用程序已在Google Chrome、Opera、Mozilla Firefox和Seamonkey上成功测试。

毫不奇怪,在Microsoft浏览器上什么都不起作用,并且出于某种原因,甚至Microsoft Edge也不起作用(尽管Mozilla文档声称Microsoft Edge同时支持Audio API和嵌入式SVG)。鉴于这些产品在其历史中经常表现出合规性不足,并且改进非常有限,因此限制它们与高级应用程序的运行并提供有关其不兼容性的信息似乎是实用的。然而,这使我们面临一个并非微不足道地得到解决的问题。

版本

1.0.0

初始生产版本。

1.1.0

  • 添加了选项“使用计算机键盘”。
  • 在应用程序页面上,添加了指向原始出版物的链接。

添加的选项很重要,因为某些组合键,如Ctrl+W(通常是浏览器的关闭标签),被物理计算机键盘功能占用了。

4.0.0

  • 触摸屏支持。

4.1.0

  • 键盘布局是动态生成的,而不是从矢量图形图像导入的;这使得键盘布局可以变化。
  • 屏幕键盘上的硬件键盘标记(以绿色显示)是根据屏幕键盘数据自动计算的。
  • 几项小改进。

4.2.0

  • 主要重构以提高模块化程度并理清模块之间的依赖关系。
  • 统一了keyboard.html和tone-system-comparison.html应用程序,改进了代码,并减少了应用程序之间不必要的依赖关系。
  • 开发了将对象转换为只读(递归或非递归)的功能,应用于应用程序的定义集。
  • 解决了文件乐器中第一个音符静音的问题,因为使用了futures并且需要延迟。

5.0

声音生成已迁移到使用Sound Builder

5.4

  • Wave FFT(参见Sound Builder)已从.NET Core迁移到.NET。
  • 与新创建的项目名称“Microtonal Fabric”相关的重构。

5.6

  • 多点触控功能已升级,以支持拨弦乐器(如吉他、曼陀林等)的模拟。目前正在开发模仿拨弦乐器模拟的应用程序。
  • 声音系统已升级,以实现音量动态和音高修改效果,如滑音、指颤音、颤音或弦弯音。这些效果可以应用于拨弦乐器和其他乐器。
© . All rights reserved.