Delphi开发多媒体播放音轨问题小结

最近一段时间,在论坛上常看见问于切换音轨和切换声道的问题。在这做一个小结。大家可以转载。让菜鸟收益! 转载时,作者希望在最大程度上保持原有信息!

1、什么是声(音)轨、声道?

在早先的VCD时代,一个媒体文件只有一个音轨。故“音轨”一词不常被人们提及。VCD媒体文件中的伴唱或原唱,只有通过切换左右声道来实现。

音轨是随着DVD而来的“产物”。在DVD(MPEG2格式)媒体文件中,一个音轨来记录一个语种(在VOD中常说的“原唱”和“伴唱”)。

2、如何切换音轨?

在这里,我推荐使用“Morgan Stream Switcher”Filter。

音轨的切换,一般是使用Filter上实现的IAMStreamSelect接口中的Enable方法。

例:

var
 obj: IAMStreamSelect;
begin
 if Filter.QueryInterface(IID_IAMStreamSelect, obj) = S_OK then
 begin
  obj.Enable(Index{音轨}, AMSTREAMSELECTENABLE_ENABLE);
  obj := nil;
 end;
end;

3、如果切换声道?

切换声道,需要获取Audio Renderer Filter上的IBasicAudio接口(提示:神龙卡的IBasicAudio接口在hardware decoder Filter上获取)。

使用该接口的put_Balance方法即可实现切换声道。

传入值说明:-10000 --- 右声道

10000 --- 左声道

0 --- 立体声

4、如何知道媒体文件的音轨数?

一般来说,在播放媒体文件时,都需要File Source -> Splitter.

视Splitter Filter不同。获取的方法了也不尽相同。

比如,有一些MPEG的Splitter,有几个音轨,就会创建几个Audio Output Pin.这种情况,你可以取得该Splitter Filter上的Audio Output Pin的数量(就是音轨数量)还有一些MPEG的Splitter,不论有多少音轨,只会输出一个Audio Output Pin.这种情况,该Splitter上已经实现了IAMStreamSelect接口。调用该接口上的Count方法即可获得音轨数量。

5、引出的问题

在切换声道之后,只有一个音箱发声。推荐使用“TBalncer 音频声道均衡控件”。

时间: 2024-09-20 00:03:25

Delphi开发多媒体播放音轨问题小结的相关文章

第十三章-Delphi开发数据库应用程序概述(一)(2)

13.2.1 Delphi的数据库特性 跟其他的应用程序一样,Delphi提供了许多部件以方便地创建数据库应用程序.数据库对象的数据成员既可在设计阶段设置,也可在运行阶段通过程序代码进行设置.Delphi的部件板上提供了两页数据库应用程序开发中所要使用的部件: 数据访问页(Data Access Page)上的部件用于直接访问数据库中的数据库表. 数据控制页(Data Control Page)上的部件用来与用户交互,显示.修改数据库中的数据. 数据库应用程序首先是利用Delphi提供的数据库部

Delphi开发98屏幕保护预览程序

大家都知道windows屏幕保护程序的作用,而且新的屏幕保护程序越来越漂亮.如果在win98的桌面右键菜单选属性,就弹出显示器设置界面,有一个标签是设置屏幕保护程序的. 在该页的画面上,有一个显示器图案,如果你选择win98所带的屏幕保护程序,这个屏幕保护程序就会在这个小'显示器'上自动运行,你可以直接看到运行效果.这功能大大方便了屏幕保护程序的选择,这就是win98对屏幕保护程序的新增接口:预览功能. 目前大多数新推出的屏幕保护程序都支持这个接口. 屏幕保护程序从它的诞生那时起,在同一时刻只能

利用Delphi开发网络数据库应用

Delphi 是具可视化界面的面向对象编程语言,它以其功能强大.简便易用等诸多特性,深受编程人员的欢迎.Delphi 中提供了数据库引擎 BDE(Borland Database Engine),并内含众多的数据库调用构件,为编程人员开发客户/服务器应用程序提供了方便.通常情况下,利用 Delphi 开发数据库应用程序,可以使用TTable.TDataSource.TDBEdit.TDBNavigator等构件.只要正确设置了构件的某些属性,再编写必要的程序代码对一些特定事件进行处理,就能够完成

