文档章节

用多媒体库 Bass.dll 播放 mp3 [3] - 打开、播放、暂停、停止

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 692
阅读 132
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

//播放前先要用 BASS_Init 函数进行播放设备初始化
function BASS_Init(
  device: Integer; {指定输出设备, 第一个是 1、第二个是 2; -1 表示使用当前设备}
  freq: DWORD;     {采样率, 一般是 44100}
  flags: DWORD;    {是 BASS_DEVICE_MONO 等常量的组合值, 是效果参数; 0 是默认值}
  win: HWND;       {指定窗口句柄; 0 表示当前窗口}
  clsid: PGUID     {指定一个 GUID, 用以初始化 DirectSound; nil 表示使用默认}
): BOOL; stdcall; external bassdll;

//当然需要从文件或内存加载文件流以后才能播放
function BASS_StreamCreateFile(
  mem: BOOL;     {从文件载入这里是 False; 从内存载入这里是 True}
  f: Pointer;    {文件名或内存流的指针}
  offset: QWORD; {播放起始点, 单位是 1/10 毫秒; 只在参数 1: mem = False 时有效; 默认是 0}
  length: QWORD; {播放终止点, 单位是 1/10 毫秒; 只在参数 1: mem = False 时有效; 默认是 0}
  flags: DWORD   {BASS_SAMPLE_3D 等参数的组合; 控制播放效果、反复和解码等等}
): HSTREAM; stdcall; external bassdll;
{另外: 在调入内存流时, 参数 length 要指定为流的大小}

 
 
 
 
 

 

 

  
窗体设计图:



代码文件:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses Bass;

var
  hs: HSTREAM; {流句柄}

procedure TForm1.FormCreate(Sender: TObject);
begin
  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;

{打开 mp3 文件, 并建立播放流}
procedure TForm1.Button1Click(Sender: TObject);
var
  Mp3Path: AnsiString;
begin
  {打开文件}
  OpenDialog1.Filter := 'Mp3 文件(*.mp3)|*.mp3|Wav 文件(*.wav)|*wav';
  if OpenDialog1.Execute then
    Mp3Path := AnsiString(OpenDialog1.FileName);

  {如果已有文件打开, 先要释放它}
  BASS_StreamFree(hs);

  {建立播放流}
  hs := BASS_StreamCreateFile(False, PAnsiChar(Mp3Path), 0, 0, 0);

  {是否打开成功, 显示一下}
  if hs < BASS_ERROR_ENDED then
    Text := '打开失败' else Text := string(Mp3Path);
end;

{播放}
procedure TForm1.Button2Click(Sender: TObject);
begin
  BASS_ChannelPlay(hs, False); {参数 1 是流句柄; 参数 2 若是 True 每次都会从头播放}
end;

{暂停}
procedure TForm1.Button3Click(Sender: TObject);
begin
  BASS_ChannelPause(hs);
end;

{停止}
procedure TForm1.Button4Click(Sender: TObject);
begin
  BASS_ChannelStop(hs);
end;

{释放}
procedure TForm1.FormDestroy(Sender: TObject);
begin
  BASS_Free;
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 117
  ClientWidth = 202
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 16
    Top = 17
    Width = 75
    Height = 25
    Caption = #25171#24320
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 112
    Top = 17
    Width = 75
    Height = 25
    Caption = #25773#25918
    TabOrder = 1
    OnClick = Button2Click
  end
  object Button3: TButton
    Left = 112
    Top = 48
    Width = 75
    Height = 25
    Caption = #26242#20572
    TabOrder = 2
    OnClick = Button3Click
  end
  object Button4: TButton
    Left = 112
    Top = 79
    Width = 75
    Height = 25
    Caption = #20572#27490
    TabOrder = 3
    OnClick = Button4Click
  end
  object OpenDialog1: TOpenDialog
    Left = 40
    Top = 56
  end
end

 
 
 
 
 

 

 

  
涂孟超
粉丝 13
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
加载中
请先登录后再评论。
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
7.3K
8
桌面即时贴软件--GloboNote

GloboNote 是一个桌面记事软件,可帮你创建待办事宜、提醒和其他笔记信息。无限制即时贴的数量,可分组整理,支持搜索,可定制文本的显示格式(字体、颜色和大小),可将某个即时贴始终显示在...

匿名
2013/01/21
6.8K
1
XLSX读写库--EPPlus

EPPlus 是使用Open Office XML格式(xlsx)读写Excel 2007 / 2010文件的.net开发库。 EPPlus 支持: 单元格范围 单元格样式(Border, Color, Fill, Font, Number, Alignments) Charts 图片 形状...

匿名
2013/02/01
1W
2
C++模板库--C++ B-tree

这是一个google开源的C++模板库,实现了基于B-tree数据结构的有序内存容器。类似于STL的map、set、multimap和multiset模板,C++ B-tree也提供了btreemap、btreeset、btreemultimap和btreemu...

匿名
2013/02/05
3.4K
1
Javascript图元绘制库--ternlight

基于HTML CANVAS API的Javascript库,提供在HTML页面上绘制图元——如流程图的能力。 目前已支持简单的矩形图元和图元间的连线(直线、直角连线两种),拖拽图元等能力。 该javascript librar...

fancimage1
2013/02/07
6.3K
1

没有更多内容

加载失败,请刷新页面

加载更多

汇总一下 Intellij IDEA 常用的牛逼插件!

来源:blog.csdn.net/sunny243788557/java/article/details/106011723 1、日晒主题 Solarized Themes 2、idea上 类调用时序图 SequenceDiagram for IntelliJ IDEA 3、彩色括号 Rainbow Brac......

路人甲Java
昨天
0
0
StringBuider 在什么条件下、如何使用效率更高?

点击上方“方志朋”,选择“设为星标” 回复”666“获取新整理的面试文章 作者:后青春期的Keats cnblogs.com/keatsCoder/p/13212289.html 引言 都说 StringBuilder 在处理字符串拼接上效率要...

方志朋
昨天
0
0
预告|悬镜子芽:新一代灰盒安全测试技术实践分享

点击蓝字 关注我们 万物皆有法,方能有序运行。网络安全进化到内生安全时代,以框架为起点,规划全景,技术内生外长,不断叠加,形成新一代网络安全之道。2020北京网络安全大会(BCS2020)已...

悬镜
昨天
0
0
zoom免费用户无法在中国登陆,RHUB免费续航zoom

中美关系日趋紧张,许多产品强制要求用户站队,zoom已经做了选择,抛弃众多信任、认可zoom产品的用户。微软选择坚持为中国用户提供服务,谁又说得来明天会如何?我们如此泱泱大国,竟要受制于...

osc_gt7nq50v
4分钟前
0
0
kubernetes 安装笔记

ssh -p 9000 root@127.0.0.1 192.168.56.101 master-node 192.168.56.102 work-node1 192.168.56.103 work-node2 由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过......

solate
5分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部