Показать сообщение отдельно
  #13  
Старый 27.01.2012, 01:31
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 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 в.д.
Ответить с цитированием