Вверх ↑
Ответов: 4631
Рейтинг: 749
#1: 2017-10-24 13:21:59 ЛС | профиль | цитата
Ну, есть же пример в hiBASS_StreamCreateFile.pas:

unit hiBASS_ChannelPlay;

interface

uses Kol,Share,Debug,BASS;

type
THIBASS_ChannelPlay = class(TDebug)
private
FSync: HSYNC;
public
_prop_Channel:^cardinal;
_prop_Restart:byte;

_event_onPlay:THI_Event;
_event_onEndPlay:THI_Event;

procedure _work_doPlay(var _Data:TData; Index:word);
procedure _var_State(var _Data:TData; Index:word);
end;

implementation

procedure SyncProc(handle:HSYNC; channel:DWORD; data:DWORD; user:pointer); stdcall;
var
C: THIBASS_ChannelPlay;
begin
C := THIBASS_ChannelPlay(user);

// По получению сигнала снимаем обработчик (вероятно, нужно снимать обработчик по других условиях,
// а может вообще не нужно снимать, но ставить более комплексные условия для повторной установки,
// например, при пересоздании канала (изменении _prop_Channel^) или принудительной остановке
// воспроизведения (в таком случае SyncProc не вызовется?))
BASS_ChannelRemoveSync(C._prop_Channel^, C.FSync);
C.FSync := 0;

// Вызываем событие
_hi_onEvent(C._event_onEndPlay);
end;

procedure THIBASS_ChannelPlay._work_doPlay;
begin
if FSync = 0 then // Назначаем обработчик
FSync := BASS_ChannelSetSync(_prop_Channel^, BASS_SYNC_MIXTIME or BASS_SYNC_END, 0, SyncProc, self);

BASS_ChannelPlay(_prop_Channel^, _prop_Restart = 0);

_hi_onEvent(_event_onPlay);
end;

procedure THIBASS_ChannelPlay._var_State;
begin
dtInteger(_Data, BASS_ChannelIsActive(_prop_Channel^));
end;

end.

карма: 26

0