fSoundFMOD.pas 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. unit fSoundFMOD;
  2. interface
  3. uses
  4. System.Classes,
  5. System.SysUtils,
  6. System.Math,
  7. Vcl.Forms,
  8. Vcl.ExtCtrls,
  9. Vcl.ComCtrls,
  10. Vcl.Controls,
  11. Vcl.StdCtrls,
  12. GLS.Cadencer,
  13. GLS.Scene,
  14. GLScene.VectorTypes,
  15. GLS.Objects,
  16. GLS.SoundManager,
  17. GLS.Sounds.FMOD,
  18. GLS.SceneViewer,
  19. GLS.GeomObjects,
  20. GLS.Coordinates,
  21. GLS.BaseClasses,
  22. GLS.FileWAV,
  23. GLS.FileMP3,
  24. GLScene.VectorGeometry,
  25. GLScene.Utils;
  26. type
  27. TFormSoundFMOD = class(TForm)
  28. GLScene: TGLScene;
  29. GLSceneViewer: TGLSceneViewer;
  30. GLCamera1: TGLCamera;
  31. DummyCube: TGLDummyCube;
  32. Sphere: TGLSphere;
  33. GLLightSource: TGLLightSource;
  34. GLSMFMOD: TGLSMFMOD;
  35. GLSoundLibrary: TGLSoundLibrary;
  36. GLCadencer1: TGLCadencer;
  37. Timer: TTimer;
  38. Mickey: TGLSphere;
  39. Sphere2: TGLSphere;
  40. Sphere3: TGLSphere;
  41. Cone1: TGLCone;
  42. TrackBar: TTrackBar;
  43. Plane1: TGLPlane;
  44. Disk1: TGLDisk;
  45. Torus1: TGLTorus;
  46. TrackBar1: TTrackBar;
  47. Panel1: TPanel;
  48. Button1: TButton;
  49. btnHowl: TButton;
  50. LabelFPS: TLabel;
  51. procedure SphereProgress(Sender: TObject; const deltaTime, newTime: Double);
  52. procedure TimerTimer(Sender: TObject);
  53. procedure TrackBarChange(Sender: TObject);
  54. procedure TrackBar1Change(Sender: TObject);
  55. procedure FormCreate(Sender: TObject);
  56. procedure Button1Click(Sender: TObject);
  57. procedure btnHowlClick(Sender: TObject);
  58. private
  59. Path: TFileName;
  60. public
  61. end;
  62. var
  63. FormSoundFMOD: TFormSoundFMOD;
  64. implementation
  65. {$R *.DFM}
  66. procedure TFormSoundFMOD.FormCreate(Sender: TObject);
  67. begin
  68. Path := GetCurrentAssetPath() + '\audio';
  69. SetCurrentDir(Path);
  70. // Load our sound sample
  71. GLSoundLibrary.Samples.AddFile('drumloop.wav', 'drumloop.wav');
  72. GLSoundLibrary.Samples.AddFile('chimes.wav', 'chimes.wav');
  73. GLSoundLibrary.Samples.AddFile('howl.mp3', 'howl.mp3');
  74. end;
  75. procedure TFormSoundFMOD.SphereProgress(Sender: TObject; const deltaTime, newTime: Double);
  76. var
  77. alpha: Single;
  78. begin
  79. // Move the red sphere (sound source) along an elliptic path
  80. alpha := 60 * DegToRad(newTime);
  81. TGLSphere(Sender).Position.SetPoint(sin(alpha) * 2, 0.5, cos(alpha) * 5);
  82. end;
  83. procedure TFormSoundFMOD.TrackBarChange(Sender: TObject);
  84. begin
  85. // Rotate the listener around the vertical axis
  86. DummyCube.TurnAngle := TrackBar.Position;
  87. Application.ProcessMessages;
  88. end;
  89. procedure TFormSoundFMOD.TrackBar1Change(Sender: TObject);
  90. begin
  91. // Move the listener forward/back
  92. Mickey.Position.Z := TrackBar1.Position / 10;
  93. Application.ProcessMessages;
  94. end;
  95. procedure TFormSoundFMOD.TimerTimer(Sender: TObject);
  96. var
  97. mngName: String;
  98. begin
  99. // some stats
  100. if ActiveSoundManager is TGLSMFMOD then
  101. mngName := 'FMOD'
  102. else
  103. mngName := '';
  104. if ActiveSoundManager <> nil then
  105. LabelFPS.Caption := Format('%.2f FPS, %s CPU use : %.2f%%',
  106. [GLSceneViewer.FramesPerSecond, mngName, ActiveSoundManager.CPUUsagePercent])
  107. else
  108. LabelFPS.Caption := 'No active sound manager.';
  109. GLSceneViewer.ResetPerformanceMonitor;
  110. end;
  111. procedure TFormSoundFMOD.Button1Click(Sender: TObject);
  112. begin
  113. with TGLBSoundEmitter.Create(Sphere.Behaviours) do
  114. begin
  115. Source.SoundLibrary := GLSoundLibrary;
  116. Source.SoundName := 'chimes.wav';
  117. Playing := True;
  118. end;
  119. end;
  120. procedure TFormSoundFMOD.btnHowlClick(Sender: TObject);
  121. begin
  122. with TGLBSoundEmitter.Create(Sphere.Behaviours) do
  123. begin
  124. Source.SoundLibrary := GLSoundLibrary;
  125. Source.SoundName := 'howl.mp3';
  126. Playing := True;
  127. end;
  128. end;
  129. end.