35、音乐中的步移变换与序列探索

音乐步移变换的原理、应用与展望

音乐中的步移变换与序列探索

1. 简单和弦重映射

在音乐处理中,步移变换对和声或和声上下文轨道元素有着重要影响。对于像 <G - Major, ii> 这类容易明确的和声情况,处理算法相对简单。具体步骤如下:
1. 使用之前描述的音调重映射功能对和弦音进行重映射。
2. 调用针对这些音调的和弦分类器来确定和弦类型。
3. 重建和声上下文。

例如,对于 <G - Major, ii> ,若步长增量为 -1,音集 {A, C, E} 会被映射为 {G, B, D} ,即 <G - Major, I>

2. 副和弦处理

副和弦的步移变换有独特之处。副和弦的一般形式为:
[
\frac{Numerator}{Denominator} \equiv \frac{PrimaryChord}{ScaleDegree([modality])}
]

在对副和弦应用步长增量时,有两种选择:对分子或分母进行操作。
- 分子操作示例 :以 <G - Major, Vii/iii> 为例,若对分子应用增量 1,会得到 <G - Major, viii/IV> 。这会产生一种奇特的和弦解决方式,从 vi/iii 到 IV,但仍保持着某种 V:I 关系。
- 分母操作示例 :若对分母应用增量 2,结果更符合传统副和弦解决的用法,能保持 V:I 关系。

基于此,有两种副和弦移位类型:
- 标准(Standard) :对分子进行增量/减量操作。
- 调性(Tonal) :对分母进行增量/减量操作。

3. 步移 API

步移 API 包含构造函数和 apply() 方法。 TStepShift 构造函数的参数如下:
| 参数 | 说明 |
| ---- | ---- |
| source_line | 音符的源线 |
| source_hct | 与源线配对的源和声上下文轨道 |
| defaultSecondaryShiftType | 默认的副和弦移位策略 |

apply() 方法的参数如下:
| 参数 | 说明 |
| ---- | ---- |
| step_increment | 表示每个音符音高和和声上下文要应用的音阶步数和变化方向的整数(正或负) |
| temporal_extent | 以全音符时间表示的数值区间,指示变换影响的时间范围(若为 None,则使用完整的源线和源和声上下文) |
| secondary_shift_type | 应用 apply() 方法时使用的副和弦移位类型值,若不为 None,则会覆盖构造函数中指定的默认副和弦移位类型 |

apply() 方法的返回值:
- 和声上下文轨道(hct)的副本,按指定的时间范围截断。
- 源线的完整副本,但仅在时间范围内通过步移修改音符音高。

4. 示例

以下是几个步移变换的示例:
- 简单旋律构建降序序列

line_text = '{<E - Major:I>iE:5 f# G# F# E f# }'
lge = LineGrammarExecutor()
source_instance_line, source_instance_hct = lge.parse(line_text)
print_score('\n[0]: ', source_instance_line, source_instance_hct)

trans = TStepShift(source_instance_line, source_instance_hct)

new_line, new_hct = trans.apply(-1)
print_score('\n[1]: ', new_line, new_hct)

new_line, new_hct = trans.apply(-2)
print_score('\n[2]: ', new_line, new_hct)

new_line, new_hct = trans.apply(-3)
print_score('\n[3]: ', new_line, new_hct)

此示例通过对第一小节应用步移迭代生成后续三小节,但第 2 - 4 小节的派生和弦可能有更好的选择。

  • 使用标准副和弦移位类型的升序序列
line_text = '{<C - Major:I> (i, 2)[iC:5 E D] <:V/ii> c#:5 b:4 c#:5 e <:ii> f d b:4 a}'
lge = LineGrammarExecutor()
source_instance_line, source_instance_hct = lge.parse(line_text)
print_score('\n[0]: ', source_instance_line, source_instance_hct)
trans = TStepShift(source_instance_line, source_instance_hct, SecondaryShiftType.Standard)

new_line, new_hct = trans.apply(1)
print_score('\n[1]: ', new_line, new_hct)

new_line, new_hct = trans.apply(2)
print_score('\n[2]: ', new_line, new_hct)

