AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DivX Tonspur umstellen (Switch Audio)
Thema durchsuchen
Ansicht
Themen-Optionen

DivX Tonspur umstellen (Switch Audio)

Ein Thema von SwordfishCenter · begonnen am 21. Okt 2006 · letzter Beitrag vom 23. Okt 2006
 
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: DivX Tonspur umstellen (Switch Audio)

  Alt 21. Okt 2006, 17:55
Hallo,

ich habe mir dazu den Morgan Stream Switcher installiert und steuere den fern. Über den Filtergraph kannst Du feststellen, welcher Filter mehrere Tonspuren zur Verfügung stellt und dann eine auswählen.

Delphi-Quellcode:
function 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
      begin
        EP := nil;
        Exit;
      end;
      Result := nil;
    end;
    EP := nil;
  end;
end;

function FindAudioSwith(const FG: IFilterGraph): 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 (Pin <> nil) and (Pin.ConnectionMediaType(MT) = S_OK) then
          begin
            if IsEqualGUID(MT.majortype, MEDIATYPE_AnalogAudio) or
               IsEqualGUID(MT.majortype, MEDIATYPE_Audio) then
            begin
              SS := nil;
              EF := nil;
              Pin := nil;
              Exit;
            end;
          end;
          Pin := nil;
        end;
        SS := nil;
      end;
      Result := nil;
    end;
    EF := nil;
  end else
    Result := nil;
end;

procedure SetAudioStream(AFilterGraph: TFilterGraph; const Index: Integer);
// Schaltet auf den angegebenen Kanal um
var
  FilterGraph: IFilterGraph;
  BF: IBaseFilter;
  SS: IAMStreamSelect;
begin
  if AFilterGraph.QueryInterface(IID_IFilterGraph, FilterGraph) = S_OK then
  begin
    BF := FindAudioSwith(FilterGraph);
    if BF <> nil then
    begin
      if BF.QueryInterface(IID_IAMStreamSelect, SS) = S_OK then
      begin
        if SS.Enable(Index, AMSTREAMSELECTENABLE_ENABLE) <> S_OK then
          Beep;
        SS := nil;
      end;
      BF := nil;
    end;
    FilterGraph := nil;
  end;
end;
Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz