They work very well, it's really what I was looking for and I appreciate the offer to modify them but it is not necessary.

As you said it depends on the speed and the radius of the curves.
I am curious to know the reason why the locomotives whistle 4 times.
Thanks again for this work of yours.
Regards
Javier
I believe that is the standard sequence for a crossing: two blasts, one short blast, and one long blast as the loco is passing the crossing.
The whistle_sign.gs script can be modified to create any sequence you like. This is the section you would want to change:
// long
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(2.0f);
// long
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(2.0f);
// short
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(2.0f);
// lean on it!
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");
Sleep(0.15f);
SendMessage(theTrain, "loco", "horn");