April 11Apr 11 Hey, OpusmodersHere is one more function in the style of the previous one (rewrite-dyn). This time to rewrite pitches.(defun rewrite-pit (expressao-omn pitch-list) "Substitui as alturas de uma expressão OMN por uma lista customizada, fazendo a repetição cíclica se a lista for menor que o número de notas." (let* ((dis (disassemble-omn expressao-omn)) ;; Desmonta a expressão [3, 6] (pitches (getf dis :pitch)) ;; Extrai alturas atuais (lengths (getf dis :length)) ;; Extrai durações (inclui rests) [7] (velocities (getf dis :velocity)) ;; Extrai dinâmicas [8] (articulations (getf dis :articulation)) ;; Extrai articulações/ties [9, 10] ;; 1. Mapeia a quantidade de notas em cada sublista/compasso (counts (mapcar #'length pitches)) ;; [2, 5] ;; 2. Calcula o total de eventos de nota para o preenchimento (total-notes (apply #'+ (flatten counts))) ;; [2, 11] ;; 3. Gera a lista de novas alturas repetindo o padrão do usuário (flat-pitches (gen-trim total-notes pitch-list)) ;; [2, 4] ;; 4. Redistribui as alturas na estrutura de sublistas original (structured-pitches (gen-divide counts flat-pitches))) ;; [2, 5] ;; 5. Remonta o objeto OMN completo preservando os demais parâmetros (make-omn :pitch structured-pitches :length lengths :velocity velocities :articulation articulations))) ;; [2, 3];;USE(setf expressao-omn '((s eb4 d4 e a4 -s s eb4 tie) (h eb4 a4 -s eb4 d4 -s tie) (e. d4 a4 eb4 d4) (-q e f4 s c5 qs fs4)))Using both rewrite-dyn and rewrite-pit (rewrite-pit expressao-omn '(c4 e4 d4 c4 c4))(rewrite-dyn (rewrite-pit expressao-omn '(c4 e4 d4 c4 c4)) '(ff > p p< ff> pp ff p p< ff p mf ppp p < ff))Best !!Julio Herrlein
Create an account or sign in to comment