zoukankan      html  css  js  c++  java
  • 用多媒体库 Bass.dll 播放 mp3 [7] 获取当前的播放状态

    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      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;
        Button4: TButton;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses Bass;
    
    var
      hs: HSTREAM;  {流句柄}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Timer1.Interval := 200;
    
      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);
    
      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);
      {想下面这样建立播放流, 直接就是循环播放的}
      //hs := BASS_StreamCreateFile(False, PAnsiChar(Mp3Path), 0, 0, BASS_SAMPLE_LOOP);
    
      if hs < BASS_ERROR_ENDED then Text := '打开失败'
    end;
    
    {播放}
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      BASS_ChannelPlay(hs, False);
    end;
    
    {暂停}
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      BASS_ChannelPause(hs);
    end;
    
    {停止}
    procedure TForm1.Button4Click(Sender: TObject);
    begin
      BASS_ChannelStop(hs);
    end;
    
    {监视播放状态}
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      str: string;
    begin
      if hs = 0 then Exit; {如果播放流没有建立则退出}
    
      case BASS_ChannelIsActive(hs) of
        BASS_ACTIVE_STOPPED: str := '停止状态';
        BASS_ACTIVE_PLAYING: str := '正在播放';
        BASS_ACTIVE_STALLED: str := '失速状态, 正在等待数据';
        BASS_ACTIVE_PAUSED:  str := '暂停状态';
      end;
      Text := str;
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      BASS_Free;
    end;
    
    end.
    
    窗体文件:
    object Form1: TForm1
      Left = 222
      Top = 114
      Caption = 'Form1'
      ClientHeight = 90
      ClientWidth = 254
      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 = 49
        Top = 17
        Width = 75
        Height = 25
        Caption = #25171#24320
        TabOrder = 0
        OnClick = Button1Click
      end
      object Button2: TButton
        Left = 130
        Top = 17
        Width = 75
        Height = 25
        Caption = #25773#25918
        TabOrder = 1
        OnClick = Button2Click
      end
      object Button3: TButton
        Left = 49
        Top = 48
        Width = 75
        Height = 25
        Caption = #26242#20572
        TabOrder = 2
        OnClick = Button3Click
      end
      object Button4: TButton
        Left = 130
        Top = 48
        Width = 75
        Height = 25
        Caption = #20572#27490
        TabOrder = 3
        OnClick = Button4Click
      end
      object OpenDialog1: TOpenDialog
        Left = 216
      end
      object Timer1: TTimer
        OnTimer = Timer1Timer
      end
    end
    
  • 相关阅读:
    LightOJ 1132 Summing up Powers(矩阵快速幂)
    hdu 3804 Query on a tree (树链剖分+线段树)
    LightOJ 1052 String Growth && uva 12045 Fun with Strings (矩阵快速幂)
    uva 12304 2D Geometry 110 in 1! (Geometry)
    LA 3263 That Nice Euler Circuit (2D Geometry)
    2013 SCAUCPC Summary
    poj 3321 Apple Tree (Binary Index Tree)
    uva 11796 Dog Distance (几何+模拟)
    uva 11178 Morley's Theorem (2D Geometry)
    动手动脑
  • 原文地址:https://www.cnblogs.com/del/p/1271103.html
Copyright © 2011-2022 走看看