gestion du son avec FMOD

gestion du son avec FMOD - Delphi/Pascal - Programmation

Marsh Posté le 01-02-2004 à 18:18:10    

Salut!
 
En me baladant sur le net et en pompant dans des codes sources j'ai reussi a coder un tit quelque chose pour me jouer du son, mais ca ne marche pas.
 

Code :
  1. unit zik;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs,fmod, StdCtrls;
  6. procedure initialisationSound;
  7. type
  8. pSample = ^tSample;
  9. tSample = record
  10.   sample : PFsoundSample;
  11.   channel : byte;
  12.   end;
  13.   mysample = tSample;
  14.   TForm1 = class(TForm)
  15.     Button1: TButton;
  16.   private
  17.     { Déclarations privées }
  18.   public
  19.     { Déclarations publiques }
  20.   end;
  21. var
  22.   Form1: TForm1;
  23.        fusee : mysample;
  24. implementation
  25. {$R *.dfm}
  26. procedure initialisationSound;
  27. begin
  28. FSOUND_close;
  29. FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND);
  30. FSOUND_setdriver(0);
  31. FSOUND_SetMixer(FSOUND_MIXER_AUTODETECT);
  32. Fsound_init(44100,4,0);
  33. FSOUND_SetReserved(0,true);
  34. fusee:=FSOUND_Sample_Load(FSOUND_FREE,'fusee.mp3',FSOUND_STEREO,0);
  35. FSOUND_PlaySound (FSOUND_FREE, fusee);
  36. end;
  37. end.


 
Delphi me dit que je mélange tsample et pointer, mais je ne maitrise pas bien cette histoire de pointeurs et je débute tout juste fmod.
Quelqu'un pourrait me donner un coup de main et me dire ce qui ne va pas ?
Merci d'avance.


Message édité par smilm le 01-02-2004 à 18:18:30

---------------
AfterEnd: Batissez un nouveau monde
Reply

Marsh Posté le 01-02-2004 à 18:18:10   

Reply

Marsh Posté le 01-02-2004 à 18:22:31    

FSOUND_PlaySound s'attend à quoi ? un pSample ?
Tu dois mettre un @ devant fusee quand tu le passes en param, pour passer l'adresse (càd un pointeur) plutôt que la structure elle-même


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 01-02-2004 à 18:38:47    

bon j'ai fais ca, mais ca marche pas.
 

Code :
  1. unit zik;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs,fmod, StdCtrls;
  6.     procedure initialisationSound;
  7. type
  8. pSample = ^tSample;
  9. tSample = record
  10.   sample : PFsoundSample;
  11.   channel : byte;
  12.   end;
  13.   mysample = tSample;
  14.   TForm1 = class(TForm)
  15.     Button1: TButton;
  16.     procedure Button1Click(Sender: TObject);
  17.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  18.   private
  19.     { Déclarations privées }
  20.   public
  21.     { Déclarations publiques }
  22.   end;
  23. var
  24.   Form1: TForm1;
  25.   fusee : ^mysample;
  26. implementation
  27. {$R *.dfm}
  28. procedure initialisationSound;
  29. begin
  30. FSOUND_close;
  31. FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND);
  32. FSOUND_setdriver(0);
  33. FSOUND_SetMixer(FSOUND_MIXER_AUTODETECT);
  34. Fsound_init(44100,4,0);
  35. FSOUND_SetReserved(0,true);
  36. fusee:=FSOUND_Sample_Load(FSOUND_FREE,'fusee.mp3',FSOUND_STEREO,0);
  37. end;
  38. procedure TForm1.Button1Click(Sender: TObject);
  39. begin
  40. FSOUND_PlaySound (FSOUND_FREE, @fusee);
  41. end;
  42. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  43. begin
  44.     FSOUND_Close();
  45. end;
  46. end.


 
Par contre, ya pas d'erreur.
 
Le fichier fusee.mp3 est dans le dossier de l'executable.(le seul et unique dossier du 'projet' d'ailleurs)


---------------
AfterEnd: Batissez un nouveau monde
Reply

Marsh Posté le 01-02-2004 à 18:51:52    

ouais mais t'as pas modifié juste un truc : t'as modifié aussi la déclaration de fusee :p
C'est probablement plus logique, mais comme fusee est maintenant ^tSample et plus un tSample simple, tu devrais pouvoir le passer en paramètre sans le "@" (sinon déclare-le comme un pSample au lieu d'un ^tSample)


