fSoundOpenAL.pas 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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.SoundManager,
  17. GLS.SceneViewer,
  18. GLS.GeomObjects,
  19. Sounds.OpenAL,
  20. GLS.VectorGeometry,
  21. GLS.Coordinates,
  22. GLS.BaseClasses,
  23. GLS.FileWAV,
  24. GLS.FileMP3,
  25. GLS.Utils;
  26. type
  27. TForm1 = class(TForm)
  28. GLScene: TGLScene;
  29. GLSceneViewer: TGLSceneViewer;
  30. GLCamera1: TGLCamera;
  31. DummyCube: TGLDummyCube;
  32. GLLightSource: TGLLightSource;
  33. GLSMOpenAL: TGLSMOpenAL;
  34. GLSoundLibrary: TGLSoundLibrary;
  35. GLCadencer1: TGLCadencer;
  36. Timer: TTimer;
  37. Mickey: TGLSphere;
  38. Sphere: 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. btnChimes: 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 btnChimesClick(Sender: TObject);
  57. procedure btnHowlClick(Sender: TObject);
  58. private
  59. Path: TFileName;
  60. public
  61. end;
  62. var
  63. Form1: TForm1;
  64. implementation
  65. {$R *.DFM}
  66. procedure TForm1.FormCreate(Sender: TObject);
  67. begin
  68. Path := GetCurrentAssetPath();
  69. SetCurrentDir(Path + '\audio');
  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, 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 TForm1.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 TForm1.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 TForm1.TimerTimer(Sender: TObject);
  96. var
  97. mngName: String;
  98. begin
  99. // some stats
  100. if ActiveSoundManager is TGLSMOpenAL then
  101. mngName := 'OpenAL'
  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 TForm1.btnChimesClick(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 TForm1.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.