Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

Загрузка 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.062 c
3-1085043196
DmitryNekl
2004-05-20 12:53
2004.06.13
Как работает Field Editor?


14-1085815415
Mad Dancer
2004-05-29 11:23
2004.06.13
Колосоккер


1-1086069212
din
2004-06-01 09:53
2004.06.13
Как работает функция DayOfWeek


1-1086246349
Roma
2004-06-03 11:05
2004.06.13
Вопрос по TMenuItems


14-1085370471
SammIk
2004-05-24 07:47
2004.06.13
Гребанные вирусы