Hi Peter, On Tue, Apr 22, 2025 at 11:42 PM Peter X <peterandu...@gmail.com> wrote:
> I’m trying to figure out how to print the MIDI number of each note in a > score using a Scheme engraver — for example, I’d like c' to print as 60, d' > as 62, etc., during compilation. > %< snip >% > What is the proper or recommended way to extract and print the MIDI number > of each note in a LilyPond score? > I’d really appreciate any working examples or pointers. Thank you very > much! Engravers are something I never have been able to figure out - still working my way through learning Scheme. However, I was able to put together some code that runs in a NoteName context that comes pretty close to what you asked for. Whether it's proper or recommended I doubt. But it works ... more or less. The output is: Starting lilypond 2.24.4 [test_midi_numberV2.ly]... Processing `/home/michael/Downloads/test_midi_numberV2.ly' Parsing... Interpreting music... 🎵 Found Pitch: c3 → MIDI: 60 🎵 Found Pitch: d3 → MIDI: 62 🎵 Found Pitch: e3 → MIDI: 64 🎵 Found Pitch: f3 → MIDI: 65 🎵 Found Pitch: g3 → MIDI: 67 🎵 Found Pitch: a3 → MIDI: 69 🎵 Found Pitch: g3 → MIDI: 67 If that's close enough, then the code is: \version "2.24.4" simplePitchDebugTwo = #(lambda (pitch ctx) (ly:message "🎵 Found Pitch: ~a~a → MIDI: ~a" (note-name->string pitch) ; Next line sets middle C to C3 - change 3 to 4 to get C4 as middle C (+ (ly:pitch-octave pitch) 3) (+ (ly:pitch-semitones pitch) 60)) ; LilyPond complains about missing markup list without the next line (markup #:null)) music = { \clef treble \key c \major \time 4/4 c'4 d'4 e'4 f'4 | g'4 a'4 g'2 | } \score { \new Staff << \new Voice { \music } \new NoteNames { \set noteNameFunction = #simplePitchDebugTwo \music } >> } Still trying to get my head wrapped around the whole engraver thing. Ah well ... someday. Hopefully this'll be close enough to serve for now. -- Michael