Arpeggio in Midi erklingen lassen

Begonnen von Mjchael, Dienstag, 7. Juni 2022, 22:03

« vorheriges - nächstes »

Mjchael

Das Arpeggio wird richtig angezeigt.

<a c' e'  >4\arpeggio

Wie lasse ich es im Midiblock am besten erklingen? Wie notiere ich es dort richtig?

Gibt es da Beispiele (Tabs und Noten konventionell für Gitarristen, doch mit richtiger Midiausgabe)

Derzeit sieht es folgendermaßen aus

https://de.wikibooks.org/wiki/Gitarre:_Zupfen_mit_Sechsachtel-Takt#die_Plectrum-Variante

Gruß Mjchael
Meine Durchhalteparole:
Das sollst du nicht können!
Das sollst du lernen!

harm6

#1
ZitatWie lasse ich es im Midiblock am besten erklingen?

Es gibt keine standardmäßige Funktionalität dafür.
Aber H. S. Teoh hatte was geschrieben und ich hatte es noch ein klein wenig erweitert:

%% by H. S. Teoh
%% https://lists.gnu.org/archive/html/lilypond-user/2020-12/msg00036.html
%
% A scheme function that unpacks a rolled chord into displaced notes with
% adjusted lengths such that it will render nicely in MIDI.
%
\version "2.20.1"

% Returns: A skip followed by the given note, with the skip scaled by n/d of
% the note's length, and the note scaled by (d-n)/d of its original length.
#(define shiftedNote (lambda (num denom note)
    (if (= num 0)
        ; First note is unchanged
        note
        ; Construct a skip + the note, both appropriately scaled
        (let ((dLog (ly:duration-log (ly:music-property note 'duration)))
              (dDot (ly:duration-dot-count (ly:music-property note 'duration)))
              (dFac (ly:duration-factor (ly:music-property note 'duration)))
              (scaledNote (ly:music-deep-copy note)))
          (set! (ly:music-property scaledNote 'duration)
                (ly:make-duration dLog dDot
                  (*
                    (/ (car dFac) (cdr dFac))
                    (/ (- denom num) denom))))
          (make-music 'SequentialMusic
            'elements
            (list
               (make-music
                 'SkipEvent
                 'duration
                 (ly:make-duration dLog dDot
                   (* (/ (car dFac) (cdr dFac)) (/ num denom))))
               scaledNote))))))

% Generate a rolled chord from the given notes. Each subsequent note is shifted
% by num/denom.
#(define genArpeggio
  (lambda (num denom notes)
    (if (pair? notes) ; Test for empty list
        ; Recursive case
        (if (null? (ly:music-property (car notes) 'duration))
            ; Skip objects that have no duration
            (genArpeggio (1+ num) denom (cdr notes))
            ; Shift notes
            (cons
              (shiftedNote num denom (car notes))
              (genArpeggio (1+ num) denom (cdr notes))))
        ; Base case
        '())))

% Params:
%   chord = The chord to arpeggiate.
%   denom = The fraction of the chord's length to use as a rest for each note
%       of the arpeggiated chord. This must not be less than the number of
%       notes in the chord. If it's greater than the number of chord notes, the
%       top note will be held longer.
midiArpeggio = #(define-music-function (denom chord) (number? ly:music?)
    (let ((chordTones (ly:music-property chord 'elements)))
      (make-music
        'SimultaneousMusic
        'elements
        (genArpeggio 0 denom chordTones))))

% vim:set sw=4 ts=4 et:

%% by Harm
%% https://lists.gnu.org/archive/html/lilypond-user/2020-12/msg00039.html

getMidiArpeggios =
#(define-music-function (val mus) (number? ly:music?)
  (map-some-music
    (lambda (m)
      (and (music-is-of-type? m 'event-chord)
           (any
             (lambda (elt)
               (eq? (ly:music-property elt 'name) 'ArpeggioEvent))
             (ly:music-property m 'elements))
           (midiArpeggio val m)))
    mus))
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXAMPLES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

mus =
\new Staff \relative c' {
  <c e g c>4\arpeggio
  r2.
  |
  <c e g c>2
  <c e g c>\arpeggio
}
 
\score { \mus }

\score {
  \getMidiArpeggios 24
  \mus
  \midi { }
}

ZitatDerzeit sieht es folgendermaßen aus

https://de.wikibooks.org/wiki/Gitarre:_Zupfen_mit_Sechsachtel-Takt#die_Plectrum-Variante

Btw, die Tabulatur stimmt bei den E-Dur-Akkorden nicht, auch kommt sicherlich kein A-Dur in den Akkorden vor ;)

HTH,
  Harm

P.S. Eigentlich wäre dieser thread besser in der Rubrik MIDI aufgehoben ...

Mjchael

@harm6

Danke für deinen Fingerzeig mit den Noten. :D Es wurde berichtigt.

Deinen Lösungsansatz kann ich leider nicht beim Wiki-Pluggin nutzen.  :(

Ich suche ein funktionierendes Schnipsel um ein Arpeggio mittels überbundenen Vorschlagnoten o.ä. darzustellen, die dann korrekt im Midi wiedergegeben werden.  Ich schreibe dann 2 verschiedene Blöcke.
Meine Durchhalteparole:
Das sollst du nicht können!
Das sollst du lernen!

harm6

ZitatDeinen Lösungsansatz kann ich leider nicht beim Wiki-Pluggin nutzen.

Warum nicht?