114_《Delphi开发技术大全》

<Delphi开发技术大全> Delphi 教程 系列书籍 (114) <Delphi开发技术大全> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Part1 Part2 Part3 作者: 明日科技 梁水 李方超 赛奎春 丛书名: 软件工程师典藏 出版社:人民邮电出版社 ISBN:9787115157034 上架时间:2007-3-21 出版日期:2007 年3月 开本:16开 页码:857 版次:1-1 内容简介 本书是一本Delphi综合开发参考手

多线程-Delphi开发中遇到的内存错误问题

问题描述 Delphi开发中遇到的内存错误问题 #背景介绍 我做了一个模拟的dll,模拟原来的发送消息的dll,实现的功能是将消息(XML)解包写到DBF中 多线程环境 #同样的代码,有以下两种情况 没有使用断点调试的时候,运行到发送(也就是写到DBF)的时候就会报地址错误(这一步是通过记录日志信息确定在哪一步报错的),但是线程还是继续执行,不过每次运行到发送的时候就报错 但是如果使用断点调试的话,跟踪断点到发送函数的时候就没有报错,从来也不报错 这个问题我实在是没有思路,希望有经验的前辈能指点

调试-Delphi开发出现的内存错误问题

问题描述 Delphi开发出现的内存错误问题 ###背景介绍### 我做了一个模拟的dll,模拟原来的发送消息的dll,实现的功能是将消息(XML)解包写到DBF中 多线程环境 ###同样的代码,有以下两种情况### 没有使用断点调试的时候,运行到发送(也就是写到DBF)的时候就会报地址错误(这一步是通过记录日志信息确定在哪一步报错的),但是线程还是继续执行,不过每次运行到发送的时候就报错 但是如果使用断点调试的话,跟踪断点到发送函数的时候就没有报错,从来也不报错 这个问题我实在是没有思路,希望

最强大的Delphi RIA Web构架群,领略Delphi开发BS的强大威力,Java差远了

问题描述 CBXRIA框架几乎是国产多Delphi层框架中最好的一个,同时体现SmartClient和RIA思想.CBX的Demo服务器换地址了,所以请大家到这个地方体验,CBXRIADemo(需要客户端初始化):有关CBXRIA的评论:刚创建的CBXRIA讨论区CBXRIA案例:欢迎加入最强大的DelphiRIABS构架群,领略Delphi开发BS的强大威力,Java差远了主讨论群:53623431(已满)第二群:16169282(已满)第三群:63756040(已满)第四群:64740999

用Delphi开发JNI(Java Native Interface)应用(一)

JNI(Java Native Interface,Java本地接口)技术大家都不陌生,它可以帮助解决Java访问底层硬件的局限和执行效率的提高.关于JNI的开发,大多数资料讨论的都是如何用C/C++语言开发JNI,甚至于JDK也提供了一个Javah工具来自动生成C语言程序框架.但是,对于广大的Delphi程序员来说,难道就不能用自己喜爱的Delphi与Java互通消息了吗? 通过对Javah生成的C程序框架和JDK中的JNI.h文件的分析,我们发现,Java利用JNI访问本地代码的关键在于JN

Android开发的UXSS阶段性小结及自动化测试教程

0x00 科普 WebView(网络视图)android中加载显示网页的重要组件,可以将其视为一个浏览器.在kitkat(android 4.4)以前使用WebKit渲染引擎加载显示网页,在kitkat之后使用谷歌自家内核chromium. Uxss(Universal Cross-Site Scripting通用型XSS)UXSS是一种利用浏览器或者浏览器扩展漏洞来制造产生XSS的条件并执行代码的一种攻击类型.可以到达浏览器全局远程执行命令.绕过同源策略.窃取用户资料以及劫持用户的严重危害.