Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
Время: 1.7 c
3-1085419004
Duch
2004-05-24 21:16
2004.06.13
При запуске не находит базу данных


14-1085303166
igorr
2004-05-23 13:06
2004.06.13
Расход катриджа


9-1075830233
sqirrel
2004-02-03 20:43
2004.06.13
Game Maker


1-1086082142
Yuriy
2004-06-01 13:29
2004.06.13
FastNet под Delphi7


1-1086162295
pASkdua
2004-06-02 11:44
2004.06.13
трабл с ListView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский