index a5c83646ff18937ecf004e228250272b3af25b05..53ee47e63a9e351ffefbf73209d094305eddfdd3 100644 (file)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
+ * the Free Software Foundation, version 3 of the License ONLY.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
e_SoundsArray: array of TSoundRec = nil;
e_ZeroPosition: array [0..2] of ALfloat = (0, 0, 0);
e_ALError: ALenum = 0;
+ e_SoundFont: string = '';
+ e_MusicLerp: Boolean = True;
implementation
uses
- g_window, g_options, utils;
+ g_options, utils;
const
NUM_SOURCES = 255; // + 1 stereo
e_SoundsArray[find_id].Loader := Loader;
end;
+ // the calling side won't free this, the loader will get a copy, so fuck it
+ FreeMem(pData);
ID := find_id;
Result := True;
end;
end;
procedure AssignSound(ID: DWORD; Src: ALuint); inline;
+var
+ S: ALint;
begin
alGetError(); // reset error state
// this is a stream
// reset position
e_SoundsArray[ID].Loader.SetPosition(0);
- if CurStream <> ID then // changing streams, stop the thing just in case
- alSourceStop(Src);
+ if CurStream <> ID then // changing streams
+ begin
+ alSourceStop(Src); // this should mark all buffers as processed
+ alGetSourcei(Src, AL_BUFFERS_PROCESSED, S);
+ // unqueue all buffers
+ if S > 0 then
+ begin
+ alSourceUnqueueBuffers(Src, S, @alStreamBufs[alStreamAvail]);
+ alStreamAvail := NUM_STREAM_BUFFERS;
+ end;
+ end;
// this shit is playing now
CurStream := ID;
end
function TBasicSound.GetPan(): Single;
var
- Pos: array [0..2] of ALfloat;
+ Pos: array [0..2] of ALfloat = (0, 0, 0);
begin
Result := 0.0;
if InvalidSource() then