//擷取檔案流的長度, 單位是位元組function BASS_ChannelGetLength( handle: DWORD; {流控制代碼} mode: DWORD {擷取模式; 有兩種選擇, 但對 HSTREAM 流只能使用 BASS_POS_BYTE}): QWORD; stdcall; external bassdll;//擷取流的當前指標位置, 單位是位元組function BASS_ChannelGetPosition( handle: DWORD; {流控制代碼} mode: DWORD {擷取模式; 有兩種選擇, 但對 HSTREAM 流只能使用 BASS_POS_BYTE}): QWORD; stdcall; external bassdll;//根據流的指標位置來擷取時間點, 單位是秒, 是非常精確的浮點數function BASS_ChannelBytes2Seconds( handle: DWORD; {流控制代碼} pos: QWORD {流的指標位置, 單位是位元組, QWORD = Int64}): Double; stdcall;external bassdll;//和 BASS_ChannelBytes2Seconds 相反, BASS_ChannelSeconds2Bytes 可以通過時間擷取流的指標位置.function BASS_ChannelSeconds2Bytes( handle: DWORD; pos: Double): QWORD; stdcall;external bassdll;//和 BASS_ChannelGetPosition 相反, BASS_ChannelSetPosition 可以設定流的指標位置.function BASS_ChannelSetPosition( handle: DWORD; pos: QWORD; mode: DWORD): BOOL; stdcall; external bassdll;
//要擷取音樂的總時間可以:BASS_ChannelBytes2Seconds(hs, BASS_ChannelGetLength(hs, BASS_POS_BYTE));//要擷取音樂播放的目前時間可以:BASS_ChannelBytes2Seconds(hs, BASS_ChannelGetPosition(hs, BASS_POS_BYTE));
本例:
代碼檔案:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) OpenDialog1: TOpenDialog; Timer1: TTimer; Button1: TButton; Button2: TButton; Button3: TButton; ScrollBar1: TScrollBar; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); procedure FormDestroy(Sender: TObject); end;var Form1: TForm1;implementation{$R *.dfm}uses Bass;var hs: HSTREAM; {流控制代碼} time: Double; {樂曲總時間}procedure TForm1.FormCreate(Sender: TObject);begin Timer1.Interval := 100; Timer1.Enabled := False; ScrollBar1.Enabled := False; if HiWord(BASS_GetVersion) BASSVERSION then MessageBox(0, '"Bass.dll" 檔案版本不合適! ', nil, MB_ICONERROR); if not BASS_Init(-1, 44100, 0, 0, nil) then ShowMessage('初始化錯誤');end;{開啟}procedure TForm1.Button1Click(Sender: TObject);var Mp3Path: AnsiString;begin BASS_StreamFree(hs); Timer1.Enabled := False; ScrollBar1.Enabled := False; OpenDialog1.Filter := 'Mp3 檔案(*.mp3)|*.mp3|Wav 檔案(*.wav)|*wav'; if OpenDialog1.Execute then Mp3Path := AnsiString(OpenDialog1.FileName); hs := BASS_StreamCreateFile(False, PAnsiChar(Mp3Path), 0, 0, 0); if hs
表單檔案:
object Form1: TForm1 Left = 205 Top = 107 Caption = 'Form1' ClientHeight = 88 ClientWidth = 393 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False Position = poDesigned OnCreate = FormCreate OnDestroy = FormDestroy PixelsPerInch = 96 TextHeight = 13 object Button1: TButton Left = 65 Top = 17 Width = 75 Height = 25 Caption = #25171#24320 TabOrder = 0 OnClick = Button1Click end object Button2: TButton Left = 161 Top = 17 Width = 75 Height = 25 Caption = #25773#25918 TabOrder = 1 OnClick = Button2Click end object Button3: TButton Left = 257 Top = 17 Width = 75 Height = 25 Caption = #26242#20572 TabOrder = 2 OnClick = Button3Click end object ScrollBar1: TScrollBar Left = 8 Top = 56 Width = 377 Height = 17 PageSize = 0 TabOrder = 3 OnScroll = ScrollBar1Scroll end object OpenDialog1: TOpenDialog Left = 40 Top = 40 end object Timer1: TTimer OnTimer = Timer1Timer Left = 80 Top = 48 endend