Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2009, 17:21   #11
SalasAndriy
Форумчанин Подтвердите свой е-майл
 
Аватар для SalasAndriy
 
Регистрация: 01.11.2007
Сообщений: 157
Радость

Вот вам подробно:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, bass;

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Channel: DWORD;
  PlaySync: HSYNC;

implementation

{$R *.dfm}

// Процедура которая будет вызвана по окончанию проигривания файла
procedure ChannelEndSync(handle: HSYNC; Stream, data: DWORD; user: Pointer); stdcall;
begin
  // Вот здесь обрабатывайте окончание!
  // Когда Channel доиграет до конца, то будет вызвана эта процедура
  // Например освободим этот поток который проигрался
  // Сперва удалим обработку
  BASS_ChannelRemoveSync(Stream, Handle);
  // Освободим поток
  BASS_StreamFree(Stream);

  // Очистим переменные
  Channel := 0;
  PlaySync := 0;

  // Покажем пользователю что файл проигран до конца...
  ShowMessage('Файл проигран!');
end;

// Просто процедура которая открывает файл и проигривает его
procedure BASS_PlayFile(FileName: PChar);
begin
  if Channel <> 0 then
  begin
    // Открываем файл...
    Channel := BASS_StreamCreateFile(False, FileName, 0, 0, 0);

    // Начинаем его воспроизведение
    BASS_ChannelPlay(Channel, False);

    // А вот здесь используем флаг BASS_SYNC_END и указываем на нашу процедуру
    // ChannelEndSync котора будет запущена по окончанию проигривания файла
    PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_END, 0, @ChannelEndSync, nil);
  end else
  begin
    // Если файл уже играет, то отключаем его
    BASS_ChannelRemoveSync(Channel, PlaySync);
    BASS_StreamFree(Channel);

    // Открываем файл...
    Channel := BASS_StreamCreateFile(False, FileName, 0, 0, 0);

    // Начинаем его воспроизведение
    BASS_ChannelPlay(Channel, False);

    // А вот здесь используем флаг BASS_SYNC_END и указываем на нашу процедуру
    // ChannelEndSync котора будет запущена по окончанию проигривания файла
    PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_END, 0, @ChannelEndSync, nil);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  BASS_PlayFile(PChar(OpenDialog1.FileName));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Channel := 0;
  PlaySync := 0;
  BASS_Init(-1, 44100, 0, 0, nil);
  BASS_Start;
end;

end.

Последний раз редактировалось SalasAndriy; 25.11.2009 в 17:23.
SalasAndriy вне форума Ответить с цитированием
Старый 28.12.2009, 03:31   #12
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Восклицание

Цитата:
Сообщение от SalasAndriy Посмотреть сообщение
Вот вам подробно:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, bass;

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Channel: DWORD;
  PlaySync: HSYNC;

implementation

{$R *.dfm}

// Процедура которая будет вызвана по окончанию проигривания файла
procedure ChannelEndSync(handle: HSYNC; Stream, data: DWORD; user: Pointer); stdcall;
begin
  // Вот здесь обрабатывайте окончание!
  // Когда Channel доиграет до конца, то будет вызвана эта процедура
  // Например освободим этот поток который проигрался
  // Сперва удалим обработку
  BASS_ChannelRemoveSync(Stream, Handle);
  // Освободим поток
  BASS_StreamFree(Stream);

  // Очистим переменные
  Channel := 0;
  PlaySync := 0;

  // Покажем пользователю что файл проигран до конца...
  ShowMessage('Файл проигран!');
end;

// Просто процедура которая открывает файл и проигривает его
procedure BASS_PlayFile(FileName: PChar);
begin
  if Channel <> 0 then
  begin
    // Открываем файл...
    Channel := BASS_StreamCreateFile(False, FileName, 0, 0, 0);

    // Начинаем его воспроизведение
    BASS_ChannelPlay(Channel, False);

    // А вот здесь используем флаг BASS_SYNC_END и указываем на нашу процедуру
    // ChannelEndSync котора будет запущена по окончанию проигривания файла
    PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_END, 0, @ChannelEndSync, nil);
  end else
  begin
    // Если файл уже играет, то отключаем его
    BASS_ChannelRemoveSync(Channel, PlaySync);
    BASS_StreamFree(Channel);

    // Открываем файл...
    Channel := BASS_StreamCreateFile(False, FileName, 0, 0, 0);

    // Начинаем его воспроизведение
    BASS_ChannelPlay(Channel, False);

    // А вот здесь используем флаг BASS_SYNC_END и указываем на нашу процедуру
    // ChannelEndSync котора будет запущена по окончанию проигривания файла
    PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_END, 0, @ChannelEndSync, nil);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  BASS_PlayFile(PChar(OpenDialog1.FileName));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Channel := 0;
  PlaySync := 0;
  BASS_Init(-1, 44100, 0, 0, nil);
  BASS_Start;
end;

end.
А как эти строки вставить в мой код?
Код:
Procedure TSKPlayer.Play(Const FileName: String);
Var
FFileName: PChar;
Begin
 IF not FileExists(FileName) Then
  Begin
   Exit;
  End;
FFileName:=PChar(FileName);
 IF Channel <> 0 Then
  Begin
   BASS_ChannelStop(Channel);
   BASS_StreamFree(Channel);
   Channel:=0;
  End;
Channel:=BASS_StreamCreateFile(False, FFileName, 0, 0, 0);
 IF Channel = 0 Then
  Begin
   MessageBox(0, 'Ошибка загрузки файла!', 0, MB_OK or MB_ICONSTOP);
   Exit;
  End;
 IF not BASS_ChannelPlay(Channel, False) Then
  Begin
   MessageBox(0, 'Ошибка воспроизведения файла!', 0, MB_OK or MB_ICONSTOP);
   Exit;
  End;
TagLoad(FileName);
GetNameTrack(FileName);
End;
Подскажите пожалуйста!
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 01.01.2010, 20:49   #13
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
По умолчанию

Спасибо всем разобрался!!!=-)
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
bass.dll larry Общие вопросы C/C++ 1 09.11.2009 13:23
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
BASS DLL ygy Мультимедиа в Delphi 4 29.09.2009 04:39
BASS.DLL VintProg Мультимедиа в Delphi 2 21.09.2009 16:36
bass.dll Elem Мультимедиа в Delphi 18 19.07.2009 11:04