文档章节

用多媒体库 Bass.dll 播放 mp3 [5] - 设置与获取音量、相位

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 506
阅读 18
收藏 0
点赞 0
评论 0
本例效果图:



代码文件:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    TrackBar1: TTrackBar;
    TrackBar2: TTrackBar;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure TrackBar2Change(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses Bass;

var
  hs: HSTREAM;  {流句柄}

procedure TForm1.FormCreate(Sender: TObject);
begin
  TrackBar1.ShowSelRange := False;
  TrackBar1.Min := 0;
  TrackBar1.Max := 40;
  TrackBar1.Position := TrackBar1.Max;

  TrackBar2.ShowSelRange := False;
  TrackBar2.Min := -20;
  TrackBar2.Max := 20;
  TrackBar2.Position := 0;

  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
    TrackBar1Change(nil);
    TrackBar2Change(nil);
    Text := string(Mp3Path);
  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.TrackBar1Change(Sender: TObject);
var
  vol: Single;
begin
  BASS_ChannelSetAttribute(hs, BASS_ATTRIB_VOL, TrackBar1.Position / TrackBar1.Max);
  BASS_ChannelGetAttribute(hs, BASS_ATTRIB_VOL, vol);
  Label1.Caption := Format('当前音量值: %f', [vol]);
end;

{设置和获取相位}
procedure TForm1.TrackBar2Change(Sender: TObject);
var
  pan: Single;
begin
  BASS_ChannelSetAttribute(hs, BASS_ATTRIB_PAN, TrackBar2.Position / TrackBar2.Max);
  BASS_ChannelGetAttribute(hs, BASS_ATTRIB_PAN, pan);
  Label2.Caption := Format('当前相位值: %f', [pan]);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  BASS_Free;
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 205
  Top = 107
  Caption = 'Form1'
  ClientHeight = 157
  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 Label2: TLabel
    Left = 32
    Top = 109
    Width = 31
    Height = 13
    Caption = 'Label2'
  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 = 74
    Width = 237
    Height = 32
    TabOrder = 3
    OnChange = TrackBar1Change
  end
  object TrackBar2: TTrackBar
    Left = 24
    Top = 123
    Width = 237
    Height = 28
    TabOrder = 4
    OnChange = TrackBar2Change
  end
  object OpenDialog1: TOpenDialog
    Left = 248
    Top = 32
  end
end

 
 
 
 
 

 

 

  

© 著作权归作者所有

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
使用Delphi7,LAME_enc制作实时录制MP3的录音机

录音控件使用的是AudioRecord,压缩使用的是LAME_enc,播放mp3 使用的Bass.dll多媒体函数库,详情见附件,所有的资料均来自网络,归原作者所有 以下代码介绍AudioRecord的相关代码: {-------...

AdaAda ⋅ 2012/02/25 ⋅ 0

IOS - 后台播放音频(非音乐)

大家首先区分一下音频和音乐 苹果手机左侧最上边按钮 这是调整铃声是否静音的 这里的铃声指闹钟、系统铃声等 比如AudioServicesPlaySystemSound 左侧下边两个按钮(调整音量) 这是控制多媒体...

嘻哈先生 ⋅ 2017/11/16 ⋅ 0

iOS 多媒体

一、音频 在iOS开发中,主要使⽤用四种⽅式来播放音频: System Sound Services (系统声音服务) AVAudioPlayer (高级音频播放器) : 只能播放一个完整的音频, 完全下载好的 AVPlayer(负责视频操...

从訫开始_倾深爱 ⋅ 2016/09/14 ⋅ 0

android之多媒体篇(一)

Android 4.0.3(Api Level 15)支持的多媒体格式。 注意:有些设备可能支持其他的文件格式。 1.Audio AAC LC/LTP、HE-AACv1(AAC+)、AMR-NB、AMR-WB、MP3、MIDI、Ogg Vorbis、PCM/WAVE、FLAC(...

Chanimalx ⋅ 2013/03/29 ⋅ 0

基于 QT 和 mplayer 的 MP4播放器设计

一、环境搭建 1、开发环境 主机环境:ubuntu8.04 编译工具:gcc-4.2.4 界面工具:qt4 2、主机端安装 mplayer,将MPlayer-1.0rc2.tar.bz2、libmad-0.15.1b.tar.gz(1 个mp3 音频解码库)拷贝到...

长平狐 ⋅ 2013/01/11 ⋅ 0

IOS开发之AVAudioPlayer的基本使用

1.这是播放效果,可以按下play和pause播放和暂停,进度条自动改变进度 ,我用的是mac mini产生很多错误,没有声音,换个耳机就可以了!! 滑动条拖动的时候,音乐播放改变会有噪音,解决方法如...

鹿微微鹿 ⋅ 2016/05/06 ⋅ 0

MP3音乐播放器--FFPlayer

FFPlayer 是一个通过 JavaFX 实现的MP3音乐播放器。 功能列表如下 源码地址:http://git.oschina.net/flyfox/FFPlayer 界面如下图:...

Fly的狐狸 ⋅ 2014/11/26 ⋅ 0

JavaFX MP3 音乐播放器 FFPlayer 1.0

FFPlayer 是一个通过 JavaFX 实现的MP3音乐播放器。 功能列表如下 支持播放、暂停、上一首、下一首,时间轨,播放模式,音量调节; 播放列表暂时只支持拖拽添加,右键可以删除列表音乐; 歌词...

Fly的狐狸 ⋅ 2014/11/26 ⋅ 40

iOS开发音频播放基础——AVAudioPlayer的应用

iOS音频开发——AVAudioPlayer应用 AVAudioPlayer是系统提供给我们的一个音频播放类,在AVFoundation框架下,通过它,我们可以实现一个功能强大的音乐播放器。首先,在项目中我们需要导入AVF...

珲少 ⋅ 2015/05/26 ⋅ 2

Kreogist Mu 1.0.0 Beta 2 发布,跨平台音乐中心

Kreogist Mu 1.0.0 Beta 2 发布了。这是一个跨度较大的更新,此版本旨在添加并完善基本功能。此版本的更新日志如下: 1、添加了设置面板,现在可以通过设置面板调整设置。 2、添加了状态栏,...

東條・スペンサー・咲 ⋅ 2017/07/07 ⋅ 3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 28分钟前 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 45分钟前 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

【转】JS浮点数运算Bug的解决办法

37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎...

NickSoki ⋅ 今天 ⋅ 0

table eg

user_id user_name full_name 1 zhangsan 张三 2 lisi 李四 `` ™ [========] 2018-06-18 09:42:06 星期一½ gdsgagagagdsgasgagadsgdasgagsa...

qwfys ⋅ 今天 ⋅ 0

一个有趣的Java问题

先来看看源码: public class TestDemo { public static void main(String[] args) { Integer a = 10; Integer b = 20; swap(a, b); System.out......

linxyz ⋅ 今天 ⋅ 0

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 9

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部