如何在 Delphi FMX应用程序中使用bass.dll(libbass.dylib)播放文件列表?

9rbhqvlz  于 2023-05-06  发布在  其他
关注(0)|答案(1)|浏览(120)

我有一个声音文件的列表,这些文件存储在StringGrid的行中,我想按顺序播放。也就是说,当一个文件结束时,将读取网格的下一行并播放该文件。
Bass有一个BASS_SYNC_END事件,它允许一个回调过程,我在应用程序的VCL版本中成功地使用了这个回调过程。但在FMX中没有。
回调的设置如下:

BASS_ChannelSetSync(chan1, BASS_SYNC_END, 0, @EndNormal, nil);

在播放文件结束时,其转到:

procedure EndNormal(handle: HSYNC; channel, data: DWORD; user: DWORD); cdecl;
begin
  CPUnit1.NormPlaying := false;
  Form1.AdvTimer.Enabled := true;  // worked in VCL, ontimer proc gets file and plays
end;

在FMX中,变量将被更改,但计时器没有启用,因为我相信,它是主GUI线程的一部分,而不是BASS线程。可能只是幸运的是,它在VCL工作,但这是历史。
那么,在一个文件完成后,让下一个文件播放的技术是什么呢?

zkure5ic

zkure5ic1#

尝试同步它:

procedure EndNormal(handle: HSYNC; channel, data: DWORD;  user: DWORD); cdecl;
begin
  TThread.Synchronize(NIL, // or Queue
    procedure
    begin
      CPUnit1.NormPlaying := false;
      Form1.AdvTimer.Enabled := true;
    end);
end;

相关问题