音乐变换:和声转录与逆行转换
1. 和声转录变换
和声转录变换是一个复杂的过程,其复杂性源于可应用的参数组合复杂、结果获取方式以及搜索时间等因素。下面通过几个例子来详细说明相关参数和处理细节。
1.1 莫扎特《C小调幻想曲》K. 475 示例
以莫扎特《C小调幻想曲》K. 475 的开头为例,在和弦分析中,选择了c(自然)小调的i - It - V和弦序列。其中,F#和Ab的组合起到意大利6和弦的作用。将这个和弦序列改为iv(A旋律小调) - i(A自然小调) - (V A旋律小调),通过和声转录得到了一种可能的结果。这只是多种解决方案之一,它对原曲进行了有趣的改动,尤其是以IV和弦开头并强烈模仿了原旋律。
1.2 舒伯特《A大调钢琴奏鸣曲》D.959 示例
从舒伯特《A大调钢琴奏鸣曲》D.959的第四乐章选取旋律和简单标注的和声。在和声转录时,模仿其和声但转换到C大调,并使用一组简单的和弦。以下是实现该和声转录的代码:
from transformation.harmonictranscription.t_harmonic_transcription import THarmonicTranscription
source_expression = '{<C-Natural: i> q@C:4 iEb <C-Natural: C-It> F# G Ab C ‘ \
‘<C-Melodic: V> iB:3}'
t_sub = THarmonicTranscription.create(source_expression)
target_harmonic_list = [('A-Melodic:iv', Duration(3, 4)),
('A-Natural:i', Duration(1, 4)),
('A-Melodic:V', Duration(1, 8))]
target_hct = build_hct(target_harmonic_list)
tag_map = {0: DiatonicPitch.parse('D:4')}
results = t_sub.apply(target_hct, 'B:3', tag_map, t_sub.height + 5, 100)
results_filter = MinContourFilter(t_sub.source_line, results.pitch_results)
scored_filtered_results = results_filter.scored_results
该变换指定了新的和声上下文集,将第一个音符标记为C:4以确定音域。生成了许多结果,基于音乐标准进行过滤将有助于整体选择。
1.3 违反传统和声规则示例
可以通过改变和声和约束条件,甚至违反传统和声序列规则来进行和声转录。例如,将原和声改为新的和声序列,代码如下:
source_expression = '{<A-Major: I> qC#:4 hE qa <:V> qA G# <:I> hA <:ii> q@B iB ' \
'<E-Major :viiHalfDim7> qC#:5 A:4 <A-Major:I> hA ig# f# e d}'
t_sub = THarmonicTranscription.create(source_expression)
target_harmonic_list = [('C-Major:I', Duration(1)),
('C-Major:IV', Duration(1, 2)),
('C-Major:V', Duration(1, 2)),
('C-Major:vi', Duration(1, 2)),
('C-Major:V', Duration(1, 2)),
('C-Major:I', Duration(1)),
]
target_hct = build_hct(target_harmonic_list)
tag_map = {0: DiatonicPitch.parse('C:4')}
results = t_sub.apply(target_hct, 'B:3', tag_map, t_sub.height + 5, 100)
results_filter = MinContourFilter(t_sub.source_line, results.pitch_results)
scored_filtered_results = results_filter.scored_results
这个例子表明,变换不需要遵循原旋律的和声上下文时间边界/持续时间,但新和声必须完全覆盖给定旋律的持续时间。虽然尝试不同的和声序列很有趣,但不能保证得到的音乐一定好听,只能在一定程度上使旋律符合提议的和声,其余部分则需要依靠“音乐技巧”。
1.4 莫扎特《G大调钢琴奏鸣曲》KV283 示例
将和声转录变换应用于莫扎特《G大调钢琴奏鸣曲》KV283的第8 - 10小节。该示例音符较多,展示了使用多种和弦进行修改可以产生有趣的结果。代码如下:
target_harmonic_list = [('C-Major:V', Duration(3, 4)),
('C-Major:IV', Duration(1, 4)),
('C-Major:I', Duration(1)),
('C-Major:IV', Duration(1, 2)),
('C-Major:I', Duration(1, 2)),
('C-Major:V', Duration(1)),
]
source_expression = '{<G-Major: I> sD:5 E F# G A B C:6 D <:IV> sC:6 B:5 A G F# E D C <:I> \
sB:4 D:5 B:4 G <:VDom7> A C:5 A:4 F# <:I> qG}'
t_sub = THarmonicTranscription.create(source_expression)
target_harmonic_list = [('G-Melodic:v', Duration(1, 2)),
('D-Natural:i', Duration(1, 2)),
('D-Major:V', Duration(1, 4)),
('D-Major:IV', Duration(1, 4)),
('A-Melodic:i', Duration(1, 4))
]
target_hct = build_hct(target_harmonic_list)
tag_map = {0: DiatonicPitch.parse('D:5')}
results = t_sub.apply(target_hct, 'F#:4', tag_map, t_sub.height + 4, 20,
tunnel_half_interval=Interval(3, IntervalType.Major))
results_filter = MinContourFilter(t_sub.source_line, results.pitch_results)
scored_filtered_results = results_filter.scored_results
这段代码有两个有趣的方面。一是新的和声上下文序列在调式和调性类型上具有多样性,甚至在小节之间也有所不同。二是半隧道方差的指定,当搜索空间过大时,搜索可能会陷入构建新旋律的子序列中,直到指定大三度的半隧道方差高度时才会出现解决方案。
1.5 和声转录变换的改进建议
和声转录变换在很多方面只是一个更广泛、更有用变换的开始,以下几个功能可以大大提高其实用性:
- 允许使用音阶和非音阶约束,例如要求音阶音偏离其调性进行“降半音”或“升半音”处理。
- 限制轮廓内的跳跃距离,例如不允许超过纯五度或八度的跳跃。
- 覆盖通过旋律分析创建的约束,例如一个音符可能被分析为和弦音,但实际上旋律只需要其音阶属性。
- 允许指定和弦音的角色,例如根音、三音、五音或其他张力音。
- 开发更符合音乐品质(如声部进行和旋律流畅性)的解决方案排名过滤器。
- 开发规则分析步骤,以定位容易检测到的导致无解的规则冲突。
2. 逆行变换
逆行是一种重要的音乐创作技巧,通过将主题、动机或旋律反转来生成新的创作思路。在古典音乐中,海顿《第47号交响曲》的小步舞曲就是逆行运用的典型例子。
2.1 逆行变换的问题分析
虽然逆行在某些情况下可以产生不错的旋律,但作为一种通用的旋律构建方法,它也存在一些实际问题:
-
和弦音问题
:反转一段四个八分音符的乐句,常常会导致和弦音变成非和弦音,反之亦然。这意味着使用原和声(即使反转)与反转后的旋律搭配可能效果不佳。
-
弱拍问题
:很多旋律以弱拍开始,即旋律以休止符开始第一拍。反转这类旋律可能会给人一种不完整的感觉。
-
不对称边界问题
:旋律通常不完全与小节边界对齐,可能有弱起拍,并且旋律可能在小节内结束。反转具有这些特征的旋律在小节和节拍上可能会完全不同步,尤其是在完全原位替换原旋律时。
-
和声异常问题
:简单地反转和声可能会导致一些问题。例如,原旋律的结尾和开头可能在不同的调上,反转后会在反转旋律的开头出现突然的调变化。此外,典型的转调公式反转后会变得非常不典型甚至罕见。
2.2 逆行变换的设计
逆行变换是在脱离作曲编辑的环境下开发的,不假设反转后的旋律会被原位植入。它提供了保留原和声或反转和声的选项,方便用户使用和声转录。如果用户想使用不同的和声,可以在逆行后应用和声转录。最后,还提供了将反转后的旋律适配原和声的选项,但这作用有限,只是为用户提供便利。
其设计相对简单,主要是对旋律反转技术的重新包装,并提供了几种处理和声的选项。具体步骤如下:
1. 反转原旋律线和和声上下文(hct)。
2. 考虑三种情况:
-
反转和声
:返回反转后的旋律线和反转后的和声,无需转录。
-
原和声且不转录
:返回反转后的旋律线和原和声。
-
原和声且转录
:对反转后的旋律线应用和声转录,使其适配原和声,然后返回转录后的反转旋律线和原和声。
以下是逆行变换逻辑的mermaid流程图:
graph TD;
A[开始] --> B[反转原旋律线和hct];
B --> C{选择情况};
C -->|反转和声| D[返回反转后的旋律线和反转后的和声];
C -->|原和声且不转录| E[返回反转后的旋律线和原和声];
C -->|原和声且转录| F[对反转后的旋律线应用和声转录];
F --> G[返回转录后的反转旋律线和原和声];
2.3 逆行变换的API
逆行变换的API遵循与其他变换相同的调用模式,即创建/应用调用模式。构造函数只接受一个参数:
-
score
:输入的音乐,以LiteScore表示。
apply()
方法接受以下参数:
-
reverse_harmony
:
True
表示输入的和声应反转以用于逆行结果。
-
time_interval
:一个数字区间,指定要提取逆行的音乐的全音符时间范围。
-
transcription
:仅在不反转和声时,使用和声转录将旋律转录到原和声。默认值为
True
。
-
result_sample_size
:当和声不反转时,和声转录应生成的最大解决方案数量。使用
MinContourFilter
来找到与原反转旋律轮廓“最匹配”的旋律以适配原和声。该值越大,所需的计算机时间和资源就越多。
返回值是一个由反转后的旋律线和根据指定参数确定的hct组成的对。需要注意的是,只有由时间区间界定的音乐部分以逆行形式返回。在不反转和声且指定转录的情况下,结果是由
MinContourFilter
使用
result_sample_size
参数确定的最佳解决方案。
2.4 逆行变换的示例
2.4.1 简单旋律示例
考虑一个简单的C大调旋律和非常简单的和声。反转旋律和和声后,在不应用转录的情况下,和声匹配非常好。代码如下:
from transformation.retrograde.t_retrograde import TRetrograde
source_instance_expression = '{<C-Major:I> qC:4 D E G <:v> [iD:5 B:4 A G] qC:5 D ‘ \
’<:IV> A:4 iF E hC}'
lite_score = create_score(source_instance_expression, 'piano', (4, 4, 'swww'))
trans = TRetrograde(lite_score)
reversed_line, hct = trans.apply()
最后,将原和声应用于反转后的旋律并进行转录,结果也还不错,但不是最佳的。可以观察到由于适配不同的和声,旋律发生了调整。
2.4.2 莫扎特《G大调钢琴奏鸣曲》KV283 示例
以莫扎特《G大调钢琴奏鸣曲》KV283第一乐章的一段旋律为例,作者对和声进行了轻微改动以增强逆行变换的演示效果。反转旋律和和声后,结果很有趣。代码如下:
source_instance_expression = '{<G-Major:I> sD:5 E F# G A B C:6 D <:IV> C ‘ \
‘B:5 A G <:VDom7> sF# E D C <:I> B:4 D:5 B:4 G <:VDom7> A C:5 A:4 F# }'
lite_score = create_score(source_instance_expression, 'piano', (3, 4, 'sww'))
trans = TRetrograde(lite_score)
# 旋律反转,和声反转;不重新适配旋律到和声
reversed_line, hct = trans.apply()
最后,像第一个示例一样,尝试保留原和声并应用和声转录。
逆行变换为音乐创作提供了一种新的思路,但在实际应用中需要考虑到各种问题,并根据具体情况进行调整和处理。通过合理运用逆行变换和和声转录,可以为音乐创作带来更多的可能性。
2.5 逆行变换的实际应用建议
在实际应用逆行变换时,可以参考以下建议来更好地处理上述提到的问题:
-
灵活处理和声
:可以只反转旋律,忽略和声,将反转后的旋律作为新的素材。或者尝试使用反转后的和声,尽管可能存在问题,但也能带来新的创意。还可以通过和声转录将反转后的旋律适配原和声,或者为反转后的旋律设计新的和声。
-
注意节拍和和弦音角色
:要理解反转后节拍角色可能发生的变化,以及和弦音角色可能出现在不合适的节拍上。在适配和声时,需要仔细考虑这些因素。
2.6 逆行变换的总结
逆行变换是一种具有独特魅力的音乐创作技巧,它能够为作曲家带来全新的创作视角和灵感。然而,在使用过程中,需要充分认识到其可能带来的问题,并采取相应的措施进行处理。通过合理运用逆行变换以及相关的和声处理方法,可以创作出更具创新性和独特性的音乐作品。
3. 和声转录与逆行变换的对比与结合
3.1 对比分析
| 变换类型 | 核心目的 | 主要问题 | 改进方向 |
|---|---|---|---|
| 和声转录变换 | 在保持旋律的基础上改变和声 | 搜索空间大、约束条件易冲突 | 增加约束类型、优化过滤规则、开发规则分析步骤 |
| 逆行变换 | 通过反转旋律生成新的创作思路 | 和弦音、弱拍、边界、和声异常问题 | 灵活处理和声、注意节拍和和弦音角色 |
从对比中可以看出,和声转录变换侧重于和声的改变,而逆行变换侧重于旋律的反转。两者都面临一些实际问题,但改进方向有所不同。
3.2 结合应用
和声转录变换和逆行变换可以结合使用,为音乐创作带来更多的可能性。例如,可以先对一段旋律进行逆行变换,然后再对反转后的旋律应用和声转录变换,使其适配新的和声。这样可以在保留旋律特色的同时,创造出全新的音乐效果。
以下是一个简单的结合应用流程:
1. 选择一段原始旋律和相应的和声。
2. 对原始旋律进行逆行变换,得到反转后的旋律。
3. 根据创作需求,确定新的和声上下文。
4. 对反转后的旋律应用和声转录变换,使其适配新的和声。
5. 对结果进行评估和调整,根据需要进一步修改和声或旋律。
graph LR;
A[原始旋律与和声] --> B[逆行变换];
B --> C[反转后的旋律];
C --> D[确定新和声上下文];
D --> E[和声转录变换];
E --> F[适配新和声的反转旋律];
F --> G[评估与调整];
G --> H[最终音乐作品];
4. 结论
和声转录变换和逆行变换是两种重要的音乐创作技巧,它们各自具有独特的特点和应用场景。和声转录变换可以在保持旋律的基础上改变和声,为音乐带来新的色彩;逆行变换则通过反转旋律,为创作提供新的思路。
在实际应用中,这两种变换都面临一些挑战,需要我们不断探索和改进。通过增加约束类型、优化过滤规则、开发规则分析步骤等方法,可以提高和声转录变换的实用性;通过灵活处理和声、注意节拍和和弦音角色等措施,可以更好地应对逆行变换带来的问题。
此外,将和声转录变换和逆行变换结合使用,可以进一步拓展音乐创作的可能性。作曲家可以根据自己的创作需求,灵活运用这两种变换,创作出更具创新性和独特性的音乐作品。未来,随着音乐技术的不断发展,这两种变换可能会得到进一步的完善和拓展,为音乐创作带来更多的惊喜。
超级会员免费看
6743

被折叠的 条评论
为什么被折叠?