该示例中,转调情况不太常见,但每个生成的小节可能在序列设置之外有新的用途。

  • 使用调性副和弦移位类型 :这种方式能保留副和弦 V/x 到 x 的范式,在小调中应用序列时更有趣,能产生更丰富的色彩,但仍有改进空间。
5. 步移变换的思考

步移变换与之前的移位变换互补。移位变换侧重于调性和模式的改变,而步移变换专注于保留调性并按音阶度数移动音符,同时两者都试图产生兼容的和声。

不过,步移变换仍有很大的扩展空间:
- 允许在非自然音阶上进行步移,关键在于设计音调映射。
- 目前和弦家族仅限于三和弦,可考虑加入四和弦和二和弦。
- 步移的和弦映射方式可优化,采用更传统的和弦序列可能效果更好。
- 标准副和弦移位策略可能导致不常见的和弦解决方式,值得进一步探索。

此外,虽然有人可能想将步移变换与移位变换结合,但分开处理能增强功能的概念分离,提高可用性。

6. 音乐表示与变换的更广阔视野

在音乐表示和变换的探索中,还有许多领域值得深入研究。
- 更广泛的音乐合成
- 音乐理论研究试图扩展传统观念,引入了全音符时间、更广泛的调性、和弦家族等概念。但目前对和声的处理较为抽象,和弦变换还有很大的提升空间,尤其是在考虑转位、增加紧张度等方面。
- 未来可探索的方向包括:
- 理解微音调音乐及其规则,以及它如何融入或扩展传统音乐理论。
- 将古典音乐和爵士乐视为同一理论基础下的不同视角,通过软件模型扩展音乐工具。
- 深入理解现代音乐风格和结构,明确其背后的原则。
- 实时合成的挑战 :部分变换依赖规则引擎,但在实时音乐渲染中使用规则引擎存在问题:
- 处理时间不可预测,尤其是在约束不足的情况下。
- 规则引擎的结果缺乏质量排序,且缺乏标准的旋律/和声质量度量来筛选结果。

综上所述,音乐的表示和变换在软件中的应用还有很长的路要走,需要不断探索和改进。

graph LR
    A[简单和弦重映射] --> B[音调重映射]
    B --> C[和弦类型确定]
    C --> D[重建和声上下文]
    E[副和弦处理] --> F[分子操作]
    E --> G[分母操作]
    H[步移 API] --> I[构造函数]
    H --> J[apply()方法]
    K[示例] --> L[简单旋律降序序列]
    K --> M[标准副和弦移位升序序列]
    K --> N[调性副和弦移位]
    O[步移变换思考] --> P[扩展空间探讨]
    Q[音乐合成与实时合成] --> R[更广泛音乐合成探索]
    Q --> S[实时合成挑战分析]

以上内容涵盖了音乐步移变换的基本原理、应用示例以及对音乐表示和变换未来发展的思考,希望能为音乐创作者和研究者提供有价值的参考。

音乐中的步移变换与序列探索

7. 不同音乐风格中的步移变换效果

在不同的音乐风格中,步移变换会呈现出不同的效果。
- 大调风格 :以 C 大调为例,在之前的示例中,步移变换的结果有一定的规律,但也存在一些不完美之处。例如,使用标准副和弦移位类型时,会出现不常见的转调情况;而使用调性副和弦移位类型时,能较好地保留副和弦的范式,但整体效果仍可通过人为调整进一步优化。
- 小调风格 :在小调中应用步移变换,尤其是使用调性副和弦移位类型时,能产生更丰富的色彩。如 C 旋律小调和 C 自然小调的示例,虽然效果不错,但同样需要用户根据实际情况进行调整。当明确指定二级小调调性为自然小调时,会带来更多的色彩变化,例如在某些小节中出现特殊的自然小调运用。

以下是不同风格中步移变换效果的对比表格:
| 音乐风格 | 步移类型 | 效果特点 | 改进方向 |
| ---- | ---- | ---- | ---- |
| C 大调 | 标准副和弦移位 | 转调不常见 | 探索更合适的和弦序列 |
| C 大调 | 调性副和弦移位 | 保留副和弦范式 | 人为调整优化 |
| C 旋律小调 | 调性副和弦移位 | 色彩丰富 | 用户酌情修改 |
| C 自然小调 | 调性副和弦移位 | 色彩丰富,有特色 | 进一步探索特殊调性运用 |

