Comme qui dirait: "boite à outils"...

Rubriques dédiées aux principaux utilitaires pour ORTS

Modérateur : Modérateurs

Avatar du membre
BB25187
Administrateur
Messages : 15107
Enregistré le : 09 mai 2004 1:07
Localisation : Grenoble
Contact :

Comme qui dirait: "boite à outils"...

Messagepar BB25187 » 03 déc. 2015 21:10

Bonsoir,

Comme je l'ai dit, je vais profiter que le PC que j'utilise pour construire (et utiliser) mes modèles est en rade pour me consacrer au développement de petits utilitaires auxquels je pense depuis plus ou moins longtemps. En général, il s'agit d'outils que j'aurais bien aimé avoir à ma disposition pour effectuer des tâches qui se sont avérées fastidieuses et qui semblaient assez facilement automatisables.

Quelle est l'idée générale?
Je ne sais pas si vous avez remarqué, mais dans la construction, l'adaptation ou la modification de modèles, nous sommes amené à manipuler pas mal de types de fichiers différents: fichiers ENG/WAG, fichiers SMS, fichier CON, ... Or, ceux-ci sont plus ou moins bien écrits et présentés. Souvent, ils utilisent des règles de mise en forme mal définies ou hétérogènes, ce qui les rend difficiles à lire, à comprendre, à modifier, à comparer, à corriger en cas de bugs. Quand on aime bosser sur de la matière bien propre, il est donc fréquent de devoir remettre les fichiers sous une forme lisible et systématique avant de pouvoir bosser dessus de manière sérieuse. C'est long et fastidieux à faire, et ce n'est pas très intéressant. Or, ce genre de remise en forme est typiquement le genre de tâche qui peut être automatisée sans trop de difficulté. C4est ce qu'on appelle couramment en anglais un "pretty printer", autrement dit un outil qui améliore et systématise la présentation d'un fichier.
Partant de là, on peut imaginer d'aller plus loin. En effet, si l'on sait mettre un fichier dans une forme propre, c'est qu'on a été capable de le lire et d'en extraire la structure. On n'est pas très loin alors de pouvoir l'analyser, de pouvoir détecter des erreurs ou des motifs indésirables en son sein, voire de l'enrichir, par exemple de commentaires automatiques ou de paramètres particuliers.
C'est donc à ce type d'outils que je m'intéresse.

