Главная страница
    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.47 MB
Время: 0.03 c
14-1085505774
Torin
2004-05-25 21:22
2004.06.13
Выделении части линии


1-1085895353
Islander
2004-05-30 09:35
2004.06.13
Как отловить изменение разрешения или кол-ва цветов в системе?


1-1085895664
MadAngel
2004-05-30 09:41
2004.06.13
Инфо о файле


1-1086071689
new
2004-06-01 10:34
2004.06.13
Чтение файла


14-1085389453
WondeRu
2004-05-24 13:04
2004.06.13
Шрек 2. Ура! Ура! Ура!





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