Главная страница
    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
Время: 0.091 c
6-1082487800
Valerik
2004-04-20 23:03
2004.06.13
ServerSocket обрыв соединения?


1-1086165837
Фдуч
2004-06-02 12:43
2004.06.13
Вызов формы из процесса


4-1084006630
SPeller
2004-05-08 12:57
2004.06.13
Формат ресурсов PE файлов


6-1082546678
pavel_guzhanov
2004-04-21 15:24
2004.06.13
Можно ли с остановить и снова стартовать программу с удаленного к


3-1085056700
Санек
2004-05-20 16:38
2004.06.13
Хранение в базе отсканированных документов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский