aboutsummaryrefslogtreecommitdiffstats
path: root/Game/Code/Classes/UVisualizer.pas
diff options
context:
space:
mode:
authorjaybinks <jaybinks@b956fd51-792f-4845-bead-9b4dfca2ff2c>2007-12-07 04:32:38 +0000
committerjaybinks <jaybinks@b956fd51-792f-4845-bead-9b4dfca2ff2c>2007-12-07 04:32:38 +0000
commit425ff834dbc3933475ee8f783eea6167e92ec174 (patch)
tree09dcc454984ad26455adf206d906beb87a1ea1b3 /Game/Code/Classes/UVisualizer.pas
parentbd04e1c76d7139287be2244d03f2b62c9d117c0a (diff)
downloadusdx-425ff834dbc3933475ee8f783eea6167e92ec174.tar.gz
usdx-425ff834dbc3933475ee8f783eea6167e92ec174.tar.xz
usdx-425ff834dbc3933475ee8f783eea6167e92ec174.zip
little bit of tidy up..
added command line switch, to see what media interfaces are being used. moved RandomPCM Data generation to Visualizer class. added Visualization preset change, on new line ( may be a little to much... maybe we should do ever 4 or 16 bars or something ?) git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@697 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to '')
-rw-r--r--Game/Code/Classes/UVisualizer.pas55
1 files changed, 50 insertions, 5 deletions
diff --git a/Game/Code/Classes/UVisualizer.pas b/Game/Code/Classes/UVisualizer.pas
index fa737d81..6548e2b7 100644
--- a/Game/Code/Classes/UVisualizer.pas
+++ b/Game/Code/Classes/UVisualizer.pas
@@ -56,10 +56,14 @@ type
hRC : Integer;
hDC : Integer;
+ RndPCMcount : integer;
+
procedure VisualizerStart;
procedure VisualizerStop;
procedure VisualizerTogglePause;
+
+ function GetRandomPCMData(var data: TPCMData): Cardinal;
public
constructor create();
procedure init();
@@ -82,13 +86,12 @@ type
constructor TVideoPlayback_ProjectM.create();
begin
+ RndPCMcount := 0;
end;
procedure TVideoPlayback_ProjectM.init();
begin
- writeln( 'TVideoPlayback_ProjectM - INITIALIZE !!!!!!!!' );
-
VisualizerStarted := False;
VisualizerPaused := False;
@@ -232,6 +235,10 @@ begin
// get audio data
nSamples := AudioPlayback.GetPCMData(PcmData);
+
+ if nSamples = 0 then
+ nSamples := GetRandomPCMData(PcmData);
+
addPCM16Data(PPCM16Data(@PcmData), nSamples);
// store OpenGL state (might be messed up otherwise)
@@ -244,7 +251,15 @@ begin
glPushMatrix();
// let projectM render a frame
- renderFrame(pm);
+ try
+ renderFrame(pm);
+ except
+ // This happens with some presets... ( and only some times also .. moreso on linux )
+ // if we have an "Invalid Floating Point Error" while rendering a frame... then change preset.
+ MoveTo( now );
+
+ // hmm have to be careful, that we dont get to many here... coz it could keep failing.. and trying again.
+ end;
glFlush();
{$IFDEF UseTexture}
@@ -323,11 +338,41 @@ begin
{$ENDIF}
end;
+function TVideoPlayback_ProjectM.GetRandomPCMData(var data: TPCMData): Cardinal;
+var
+ i: integer;
+begin
+ // Produce some fake PCM data
+ if ( RndPCMcount mod 500 = 0 ) then
+ begin
+ for i := 0 to 511 do begin
+ data[0][i] := 0;
+ data[1][i] := 0;
+ end;
+ end
+ else begin
+ for i := 0 to 511 do begin
+ if ( i mod 2 = 0 ) then begin
+ data[0][i] := floor(Random * power(2.,14));
+ data[1][i] := floor(Random * power(2.,14));
+ end
+ else begin;
+ data[0][i] := floor(Random * power(2.,14));
+ data[1][i] := floor(Random * power(2.,14));
+ end;
+ if ( i mod 2 = 1 ) then begin
+ data[0][i] := -data[0][i];
+ data[1][i] := -data[1][i];
+ end;
+ end;
+ end;
+ Inc( RndPCMcount );
+ result := 512;
+end;
+
initialization
singleton_VideoProjectM := TVideoPlayback_ProjectM.create();
-
- writeln( 'UVideoProjectM - Register Playback' );
AudioManager.add( singleton_VideoProjectM );
finalization