You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

音乐人问询索引偏移操作的编程术语及实现代码

自定义音阶移调的编程术语与实现

对应的编程术语

你描述的操作核心是索引偏移映射,在音乐编程场景下,这属于自定义音阶上的移调(Transposition on a Custom Scale)。简单来说,就是把给定的音阶(列表a)作为音高映射表,先将目标音列(列表b)转换为音阶内的相对索引(即你提到的列表f),通过对索引做固定数值的加减实现音高平移,最后再将偏移后的索引反向映射回原音阶的音高值。

Python代码实现

以下是匹配你需求的完整代码,包含索引映射、偏移处理和反向映射逻辑:

# 定义基础音阶(对应你的列表a)
scale = (0, 2, 4, 5, 7, 9, 11, 12)
# 构建音高到索引的映射字典,快速查找音高在音阶中的位置
pitch_to_index = {pitch: idx for idx, pitch in enumerate(scale)}
# 需要移调的目标音列(对应你的列表b)
note_sequence = (4, 7, 5, 7, 9, 11, 9)

def transpose_on_scale(scale, note_seq, shift_amount):
    # 将音列转换为音阶内的索引序列
    index_sequence = [pitch_to_index[note] for note in note_seq]
    # 对索引进行偏移,用取模处理越界(模拟音乐中的八度循环)
    shifted_indices = [(idx + shift_amount) % len(scale) for idx in index_sequence]
    # 将偏移后的索引映射回音阶音高
    return [scale[idx] for idx in shifted_indices]

# 示例1:向上偏移1,得到你给出的列表c
c = transpose_on_scale(scale, note_sequence, 1)
print(c)  # 输出: [5, 9, 7, 9, 11, 12, 11]

# 示例2:向下偏移1,生成对应移调结果
d = transpose_on_scale(scale, note_sequence, -1)
print(d)  # 输出: [2, 5, 4, 5, 7, 9, 7]

# 示例3:向下偏移2,得到你给出的列表e的结果
e = transpose_on_scale(scale, note_sequence, -2)
print(e)  # 输出: [0, 4, 2, 4, 5, 7, 9]

代码说明

  • pitch_to_index字典:用于快速查找音高对应的音阶索引,避免重复遍历列表,提升处理效率。
  • shift_amount参数:正数表示向上移调(音阶内的音级升高),负数表示向下移调(音级降低)。
  • 取模运算% len(scale):处理偏移后索引超出音阶范围的情况,实现类似音乐中八度循环的效果——索引超出最大值后回到音阶开头,索引为负时自动转换为有效的正索引。

内容的提问来源于stack exchange,提问作者Ralph Jarzombek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:30:23