fSoundOpenAL.pas 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. unit fSoundOpenAL;
  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. GLS.VectorTypes,
  15. GLS.Objects,
  16. GLS.Sound,
  17. GLS.SceneViewer,
  18. GLS.GeomObjects,
  19. Sounds.OpenAL,
  20. GLS.Coordinates,
  21. GLS.BaseClasses,
  22. GLS.FileWAV,
  23. GLS.FileMP3,
  24. GLS.Utils;
  25. type
  26. TForm1 = class(TForm)
  27. GLScene: TGLScene;
  28. GLSceneViewer: TGLSceneViewer;
  29. GLCamera1: TGLCamera;
  30. DummyCube: TGLDummyCube;
  31. Sphere: TGLSphere;
  32. GLLightSource: TGLLightSource;
  33. GLSMOpenAL: TGLSMOpenAL;
  34. GLSoundLibrary: TGLSoundLibrary;
  35. GLCadencer1: TGLCadencer;
  36. Timer: TTimer;
  37. Mickey: TGLSphere;
  38. Sphere2: TGLSphere;
  39. Sphere3: TGLSphere;
  40. Cone1: TGLCone;
  41. TrackBar: TTrackBar;
  42. Plane1: TGLPlane;
  43. Disk1: TGLDisk;
  44. Torus1: TGLTorus;
  45. TrackBar1: TTrackBar;
  46. Panel1: TPanel;
  47. Button1: TButton;
  48. btnHowl: TButton;
  49. LabelFPS: TLabel;
  50. procedure SphereProgress(Sender: TObject; const deltaTime,
  51. 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. public
  60. end;
  61. var
  62. Form1: TForm1;
  63. implementation
  64. {$R *.DFM}
  65. uses
  66. GLS.VectorGeometry;
  67. procedure TForm1.FormCreate(Sender: TObject);
  68. begin
  69. SetGLSceneMediaDir;
  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 TForm1.SphereProgress(Sender: TObject; const deltaTime,
  76. newTime: Double);
  77. var
  78. alpha : Single;
  79. begin
  80. // Move the red sphere (sound source) along an elliptic path
  81. alpha:=60*DegToRad(newTime);
  82. TGLSphere(Sender).Position.SetPoint(sin(alpha)*2, 0.5, cos(alpha)*5);
  83. end;
  84. procedure TForm1.TrackBarChange(Sender: TObject);
  85. begin
  86. // Rotate the listener around the vertical axis
  87. DummyCube.TurnAngle:=TrackBar.Position;
  88. Application.ProcessMessages;
  89. end;
  90. procedure TForm1.TrackBar1Change(Sender: TObject);
  91. begin
  92. // Move the listener forward/back
  93. Mickey.Position.Z:=TrackBar1.Position/10;
  94. Application.ProcessMessages;
  95. end;
  96. procedure TForm1.TimerTimer(Sender: TObject);
  97. var
  98. mngName : String;
  99. begin
  100. // some stats
  101. if ActiveSoundManager is TGLSMOpenAL then
  102. mngName:='OpenAL'
  103. else mngName:='';
  104. if ActiveSoundManager<>nil then
  105. LabelFPS.Caption:=Format('%.2f FPS, %s CPU use : %.2f%%',
  106. [GLSceneViewer.FramesPerSecond, mngName,
  107. ActiveSoundManager.CPUUsagePercent])
  108. else LabelFPS.Caption:='No active sound manager.';
  109. GLSceneViewer.ResetPerformanceMonitor;
  110. end;
  111. procedure TForm1.Button1Click(Sender: TObject);
  112. begin
  113. with TGLBSoundEmitter.Create(Sphere.Behaviours) do begin
  114. Source.SoundLibrary:=GLSoundLibrary;
  115. Source.SoundName:='chimes.wav';
  116. Playing:=True;
  117. end;
  118. end;
  119. procedure TForm1.btnHowlClick(Sender: TObject);
  120. begin
  121. with TGLBSoundEmitter.Create(Sphere.Behaviours) do begin
  122. Source.SoundLibrary:=GLSoundLibrary;
  123. Source.SoundName:='howl.mp3';
  124. Playing:=True;
  125. end;
  126. end;
  127. end.