zoukankan      html  css  js  c++  java
  • 用多媒体库 Bass.dll 播放 mp3 [15] 设置与获取播放速度

    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;
    
    type
      TForm1 = class(TForm)
        OpenDialog1: TOpenDialog;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        TrackBar1: TTrackBar;
        Label1: TLabel;
        Button4: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure TrackBar1Change(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button4Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses Bass;
    
    var
      hs: HSTREAM;  {流句柄}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      TrackBar1.ShowSelRange := False;
      TrackBar1.Height := 23;
      TrackBar1.Max := 100000;
      TrackBar1.Min := 100;
      TrackBar1.Position := 44100;
    
      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);
    
      if hs < BASS_ERROR_ENDED then
        Text := '打开失败'
      else begin
        Text := string(Mp3Path);
        Button4.Click;
      end;
    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
      TrackBar1.Position := 44100;
    end;
    
    {设置和获取播放速度}
    procedure TForm1.TrackBar1Change(Sender: TObject);
    var
      freq: Single;
    begin
      freq := 44100;
      BASS_ChannelSlideAttribute(hs, BASS_ATTRIB_FREQ, TrackBar1.Position, 0);
      BASS_ChannelGetAttribute(hs, BASS_ATTRIB_FREQ, freq);
      Label1.Caption := Format('当前速度比例: %f%%', [freq/44100]);
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      BASS_Free;
    end;
    
    end.
    
    窗体文件:
    object Form1: TForm1
      Left = 205
      Top = 107
      Caption = 'Form1'
      ClientHeight = 119
      ClientWidth = 286
      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 Label1: TLabel
        Left = 32
        Top = 59
        Width = 31
        Height = 13
        Caption = 'Label1'
      end
      object Button1: TButton
        Left = 24
        Top = 17
        Width = 75
        Height = 25
        Caption = #25171#24320
        TabOrder = 0
        OnClick = Button1Click
      end
      object Button2: TButton
        Left = 105
        Top = 17
        Width = 75
        Height = 25
        Caption = #25773#25918
        TabOrder = 1
        OnClick = Button2Click
      end
      object Button3: TButton
        Left = 186
        Top = 17
        Width = 75
        Height = 25
        Caption = #26242#20572
        TabOrder = 2
        OnClick = Button3Click
      end
      object TrackBar1: TTrackBar
        Left = 24
        Top = 78
        Width = 237
        Height = 32
        TabOrder = 3
        OnChange = TrackBar1Change
      end
      object Button4: TButton
        Left = 186
        Top = 48
        Width = 75
        Height = 25
        Caption = #21407#36895
        TabOrder = 4
        OnClick = Button4Click
      end
      object OpenDialog1: TOpenDialog
        Left = 256
      end
    end
    
  • 相关阅读:
    平衡二叉树之RB树
    平衡二叉树之AVL树
    实现哈希表
    LeetCode Median of Two Sorted Arrays
    LeetCode Minimum Window Substring
    LeetCode Interleaving String
    LeetCode Regular Expression Matching
    PAT 1087 All Roads Lead to Rome
    PAT 1086 Tree Traversals Again
    LeetCode Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/del/p/1274435.html
Copyright © 2011-2022 走看看