Форум: "Игры";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];
ВнизЗагрузка MOD в BASS Найти похожие ветки
← →
Micah'GF © (2003-11-08 17:29) [0]Кто работает с BASS подскажите:
в описании нашел такое: file - Filename (mem = FALSE) or a memory location (mem = TRUE). Но более ничего не сказано как загружать из памяти.. Что указывать вместо имени и в каком типе передавать?!?!
← →
|dRake| (2003-11-09 00:10) [1]Закачай лучше набор пасников под басс 1.8 (вместе с библиотекой) c www.un4seen.com. Гораздо удобнее, чем самому ковырять ;)
← →
Micah'GF © (2003-11-09 07:43) [2]Да вобщем-то меня и 2.0 устраивает - просто хочу загружить музыку из памяти (она это позволяет), но незнаю как...
← →
lyeh © (2004-01-31 01:31) [3]Открой файл через, например, TMemoryStream (вроде бы TMemoryStream.LoadFromFile(...)), а потом в качестве пойнтера передавай TMemoryStream.Memory, а в скобках пиши True
← →
jab~ (2004-02-13 14:47) [4]100%
Stream:=TMemoryStream.LoadFromFile - загружаеш свой мод
А потом просто передаеш этот Stream и 0 в качестве начала!
Вот тут я реализовал плее s3m которые из унриловских umx файлов выдирает:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Bass, ComCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
OpenDialog1: TOpenDialog;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
TrackBar1: TTrackBar;
procedure Button1Click(Sender: TObject);
procedure FileExtract(Path1,Path2:String; FPos,FSize:Integer);
procedure Init;
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
mods: HMUSIC;
procedure Error(msg: string);
end;
var
Form1: TForm1;
UMXHeader: record
ID: array[1..5]of char;
DEST: array[1..3]of char;
Engine: String;
Size: LongInt;
FSize: LongInt;
SSize: LongInt;
FPos: LongInt;
SPos: LongInt;
RPos: LongInt;
end;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
Stream: TFileStream;
n: Integer;
b: Byte;
begin
if OpenDialog1.Execute then begin
BASS_ChannelStop(mods);
n:=120; b:=$FF; UMXHeader.Engine:="";
Stream:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
UMXHeader.Size:=Stream.Size;
Stream.Position:=0; Stream.Read(UMXHeader.ID,5);
Stream.Position:=60; Stream.Read(UMXHeader.DEST,3);
if UMXHeader.DEST[1]="i" then n:=n-1;
while b<>$00 do begin
Stream.Position:=n; Stream.Read(b,1);
if b<>$00 then UMXHeader.Engine:=UMXHeader.Engine+Chr(b); n:=n+1;
end;
Stream.Position:=24; Stream.Read(UMXHeader.FSIZE,4);
Stream.Position:=32; Stream.Read(UMXHeader.SSIZE,4);
UMXHeader.FPos:=UMXHeader.Size-UMXHeader.FSIZE;
UMXHeader.SPos:=UMXHeader.Size-UMXHeader.SSIZE;
UMXHeader.RPos:=n+18+UMXHeader.FPos-16+UMXHeader.SPos-30;
Stream.free;
Memo1.Lines.Clear;
Memo1.Lines.Add("ID= "+UMXHeader.ID);
Memo1.Lines.Add("File Name= "+UMXHeader.Engine);
Memo1.Lines.Add("File Type= "+UMXHeader.DEST);
Memo1.Lines.Add("File Size= "+IntToStr(UMXHeader.SIZE-UMXHeader.RPos));
Memo1.Lines.Add("File Pos= "+IntToStr(UMXHeader.RPos));
end;
end;
procedure TForm1.FileExtract(Path1,Path2:String; FPos,FSize:Integer);
var
r: Integer;
buffer: pointer;
f: File;
FStream1,FStream2: TFileStream;
const bufSize=$10000;
begin
AssignFile(f,Path2); ReWrite(f); CloseFile(f);
FStream1:=TFileStream.Create(Path1,fmOpenRead);
FStream2:=TFileStream.Create(Path2,fmOpenReadWrite);
FStream1.Position:=FPos;
FStream2.Position:=0;
getmem(buffer,bufSize);
while FSize<>0 do begin
if FSize>bufSize then r:=bufSize else r:=FSize;
r:=FStream1.Read(buffer^,r);
FStream2.Write(buffer^,r);
FSize:=FSize-r;
end;
freemem(buffer,bufSize);
FStream1.Free; FStream2.Free;
end;
procedure TForm1.Error(msg: string);
var
s: string;
begin
s := msg + #13#10 + "(error code: " + IntToStr(BASS_ErrorGetCode) + ")";
MessageBox(handle, PChar(s), "Error", MB_ICONERROR or MB_OK);
end;
procedure TForm1.Init;
var
f: PChar;
begin
f := PChar(OpenDialog1.FileName);
mods := BASS_MusicLoad(FALSE, f, UMXHeader.RPos, UMXHeader.SIZE-UMXHeader.RPos, BASS_MUSIC_RAMP);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Init;
if not BASS_MusicPlay(mods) then Error("Can""t play music");
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
{ Initialize digital sound - default device, 44100hz, stereo, 16 bits }
if not BASS_Init(-1, 44100, 0, handle) then Error("Can""t initialize digital sound system");
{ Start }
BASS_Start;
BASS_SetVolume(50);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
BASS_ChannelStop(mods);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
BASS_MusicPlayEx(mods, 0, -1, TRUE);
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
FileExtract(OpenDialog1.FileName,ExtractFilePath(ParamStr(0))+UMXHeader.Engine+"."+UMXHeader.DEST, UMXHeader.RPos, UMXHeader.SIZE-UMXHeader.RPos);
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
BASS_SetVolume(TrackBar1.Position);
end;
end.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.091 c