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.
Ответов: 4631
Рейтинг: 749
|
|||
Ну, есть же пример в hiBASS_StreamCreateFile.pas:
|
|||
карма: 26 |
|