123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #pragma hdrstop
- #include "Unit1.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma link "GLBaseClasses"
- #pragma link "GLCadencer"
- #pragma link "GLCoordinates"
- #pragma link "GLCrossPlatform"
- #pragma link "GLGeomObjects"
- #pragma link "GLObjects"
- #pragma link "GLScene"
- #pragma link "GLSMBASS"
- #pragma link "GLSMFMOD"
- #pragma link "GLSMOpenAL"
- #pragma link "GLSound"
- #pragma link "GLWin32Viewer"
- #pragma link "GLFileWAV"
- #pragma link "GLFileMP3"
- #pragma resource "*.dfm"
- TForm1 *Form1;
- int mx,my;
- //---------------------------------------------------------------------------
- __fastcall TForm1::TForm1(TComponent* Owner)
- : TForm(Owner)
- {
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormCreate(TObject *Sender)
- {
- SetGLSceneMediaDir();
- // Load our sound sample
- GLSoundLibrary->Samples->AddFile("drumloop.wav","drumloop.wav");
- GLSoundLibrary->Samples->AddFile("chimes.wav","chimes.wav");
- GLSoundLibrary->Samples->AddFile("howl.mp3","howl.mp3");
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::SphereProgress(TObject *Sender, const double deltaTime, const double newTime)
- {
- Single alpha;
- // Move the red sphere (sound source) along an elliptic path
- alpha = 60*DegToRad(newTime);
- ((TGLSphere *) Sender)->Position->SetPoint(sin(alpha)*2, 0.5, cos(alpha)*5);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::TrackBar1Change(TObject *Sender)
- {
- // Move the listener forward/back
- Mickey->Position->Z = TrackBar1->Position/10;
- Application->ProcessMessages();
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::TrackBarChange(TObject *Sender)
- {
- // Rotate the listener around the vertical axis
- DummyCube->TurnAngle = TrackBar->Position;
- Application->ProcessMessages();
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Button1Click(TObject *Sender)
- {
- TGLBSoundEmitter *se = new TGLBSoundEmitter(Sphere->Behaviours);
- se->Source->SoundLibrary = GLSoundLibrary;
- se->Source->SoundName = "chimes.wav";
- se->Playing = True;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::btnHowlClick(TObject *Sender)
- {
- TGLBSoundEmitter *se = new TGLBSoundEmitter(Sphere->Behaviours);
- se->Source->SoundLibrary = GLSoundLibrary;
- se->Source->SoundName = "howl.mp3";
- se->Playing = True;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::TimerTimer(TObject *Sender)
- {
- String mngName;
- TGLSoundManager *sm;
- sm = ActiveSoundManager();
- // some stats
- if(dynamic_cast < TGLSMBASS * >(sm))
- mngName = "BASS";
- else if(dynamic_cast < TGLSMFMOD * >(sm))
- mngName = "FMOD";
- else if (dynamic_cast < TGLSMOpenAL * >(sm))
- mngName = "OpenAL";
- else
- mngName = "";
- if(sm)
- LabelFPS->Caption = Format("%.2f FPS, %s CPU use : %.2f%%",
- ARRAYOFCONST((GLSceneViewer->FramesPerSecond(), mngName,
- ActiveSoundManager()->CPUUsagePercent())));
- else
- LabelFPS->Caption = "No active sound manager.";
- GLSceneViewer->ResetPerformanceMonitor();
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::RBFMODClick(TObject *Sender)
- {
- TGLSoundManager *newManager, *sm;
- // This method switches managers. On a real world project, this would never
- // happen: you would choose and API and then cling to it, but the GLSS
- // completely wraps the underlying complexity and makes it a snap
- if(RBFMOD->Checked)
- newManager = GLSMFMOD;
- else
- newManager = GLSMBASS;
- sm = ActiveSoundManager();
- if(newManager != sm)
- {
- // shut down current one, and activate the new one
- if(sm)
- {
- sm->Active = False;
- newManager->Active = True;
- // restart sound
- GetOrCreateSoundEmitter(Sphere)->Playing = True;
- }
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLSceneViewerMouseMove(TObject *Sender, TShiftState Shift,
- int X, int Y)
- {
- if(Shift.Contains(ssLeft))
- GLCamera1->MoveAroundTarget(my - Y, mx - X);
- else if(Shift.Contains(ssRight))
- GLCamera1->AdjustDistanceToTarget(1 + (my - Y) * 0.01);
- mx = X;
- my = Y;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLSceneViewerMouseDown(TObject *Sender, TMouseButton Button,
- TShiftState Shift, int X, int Y)
- {
- mx = X; my = Y;
- }
- //---------------------------------------------------------------------------
|