Message édité par antp le 01-02-2004 à 18:53:26

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 01-02-2004 à 19:09:06    

WHAOU!!!
CA MARCHE
 
Merci ANTP
Je t'aime! !!! lol
 [:yaisse1]  [:yaisse2v]  [:kimouss]
 
code final  (j'ai enlever des trucs inutile apparament)

Code :
  1. unit zik;
  2.  
  3.   interface
  4.  
  5.   uses
  6.     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.     Dialogs,fmod, StdCtrls;
  8.       procedure initialisationSound;
  9.   type
  10. //  pSample = ^tSample;
  11.   tSample = record
  12.     sample : PFsoundSample;
  13.     channel : byte;
  14.     end;
  15.  
  16. //   mysample = pSample;
  17.  
  18.     TForm1 = class(TForm)
  19.       Button1: TButton;
  20.       procedure Button1Click(Sender: TObject);
  21.       procedure FormClose(Sender: TObject; var Action: TCloseAction);
  22.     procedure FormCreate(Sender: TObject);
  23.  
  24.     private
  25.       { Déclarations privées }
  26.     public
  27.       { Déclarations publiques }
  28.  
  29.     end;
  30.  
  31.   var
  32.     Form1: TForm1;
  33.     fusee : ^tsample;
  34.   implementation
  35.  
  36.   {$R *.dfm}
  37.  
  38.   procedure initialisationSound;
  39.   begin
  40.   Fsound_init(44100,2,0);
  41.   fusee:=FSOUND_Sample_Load(1,'intro.mp3',FSOUND_STEREO,0);
  42.   end;
  43.  
  44.   procedure TForm1.Button1Click(Sender: TObject);
  45.   begin
  46.   FSOUND_PlaySound (1,fusee);
  47.   end;
  48.  
  49.   procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  50.   begin
  51.       FSOUND_Close();
  52.  
  53.   end;
  54.  
  55.   procedure TForm1.FormCreate(Sender: TObject);
  56. begin
  57.   initialisationSound;
  58. end;
  59. end.


Message édité par smilm le 01-02-2004 à 19:33:38

---------------
AfterEnd: Batissez un nouveau monde
Reply

Marsh Posté le 01-02-2004 à 20:46:35    

Encore une petite question, plus ou moins hs mais bon.
 
J'aimerais savoir comment on récupére le chemin du fichier que l'utilisateur selectionne dans un "FileOpen" que j'utilise grace a une ActionList.
 
J'aimerais grace a ce chemin, remplacer le "fusee.mp3" par le chemin que l'utilisateur demande et ainsi pouvoir avoir un lecteur mp3 tout basic.
 
Merci d'avance


---------------
AfterEnd: Batissez un nouveau monde
Reply

Marsh Posté le 01-02-2004 à 20:49:28    

SmilM a écrit :

Encore une petite question, plus ou moins hs mais bon.
 
J'aimerais savoir comment on récupére le chemin du fichier que l'utilisateur selectionne dans un "FileOpen" que j'utilise grace a une ActionList.
 
J'aimerais grace a ce chemin, remplacer le "fusee.mp3" par le chemin que l'utilisateur demande et ainsi pouvoir avoir un lecteur mp3 tout basic.
 
Merci d'avance


 
c bon j'ai trouvé!
FileName...:)


---------------
AfterEnd: Batissez un nouveau monde
Reply

Marsh Posté le 01-02-2004 à 21:08:31    

Je continue mon monologue mais la je galere un peu plus...
j'ai un petit probleme de type de variables:
 
 
fpath: string;
----
fpath:= FileOpen1.Dialog.FileName;
---
fusee:=FSOUND_Sample_Load(FSOUND_FREE,fpath,FSOUND_STEREO,0);
---
 
Le probleme est que FSOUND_Sample_Load demande un PAnsiChar, alors que fpath est un string, et d'aprés ce que je vois dans la doc de delphi strtoPAnsiChar() n'existe pas.
Comment dois-je proceder ?
 
Merci d'avance.


Message édité par smilm le 01-02-2004 à 21:23:27

---------------
AfterEnd: Batissez un nouveau monde
Reply

Marsh Posté le 01-02-2004 à 21:24:00    

PChar(fpath)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 02-02-2004 à 08:20:01    

Merci encore [:kintarox]  
Ca marche !
J'ai meme rajouter une trackbar pour gerer le son :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed