MIDI难度计算 (注:以下描述均由“通义灵码”自动生成)
采用两种模式及方法计算MIDI难度:标准及仅基础模式;累加及平均方法。
一、概念说明 ※注意:以下描述中:同一时刻下,弹奏的所有音。即单音及和弦皆使用“音”表示;在和弦中的每一个音符均使用“音符”表示,作以区分 ●音:单音及和弦的总称 ●音符:单个音符 ●单音:由单个音符所构成的音 ●和弦:由多个音符所构成的音 (组合音)
二、难度计算方法 (包含两种计算模式及方法) ※标准模式中,先均放大6倍计算,保证在计算单个音时,其“音数难度”及“跨度难度”始终为整数,不会导致后面的计算中,因除以3除不尽造成小数;这样计算后,十级曲目对应的三项难度便刚好均为60 (保证了一定的精度) ➢基础难度 (演奏速度) ●公式:6000÷时间间隔 (ms) (标准) ※1000÷时间间隔 (ms) (仅基础) ●基准:需要将100ms对应十级难度,故采用6000来除 (6倍放大) ●原理:基于每两音之间的时间间隔计算,间隔越短 (速度越快),难度越大 ※考虑到人的极限反应时间约为0.1s,遂将100ms对应十级难度 ➢音数难度 (和弦复杂度) ●公式:音数×12 ●基准:1个音符难度为2,5个音符难度为10 (原始难度) ※1个音符难度为12,5个音符难度为60 (6倍放大) ●原理:同时演奏的音符越多 (和弦越复杂),难度越大 ※1个音符为最简单;5个音符为最难,对应十级难度 ➢跨度难度 (手部伸展) ●公式:跨度×5 (跨度=冠音序号-根音序号) ●基准:1个半音难度为5/6,12个半音 (一个八度) 难度为10 (原始难度) ※1个半音难度为5,12个半音 (一个八度) 难度为60 (6倍放大) ●原理:和弦中从根音到冠音的跨度越大,手部伸展要求越大,难度越大 ※12个半音 (一个八度) 为最难,对应十级难度
三、单个音的难度计算规则 对于每个音,综合三部分计算难度: ※由于单音不存在跨度,故其跨度难度恒为0
对于首音及后续音分别计算: ➢首音 ※第一个音的基础难度恒为0 (因为没有前一个音来计算时间间隔) ●单音:音数难度 (恒为2,放大6倍后恒为12) ●和弦 ○有跨度:(音数难度+跨度难度)÷2 ○无跨度:音数难度 (跟单音一样恒为2,放大6倍后恒为12;不过基本不会发生)
➢后续音 ●单音:(基础难度+音数难度)÷2 ●和弦 ○有跨度:(基础难度+音数难度+跨度难度)÷3 ○无跨度:(基础难度+音数难度)÷2 (跟单音一样;不过基本不会发生)
四、聚合策略 ➢通道内聚合 ●将通道内所有音的难度累加后除以音的总数 ●关键还原步骤:标准模式中,最终结果还需再除以6,还原缩放比,以对应0~10级难度的范畴
➢多音轨处理 (单通道包含多个有效音轨) ●分别计算各音轨难度的总和及平均值
➢总体聚合 ●分别计算所有有效通道难度的总和及平均值 ●有效通道:至少包含一个音符
五、输出和等级划分 ➢输出内容 ●各通道详细难度信息 (按乐器分类显示) ●MIDI总难度及平均难度 ●两种模式的结果对比
➢等级划分 (基于平均难度)
●专业级:810分
●高级:68分
●中级:46分
●初级:24分
●入门级:0~2分
六、技术特点 ●6倍放大策略:标准模式中,所有中间计算都使用6倍放大,最后统一还原 ●有效数据判定:严格过滤空通道,避免无效数据干扰 ●时间基准:以100ms间隔对应十级难度为基准 ●时间精度:使用毫秒级时间计算 ●和弦识别:将起始时间相同的音符合并为和弦处理 ●智能音符分组:将音分划为单音/和弦 ●乐器识别:识别所有乐器
➢规范的核心原则 ●首音单独处理 ●有效数据判定 ●通道间采用累加及平均值 ●缩放比的正确还原 ●严格区分单音与和弦
综合考虑演奏的技术要求 (速度、复杂度及手部跨度),且严格遵循方法规范中提到的“有效数据判定”、“6倍放大策略”、“首音特殊处理”等核心原则,确保了难度计算的准确性和可靠性,并能够相对准确地评估MIDI的真实演奏难度。