27.01.2012, 01:31
|
|
.
|
|
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
|
|
Порезал всё, что только мог - играет:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, bass, StdCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
procedure FreeStream;
procedure PlayStream;
procedure Play;
function LoadStream(FileName : String) : Boolean;
end;
var
Form1 : TForm1;
Channel : HSTREAM;
Volume,
FadeTimer : Integer;
PlaySync : HSYNC;
Dir : String;
implementation
{$R *.dfm}
procedure PlayStreamSync(Handle: HSYNC; Stream, Data: DWORD; User: Pointer); stdcall;
begin
end;
procedure TForm1.FreeStream;
begin
BASS_ChannelStop(Channel);
// если канал воспроизводится, тормозим его
BASS_StreamFree(Channel);
// высвобождаем память
Channel := 0;
end;
procedure TForm1.PlayStream;
begin
if BASS_ChannelIsActive(Channel) = BASS_Active_Stopped then
Play
else
begin
BASS_ChannelSlideAttribute(Channel, BASS_ATTRIB_VOL, 0, FadeTimer);
BASS_ChannelSetAttribute(Channel, BASS_ATTRIB_VOL, 0);
BASS_ChannelPlay(Channel, False);
end;
PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_SLIDE, 0, @PlayStreamSync, NIL);
BASS_ChannelSlideAttribute(Channel, BASS_ATTRIB_VOL, Volume / 100, FadeTimer);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if BASS_Init(-1, 44100, 0, Handle, NIL) = False then
ShowMessage('Ошибка');
GetDir(0, Dir);
Channel := 0;
// приравниваем к 0, на случай если Windows заполнить переменные числами.
FadeTimer := 3000;
Volume := 100;
end;
procedure TForm1.Play; //функция воспроизведения канала давно загруженного в память
begin
if Channel = 0 then
Exit;
BASS_ChannelSetAttribute(Channel, BASS_ATTRIB_VOL, 0);
BASS_ChannelPlay(Channel, False);
BASS_ChannelSlideAttribute(Channel, BASS_ATTRIB_VOL, Volume / 100, FadeTimer);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
BASS_Free;
end;
function TForm1.LoadStream(FileName : String) : Boolean;
begin
if Channel <> 0 then
FreeStream;
Channel := BASS_StreamCreateFile(False, PChar(FileName), 0, 0, 0);
Result := Channel <> 0;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
if LoadStream(Dir + '\First.mp3') then
PlayStream;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
if LoadStream(Dir + '\Second.mp3') then
PlayStream;
end;
end.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
|