对于DSPack怎么切换MPEG4的原声和伴音?(140分)

  • 主题发起人 主题发起人 lovinger_2000
  • 开始时间 开始时间
L

lovinger_2000

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是DSPack控件2.3版本[:(]
var
MpegFilter: IBaseFilter;
MpegAudioDecoder: IMpegAudioDecoder;
begin

MainForm.FilterGraph.FindFilterByName(StringToOleStr('MPEG Layer-3 Decoder'),MpegFilter);
MpegFilter.QueryInterface(IID_IMpegAudioDecoder,MpegAudioDecoder);
MpegAudioDecoder.put_DualMode(1);//左声道
//只要一调用put_DualMode(0),就提示有问题,如果没有这句播放就正常,但是这句是用来设置左右声道的嘛
//MpegAudioDecoder.put_DualMode(2);
MpegFilter := nil;
MpegAudioDecoder :=nil;
end;

说明一下:我的MPEG4是自己制作的,声道是独立的,但没有把视频和音频分开。

以上代码只要一调用MpegFilter对象的任何一个属性或者函数,就报错,我想肯定是MpegFilter.QueryInterface(IID_IMpegAudioDecoder,MpegAudioDecoder)这句有问题,我估计是传递了错误的参数IID_IMpegAudioDecoder,这个参数如果是用来播放MPEG格式就可以设定左右声道,但是播放MPEG4格式只要一设定左右声道就报错。我在DirectShow9.pas里面找了半天都没有找到应该对MpegFilter.QueryInterface(??,MpegAudioDecoder)传入什么参数,很急,谢谢大家的解答。
我只有这140分了,谢谢各位帮助
 
首先写法就有问题,只有能够完全确定QueryInterface才可以不检查QueryInterface的返回至。或者Try
一般 if XX.QueryInterface(..) <>S_OK then

我估计是否是接口并不支持
另外MPEG4一般好像都归为AVI的范畴,就是压缩的AVI 和 MPEG是不一样的
AVI的引擎驱动仅仅是编码解码的实现
 
EEEE~~~~~~,谢谢zjan521兄弟哈,我一直没有注意到,刚刚打开Base Filter Editor看了才知道,MPEG Layer-3 Decoder的确不支持IMpegAudioDecoder接口,那么我应该怎么办呢?呜呜,很急。
 
IMpegAudioDecoder应该是D9的新接口吧。
根据你自己需要的工作,换用其他方法。肯定能完成的。
比如IBasicAudio等
 
但是IBasicAudio就只有put_Balance()可以平衡声道,但“左声道最大,右声道就哑了”,我在Base Filter Editor中看见好像MPEG Layer-3 Decoder只支持“IAMovieSetup/IBaseFilter/IMediaFilter/IPersist/ISpecifyPropertyPages”几种接口啊IAMovieSetup是视频设置,IBaseFilter是基本的,IPersist是在DirectSound里面,用处不大,IMediaFilter也设置不了左右声道,哎~~~我真是无助啊
不过还是谢谢大家帮助,不要让这张帖子沉了
 
接受答案了.
 
后退
顶部