Déclarer un tableau de pointers

[Résolu]
Signaler
-
 Utilisateur anonyme -
Salut à tous

Voila j'ai une petite question. Dans la libraire Bass_FX de bass, les types suivants sont définis :

Type
// Echo
    BASS_FX_DSPECHO = Record
        fLevel : FLOAT;              // [0....1....n] linear
        lDelay : Integer;            // [1200..30000]
    end;

// Flanger
    BASS_FX_DSPFLANGER = Record
        fWetDry : FLOAT;             // [0....1....n] linear
        fSpeed : FLOAT;              // [0......0.09]
        lChannel : Integer;          // BASS_FX_DSP_CHANxxx flag/s
    end;

Si on regarde la fonction suivante BASS_FX_DSP_GetParameters(handle:DWord,dsp_fx : integer, par:Pointer), on se rend compte qu'il faut utiliser un pointer .

Suite à cela j'ai deux questions (Deux pour le prix d'une ) :

*Est-il possible de créer un tableau de pointer pour faire un truc du style ?

Procedure Load_DSPParams(DSP:TDSP);
Const
  DSPFlag:Array [0..1] Of Integer =(BASS_FX_DSPFX_FLANGER,BASS_FX_DSPFX_ECHO);
  DSPStructure :Array [0..1] Of Pointer=(BASS_FX_DSPFLANGER,BASS_FX_ECHO );
Begin
  BASS_FX_DSP_GetParameters(DSP.DSPStream,DSPFlag[1], @DSPStructure[1]));
End;

*Si la réponse à la question est positive, est-il possible de lister les sous-types, genre
Procedure Load_DSPParams(DSP:TDSP);
Const
  DSPFlag:Array [0..1] Of Integer =(BASS_FX_DSPFX_FLANGER,BASS_FX_DSPFX_ECHO);
  DSPStructure :Array [0..1] Of Pointer=(BASS_FX_DSPFLANGER,BASS_FX_ECHO );
Var
  IndexParam:Integer;
  Param:Float;
Begin
  BASS_FX_DSP_GetParameters(DSP.DSPStream,DSPFlag[1], @DSPStructure[1]);
  For IndexParam:=0 To DSPStructure[1].Count-1 Do
  Param:=DSPStructure[1,IndexParam];
End;

Merci à vous

3 réponses

Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Bonsoir

De façon triviale (au feeling et sans aucun tests, désolé :) j'aurais écrit quelquechose comme :




type
  tFX = record
    Ptr  : Pointer ;
    Flag : Integer ;
  end ;
 

var
  Echo    : BASS_FX_ECHO ;
  Flanger : BASS_FX_FLANGER;

  TableauFX : array[1..2] of tFX ; // 1..2 ici mais extensible avec d'autres effets



// Initialisation du tableau en dynamique
// convertible normalement en const si tu préfères

Tableau[1].Ptr  := @Flanger ;
Tableau[1].Flag := BASS_FX_DSPFX_FLANGER ;

Tableau[2].Ptr  := @Echo;
Tableau[2].Flag := BASS_FX_DSPFX_ECHO ;

// Appel :
  BASS_FX_DSP_GetParameters(DSP.DSPStream,Tableau[1].Flag, Tableau[1].Ptr );


Cordialement. <hr />"L'imagination est plus importante que le savoir." Albert Einstein

Merci WhiteHippo : Ca répond en partie à ma première question . Il me reste la seconde qui est la plus difficile (De part le fort type de Delphi, je pense que je ne vais pas trouvé de solution )

J'ai trouvé une astuce : Modifier directement le header dans bass (Et cela semble fonctionner ) et donc utiliser ta technique .

Merci encore