8. 步移变换的代码实现细节

在代码实现方面,步移变换的 API 提供了方便的操作方式。以下是 TStepShift 类的详细说明:

class SecondaryShiftType(enum.Enum):
    Standard = 1   # Change the numerator of a secondary chord.
    Tonal = 2      # Change the denominator of a secondary chord.

class TStepShift:
    def __init__(self, source_line, source_hct, defaultSecondaryShiftType):
        self.source_line = source_line
        self.source_hct = source_hct
        self.defaultSecondaryShiftType = defaultSecondaryShiftType

    def apply(self, step_increment, temporal_extent=None, secondary_shift_type=None):
        if secondary_shift_type is None:
            secondary_shift_type = self.defaultSecondaryShiftType

        if secondary_shift_type == SecondaryShiftType.Standard:
            orig_principal_chord_template = secondary_chord.chord_template.principal_chord_template
            # Assume TertianChordtemplate
            new_scale_degree = ((orig_principal_chord_template.scale_degree - 1) + step_increment) % 7 + 1
            new_principal_chord_template = … # Rebuild TertianChordTemplate.
            secondary_chord_template = … # Rebuild SecondaryChordTemplate.
            return SecondaryChord(secondary_chord_template, base_tonality)
        else:
            orig_template = secondary_chord.chord_template
            new_degree = ((orig_template.secondary_scale_degree - 1) + step_increment) % 7 + 1
            secondary_chord_template = … # Rebuild SecondaryChordTemplate  
            return SecondaryChord(secondary_chord_template, base_tonality)

在调用 apply() 方法时,需要注意以下参数:
- step_increment :表示要应用的音阶步数和变化方向的整数。
- temporal_extent :指定变换影响的时间范围,若为 None 则使用完整的源线和源和声上下文。
- secondary_shift_type :指定副和弦移位类型,若不为 None 则会覆盖构造函数中指定的默认类型。

9. 音乐创作中的实际应用建议

对于音乐创作者来说,步移变换是一个强大的工具,但在实际应用中需要注意以下几点:
- 明确创作目标 :根据创作的音乐风格和情感表达需求,选择合适的步移类型和步长增量。例如,想要营造出传统的和声效果,可以优先考虑调性副和弦移位类型;若追求新颖的和弦解决方式,可以尝试标准副和弦移位类型。
- 结合其他技巧 :步移变换可以与其他音乐技巧相结合,如节奏变化、音色选择等,以丰富音乐的表现力。
- 不断尝试和调整 :由于步移变换的结果可能存在不完美之处,创作者需要不断尝试不同的参数组合,并根据实际效果进行调整,以达到理想的音乐效果。

10. 总结与展望

步移变换为音乐创作带来了新的可能性,它能够在保留调性的基础上,通过按音阶度数移动音符来产生丰富的和声变化。然而,目前的步移变换仍存在一些不足之处,如和弦映射的优化、标准副和弦移位策略的改进等。

未来,随着音乐技术的不断发展,步移变换有望在以下方面取得突破:
- 更智能的算法 :开发更智能的算法,能够自动根据音乐风格和上下文选择合适的步移参数和和弦映射方式。
- 跨风格的融合 :实现不同音乐风格之间的更自然融合,为创作者提供更多的创作灵感。
- 实时交互体验 :解决实时合成的挑战,实现更流畅的实时交互音乐创作体验。

graph LR
    A[不同音乐风格] --> B[大调风格]
    A --> C[小调风格]
    D[代码实现细节] --> E[TStepShift类]
    E --> F[构造函数]
    E --> G[apply()方法]
    H[实际应用建议] --> I[明确创作目标]
    H --> J[结合其他技巧]
    H --> K[不断尝试调整]
    L[总结与展望] --> M[现有不足改进]
    L --> N[未来突破方向]

总之,音乐的表示和变换是一个充满挑战和机遇的领域,通过不断的研究和实践,我们有望为音乐创作者提供更强大、更智能的工具,推动音乐创作的发展。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值