Le premier petit outil que je vais proposer concernera les fichiers SMS, qui sont parmi les plus mal présentés et les plus illisibles de tout le petit monde MSTS/ORTS. Il se limitera à la première étape, à savoir celle du simple "pretty printer", pour mettre les fichiers dans une forme lisible et systématique au niveau des indentations, du bannissement des caractères de tabulation (qui ne sont absolument pas portables et ne garantissent pas la préservation de l'alignement initial), de la position des mots clefs, des parenthèses, ... Je le diffuserai prochainement afin de voir d'une part si ça intéresse d'autres personnes que moi, et d'autre part si la méthode d'écriture et de diffusion que j'envisage fonctionne en pratique.
Pour les fichiers SMS, pas sûr que j'irai plus loin, mais ça reste à étudier. La détection de problèmes sérieux ou l'enrichissement par des commentaires automatiques pourrait être intéressantes aussi. A voir...

Je pense que les fichiers auxquels je m'intéresserai ensuite seront les fichiers ENG/WAG. Là par contre, il y a plein de petits trucs sympa qu'on peut imaginer en matière de ré-ordonnancement des paramètres pour les mettre dans un ordre logique et cohérent, d'analyse, de détection de problèmes potentiels, d'enrichissement, ... voir peut-être plus.

Quelle méthode d'écriture et de diffusion?
Pour des questions de facilité et de souplesse, je m'oriente vers un langage de scripting plutôt que vers un langage de programmation du genre C, C#, ... Mais, compte tenu de ce que j'envisage, il faut un système de scripting suffisamment évolué, disposant de nombreux modules d'extension pour ne pas devoir réinventer la roue. Pour ceux qui connaissent et que ça intéresse, j'ai choisi Python, qui présente plusieurs avantages:
- Il propose de nombreux modules d'extension
- Il repose sur une représentation orientée objet qui est très bien adaptée pour le traitements que j'envisage - surtout quand il va s'agir de traiter des fichiers aussi riches que les fichiers ENG
- Il est aisément portable d'une plateforme à une autre (x86, x86-64, Linux, ... )
- Il ne demande que l'installation préalable de Python sur votre PC, qui est simple et robuste
- Il rend les scripts concernés très faciles à appeler (sous réserve que les bonnes options aient été choisies lors de l'installation de Python!): un double clic suffit.
Pour vous faciliter la vie et le moment venu, je rédigerai une petite page sur l'installation et l'utilisation du premier petit outil de moise au propre des fichiers SMS.

Ah oui! Deux précisions encore:
- A priori, ces outils sont plus particulièrement destinés ceux qui mettent les mains dans le cambouis (ne pas prendre cette remarque de manière négative: c'est un fait!). Il n'est donc pas certain qu'il intéressent un grand nombre de personnes.
- Du même coup, l'interface graphique n'est pas une priorité, ce qui n'exclue pas que ça vienne plus tard.

Voilà, rien de magique, mais un petit truc pratique pour encourager la livraison de fichiers propres et systématiques, et se faciliter la vie quand ceux qu'on reçoit ne le sont pas!

A suivre...
"Er ist ein Unmensch, ein Tyrann!" - Tamino - Erster Akt - Die Zauberflöte.
____________________________________________________________

Image

Avatar du membre
BB25187
Administrateur
Messages : 15107
Enregistré le : 09 mai 2004 1:07
Localisation : Grenoble
Contact :

Re: Comme qui dirait: "boite à outils"...

Messagepar BB25187 » 03 déc. 2015 21:13

Reuh,

Un exemple?

J'ai choisi un fichier ni très sale, ni très propre, mais qui est assez représentatif de ce qu'on trouve dans la nature (là, vous ne pouvez pas faire trop la différence entre tabulations et espaces, mais des éditeurs comme NotePad++ permettent de juger de leur nombre):

Code : Tout sélectionner

SIMISA@@@@@@@@@@JINX0x1t______

Tr_SMS (
   Skip ( ** ER20 Sound (Butsche ALEX Repaint) - wespe 2003  ** )

   ScalabiltyGroup( 5
      Activation (         ExternalCam ()         Distance       (1000)      )
      Deactivation (         Distance       (1000)      )
      Streams ( 13
         Stream (
            Priority ( 6 )
                                                                Volume( 2.0 )
            Triggers ( 9
               Initial_Trigger  (                                  StartLoop   ( 1 File ( "x_Fahrt1.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Inc_Past 0.050 ReleaseLoopRelease () )
               Variable_Trigger ( Variable2_Inc_Past 0.150 StartLoop   ( 1 File ( "x_Fahrt3.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Inc_Past 0.450 ReleaseLoopRelease () )
               Variable_Trigger ( Variable2_Dec_Past 0.450 StartLoop   ( 1 File ( "x_Fahrt3.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Dec_Past 0.150 ReleaseLoopRelease () )               
               Variable_Trigger ( Variable2_Dec_Past 0.050 StartLoop   ( 1 File ( "x_Fahrt1.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
            )
            FrequencyCurve(
               Variable2Controlled
               CurvePoints ( 8
                  0.000      12025
                  0.150      12025
                  0.450      13000
                  0.500      13000
                  0.501      12025
                  0.550      12025
                  0.850      13000
                  1.000      13000
               )
               Granularity ( 100 )
            )
            VolumeCurve(
               Variable2Controlled
               CurvePoints ( 7
                   0.000      0.25
                   0.010      0.30
                   0.050      0.0
                   0.150      0.0
                   0.250      0.45
                   0.350      0.50
                   0.450      0.0
               )
               Granularity ( 0.05 )
            )            
         )
                                                Stream (
            Priority ( 6 )
                                                                Volume( 2.0 )
            Triggers ( 2
               Variable_Trigger ( Speed_Inc_Past  0.1   StartLoopRelease ( 1
                  File ( "x_Fahrt4.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable1_Inc_Past  0.1   DisableTrigger ( 1 ) )
            )
            FrequencyCurve(
               SpeedControlled
               CurvePoints ( 5
                  0.0      11025
                  5.0      13025
                  10.0      17025
                  17.0      20025
                  25.0      23025
                  
               )
               Granularity ( 100 )
            )
                                                                VolumeCurve(
               Variable2Controlled
               CurvePoints ( 5
                   0.000      1.0
                   0.005      1.0
                   0.010            1.0
                   0.020            1.0
                   1.000      1.0
            )
            Granularity ( 0.10 )
                         )
                       )
         Stream (
            Priority ( 6 )
                                                                Volume( 2.0 )
            Triggers ( 7
               Skip( **** The engine/current related sounds - Stream 2 {Xfade}         **** )
               Variable_Trigger ( Variable2_Inc_Past 0.010 StartLoop   ( 1 File ( "x_Fahrt2.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Inc_Past 0.250 ReleaseLoopRelease () )               
               Variable_Trigger ( Variable2_Inc_Past 0.350 StartLoop   ( 1 File ( "x_Fahrt4.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Dec_Past 0.650 StartLoop   ( 1 File ( "x_Fahrt4.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Dec_Past 0.350 ReleaseLoopRelease () )               
               Variable_Trigger ( Variable2_Dec_Past 0.250 StartLoop   ( 1 File ( "x_Fahrt2.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Dec_Past 0.010 ReleaseLoopRelease () )               
            )
            FrequencyCurve(
               Variable2Controlled
               CurvePoints ( 7
                  0.000      12025
                  0.010      12025
                  0.250      13000
                  0.300      13000
                  0.301      12025
                  0.350      12025
                  0.650      13000
               )
               Granularity ( 100 )
            )
            VolumeCurve(
               Variable2Controlled
               CurvePoints ( 12
                   0.000      0.0
                   0.010      0.3
                   0.050      0.4
                   0.150      0.45
                   0.250      0.0
                   0.350      0.0
                   0.450      0.50
                   0.550      0.60
                   0.650      0.70
                   0.750      0.80
                   0.850      0.90
                   0.950      1.0
               )
               Granularity ( 0.05 )
            )            
         )
                                                Stream (
            Priority ( 6 )
                                                                Volume ( 0.75 )
            Triggers ( 4
               
               Variable_Trigger ( Variable2_Inc_Past 0.410 StartLoop   ( 1 File ( "x_Turbo.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Inc_Past 1.000 ReleaseLoopRelease () )               
               Variable_Trigger ( Variable2_Dec_Past 1.000 StartLoop   ( 1 File ( "x_Turbo.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Dec_Past 0.410 ReleaseLoopRelease () )               
            )
            FrequencyCurve(
               Variable2Controlled
               CurvePoints ( 2
                  0.400      9000
                  1.000      17000
               )
               Granularity ( 100 )
            )
            VolumeCurve(
               Variable2Controlled
               CurvePoints ( 2
                   0.410      0.0
                   1.000      0.7
               )
               Granularity ( 0.05 )
            )            
         )
         Stream (
            Skip ( **** This stream allows the horn to be played at the same time     **** )
            Priority ( 6 )
                                                                Volume ( 2.0 )
            Triggers ( 2
               Discrete_Trigger ( 8   StartLoopRelease ( 1   File ( "x_Horn1.wav" -1 )   SelectionMethod ( SequentialSelection )   )   )
               Discrete_Trigger ( 9   ReleaseLoopReleaseWithJump ()   )
            )
         )
                                                Stream (
            Skip ( **** This stream allows the horn to be played at the same time     **** )
            Priority ( 6 )
                                                                Volume ( 2.0 )
            Triggers ( 2
               Discrete_Trigger ( 10   StartLoopRelease ( 1
                                       File ( "x_Horn2.wav" -1 )   
                                       SelectionMethod ( RandomSelection )
                                    )
                        )

               Discrete_Trigger ( 11    ReleaseLoopReleaseWithJump ()   )
            )
         )
         Stream (
            Skip ( **** This stream allows the sander to be played at the same time     **** )            
            Priority ( 5 )         
            Triggers ( 2            
               Discrete_Trigger (  4   StartLoopRelease ( 1   File ( "../../KIHA31/sound/x_k31_sand.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Discrete_Trigger (  5   ReleaseLoopRelease () )   
            )
         )
         Stream (
            Skip ( **** This stream allows the Compressor to be played at the same time     **** )            
            Priority ( 6 )         
            Triggers ( 2            
               Discrete_Trigger (  12   StartLoopRelease ( 1   File ( "x_Kompressor.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Discrete_Trigger (  13   ReleaseLoopRelease () )   
            )
         )
                                                 Stream (
            Skip ( **** Brake stop **** )            
            Priority ( 6 )   
                                                                Volume ( 2.0 )      
            Triggers ( 7            
               Discrete_Trigger (  14   StartLoopRelease ( 1   File ( "x_Stop.wav" -1 )
               SelectionMethod ( SequentialSelection ) ) )
               Discrete_Trigger (  54   ReleaseLoopRelease () )
               Discrete_Trigger (  54   ReleaseLoopRelease () )
               Discrete_Trigger (  54   ReleaseLoopRelease () )
               Discrete_Trigger (  54   ReleaseLoopRelease () )
               Variable_Trigger ( Speed_Dec_Past 0.2   ReleaseLoopRelease ()   )
               Variable_Trigger ( Speed_Inc_Past 17.0   ReleaseLoopRelease ()   )
            )
            FrequencyCurve(
               SpeedControlled
               CurvePoints ( 3
                    -7.0      11000
                     0.0      12000
                     7.0      11000
                  )
               Granularity ( 100 )
            )
            VolumeCurve(
               SpeedControlled
               CurvePoints ( 5
                    -5.0      0.0
                    -3.5      1.0
                     0.0      0.0
                     3.5      1.0
                     5.0      0.0
               )
               Granularity ( 0.05 )
            )            
         )
         Stream (
            Skip ( **** This stream allows the Train Brake & Independant Brakes to be played at the same time     **** )
            Priority ( 5 )
            Triggers ( 5
               Skip ( **** NOTE: Need to check if correct waves used for apply/release     **** )
               Skip ( ****       Assumes 3 = Release, 1 & 2 = Apply                       **** )
             
              Skip ( **** Tbrake    **** )
              Skip ( **** Release    **** )
               Discrete_Trigger ( 14    PlayOneShot ( 1 File ( "../../KIHA31/sound/x_k31_airb_auto3.wav" -1 ) SelectionMethod ( SequentialSelection ) ) )
              Skip ( **** Apply {normal & emergency}   **** )
               Discrete_Trigger ( 53     PlayOneShot ( 2 File ( "../../KIHA31/sound/x_k31_airb_auto1.wav" -1 ) File ( "../../KIHA31/sound/x_k31_airb_auto2.wav" -1 ) SelectionMethod ( RandomSelection ) ) )
               Discrete_Trigger ( 54    PlayOneShot ( 2 File ( "../../KIHA31/sound/x_k31_airb_auto1.wav" -1 ) File ( "../../KIHA31/sound/x_k31_airb_auto2.wav" -1 ) SelectionMethod ( RandomSelection ) ) )
               
              Skip ( **** Ibrake    **** )
              Skip ( **** Release    **** )
               Discrete_Trigger ( 21    PlayOneShot ( 1 File ( "../../KIHA31/sound/x_k31_airb_ind3.wav" -1 ) SelectionMethod ( SequentialSelection ) ) )
              Skip ( **** Apply   **** )
               Discrete_Trigger ( 22     PlayOneShot ( 2 File ( "../../KIHA31/sound/x_k31_airb_ind1.wav" -1 ) File ( "../../KIHA31/sound/x_k31_airb_ind2.wav" -1 ) SelectionMethod ( RandomSelection ) ) )
            )
         )   
         Stream (
            Skip( **** Dynamic brakes **** )
            Skip( **** NOTE: First See comment for SL 3 Dynamic brake.                ** )
            Skip( ****       I am going to continue using Method 2 outlined there for the moment, since I am not sure   ** )
            Skip( ****       if the waves we have will allow crossfading {due to the loop/release} - I may be able      ** )
            Skip( ****       to manage something using the play only one block feature { setting the number after       ** )
            Skip( ****       the filename to something other than   -1 }, But I will look at if I have more time.         ** )
            Priority ( 6 )
            Triggers ( 10
               Variable_Trigger ( Variable3_Inc_Past 0.05  StartLoopRelease   ( 1 File ( "../../KIHA31/sound/x_k31_dynb_dyn1.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable3_Dec_Past 0.05  ReleaseLoopRelease  () )               
            )
            FrequencyCurve(
               Variable3Controlled
               CurvePoints ( 2
                    0.0      12025
                    1.0      17800
               )
               Granularity ( 100 )
            )
         )
         Stream (
            Priority ( 5 )
            Triggers ( 6
               Discrete_Trigger ( 58 PlayOneShot ( 1    File ( "x_couple_chain1.wav" -1 ) SelectionMethod (SequentialSelection) ) )
               Discrete_Trigger ( 59 PlayOneShot ( 1    File ( "x_couple_chain2.wav" -1 ) SelectionMethod (SequentialSelection) ) )
               Discrete_Trigger ( 60 PlayOneShot ( 1    File ( "x_couple_chain3.wav" -1 ) SelectionMethod (SequentialSelection) ) )
               Discrete_Trigger ( 61 PlayOneShot ( 1    File ( "x_uncouple_chain1.wav" -1 ) SelectionMethod (SequentialSelection) ) )
               Discrete_Trigger ( 62 PlayOneShot ( 1    File ( "x_uncouple_chain2.wav" -1 ) SelectionMethod (SequentialSelection) ) )
               Discrete_Trigger ( 63 PlayOneShot ( 1    File ( "x_uncouple_chain3.wav" -1 ) SelectionMethod (SequentialSelection) ) )
            )
         )
      )
   )
   ScalabiltyGroup( 3
      Activation (         ExternalCam ()         Distance       (1000)      )
      Deactivation (         Distance       (1000)      )
      Streams ( 7
         Stream (
            Priority ( 6 )
                                                                Volume( 0.55 )
            Triggers ( 7
               Skip( **** The engine/current related sounds - Stream 1 {Xfade}         **** )
               Initial_Trigger  (                                  StartLoop   ( 1 File ( "x_Fahrt1.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Inc_Past 0.050 ReleaseLoopRelease () )
               Variable_Trigger ( Variable2_Inc_Past 0.150 StartLoop   ( 1 File ( "x_Fahrt3.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Inc_Past 0.450 ReleaseLoopRelease () )
               Variable_Trigger ( Variable2_Dec_Past 0.450 StartLoop   ( 1 File ( "x_Fahrt3.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Dec_Past 0.150 ReleaseLoopRelease () )               
               Variable_Trigger ( Variable2_Dec_Past 0.050 StartLoop   ( 1 File ( "x_Fahrt1.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
            )
            FrequencyCurve(
               Variable2Controlled
               CurvePoints ( 8
                  0.000      12025
                  0.150      12025
                  0.450      13000
                  0.500      13000
                  0.501      12025
                  0.550      12025
                  0.850      13000
                  1.000      13000
               )
               Granularity ( 100 )
            )
            VolumeCurve(
               Variable2Controlled
               CurvePoints ( 7
                   0.000      0.25
                   0.010      0.30
                   0.050      0.0
                   0.150      0.0
                   0.250      0.45
                   0.350      0.50
                   0.450      0.0
               )
               Granularity ( 0.05 )
            )            
         )
         Stream (
            Priority ( 6 )
                                                                Volume( 0.55 )
            Triggers ( 7
               Skip( **** The engine/current related sounds - Stream 2 {Xfade}         **** )
               Variable_Trigger ( Variable2_Inc_Past 0.010 StartLoop   ( 1 File ( "x_Fahrt2.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Inc_Past 0.250 ReleaseLoopRelease () )               
               Variable_Trigger ( Variable2_Inc_Past 0.350 StartLoop   ( 1 File ( "x_Fahrt4.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Dec_Past 0.650 StartLoop   ( 1 File ( "x_Fahrt4.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Dec_Past 0.350 ReleaseLoopRelease () )               
               Variable_Trigger ( Variable2_Dec_Past 0.250 StartLoop   ( 1 File ( "x_Fahrt2.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Dec_Past 0.010 ReleaseLoopRelease () )               
            )
            FrequencyCurve(
               Variable2Controlled
               CurvePoints ( 7
                  0.000      12025
                  0.010      12025
                  0.250      13000
                  0.300      13000
                  0.301      12025
                  0.350      12025
                  0.650      13000
               )
               Granularity ( 100 )
            )
            VolumeCurve(
               Variable2Controlled
               CurvePoints ( 12
                   0.000      0.0
                   0.010      0.3
                   0.050      0.4
                   0.150      0.45
                   0.250      0.0
                   0.350      0.0
                   0.450      0.50
                   0.550      0.60
                   0.650      0.70
                   0.750      0.80
                   0.850      0.90
                   0.950      1.0
               )
               Granularity ( 0.05 )
                             )            
                                                              )
         Stream (
            Skip ( **** This stream allows the horn to be played at the same time     **** )
            Priority ( 6 )
            Triggers ( 2
               Discrete_Trigger ( 8   StartLoopRelease ( 1   File ( "x_Horn1.wav" -1 )   SelectionMethod ( SequentialSelection )   )   )
               Discrete_Trigger ( 9   ReleaseLoopReleaseWithJump ()   )
            )
         )
         Stream (
            Skip ( **** This stream allows the sander to be played at the same time     **** )            
            Priority ( 5 )         
            Triggers ( 2            
               Discrete_Trigger (  4   StartLoopRelease ( 1   File ( "../../KIHA31/sound/x_k31_sand.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Discrete_Trigger (  5   ReleaseLoopRelease () )   
            )
         )
         Stream (
            Skip ( **** This stream allows the Compressor to be played at the same time     **** )            
            Priority ( 6 )         
            Triggers ( 2            
               Discrete_Trigger (  12   StartLoopRelease ( 1   File ( "x_Kompressor.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Discrete_Trigger (  13   ReleaseLoopRelease () )   
            )
         )
         Stream (
            Skip ( **** This stream allows the Train Brake & Independant Brakes to be played at the same time     **** )
            Priority ( 5 )
            Triggers ( 5
               Skip ( **** NOTE: Need to check if correct waves used for apply/release     **** )
               Skip ( ****       Assumes 3 = Release, 1 & 2 = Apply                       **** )
             
              Skip ( **** Tbrake    **** )
              Skip ( **** Release    **** )
               Discrete_Trigger ( 14    PlayOneShot ( 1 File ( "../../KIHA31/sound/x_k31_airb_auto3.wav" -1 ) SelectionMethod ( SequentialSelection ) ) )
              Skip ( **** Apply {normal & emergency}   **** )
               Discrete_Trigger ( 53     PlayOneShot ( 2 File ( "../../KIHA31/sound/x_k31_airb_auto1.wav" -1 ) File ( "../../KIHA31/sound/x_k31_airb_auto2.wav" -1 ) SelectionMethod ( RandomSelection ) ) )
               Discrete_Trigger ( 54    PlayOneShot ( 2 File ( "../../KIHA31/sound/x_k31_airb_auto1.wav" -1 ) File ( "../../KIHA31/sound/x_k31_airb_auto2.wav" -1 ) SelectionMethod ( RandomSelection ) ) )
               
              Skip ( **** Ibrake    **** )
              Skip ( **** Release    **** )
               Discrete_Trigger ( 21    PlayOneShot ( 1 File ( "../../KIHA31/sound/x_k31_airb_ind3.wav" -1 ) SelectionMethod ( SequentialSelection ) ) )
              Skip ( **** Apply   **** )
               Discrete_Trigger ( 22     PlayOneShot ( 2 File ( "../../KIHA31/sound/x_k31_airb_ind1.wav" -1 ) File ( "../../KIHA31/sound/x_k31_airb_ind2.wav" -1 ) SelectionMethod ( RandomSelection ) ) )
            )
         )   
         Stream (
            Skip( **** Dynamic brakes **** )
            Skip( **** NOTE: There are two ways to play DBrakes **** )
            Skip( ****       1/ If we have multiple samples for differing work levels fade between with cross faded loops       **** )
            Skip( ****          This is the intention for SL5 - although I am uncertian if the samples we have will allow this. **** )
            Skip( ****       2/ Use a Single wave and frequency shift as more effort applied. I will use this lower memory      **** )
            Skip( ****          solution for SL3                                                                                **** )
            Priority ( 6 )
            Triggers ( 10
               Variable_Trigger ( Variable3_Inc_Past 0.05  StartLoopRelease   ( 1 File ( "../../KIHA31/sound/x_k31_dynb_dyn1.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable3_Dec_Past 0.05  ReleaseLoopRelease  () )               
            )
            FrequencyCurve(
               Variable3Controlled
               CurvePoints ( 2
                    0.0      12025
                    1.0      17800
               )
               Granularity ( 100 )
            )
         )
      )
   )
   ScalabiltyGroup( 1
      Activation (         ExternalCam ()         Distance       (1000)      )
      Deactivation (         Distance       (1000)      )
      Streams ( 2
         Stream (
            Priority ( 6 )
                                                                Volume( 0.55 )
            Triggers ( 5
               Skip( **** The engine/current related sounds **** )
               Initial_Trigger  (                                 StartLoop   ( 1 File ( "x_Fahrt1.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Inc_Past  0.01 ReleaseLoopRelease () )
               Variable_Trigger ( Variable2_Inc_Past  0.01 StartLoop   ( 1 File ( "x_Fahrt4.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Variable2_Dec_Past  0.01 ReleaseLoopRelease () )               
               Variable_Trigger ( Variable2_Dec_Past  0.01 StartLoop   ( 1 File ( "x_Fahrt1.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
            )
            FrequencyCurve(
               Variable2Controlled
               CurvePoints ( 3
                  0.000      10000
                  0.010      10000
                  1.000      12500
               )
               Granularity ( 100 )
            )
            VolumeCurve(
               Variable2Controlled
               CurvePoints ( 3
                   0.000      0.5
                   0.100      1.0
                   1.000      1.0
               )
               Granularity ( 0.05 )
            )            
         )
         Stream (
            Skip ( **** This stream allows the horn to be played at the same time     **** )
            Priority ( 6 )
            Triggers ( 2
               Discrete_Trigger ( 8   StartLoopRelease ( 1   File ( "x_Horn1.wav" -1 )   SelectionMethod ( SequentialSelection )   )   )
               Discrete_Trigger ( 9   ReleaseLoopReleaseWithJump ()   )
            )
         )
      )
   )

   Skip( **** ******************************************* **** )
   Skip( **** Copy of Generic Diesel SMS Used for SL 0    **** )
   Skip( **** ******************************************* **** )

   ScalabiltyGroup( 0
      Activation (   ExternalCam ()   Distance       (500)   )
      Deactivation (   Distance       (500)   )
      Streams ( 1
         Stream (
            Priority ( 4 )
            Triggers ( 6
               Variable_Trigger ( Speed_Inc_Past   1.0 StartLoop   ( 1 File ( "x_Fahrt2.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Speed_Inc_Past  50.0 StartLoop   ( 1 File ( "x_Fahrt4.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Speed_Inc_Past  50.0 ReleaseLoopRelease () )               
               Variable_Trigger ( Speed_Dec_Past  49.0 StartLoop   ( 1 File ( "x_Fahrt2.wav" -1 )   SelectionMethod ( SequentialSelection ) ) )
               Variable_Trigger ( Speed_Dec_Past  49.0 ReleaseLoopRelease () )               
               Variable_Trigger ( Speed_Dec_Past   1.0 ReleaseLoopRelease () )               
            )
            VolumeCurve(
               SpeedControlled
               CurvePoints ( 3
                     0.0      0.0
                   10.0      1.0
                  100.0      1.0
               )
               Granularity ( 0.05 )
            )            
         )
      )
   )
)

Après un traitement par le petit "pretty-printer", on obtient le fichier ci-dessous (on peut encore améliorer les lignes qui définissent les points de courbes sonores ou "Curve_Points"):

Code : Tout sélectionner

SIMISA@@@@@@@@@@JINX0x1t______
Tr_SMS (
    Skip ( ** ER20 Sound ( Butsche ALEX Repaint ) - wespe 2003 ** )
    ScalabiltyGroup ( 5
        Activation (
            ExternalCam ( )
            Distance ( 1000 )
        )
        Deactivation (
            Distance ( 1000 )
        )
        Streams ( 13
            Stream (
                Priority ( 6 )
                Volume ( 2.0 )
                Triggers ( 9
                    Initial_Trigger (
                        StartLoop ( 1
                            File ( "x_Fahrt1.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Inc_Past 0.050
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Variable2_Inc_Past 0.150
                        StartLoop ( 1
                            File ( "x_Fahrt3.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Inc_Past 0.450
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.450
                        StartLoop ( 1
                            File ( "x_Fahrt3.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.150
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.050
                        StartLoop ( 1
                            File ( "x_Fahrt1.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                )
                FrequencyCurve (
                    Variable2Controlled
                    CurvePoints ( 8
                        0.000 12025
                        0.150 12025
                        0.450 13000
                        0.500 13000
                        0.501 12025
                        0.550 12025
                        0.850 13000
                        1.000 13000
                    )
                    Granularity ( 100 )
                )
                VolumeCurve (
                    Variable2Controlled
                    CurvePoints ( 7
                        0.000 0.25
                        0.010 0.30
                        0.050 0.0
                        0.150 0.0
                        0.250 0.45
                        0.350 0.50
                        0.450 0.0
                    )
                    Granularity ( 0.05 )
                )
            )
            Stream (
                Priority ( 6 )
                Volume ( 2.0 )
                Triggers ( 2
                    Variable_Trigger (
                        Speed_Inc_Past 0.1
                        StartLoopRelease ( 1
                            File ( "x_Fahrt4.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable1_Inc_Past 0.1
                        DisableTrigger ( 1 )
                    )
                )
                FrequencyCurve (
                    SpeedControlled
                    CurvePoints ( 5
                        0.0 11025
                        5.0 13025
                        10.0 17025
                        17.0 20025
                        25.0 23025
                    )
                    Granularity ( 100 )
                )
                VolumeCurve (
                    Variable2Controlled
                    CurvePoints ( 5
                        0.000 1.0
                        0.005 1.0
                        0.010 1.0
                        0.020 1.0
                        1.000 1.0
                    )
                    Granularity ( 0.10 )
                )
            )
            Stream (
                Priority ( 6 )
                Volume ( 2.0 )
                Triggers ( 7
                    Skip ( ** The engine/current related sounds -
                    Stream 2 {Xfade} ** )
                    Variable_Trigger (
                        Variable2_Inc_Past 0.010
                        StartLoop ( 1
                            File ( "x_Fahrt2.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Inc_Past 0.250
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Variable2_Inc_Past 0.350
                        StartLoop ( 1
                            File ( "x_Fahrt4.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.650
                        StartLoop ( 1
                            File ( "x_Fahrt4.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.350
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.250
                        StartLoop ( 1
                            File ( "x_Fahrt2.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.010
                        ReleaseLoopRelease ( )
                    )
                )
                FrequencyCurve (
                    Variable2Controlled
                    CurvePoints ( 7
                        0.000 12025
                        0.010 12025
                        0.250 13000
                        0.300 13000
                        0.301 12025
                        0.350 12025
                        0.650 13000
                    )
                    Granularity ( 100 )
                )
                VolumeCurve (
                    Variable2Controlled
                    CurvePoints ( 12
                        0.000 0.0
                        0.010 0.3
                        0.050 0.4
                        0.150 0.45
                        0.250 0.0
                        0.350 0.0
                        0.450 0.50
                        0.550 0.60
                        0.650 0.70
                        0.750 0.80
                        0.850 0.90
                        0.950 1.0
                    )
                    Granularity ( 0.05 )
                )
            )
            Stream (
                Priority ( 6 )
                Volume ( 0.75 )
                Triggers ( 4
                    Variable_Trigger (
                        Variable2_Inc_Past 0.410
                        StartLoop ( 1
                            File ( "x_Turbo.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Inc_Past 1.000
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 1.000
                        StartLoop ( 1
                            File ( "x_Turbo.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.410
                        ReleaseLoopRelease ( )
                    )
                )
                FrequencyCurve (
                    Variable2Controlled
                    CurvePoints ( 2
                        0.400 9000
                        1.000 17000
                    )
                    Granularity ( 100 )
                )
                VolumeCurve (
                    Variable2Controlled
                    CurvePoints ( 2
                        0.410 0.0
                        1.000 0.7
                    )
                    Granularity ( 0.05 )
                )
            )
            Stream (
                Skip ( ** This stream allows the horn to be played at the same time ** )
                Priority ( 6 )
                Volume ( 2.0 )
                Triggers ( 2
                    Discrete_Trigger ( 8
                        StartLoopRelease ( 1
                            File ( "x_Horn1.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Discrete_Trigger ( 9
                        ReleaseLoopReleaseWithJump ( )
                    )
                )
            )
            Stream (
                Skip ( ** This stream allows the horn to be played at the same time ** )
                Priority ( 6 )
                Volume ( 2.0 )
                Triggers ( 2
                    Discrete_Trigger ( 10
                        StartLoopRelease ( 1
                            File ( "x_Horn2.wav" -1 )
                            SelectionMethod ( RandomSelection )
                        )
                    )
                    Discrete_Trigger ( 11
                        ReleaseLoopReleaseWithJump ( )
                    )
                )
            )
            Stream (
                Skip ( ** This stream allows the sander to be played at the same time ** )
                Priority ( 5 )
                Triggers ( 2
                    Discrete_Trigger ( 4
                        StartLoopRelease ( 1
                            File ( "../../KIHA31/sound/x_k31_sand.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Discrete_Trigger ( 5
                        ReleaseLoopRelease ( )
                    )
                )
            )
            Stream (
                Skip ( ** This stream allows the Compressor to be played at the same time ** )
                Priority ( 6 )
                Triggers ( 2
                    Discrete_Trigger ( 12
                        StartLoopRelease ( 1
                            File ( "x_Kompressor.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Discrete_Trigger ( 13
                        ReleaseLoopRelease ( )
                    )
                )
            )
            Stream (
                Skip ( ** Brake stop ** )
                Priority ( 6 )
                Volume ( 2.0 )
                Triggers ( 7
                    Discrete_Trigger ( 14
                        StartLoopRelease ( 1
                            File ( "x_Stop.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Discrete_Trigger ( 54
                        ReleaseLoopRelease ( )
                    )
                    Discrete_Trigger ( 54
                        ReleaseLoopRelease ( )
                    )
                    Discrete_Trigger ( 54
                        ReleaseLoopRelease ( )
                    )
                    Discrete_Trigger ( 54
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Speed_Dec_Past 0.2
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Speed_Inc_Past 17.0
                        ReleaseLoopRelease ( )
                    )
                )
                FrequencyCurve (
                    SpeedControlled
                    CurvePoints ( 3
                        -7.0 11000
                        0.0 12000
                        7.0 11000
                    )
                    Granularity ( 100 )
                )
                VolumeCurve (
                    SpeedControlled
                    CurvePoints ( 5
                        -5.0 0.0
                        -3.5 1.0
                        0.0 0.0
                        3.5 1.0
                        5.0 0.0
                    )
                    Granularity ( 0.05 )
                )
            )
            Stream (
                Skip ( ** This stream allows the Train Brake & Independant Brakes to be played at the same time ** )
                Priority ( 5 )
                Triggers ( 5
                    Skip ( ** NOTE: Need to check if correct waves used for apply/release ** )
                    Skip ( ** Assumes 3 = Release, 1 & 2 = Apply ** )
                    Skip ( ** Tbrake ** )
                    Skip ( ** Release ** )
                    Discrete_Trigger ( 14
                        PlayOneShot ( 1
                            File ( "../../KIHA31/sound/x_k31_airb_auto3.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Skip ( ** Apply {normal & emergency} ** )
                    Discrete_Trigger ( 53
                        PlayOneShot ( 2
                            File ( "../../KIHA31/sound/x_k31_airb_auto1.wav" -1 )
                            File ( "../../KIHA31/sound/x_k31_airb_auto2.wav" -1 )
                            SelectionMethod ( RandomSelection )
                        )
                    )
                    Discrete_Trigger ( 54
                        PlayOneShot ( 2
                            File ( "../../KIHA31/sound/x_k31_airb_auto1.wav" -1 )
                            File ( "../../KIHA31/sound/x_k31_airb_auto2.wav" -1 )
                            SelectionMethod ( RandomSelection )
                        )
                    )
                    Skip ( ** Ibrake ** )
                    Skip ( ** Release ** )
                    Discrete_Trigger ( 21
                        PlayOneShot ( 1
                            File ( "../../KIHA31/sound/x_k31_airb_ind3.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Skip ( ** Apply ** )
                    Discrete_Trigger ( 22
                        PlayOneShot ( 2
                            File ( "../../KIHA31/sound/x_k31_airb_ind1.wav" -1 )
                            File ( "../../KIHA31/sound/x_k31_airb_ind2.wav" -1 )
                            SelectionMethod ( RandomSelection )
                        )
                    )
                )
            )
            Stream (
                Skip ( ** Dynamic brakes ** )
                Skip ( ** NOTE: First See comment for SL 3 Dynamic brake. ** )
                Skip ( ** I am going to continue using Method 2 outlined there for the moment, since I am not sure ** )
                Skip ( ** if the waves we have will allow crossfading {due to the loop/release} - I may be able ** )
                Skip ( ** to manage something using the play only one block feature { setting the number after ** )
                Skip ( ** the filename to something other than -1 }, But I will look at if I have more time. ** )
                Priority ( 6 )
                Triggers ( 10
                    Variable_Trigger (
                        Variable3_Inc_Past 0.05
                        StartLoopRelease ( 1
                            File ( "../../KIHA31/sound/x_k31_dynb_dyn1.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable3_Dec_Past 0.05
                        ReleaseLoopRelease ( )
                    )
                )
                FrequencyCurve (
                    Variable3Controlled
                    CurvePoints ( 2
                        0.0 12025
                        1.0 17800
                    )
                    Granularity ( 100 )
                )
            )
            Stream (
                Priority ( 5 )
                Triggers ( 6
                    Discrete_Trigger ( 58
                        PlayOneShot ( 1
                            File ( "x_couple_chain1.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Discrete_Trigger ( 59
                        PlayOneShot ( 1
                            File ( "x_couple_chain2.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Discrete_Trigger ( 60
                        PlayOneShot ( 1
                            File ( "x_couple_chain3.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Discrete_Trigger ( 61
                        PlayOneShot ( 1
                            File ( "x_uncouple_chain1.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Discrete_Trigger ( 62
                        PlayOneShot ( 1
                            File ( "x_uncouple_chain2.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Discrete_Trigger ( 63
                        PlayOneShot ( 1
                            File ( "x_uncouple_chain3.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                )
            )
        )
    )
    ScalabiltyGroup ( 3
        Activation (
            ExternalCam ( )
            Distance ( 1000 )
        )
        Deactivation (
            Distance ( 1000 )
        )
        Streams ( 7
            Stream (
                Priority ( 6 )
                Volume ( 0.55 )
                Triggers ( 7
                    Skip ( ** The engine/current related sounds -
                    Stream 1 {Xfade} ** )
                    Initial_Trigger (
                        StartLoop ( 1
                            File ( "x_Fahrt1.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Inc_Past 0.050
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Variable2_Inc_Past 0.150
                        StartLoop ( 1
                            File ( "x_Fahrt3.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Inc_Past 0.450
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.450
                        StartLoop ( 1
                            File ( "x_Fahrt3.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.150
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.050
                        StartLoop ( 1
                            File ( "x_Fahrt1.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                )
                FrequencyCurve (
                    Variable2Controlled
                    CurvePoints ( 8
                        0.000 12025
                        0.150 12025
                        0.450 13000
                        0.500 13000
                        0.501 12025
                        0.550 12025
                        0.850 13000
                        1.000 13000
                    )
                    Granularity ( 100 )
                )
                VolumeCurve (
                    Variable2Controlled
                    CurvePoints ( 7
                        0.000 0.25
                        0.010 0.30
                        0.050 0.0
                        0.150 0.0
                        0.250 0.45
                        0.350 0.50
                        0.450 0.0
                    )
                    Granularity ( 0.05 )
                )
            )
            Stream (
                Priority ( 6 )
                Volume ( 0.55 )
                Triggers ( 7
                    Skip ( ** The engine/current related sounds -
                    Stream 2 {Xfade} ** )
                    Variable_Trigger (
                        Variable2_Inc_Past 0.010
                        StartLoop ( 1
                            File ( "x_Fahrt2.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Inc_Past 0.250
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Variable2_Inc_Past 0.350
                        StartLoop ( 1
                            File ( "x_Fahrt4.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.650
                        StartLoop ( 1
                            File ( "x_Fahrt4.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.350
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.250
                        StartLoop ( 1
                            File ( "x_Fahrt2.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.010
                        ReleaseLoopRelease ( )
                    )
                )
                FrequencyCurve (
                    Variable2Controlled
                    CurvePoints ( 7
                        0.000 12025
                        0.010 12025
                        0.250 13000
                        0.300 13000
                        0.301 12025
                        0.350 12025
                        0.650 13000
                    )
                    Granularity ( 100 )
                )
                VolumeCurve (
                    Variable2Controlled
                    CurvePoints ( 12
                        0.000 0.0
                        0.010 0.3
                        0.050 0.4
                        0.150 0.45
                        0.250 0.0
                        0.350 0.0
                        0.450 0.50
                        0.550 0.60
                        0.650 0.70
                        0.750 0.80
                        0.850 0.90
                        0.950 1.0
                    )
                    Granularity ( 0.05 )
                )
            )
            Stream (
                Skip ( ** This stream allows the horn to be played at the same time ** )
                Priority ( 6 )
                Triggers ( 2
                    Discrete_Trigger ( 8
                        StartLoopRelease ( 1
                            File ( "x_Horn1.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Discrete_Trigger ( 9
                        ReleaseLoopReleaseWithJump ( )
                    )
                )
            )
            Stream (
                Skip ( ** This stream allows the sander to be played at the same time ** )
                Priority ( 5 )
                Triggers ( 2
                    Discrete_Trigger ( 4
                        StartLoopRelease ( 1
                            File ( "../../KIHA31/sound/x_k31_sand.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Discrete_Trigger ( 5
                        ReleaseLoopRelease ( )
                    )
                )
            )
            Stream (
                Skip ( ** This stream allows the Compressor to be played at the same time ** )
                Priority ( 6 )
                Triggers ( 2
                    Discrete_Trigger ( 12
                        StartLoopRelease ( 1
                            File ( "x_Kompressor.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Discrete_Trigger ( 13
                        ReleaseLoopRelease ( )
                    )
                )
            )
            Stream (
                Skip ( ** This stream allows the Train Brake & Independant Brakes to be played at the same time ** )
                Priority ( 5 )
                Triggers ( 5
                    Skip ( ** NOTE: Need to check if correct waves used for apply/release ** )
                    Skip ( ** Assumes 3 = Release, 1 & 2 = Apply ** )
                    Skip ( ** Tbrake ** )
                    Skip ( ** Release ** )
                    Discrete_Trigger ( 14
                        PlayOneShot ( 1
                            File ( "../../KIHA31/sound/x_k31_airb_auto3.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Skip ( ** Apply {normal & emergency} ** )
                    Discrete_Trigger ( 53
                        PlayOneShot ( 2
                            File ( "../../KIHA31/sound/x_k31_airb_auto1.wav" -1 )
                            File ( "../../KIHA31/sound/x_k31_airb_auto2.wav" -1 )
                            SelectionMethod ( RandomSelection )
                        )
                    )
                    Discrete_Trigger ( 54
                        PlayOneShot ( 2
                            File ( "../../KIHA31/sound/x_k31_airb_auto1.wav" -1 )
                            File ( "../../KIHA31/sound/x_k31_airb_auto2.wav" -1 )
                            SelectionMethod ( RandomSelection )
                        )
                    )
                    Skip ( ** Ibrake ** )
                    Skip ( ** Release ** )
                    Discrete_Trigger ( 21
                        PlayOneShot ( 1
                            File ( "../../KIHA31/sound/x_k31_airb_ind3.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Skip ( ** Apply ** )
                    Discrete_Trigger ( 22
                        PlayOneShot ( 2
                            File ( "../../KIHA31/sound/x_k31_airb_ind1.wav" -1 )
                            File ( "../../KIHA31/sound/x_k31_airb_ind2.wav" -1 )
                            SelectionMethod ( RandomSelection )
                        )
                    )
                )
            )
            Stream (
                Skip ( ** Dynamic brakes ** )
                Skip ( ** NOTE: There are two ways to play DBrakes ** )
                Skip ( ** 1/ If we have multiple samples for differing work levels fade between with cross faded loops ** )
                Skip ( ** This is the intention for SL5 - although I am uncertian if the samples we have will allow this. ** )
                Skip ( ** 2/ Use a Single wave and frequency shift as more effort applied. I will use this lower memory ** )
                Skip ( ** solution for SL3 ** )
                Priority ( 6 )
                Triggers ( 10
                    Variable_Trigger (
                        Variable3_Inc_Past 0.05
                        StartLoopRelease ( 1
                            File ( "../../KIHA31/sound/x_k31_dynb_dyn1.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable3_Dec_Past 0.05
                        ReleaseLoopRelease ( )
                    )
                )
                FrequencyCurve (
                    Variable3Controlled
                    CurvePoints ( 2
                        0.0 12025
                        1.0 17800
                    )
                    Granularity ( 100 )
                )
            )
        )
    )
    ScalabiltyGroup ( 1
        Activation (
            ExternalCam ( )
            Distance ( 1000 )
        )
        Deactivation (
            Distance ( 1000 )
        )
        Streams ( 2
            Stream (
                Priority ( 6 )
                Volume ( 0.55 )
                Triggers ( 5
                    Skip ( ** The engine/current related sounds ** )
                    Initial_Trigger (
                        StartLoop ( 1
                            File ( "x_Fahrt1.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Inc_Past 0.01
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Variable2_Inc_Past 0.01
                        StartLoop ( 1
                            File ( "x_Fahrt4.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.01
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Variable2_Dec_Past 0.01
                        StartLoop ( 1
                            File ( "x_Fahrt1.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                )
                FrequencyCurve (
                    Variable2Controlled
                    CurvePoints ( 3
                        0.000 10000
                        0.010 10000
                        1.000 12500
                    )
                    Granularity ( 100 )
                )
                VolumeCurve (
                    Variable2Controlled
                    CurvePoints ( 3
                        0.000 0.5
                        0.100 1.0
                        1.000 1.0
                    )
                    Granularity ( 0.05 )
                )
            )
            Stream (
                Skip ( ** This stream allows the horn to be played at the same time ** )
                Priority ( 6 )
                Triggers ( 2
                    Discrete_Trigger ( 8
                        StartLoopRelease ( 1
                            File ( "x_Horn1.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Discrete_Trigger ( 9
                        ReleaseLoopReleaseWithJump ( )
                    )
                )
            )
        )
    )
    Skip ( ** *************** ** )
    Skip ( ** Copy of Generic Diesel SMS Used for SL 0 ** )
    Skip ( ** *************** ** )
    ScalabiltyGroup ( 0
        Activation (
            ExternalCam ( )
            Distance ( 500 )
        )
        Deactivation (
            Distance ( 500 )
        )
        Streams ( 1
            Stream (
                Priority ( 4 )
                Triggers ( 6
                    Variable_Trigger (
                        Speed_Inc_Past 1.0
                        StartLoop ( 1
                            File ( "x_Fahrt2.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Speed_Inc_Past 50.0
                        StartLoop ( 1
                            File ( "x_Fahrt4.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Speed_Inc_Past 50.0
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Speed_Dec_Past 49.0
                        StartLoop ( 1
                            File ( "x_Fahrt2.wav" -1 )
                            SelectionMethod ( SequentialSelection )
                        )
                    )
                    Variable_Trigger (
                        Speed_Dec_Past 49.0
                        ReleaseLoopRelease ( )
                    )
                    Variable_Trigger (
                        Speed_Dec_Past 1.0
                        ReleaseLoopRelease ( )
                    )
                )
                VolumeCurve (
                    SpeedControlled
                    CurvePoints ( 3
                        0.0 0.0
                        10.0 1.0
                        100.0 1.0
                    )
                    Granularity ( 0.05 )
                )
            )
        )
    )
)

Voilà, c'est tout pour ce soir!
A pluche
"Er ist ein Unmensch, ein Tyrann!" - Tamino - Erster Akt - Die Zauberflöte.
____________________________________________________________

Image

Avatar du membre
ardennes
Administrateur
Messages : 3653
Enregistré le : 23 févr. 2004 20:35

Re: Comme qui dirait: "boite à outils"...

Messagepar ardennes » 03 déc. 2015 23:32

Salut Vincent,

J'en ai déjà parlé mais ce type de programme existe depuis 2003.

Il s'appelle MSTSEdit.

Une fois enregistré avec ce programme, les fichiers .sms, .sd, .act , .wag, .eng ou autres se présentent comme l'exemple que tu viens de donner.

Extrait du readme :
his editor allows you to edit MSTS files (*.eng, *.wag, *.sms, ...) in tree or text modes. "Tree mode" is an excellent way to better see and edit the MSTS files structure.

In tree mode you can do a lot of things, such as cut, copy and paste nodes, as well as create empty nodes or move nodes anywhere within the tree structure by "drag and drop" method. Text mode is the same that any text editor.

Please note :

- MSTS Tree Editor can open a file passed as command line argument
- Only unicode files are accepted
- Files that do not have an appropriate format cannot and do not have to be edited in tree mode
- Do not forget to right click for using context popup menus


L'essayer, c'est l'adopter.

>>>>
mstsedit.zip


Amitiés
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Ardennes

" Je ne pense pas plus qu'un autre, seulement je ne laisse rien perdre.... "

Avatar du membre
Melvin972
Messages : 578
Enregistré le : 09 févr. 2011 16:42
Localisation : Ile-de-France

Re: Comme qui dirait: "boite à outils"...

Messagepar Melvin972 » 03 déc. 2015 23:42

Salut Vincent,

Il m'a l'air d'être bien intéressant ce projet bien qu'il s'agit là d'un travail assez fastidieux qui va demander de la patience et du temps !

BB25187 a écrit :[...] Pour ceux qui connaissent et que ça intéresse, j'ai choisi Python [...]

Je connais Python depuis cette année (car je fais de la programmation) et il est plutôt assez simple d'usage ! Cela sera une raison de plus pour moi de suivre de près tes avancées sur ce projet et de pouvoir m'améliorer en regardant tes différents scripts.

Concernant ton deuxième message, on voit bien la différence : on gagne considérablement en lisibilité, c'est structuré et pour la compréhension, c'est impératif.

Bon courage à toi dans ce vaste projet !
Melvin
Melvin, amateur dans le reskinage
Membre de l'équipe des Compagnons du Rail

Image

Avatar du membre
CM63
Messages : 1973
Enregistré le : 13 août 2010 21:48
Localisation : Un peu au large de la faille de Limagne
Contact :

Re: Comme qui dirait: "boite à outils"...

Messagepar CM63 » 04 déc. 2015 10:08

Bonjour,

Bon courage Vincent pour ce projet. Très bon choix pour Python applaus001 .

A plus
Image

StationWhere
Messages : 1367
Enregistré le : 23 oct. 2010 16:28
Localisation : lot (46)

Re: Comme qui dirait: "boite à outils"...

Messagepar StationWhere » 04 déc. 2015 13:20

Bonjour.
BB25187 a écrit :...du bannissement des caractères de tabulation (qui ne sont absolument pas portables et ne garantissent pas la préservation de l'alignement initial)...
Diable. C'est pourtant ce que je me suis attaché a faire en remplaçant des tas de caractères 'espace' en nombre désordonné par un seul (ou 2 ou 3) TAB propre(s) et net(s). Dailleurs, dans ton exemple, je sens plus des tabulations que des caractères 'espace' à l'unité près.

BB25187 a écrit :...il y a plein de petits trucs sympa qu'on peut imaginer en matière de ré-ordonnancement des paramètres pour les mettre dans un ordre logique et cohérent...
Alors... Là... Je dis BRAVO et MERCI d'avance. Vivement Noel!
Cordialement
Dell XPS 8300 W10 Vers 64b.

Avatar du membre
ardennes
Administrateur
Messages : 3653
Enregistré le : 23 févr. 2004 20:35

Re: Comme qui dirait: "boite à outils"...

Messagepar ardennes » 04 déc. 2015 13:39

Bonjour,

A propos du projet de Vincent :

M'étant toujours préoccupé d'utilitaires pour MSTS et bien que me servant de MSTSEditor, je serais intéressé par un programme du même type qui effectuerait un traitement par lots des fichiers .sms ou autres.

A ton service pour faire les tests.

Amitiés
Ardennes

" Je ne pense pas plus qu'un autre, seulement je ne laisse rien perdre.... "

Avatar du membre
nounours1952
Expert
Messages : 4209
Enregistré le : 30 nov. 2007 22:18
Localisation : LFSB
Contact :

Re: Comme qui dirait: "boite à outils"...

Messagepar nounours1952 » 04 déc. 2015 19:39

Hello,

je suis d'humeur massacrante ce soir, alors....

Ce que Vincent nous montre en exemple, c'est des gars qui n'ont jamais appris à programmer ou qui se sont arrêtés au Basic !

jesors

M'énerve trop et depuis trop longtemps quand je vois certains fichiers.

Amicalement
quand-même
L'homme ne se construit qu'en poursuivant ce qui le dépasse. (André Malraux)

Avatar du membre
fred37
Messages : 465
Enregistré le : 29 sept. 2006 15:29
Localisation : Savigné Sur Lathan (37)
Contact :

Re: Comme qui dirait: "boite à outils"...

Messagepar fred37 » 04 déc. 2015 22:17

Bonsoir,

Ajouter si possible un système pour inclure sous un menu déroulant, les triggers avec leurs utilités en frenchy si possible pourrait aider...
Merci du temps ce genre d'utilitaire fort utile...

@+
Fred.

Avatar du membre
BB25187
Administrateur
Messages : 15107
Enregistré le : 09 mai 2004 1:07
Localisation : Grenoble
Contact :

Re: Comme qui dirait: "boite à outils"...

Messagepar BB25187 » 06 déc. 2015 12:32

Hello,

Merci pour vos réponses et votre intérêt.

ardennes a écrit :J'en ai déjà parlé mais ce type de programme existe depuis 2003.
Il s'appelle MSTSEdit.
Une fois enregistré avec ce programme, les fichiers .sms, .sd, .act , .wag, .eng ou autres se présentent comme l'exemple que tu viens de donner.


A première vue, en effet, on peut avoir cette impression.
Mais les choix effectués dans MSTSEdit ne sont pas ceux qui me conviennent. Commençons par le format des fichiers de sortie:
- Il laisse de nombreuses tabulations dans les fichiers de sortie. En l'état, il n'y a donc aucune garantie que son ouverture dans un autre éditeur préserve les alignements.
- La gestion des niveaux d'indentation n'est pas aussi systématique qu'il y parait: certaines ouvertures de parenthèse provoquent un retour à la ligne et une augmentation de l'indentation, d'autre non. Je soupçonne que cela correspond à une volonté de limiter le nombre total de lignes.
- L'affichage des "Curve_Points, qui se fait parfois sur une seule ligne (mais pas tout le temps), est sans doute l'un des pires qu'on peut imaginer.
Les trois images ci-dessous permettent de voir les différences: fichier d'origine d'abord, fichier MSTSEdit ensuite, fichier tel que je le souhaite (et tel qu'il est émis désormais par "pyortb_process_sms_tk.py" enfin.
Sur toutes ces images, les tabulations sont figurées par des flèches bistres, les espaces par de petits points de la même couleur.
Sinon MSTSEdit propose des fonctions d'édition. Ce n'est pas vraiment mon objectif, dans la mesure où l'on ne fera jamais aussi bien, dans ce cadre, que des éditeurs génériques comme NotePad++. Autant se concentrer sur ce qui nous est spécifique et, si possible, sur des fonctions plus avancées!

Image
Image
Image

StationWhere a écrit :Bonjour.
BB25187 a écrit :...du bannissement des caractères de tabulation (qui ne sont absolument pas portables et ne garantissent pas la préservation de l'alignement initial)...
Diable. C'est pourtant ce que je me suis attaché a faire en remplaçant des tas de caractères 'espace' en nombre désordonné par un seul (ou 2 ou 3) TAB propre(s) et net(s). D'ailleurs, dans ton exemple, je sens plus des tabulations que des caractères 'espace' à l'unité près.


Hélas, les caractères de tabulations sont une fausse bonne idée (je te rassure je suis tombé dans le même piège il y a quelques années!). Selon l'éditeur, leur "taille" varie. C'est souvent 4, mais aussi parfois 8 ou 2. Bien entendu ça se configure dans la plupart des éditeurs, mais si vous devez traiter des fichiers provenant de plusieurs sources ayant utilisé des configurations différentes, et bien ça veut dire qu'il faut re-paramétrer votre éditeur pour chaque cas. A l'inverse, si vous diffusez des fichiers avec des tabulations, vous n'avez aucune garantie qu'ils seront bien affiché dans l'éditeur et avec la configuration des différents utilisateurs.
Une illustration? Le même extrait de fichier sous NotePad++ (l'excellent éditeur gratuit) avec des tabulations ayant la taille de 4 espaces, et sous NotePad (la bouse à Billou) avec une taille de 8. Et encore, ce n'est pas le pire ici: les tabulations sont pour la plupart en début de ligne, ce qui limite les dégâts.

NotePad++, tab=4
Image

NotePad, tab=8
Image

Donc si vous en avez l'occasion, il vaut bien mieux n'utiliser que des espaces. Les éditeurs évolués comme NotePad++ permettent d'effectuer le remplacement des tabulations par des espaces au fil de la saisie. Autrement dit, vous continuez de taper des tabulations, mais votre fichier ne contient que des espaces!

ardennes a écrit :M'étant toujours préoccupé d'utilitaires pour MSTS et bien que me servant de MSTSEditor, je serais intéressé par un programme du même type qui effectuerait un traitement par lots des fichiers .sms ou autres.


C'est en cours d'implémentation.

ardennes a écrit :A ton service pour faire les tests.


Bien volontiers! :-)

nounours1952 a écrit :je suis d'humeur massacrante ce soir, alors....
Ce que Vincent nous montre en exemple, c'est des gars qui n'ont jamais appris à programmer ou qui se sont arrêtés au Basic !
...
M'énerve trop et depuis trop longtemps quand je vois certains fichiers.


On est bien d'accord!

fred37 a écrit :Ajouter si possible un système pour inclure sous un menu déroulant, les triggers avec leurs utilités en frenchy si possible pourrait aider...


A voir... mais comme dit plus haut, mon objectif n'est pas de réécrire un éditeur de fichiers texte.
Par contre derrière ce que tu dis, il peut y avoir une même idée de "templatisation" (oh le vilain mot pour dire de faciliter la création de la trame de ces différents fichiers!) que celle que j'ai en tête.

Sinon chemin faisant, je me suis rendu compte que sans interface graphique, l'outil serait assez mal pratique. Du coup, j'ai accroché une petite interface simple sur le code déjà développé.

Image

A suivre...
"Er ist ein Unmensch, ein Tyrann!" - Tamino - Erster Akt - Die Zauberflöte.
____________________________________________________________

Image

20100
Messages : 93
Enregistré le : 21 oct. 2012 22:42

Re: Comme qui dirait: "boite à outils"...

Messagepar 20100 » 27 déc. 2015 15:37

Bonjour à tous, bonjour Vincent,

Je trouve ce projet intéressant. Un utilitaire de ce type ferait gagner du temps aux créateurs, un fichier bien lisible limitant les risques d'erreurs.
Je pense aussi qu'un fichier bien structuré fait moins peur au premier abord que les fichiers actuellement utilisés.
Ça permettrait aux "débutants" de se plonger plus facilement dans la programmation pour msts.
Bonne continuation.

Amicalement,

Vincent
"Faire et défaire, c'est le chemin de fer..."

Avatar du membre
nounours1952
Expert
Messages : 4209
Enregistré le : 30 nov. 2007 22:18
Localisation : LFSB
Contact :

Re: Comme qui dirait: "boite à outils"...

Messagepar nounours1952 » 27 déc. 2015 17:09

Hello,

BB25187 a écrit :Pour ceux qui connaissent et que ça intéresse, j'ai choisi Python
Arf, Python ! Assez rébarbatif lors de la première approche, il y 1 an, mais avec tous les avantages non-négligeables relevés par Vincent. Curieux de voir le code, cela me permettrait peut-être de progresser.

Amicalement
L'homme ne se construit qu'en poursuivant ce qui le dépasse. (André Malraux)

Avatar du membre
BB25187
Administrateur
Messages : 15107
Enregistré le : 09 mai 2004 1:07
Localisation : Grenoble
Contact :

Re: Comme qui dirait: "boite à outils"...

Messagepar BB25187 » 27 déc. 2015 17:57

Hello,

Merci pour vos réactions.
J'ai bien avancé et j'ai une version de test qui pourra être fournie à Daniel assez vite. Elle m'a d'ailleurs permis de trouver de véritables erreurs (structure générale erronée ou parenthèsage incorrect) dans plusieurs fichiers courants que j'avais intégrés dans mon lot de test.
Seule limitation connue pour le moment: je ne traite pas les commentaires multi-lignes (Skip/Comment et parenthèse ouvrante sur une ligne, parenthèse fermante sur une autre, parfois distante, le tout encadrant un bout d'éléments de SMS) qu'on trouve de manière assez anecdotique dans quelques fichiers. A dire vrai, ça me semble d'ailleurs être une forme assez dangereuse compte-tenu de la syntaxe des SMS.

En attendant, ceux qui seront intéressés pourront commencer à installer Python 2.7.XX (X>11) pour Windows depuis cette page: https://www.python.org/downloads/.

Ensuite, il est pratique d'intégrer Python au "PATH" général de Windows (à ne faire que si vous êtes sûrs de vous!):
- Ouvrir Panneau de configuration\Système et sécurité\Système
- Cliquer sur Paramètres avancés
- Dans la fenêtre qui s'ouvre, cliquer sur le bouton Variables d'environnement en bas à droite
- Repérer puis éditer la variable PATH
- En tête de la chaine, ajouter le chemin vers votre installation de Python, suivi d'un ";". Typiquement, PATH aura la tête suivante: C:\Program Files\Python27\;..., les trois petits points figurant la valeur de PATH avant modification.

Je ferai peut-être une doc plus détaillée sur ce point au moment de diffuser plus largement.

A pluche
"Er ist ein Unmensch, ein Tyrann!" - Tamino - Erster Akt - Die Zauberflöte.
____________________________________________________________

Image

Avatar du membre
RM77
Testeur
Messages : 1297
Enregistré le : 03 août 2005 8:19

Re: Comme qui dirait: "boite à outils"...

Messagepar RM77 » 01 janv. 2016 16:16

Bonjour à toutes et à tous et tout mes vœux pour cette nouvelle année.

Une petite explication sur les tabulations et les espaces.
Ce choix a varié au fil des années et ce qui est vrai aujourd'hui ne la pas toujours été.
Pour les jeunes qui aujourd'hui possèdent des ordinateurs dont la masse de la mémoire dépasse très largement la masse de leurs ordinateurs, il fut un temps où c'était le contraire.
/, Le premier micro-ordinateur sur le marché français, le "Micral" pour ne pas le citer, pesait tout compris, aux environs de 200kg. Sa taille mémoire était énorme. Il disposait de 48000 octets de RAM (Jai mis des zéro pour que ça fasse plus important que 48ko ) et 16 ko de ROM pour le système. Pour sauvegarder les données et les programmes il avait deux disques de 720ko d'une dimension de 8 pouces (floppy disk) qui, vu la fréquence de remplacement des disquettes, étaient surnommés "Grill pain". Aussi, quand on écrivait un programme, on comptait les octets et comme disait Steve Wozniak ( Un des papa de la pomme) "Pour qu'un programme tourne rapidement, il faut qu'il soit le plus cout possible". Alors, pour qu'il soit plus lisible, une option a été prise à l'époque, ce fut d'allouer à la touche tabulation, non pas 4,6 ou 8 caractères, mais un seul qui à l'écran et dans les listings en faisait paraitre plusieurs, donc gain de place. Sur la taille du programme, ça faisait gagner entre 10 et 15% de place soit pour 48 ko pas loin de 8 ko qui ne servait à rien.
La jeunesse va répondre, "Oui, mais une fois compilé,..."
Heeuuu!!! Ca veut dire quoi compiler ???
A l'époque, les programmes sont interprétés. C'est l'époque du "BAL", "BASIC", de "l'Appelsoft". La technique pour les gros programme, c'était de travailler avec des segments de programme. Un noyau charger en mémoire appelait les segments qui dormaient sur un floppy disk, le chargeait en mémoire, l'exécutait, lorsqu'i retournait se coucher, le noyau en appelait un autre, etc, etc. A l'époque, c'était très rapide on lançait des batchs la nuit et, des fois,... on avait le résultat le lendemain matin.
Les tabulations auraient pu disparaitre dés l'apparition du "Pascal UCSD" qui compressait le code dans ce que l'on a appellé un "P code". Ca réduisait la taille du code exécutable, mais pas des sources.
Pour remplacer ces tabulations, il faudra attendre la baisse du coup de la mémoire et dés la fin des années 70 ( pardon ??? ;/ 1970, PAS 1870 BIEN SUR !!! L' ânes tusors ,) il était possible de disposer de 256ko de ram sur un APPLE2 avec CPM par exemple. Il faudra attendre le PC "Big Blue" en 1981, pour disposer d'un MO de mémoire et surtout d'énormes disques durs de 10MO. Ensuite, la puissance des ordinateurs et la capacité mémoire et disques durs à, pendant les décennies suivante, doublée tout les 18 mois. Il aurait été possible dés ces moments, de remplacer la touche "tab" par une touche "Tab intelligente" qui aurait géré cette fonction automatiquement, mais les habitudes étaient prises....
Mais c'était il y a très longtemps au fond d'une galaxie lointaine.... (?
A+
Deux choses sont infinies : l'Univers et la bêtise humaine. Mais, en ce qui concerne l'Univers, je n'en ai pas encore acquis la certitude absolue.
Albert Einstein.

Avatar du membre
BB25187
Administrateur
Messages : 15107
Enregistré le : 09 mai 2004 1:07
Localisation : Grenoble
Contact :

Re: Comme qui dirait: "boite à outils"...

Messagepar BB25187 » 08 avr. 2016 18:12

Hello,

En attendant de rédiger une vraie doc, et si vous êtes intéressés par l'essai prochain du petit outil de vérification et de mise en forme des fichiers sms, il vous faudra commencer par installer Python 2.7 sur votre machine, en version 32 ou 64 bits. J'en avais déjà parlé, mais je vais essayer de décrire la démarche plus précisément.

Téléchargement de Python 2.7
Il vous faudra le télécharger ici sur le site de Python: https://www.python.org/downloads/. Attention à bien prendre la version 2.7 et non la 3.5.

Installation de Python 2.7
L'installation de Python est triviale, mais je vous recommande de laisser le chemin proposé par défaut pour l'installation, à savoir C:\Python27. Si vous essayer de l'installer dans un sous-répertoire des lieux habituels (C:\Program Files(x86) pour la version 32b ou Programs pour la version 64b), il est possible que vous rencontriez ensuite des problèmes à l'exécution avec des programmes multi-modules.

Positionnement des variables d'environnement
Attention: pour utilisateurs avertis seulement!
Pour garantir une exécution sans problème de n'importe quel programme Python, il est recommandé d'ajouter les répertoires d'installation de Python à la variable "PATH" de votre compte. Pour cela il faut suivre la démarche suivante:
- Ouvrir le panneau de configuration, puis Système et sécurité, puis Système, puis Paramètres système avancés
- Dans le panneau qui s'ouvre, cliquer sur le bouton Variables d'environnement en bas à droite
- Dans la liste de variables de votre compte, sélectionner la variable PATH, puis cliquer sur Modifier (ou Nouvelle si PATH n'existe pas encore)
- Dans le panneau qui s'ouvre, ajouter à la variable PATH déjà définie les éléments suivants, en les plaçant en tête de chaîne: C:\Python27;C:\Python27\Scripts. Si la variable était vide avant modification, elle devrait apparaître comme suit après: "C:\Python27";"C:\Python27\Scripts"
- Cliquer autant de fois que nécessaire sur les boutons de validation de vos modifications

Installation de l'outil de vérification et de mise en forme des fichiers sms
Je mettrai un peu plus de détail dans les jours qui viennent. Dans un premier temps, je distribuerai sans doute les version précompilées et non les fichiers sources. Je n'ai pas encore décidé si je passerai par une simple archive pour par un installeur. A noter que la liste de triggers prise en compte correspond à celle en vigueur dans la version 1.00 d'OR.

Suite
Il reste quelques améliorations à apporter à ce script, après quoi je pense que je commencerai à travailler sur un script similaires mais plus riche sur les fichiers ENG.

A pluche
"Er ist ein Unmensch, ein Tyrann!" - Tamino - Erster Akt - Die Zauberflöte.
____________________________________________________________

Image


Retourner vers « ORTS: Les utilitaires »