Показать сообщение отдельно
  #10  
Старый 30.11.2014, 21:00
ProDaNTe ProDaNTe вне форума
Новичок
 
Регистрация: 25.12.2011
Сообщения: 75
Репутация: 10
По умолчанию

А это что TDSoundFilterList?
Кстати спасибо

Код:
procedure TForm1.GetSoundStreamsCount;

var EnumFilters: IEnumFilters; {The Variables needed for Filter Operations}
BaseFilter: IBaseFilter;
FilterInfo: TFilterInfo;
Klasse:TGuid;
begin
Form3.ListBox1.Clear;
glb_SoundStreams:=0; {plain }
(pGraphBuilder as IGraphBuilder).EnumFilters(EnumFilters); {Enumerate Filters}
While (EnumFilters.Next(1, BaseFilter, nil)=S_OK) do
begin
BaseFilter.QueryFilterInfo(FilterInfo);
BaseFilter.GetClassID(Klasse);
If (Klasse.D2=CLSID_DSoundRender.D2) and (Klasse.D3=CLSID_DSoundRender.D3) then {cool Sound Renderer Check}

begin
glb_SoundStreams:=glb_SoundStreams+1; {counting}
ItemAdd(Form3.ListBox1,Image3.MultiResBitmap.Items[0].Bitmap, 'customstyle1','Audio '+IntToStr(glb_SoundStreams),'');
if glb_SoundStreams=1 then Form3.ListBox1.ItemIndex:=0;
end;
end;
end;

Количество дорожек вроде определил)

Код:
function TForm1.GetOutputPin(const BF: IBaseFilter): IPin;
var
EP: IEnumPins;
PD: PIN_DIRECTION;
begin
if BF.EnumPins(EP) = S_OK then
begin
while (EP.Next(1, Result, nil) = S_OK) do
begin
if (Result.QueryDirection(PD) = S_OK) and (PD = PINDIR_OUTPUT) then
Exit;
Result := nil;
end;
end;
end;

function TForm1.FindAudioSwith(const FG: IGraphBuilder): IBaseFilter;
// Sucht einen Filter, der das Umschalten von Audiospuren erlaubt
var
EF: IEnumFilters;
Pin: IPin;
SS: IAMStreamSelect;
SCount: Cardinal;
MT: TAMMediaType;
begin
if FG.EnumFilters(EF) = S_OK then
begin
while (EF.Next(1, Result, nil) = S_OK) do
begin
if Result.QueryInterface(IID_IAMStreamSelect, SS) = S_OK then
begin
if (SS.Count(SCount) = S_OK) and (SCount > 1) then
begin
Pin := GetOutputPin(Result);
if (Assigned(Pin)) and (Pin.ConnectionMediaType(MT) = S_OK) then
begin
if IsEqualGUID(MT.majortype, MEDIATYPE_AnalogAudio) or
IsEqualGUID(MT.majortype, MEDIATYPE_Audio) then

Exit;
end;
end;
end;
Result := nil;
end;
end else
Result := nil;
end;

procedure TForm1.SetAudioStream(AFilterGraph: IGraphBuilder;  i: Integer);
// Schaltet auf den angegebenen Kanal um
var
BF: IBaseFilter;
SS: IAMStreamSelect;
begin
BF := FindAudioSwith(AFilterGraph);
 if Assigned(BF) then
  begin
    if BF.QueryInterface(IID_IAMStreamSelect, SS) = S_OK then
    begin
      SS.Enable(Index, AMSTREAMSELECTENABLE_ENABLE); // Evtl. Fehlerabfrage einfügen
    end;
  end;     

А вот выбор все ни как не заработает(
Ответить с цитированием