ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

自动处理单个和弦、一般模式、chordmode下的分解和弦

2021-12-19 02:00:27  阅读:202  来源: 互联网

标签:和弦 mymusic name music 单个 chordmode property ly


之前的分解和弦要针对不同的输入模式提供不同的命令,不实用

除此之外,如果和弦与和弦之间有插入类似于谱号切换的指令,命令也会报错。

最近研究了如何识别不同的模式,新开发的命令\ArpeggioChord可以对单个和弦、一般模式、和弦模式都做分解和弦,并且自动忽略掉临时谱号等信息

要能应用,就需要把命令区里的指令都复制过去

效果如图

 

 

 

 

\version "2.22.1"
\language "english"

abc=
\chordmode {
  c4

  \clef bass
  d
}

abccommon=
{
  <c' e' g'>4
  \clef bass
  <d' f' a'>4
}


%%%%%% 命令区
%%%%% 基础指令,后面使用map的时候会用得上

#(define (get-elements mymusic)
   (ly:music-property mymusic 'elements)
   )

%%%%% 获取音乐序列
#(define (get-sequential-music m)
   (cond
    ;;第一种情况,如果是chordmode,此时m的'name属性为'UnrelativableMusic
    ((eq? (ly:music-property m 'name) 'UnrelativableMusic)
     (ly:music-property (ly:music-property m 'element)
       'elements))
    ;;第二种情况,如果一般模式,此时m的'name属性为'SequentialMusic
    ((eq? (ly:music-property m 'name) 'SequentialMusic)
     (ly:music-property m 'elements))
    )
   )


%%%%%% 获取和弦序列,只保留'EventChord的部分
#(define (getChord m)
   (cond
    ((null? m) '())
    ((eq? (ly:music-property (car m) 'name) 'EventChord)
     (cons (car m) (getChord (cdr m))))
    (else (getChord (cdr m)))
    )
   )


#(display-scheme-music
  (getChord
   (ly:music-property
    (ly:music-property abc 'element)
    'elements))
  )

#(display-scheme-music
  (cond
   ((eq? (ly:music-property abc 'name) 'UnrelativableMusic)
    (getChord(ly:music-property
              (ly:music-property abc 'element)
              'elements)))
   )
  )


%%%%%%%%%% 开始处理

ArpeggioChord=
#(define-music-function (mymusic) (ly:music?)
   (cond
    ((or
      (eq?(ly:music-property mymusic 'name) 'UnrelativableMusic)
      (eq?(ly:music-property mymusic 'name) 'SequentialMusic))
     (make-sequential-music
      (apply append
        (map get-elements
          (getChord (get-sequential-music mymusic))))))
    ((eq? (ly:music-property mymusic 'name) 'EventChord)
     (make-sequential-music
      (get-elements mymusic)))
    )
   )

%%%%%%% 命令区结束

{
  \mark "和弦模式" \abc \ArpeggioChord \abc } {
\mark "一般模式" \abccommon \ArpeggioChord \abccommon } {
\mark "单个和弦" <c' e'> \ArpeggioChord <c' e'> }

 

标签:和弦,mymusic,name,music,单个,chordmode,property,ly
来源: https://www.cnblogs.com/lilypondgaspard/p/15706573.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有