From: Rune Zedeler Date: Thu, 1 Aug 2002 11:32:32 +0000 (+0000) Subject: 2002-08-01 Rune Zedeler X-Git-Tag: release/1.5.72~56 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=0443c9c43ae3739b6cffce50930660bf4d8b60e8;p=lilypond.git 2002-08-01 Rune Zedeler * lily/tab-note-heads-engraver.cc: add algorithm for automatically selecting frets when none given by user. Read property "minimumFret". * scm/translator-property-description.scm: Add "minimumFret" --- diff --git a/ChangeLog b/ChangeLog index c35ceb21bb..22422265c6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2002-08-01 Rune Zedeler + * lily/tab-note-heads-engraver.cc: add algorithm for automatically + selecting frets when none given by user. Read property + "minimumFret". + + * scm/translator-property-description.scm: Add "minimumFret" + * mf/feta-eindelijk.mf: Changed layout of 16th and shorter rests to match the 8th rest. slanted 8th rest a bit more. WARNING: 8th rest and classical quarter rest exchanged. diff --git a/lily/tab-note-heads-engraver.cc b/lily/tab-note-heads-engraver.cc index 6c6e9e43d1..6c454a8cb5 100644 --- a/lily/tab-note-heads-engraver.cc +++ b/lily/tab-note-heads-engraver.cc @@ -54,9 +54,9 @@ Tab_note_heads_engraver::try_music (Music *m) { if (m->get_mus_property ("text-type") != ly_symbol2scm ("finger")) return false; - //if (tabstring_reqs_.size () < note_reqs_.size ()) { - tabstring_reqs_.push (ts); - //} + while(tabstring_reqs_.size () < note_reqs_.size ()-1) + tabstring_reqs_.push(0); + tabstring_reqs_.push(ts); return true; } else if (dynamic_cast (m)) @@ -82,15 +82,29 @@ Tab_note_heads_engraver::process_music () for (int i=0; i < note_reqs_.size (); i++) { + SCM stringTunings = get_property ("stringTunings"); + int number_of_strings = ((int) gh_length(stringTunings)); + Item * note = new Item (get_property ("TabNoteHead")); Music * req = note_reqs_[i]; - Music * tabstring_req = tabstring_reqs_[i]; - + Music * tabstring_req = 0; + if(tabstring_reqs_.size()>i) + tabstring_req = tabstring_reqs_[i]; + // printf("%d %d\n",tabstring_reqs_.size(),i); size_t lenp; - char* tab_string_as_string = gh_scm2newstr(tabstring_req->get_mus_property ("text"), &lenp); - int tab_string = atoi(tab_string_as_string); + int tab_string; + bool string_found; + if (tabstring_req) { + char* tab_string_as_string = gh_scm2newstr(tabstring_req->get_mus_property ("text"), &lenp); + tab_string = atoi(tab_string_as_string); + string_found = true; + } + else { + tab_string = number_of_strings; + string_found = false; + } Duration dur = *unsmob_duration (req->get_mus_property ("duration")); @@ -110,22 +124,34 @@ Tab_note_heads_engraver::process_music () dots_.push (d); } - SCM stringTunings = get_property ("stringTunings"); - int number_of_strings = ((int) gh_length(stringTunings)); + SCM scm_pitch = req->get_mus_property ("pitch"); + SCM proc = get_property ("tablatureFormat"); + SCM min_fret_scm = get_property ("minimumFret"); + int min_fret = gh_number_p(min_fret_scm) ? gh_scm2int(min_fret_scm) : 0; + + while(!string_found) { + int fret = unsmob_pitch(scm_pitch)->semitone_pitch() + - gh_scm2int(gh_list_ref(stringTunings,gh_int2scm(tab_string-1))); + if(fretset_grob_property ("text", text); SCM c0 = get_property ("centralCPosition"); if (gh_number_p (c0)) pos += gh_scm2int (c0); - SCM scm_pitch = req->get_mus_property ("pitch"); - SCM proc = get_property ("tablatureFormat"); - SCM text = gh_call3 (proc, gh_int2scm (tab_string), stringTunings, scm_pitch); - note->set_grob_property ("text", text); note->set_grob_property ("staff-position", gh_int2scm (pos)); announce_grob (note, req->self_scm()); @@ -163,6 +189,6 @@ ENTER_DESCRIPTION(Tab_note_heads_engraver, /* descr */ "Generate one or more tablature noteheads from Music of type Note_req.", /* creats*/ "TabNoteHead Dots", /* acks */ "", -/* reads */ "centralCPosition stringTunings", +/* reads */ "centralCPosition stringTunings minimumFret", /* write */ ""); diff --git a/scm/translator-property-description.scm b/scm/translator-property-description.scm index de72887856..4258266410 100644 --- a/scm/translator-property-description.scm +++ b/scm/translator-property-description.scm @@ -265,6 +265,9 @@ top of those automatically detected. ") MIDI instrument to use ") (translator-property-description 'midiMinimumVolume number? "[DOCUMENT-ME]") (translator-property-description 'midiMaximumVolume number? "[DOCUMENT-ME]") +(translator-property-description 'minimumFret number? "The tablature +auto string-selecting mechanism selects the highest string with a fret +not less than minimumFret") (translator-property-description 'autoBeaming boolean? "If set to true then beams are generated automatically.") (translator-property-description 'noDirection boolean? "Don't set directions by a2-engraver when part-combining.")