[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Automatically identify beats
From: |
David Kastrup |
Subject: |
Re: Automatically identify beats |
Date: |
Tue, 09 Oct 2018 00:47:36 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) |
Thomas Morley <address@hidden> writes:
> Am Mo., 8. Okt. 2018 um 23:50 Uhr schrieb David Kastrup <address@hidden>:
>
>> ly:get-all-translators gets the _globally_ registered translators, those
>> you can access with a _string_ as reference (should be a symbol,
>> really).
>>
>> > So _registering_ them makes testI/II translators,
>>
>> No, translator creators (which are functions called with a "context"
>> argument). Some years ago, those were actual translators without a
>> working context and LilyPond created a copy when instantiating a context
>> and then and changed the context in the copy. That scheme was not
>> suitable for registering Scheme-defined translators/engravers so it had
>> to be changed.
>
> Well, I'm a little confused about translators and translator-creators
> (I use the hyphen to make the wording more obvious).
> Not the least reason is:
> #(pretty-print (filter-map ly:translator? (ly:get-all-translators)))
> returns '()
>
> Could it be the changed implementation details were not really
> reflected in the naming and description of those scheme-function
> related to translators, i.e.: ly:translator-whatever
> ?
Yes, it could be. The result would have been different in 2.18.
>> Since the implementation details changed under the hood in that time
>> and basically nobody was actually affected, most of those details are
>> pretty academical and are of interest basically to answer questions
>> of the "but how could this possibly work with user-defined engravers"
>> kind. That no longer has the simple answer "badly". Scheme_engraver
>> is no longer listed as an engraver (which it was in 2.16 or possibly
>> even 2.18 or so), and several individual Scheme-defined engravers
>> _are_ listed (and previously weren't). Which is a consequence of
>> changing "badly" into "it's involved".
>
> Yeah...
It's probably been easier to understand. But the Scheme used previously
just did not map sensibly to Scheme engravers: you could not possibly
have registered them, \consists/\removes was a pretty awkward mess, and
the list of engravers contained "Scheme_engraver" (which you could
actually \consist and get a real mess) but none of the Scheme engravers.
You now get:
address@hidden:/usr/local/tmp/lilypond$ lilypond scheme-sandbox
GNU LilyPond 2.21.0
Processing `/usr/local/share/lilypond/2.21.0/ly/scheme-sandbox.ly'
Parsing...
guile> (ly:get-all-translators)
(#<Translator_creator> #<procedure Measure_counter_engraver (context)>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<procedure Merge_rests_engraver (context)>
#<Translator_creator> #<Translator_creator> #<procedure Span_stem_engraver
(ctx)> #<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>
#<Translator_creator> #<Translator_creator> #<Translator_creator>)
guile>
namely a bunch of Translator_creator s creating C++ engravers (maybe the
print expression should at least mention _which_ C++ engraver in order
to make them look less similar) and the procedures registered as
translator-creators. Which don't really create translators but lists,
but at the point they are called, the list is then further converted to
an actual translator. If you did not need a closure, you could register
a list in the first place (I think) and then _that_ would be used at the
time of lookup.
In 2.18, this looks like
address@hidden:/usr/local/tmp/lilypond$ /usr/bin/lilypond scheme-sandbox
GNU LilyPond 2.18.2
Processing `/usr/share/lilypond/2.18.2/ly/scheme-sandbox.ly'
Parsing...
guile> (ly:get-all-translators)
(#<Translator Control_track_performer > #<Translator Drum_note_performer >
#<Translator Key_performer > #<Translator Output_property_engraver >
#<Translator Timing_translator > #<Translator Text_spanner_engraver >
#<Translator Multi_measure_rest_engraver > #<Translator Staff_performer >
#<Translator Pure_from_neighbor_engraver > #<Translator Note_heads_engraver >
#<Translator Span_bar_engraver > #<Translator Tie_engraver > #<Translator
Arpeggio_engraver > #<Translator Chord_tremolo_engraver > #<Translator
Text_engraver > #<Translator Dynamic_performer > #<Translator
Note_head_line_engraver > #<Translator Cue_clef_engraver > #<Translator
Span_bar_stub_engraver > #<Translator Pitched_trill_engraver > #<Translator
Paper_column_engraver > #<Translator Note_performer > #<Translator
Accidental_engraver > #<Translator Grid_point_engraver > #<Translator
Melody_engraver > #<Translator Metronome_mark_engraver > #<Translator
Bar_number_engraver > #<Translator Hyphen_engraver > #<Translator
Beam_performer > #<Translator Breathing_sign_engraver > #<Translator
Piano_pedal_engraver > #<Translator Tuplet_engraver > #<Translator
Lyric_performer > #<Translator Script_engraver > #<Translator Lyric_engraver >
#<Translator Repeat_tie_engraver > #<Translator Engraver > #<Translator
Auto_beam_engraver > #<Translator Repeat_acknowledge_engraver > #<Translator
Staff_symbol_engraver > #<Translator Fingering_column_engraver > #<Translator
Beam_engraver > #<Translator Dot_column_engraver > #<Translator
Ligature_bracket_engraver > #<Translator Tweak_engraver > #<Translator
Slur_engraver > #<Translator Separating_line_group_engraver > #<Translator
Horizontal_bracket_engraver > #<Translator Page_turn_engraver > #<Translator
Vaticana_ligature_engraver > #<Translator Dynamic_engraver > #<Translator
Double_percent_repeat_engraver > #<Translator Axis_group_engraver >
#<Translator Tie_performer > #<Translator System_start_delimiter_engraver >
#<Translator Ambitus_engraver > #<Translator Scheme_engraver > #<Translator
Staff_collecting_engraver > #<Translator Midi_control_function_performer >
#<Translator Part_combine_engraver > #<Translator Trill_spanner_engraver >
#<Translator Keep_alive_together_engraver > #<Translator
Stanza_number_align_engraver > #<Translator Balloon_engraver > #<Translator
Spacing_engraver > #<Translator Spanner_break_forbid_engraver > #<Translator
Script_column_engraver > #<Translator Laissez_vibrer_engraver > #<Translator
Note_spacing_engraver > #<Translator Slur_performer > #<Translator
Tab_tie_follow_engraver > #<Translator Grid_line_span_engraver > #<Translator
Cluster_spanner_engraver > #<Translator Grob_pq_engraver > #<Translator
Fingering_engraver > #<Translator Stanza_number_engraver > #<Translator
Mark_engraver > #<Translator Grace_auto_beam_engraver > #<Translator
Ottava_spanner_engraver > #<Translator Chord_name_engraver > #<Translator
Grace_engraver > #<Translator Grace_beam_engraver > #<Translator
Note_name_engraver > #<Translator Rhythmic_column_engraver > #<Translator
Parenthesis_engraver > #<Translator Bend_engraver > #<Translator
Instrument_switch_engraver > #<Translator Drum_notes_engraver > #<Translator
Completion_heads_engraver > #<Translator Bar_engraver > #<Translator
Custos_engraver > #<Translator Episema_engraver > #<Translator
Piano_pedal_performer > #<Translator Time_signature_performer > #<Translator
Tempo_performer > #<Translator Pitch_squash_engraver > #<Translator
Kievan_ligature_engraver > #<Translator Dynamic_align_engraver > #<Translator
New_fingering_engraver > #<Translator Clef_engraver > #<Translator
Figured_bass_engraver > #<Translator Slash_repeat_engraver > #<Translator
Stem_engraver > #<Translator Collision_engraver > #<Translator
Measure_grouping_engraver > #<Translator Completion_rest_engraver >
#<Translator Font_size_engraver > #<Translator Instrument_name_engraver >
#<Translator Volta_engraver > #<Translator Rest_engraver > #<Translator
Script_row_engraver > #<Translator Glissando_engraver > #<Translator
Span_arpeggio_engraver > #<Translator Forbid_line_break_engraver > #<Translator
Concurrent_hairpin_engraver > #<Translator Break_align_engraver > #<Translator
Rest_collision_engraver > #<Translator Extender_engraver > #<Translator
Time_signature_engraver > #<Translator Piano_pedal_align_engraver >
#<Translator Figured_bass_position_engraver > #<Translator
Tab_staff_symbol_engraver > #<Translator Tab_note_heads_engraver > #<Translator
Beam_collision_engraver > #<Translator Key_engraver > #<Translator
Vertical_align_engraver > #<Translator Fretboard_engraver > #<Translator
Footnote_engraver > #<Translator Mensural_ligature_engraver > #<Translator
Grace_spacing_engraver > #<Translator Percent_repeat_engraver > #<Translator
Dots_engraver > #<Translator Default_bar_line_engraver > #<Translator
Phrasing_slur_engraver > #<Translator Ledger_line_engraver > #<Translator
Translator >)
guile>
You'll notice that there is a #<Translator Scheme_engraver > in there,
and (yuch!) a #<Translator Translator > (I have no idea what the latter
did). Even a #<Translator Engraver > but no #<Translator Performer >.
Walk away slowly, make no sudden movements and avoid eye contact.
--
David Kastrup
- Re: Automatically identify beats, (continued)
- Re: Automatically identify beats, Aaron Hill, 2018/10/07
- Re: Automatically identify beats, Thomas Morley, 2018/10/07
- Re: Automatically identify beats, Aaron Hill, 2018/10/07
- Re: Automatically identify beats, Thomas Morley, 2018/10/07
- Re: Automatically identify beats, David Kastrup, 2018/10/07
- Re: Automatically identify beats, Thomas Morley, 2018/10/07
- Re: Automatically identify beats, David Kastrup, 2018/10/07
- Re: Automatically identify beats, Thomas Morley, 2018/10/08
- Re: Automatically identify beats, David Kastrup, 2018/10/08
- Re: Automatically identify beats, Thomas Morley, 2018/10/08
- Re: Automatically identify beats,
David Kastrup <=
- Re: Automatically identify beats, David Kastrup, 2018/10/08
- Re: Automatically identify beats, Thomas Morley, 2018/10/25
- Re: Automatically identify beats, David Kastrup, 2018/10/25
- Re: Automatically identify beats, Thomas Morley, 2018/10/25
- Re: Automatically identify beats, Thomas Morley, 2018/10/08
- Re: Automatically identify beats, Daniel Sales, 2018/10/08