S
silicon
Unregistered / Unconfirmed
GUEST, unregistred user!
知道这个问题没有人愿意回答,但还是要问:DirectX如果控制WMV视频文件中音频的卡拉OK效果?
有很多方法,包括这里都有的.但都不是我想要的.
WMV的左声道是国语,右声道是粤语. 用waveoutGetVolume这个可以实现,但是,播左声道的时候,右边就没有声音了,播右边的时候,左边就没声音了.不是我要的.
procedure SetVCDTrack(FG: TFilterGraph;
DualMode: Byte);
// AM_MPEG_AUDIO_DUAL_MERGE = 0;
// AM_MPEG_AUDIO_DUAL_LEFT = 1;
// AM_MPEG_AUDIO_DUAL_RIGHT = 2;
// TDSAudioModel = (amMerge, amLeft, amRight);
var
MpegFilter: IBaseFilter;
MpegAudioDecoder: IMpegAudioDecoder;
enumFilters: IEnumFilters;
begin
MpegFilter:= nil;
MpegAudioDecoder:= nil;
enumFilters:= nil;
If Succeeded((FG as IFilterGraph).EnumFilters(enumFilters)) then
begin
While EnumFilters.Next(1, MpegFilter, nil)=S_OKdo
begin
if Succeeded(MpegFilter.QueryInterface(IID_IMpegAudioDecoder, MpegAudioDecoder)) then
MpegAudioDecoder.put_DualMode(Integer(DualMode));
end;
end;
enumFilters := nil;
end;
这个对于MPEG格式的是可以,便对于WMV就不行了.
有很多方法,包括这里都有的.但都不是我想要的.
WMV的左声道是国语,右声道是粤语. 用waveoutGetVolume这个可以实现,但是,播左声道的时候,右边就没有声音了,播右边的时候,左边就没声音了.不是我要的.
procedure SetVCDTrack(FG: TFilterGraph;
DualMode: Byte);
// AM_MPEG_AUDIO_DUAL_MERGE = 0;
// AM_MPEG_AUDIO_DUAL_LEFT = 1;
// AM_MPEG_AUDIO_DUAL_RIGHT = 2;
// TDSAudioModel = (amMerge, amLeft, amRight);
var
MpegFilter: IBaseFilter;
MpegAudioDecoder: IMpegAudioDecoder;
enumFilters: IEnumFilters;
begin
MpegFilter:= nil;
MpegAudioDecoder:= nil;
enumFilters:= nil;
If Succeeded((FG as IFilterGraph).EnumFilters(enumFilters)) then
begin
While EnumFilters.Next(1, MpegFilter, nil)=S_OKdo
begin
if Succeeded(MpegFilter.QueryInterface(IID_IMpegAudioDecoder, MpegAudioDecoder)) then
MpegAudioDecoder.put_DualMode(Integer(DualMode));
end;
end;
enumFilters := nil;
end;
这个对于MPEG格式的是可以,便对于WMV就不行了.