IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

POO de la norme General MIDI.


Sujet :

Ada

  1. #1
    Invité
    Invité(e)
    Par défaut POO de la norme General MIDI.
    Bonjour,
    Après avoir implémenté un import d'un bibliothèque MIDI (libportmidi) me permetant d'envoyer des message MIDI à un périphérique du type, je doit maintenant implémenter la norme. Pour ce faire, j'ai à ma disposition l'implémentation d'un instrument particulier ::= RADIAS MIDI Implementation.

    Alors, je sens qu'il y a quelque chose à gagner en modélisant oreinté objet. Mais je n'ai jamais fais d'objet. Je cherche quelque conseil pour approcher l'implémentation de cette spécification MIDI en POO. C'est a dire assistance dans l'analyse et initiation à la POO.
    Merci de votre contribution et attention.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je viens vous poster comment j'ai approché la chose pour le moment sans O°O.

    Au regard de la spécification ci-dessus (je n'ai pas terminé) :
    midi_implementation.ads ::=
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    use Message;
     
    package Midi_Implementation is
     
       subtype T_Chanel is Natural range 0..15;
       subtype T_Note_Sens is Positive range 1..127;
       subtype T_Note is Positive range 21..108;
       function Note_On(Chanel : in T_Chanel;
                        Note : in T_Note;
                        Sens : in T_Note_Sens) return T_Message;
     
       function Note_Off (Chanel : in T_Chanel;
                         Note : in T_Note) return T_Message;
     
       subtype T_Bank is Natural range 0..1;
       subtype T_Program is Natural range 0..127;
     
       function Bank_Select_MSB(Chanel : in T_Chanel;
                                Bank : in T_Bank) return T_Message;
       function Bank_Select_LSB(Chanel : in T_Chanel;
                                Program : in T_Program) return T_Message;
     
       function Program_Change(Chanel : in T_Chanel;
                               Program : in T_Program) return T_Message;
     
       subtype T_Value is Natural range 1..127;
     
       function NRPM_MSB (Chanel : in T_Chanel;
                          Value : in T_Value) return T_Message;
       function NRPM_LSB (Chanel : in T_Chanel;
                          Value : in T_Value) return T_Message;
       function Data_Entry_MSB (Chanel : in T_Chanel;
                                Value : in T_Value) return T_Message;
     
    -- jusqu'ici, j'ai revue... Il me semble que c'est bon, peut-être à part le type T_Value, mais je n'ai pas encore utilisé.
     
       Arp_Type_up : constant Natural := 16#0#;
       Arp_Type_down : constant Natural := 16#15#;
       Arp_Type_alt1 : constant Natural := 16#2A#;
       Arp_Type_alt2 : constant Natural := 16#3F#;
       Arp_Type_random : constant Natural := 16#54#;
       Arp_Type_trigger : constant Natural := 16#69#;
       function Arp_Type_Switch(Chanel : in T_Chanel;
                                Switch : in Natural) return T_Message;
     
       subtype T_Arp_Gate is Natural range 0..127;
       function Arp_Gate(Chanel : in T_Chanel;
                         Gate : in T_Arp_Gate) return T_Message;
     
       Arp_Select_Off : constant Natural := 0;
       Arp_Select_arp : constant Natural := 1;
       Arp_Select_Step_Seq_1 : constant Natural := 2;
       Arp_Select_Step_Seq_2 : constant Natural := 3;
     
       function Arp_Select(Chanel : in T_Chanel;
                           Switch : in Natural) return T_Message;
     
       function Step_Seq_1_Latch_Off return T_Message;
       function Step_Seq_1_Latch_On return T_Message;
     
       subtype T_Step_Seq_1_Gate is Natural range 0..127;
       function Step_Seq_1_Gate(Gate : in T_Step_Seq_1_Gate) return T_Message;
     
       Step_Seq_2_Latch_off : constant Natural := 0;
       Step_Seq_2_Latch_on  : constant Natural := 127;
     
       subtype T_Step_Seq_2_Gate is Natural range 0..127;
       function Step_Seq_2_Gate(Gate : in T_Step_Seq_2_Gate) return T_Message;
     
    end Midi_Implementation;
    midi_implementation.adb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    with Message;
    use Message;
     
    package body Midi_Implementation is
     
       function Note_On(Chanel : in T_Chanel;
                        Note : in T_Note;
                        Sens : in T_Note_Sens) return T_Message is
     
          Message : T_Message := (16#90# + Chanel, Note, Sens);
       begin
     
          return Message;
       end;
       function Note_Off (Chanel : in T_Chanel;
                         Note : in T_Note) return T_Message is
          Message : T_Message := (16#80# + Chanel, Note, 64);
       begin
     
          return Message;
       end;
       function Bank_Select_MSB(Chanel : in T_Chanel;
                                Bank : in T_Bank) return T_Message is
     
          Message : T_Message := (16#B# + chanel, 0 , Bank);
       begin
     
          return Message;
       end;
     
       function Bank_Select_LSB(Chanel : in T_Chanel;
                                Program : in T_Program) return T_Message is
     
          Message : T_Message := (16#B# + chanel, 32 , Program);
       begin
     
          return Message;
       end;
     
       function Program_Change(Chanel : in T_Chanel;
                               Program : in T_Program) return T_Message is
     
          Message : T_Message := (16#B# + chanel, 1, 0);
       begin
     
          return Message;
       end;
     
       function NRPM_MSB (Chanel : in T_Chanel;
                          Value : in T_Value) return T_Message is
     
          Message : T_Message := (16#B# + Chanel, 98, Value);
       begin
     
          return Message;
       end;
     
       function NRPM_LSB (Chanel : in T_Chanel;
                          Value : in T_Value) return T_Message is
     
          Message : T_Message := (16#B# + Chanel, 99, Value);
       begin
     
          return Message;
       end;
      function Data_Entry_MSB (Chanel : in T_Chanel;
                                Value : in T_Value) return T_Message is
     
          Message : T_Message := (16#B# + Chanel, 6, Value);
       begin
     
          return Message;
       end;
     
    -- Voilà, le reste n'est pas implémenté.
    Pensez vous que je vais m'en sortir à l'utilisation ou y a t-il bien mieux ?

    Merci !

    Ps : je sais que je parait faire les chose à l'envers, mais en fait je fait un coup de haut en bas, un coups, l'inverse.

Discussions similaires

  1. POO en general
    Par marlene2110 dans le forum Débuter
    Réponses: 1
    Dernier message: 17/11/2010, 20h51
  2. Norme midi à autre format
    Par Mika le Viking dans le forum Audio
    Réponses: 4
    Dernier message: 23/08/2009, 16h45
  3. Son Midi
    Par carlg dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 09/05/2003, 21h06
  4. Normes EDI
    Par f-demu01 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 14/03/2003, 08h22
  5. feuille de style generale
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/03/2003, 10h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo