index aaf1df194d3b1904f25ff6993d6e5beab46d503f..b4c406ce139d3ade999c6697c5b0aa4c55ceba27 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
end;
TXMPLoaderFactory = class (TSoundLoaderFactory)
+ public
function MatchHeader(Data: Pointer; Len: LongWord): Boolean; override;
function MatchExtension(FName: string): Boolean; override;
function GetLoader(): TSoundLoader; override;
function TXMPLoader.Load(Data: Pointer; Len: LongWord; SStreaming: Boolean): Boolean;
var
Err: LongInt;
+ Interp: LongInt;
begin
Result := False;
if Err <> 0 then
raise Exception.Create('xmp_load_module_from_memory failed');
- if xmp_start_player(FXMP, e_SoundFormat.SampleRate, 0) <> 0 then
+ if xmp_start_player(FXMP, 48000, 0) <> 0 then
raise Exception.Create('xmp_start_player failed');
- FFormat.SampleRate := e_SoundFormat.SampleRate;
+ if e_MusicLerp then Interp := XMP_INTERP_LINEAR
+ else Interp := XMP_INTERP_NEAREST;
+ xmp_set_player(FXMP, XMP_PLAYER_INTERP, Interp);
+
+ FFormat.SampleRate := 48000;
FFormat.SampleBits := 16;
FFormat.Channels := 2;
function TXMPLoader.Load(FName: string; SStreaming: Boolean): Boolean;
var
Err: LongInt;
+ Interp: LongInt;
begin
Result := False;
if Err <> 0 then
raise Exception.Create('xmp_load_module failed');
- if xmp_start_player(FXMP, e_SoundFormat.SampleRate, 0) <> 0 then
+ if xmp_start_player(FXMP, 48000, 0) <> 0 then
raise Exception.Create('xmp_start_player failed');
- FFormat.SampleRate := e_SoundFormat.SampleRate;
+ if e_MusicLerp then Interp := XMP_INTERP_LINEAR
+ else Interp := XMP_INTERP_NEAREST;
+ xmp_set_player(FXMP, XMP_PLAYER_INTERP, Interp);
+
+ FFormat.SampleRate := 48000;
FFormat.SampleBits := 16;
FFormat.Channels := 2;
end;
function TXMPLoader.FillBuffer(Buf: Pointer; Len: LongWord): LongWord;
+var
+ LoopN: LongInt;
begin
Result := 0;
if FXMP = nil then Exit;
- if xmp_play_buffer(FXMP, Buf, Len, 0) = 0 then
+ if FLooping then
+ LoopN := 0
+ else
+ LoopN := 1;
+ if xmp_play_buffer(FXMP, Buf, Len, LoopN) = 0 then
Result := Len;
end;