Hallo Leute,
habe gestern folgende Aufgabe gestellt bekommen und komm keinen Schritt weiter.
Mein Chief will, ein Programm welches mit dem Codec von Windows bzw. über directx arbeited.
Aber hier erst mal das Programm:
Erstellen Sie eine Dialoganwendung, welche 2 Dateinamen als Eingabe annimmt und wahlweise eine mp3-Datei in eine wav-Datei oder umgekehrt umwandelt. Sie können als Vorlage auch eine Kopie (!) Ihres Programms aus der vorangegangenen Aufgabe verwenden.
Ereugen Sie die entsprechenden Filtergraphen manuell:
mp3_to_wav-Filtergraph:
Source: CLSID_AsyncReader
mpeg1 Splitter: CLSID_MPEG1Splitter
MP3 Decoder: DShowUtils::CLSID_MP3Decoder
Waveformat erzeugen: DShowUtils::CLSID_WAVDEST
FileWriter im RIFF-Format: CLSID_FileWriter
wav_to_mp3-Filtergraph:
Source: CLSID_AsyncReader
Waveformat Parser: DShowUtils::CLSID_WAVEParser
MP3 Encoder: DShowUtils::CLSID_LameMP3Encoder
File Writer (ohne RIFF): DShowUtils::CLSID_DumpFile
Auch hier sind die Dateinamen für Quell- und Zieldatei über ein IFileSourceFilter-Interface (bzw. über ein IFileSinkFilter-Interface) zu benennen:
IFileSourceFilter* FileSource=NULL;
g_pSource->QueryInterface(IID_IFileSourceFilter, (void**)&FileSource);
FileSource->Load(DShowUtils::AnsiToUnicode(aktname),NULL);
FileSource->Release();
IFileSinkFilter* FileDest=NULL;
g_pDest->QueryInterface(IID_IFileSinkFilter, (void**)&FileDest);
FileDest->SetFileName(DShowUtils::AnsiToUnicode(aktname),NULL);
FileDest->Release();
Fügen Sie die erzeugten Filter dem Filtergraphen hinzu und verbinden Sie die entsprechenden Pins wie in der nachstehenden Grafik angegeben (achten Sie dabei auf die genaue Pin-Bezeichnung!). Wenn die Filter in den Graphen eingefügt sind, können Sie die Interfaces freigeben (Release) und den Graphen testen.
Vergessen Sie nicht, die für diese Aufgabe zusätzlich notwendigen DirectShow-Filter zu registrieren. Dies können Sie aus Ihrem Programm heraus zur Laufzeit tun
DShowUtils::RegisterFilterDll("DUMP.AX",true);
DShowUtils::RegisterFilterDll("lame_dshow.ax",true);
DShowUtils::RegisterFilterDll("WAVDEST.AX",true);
oder aus der Programmshell heraus
regsvr32.exe DUMP.AX /s
regsvr32.exe lame_dshow.ax /s
regsvr32.exe WAVDEST.AX /s
wobei Sie natürlich die entsprechenden Rechte benötigen. Zerstören Sie den Filtergraphen im Ereignishandler EC_COMPLETE bzw. EC_USERABORT.
Bemerkung 1: Der mp3-Encoder unterstützt einen Einstellungsdialog. Testen Sie diesen über das in der Vorlesung besprochene Interface.
PS: Die Funktionalität reicht. Das Programm muss nicht nach Anweisung geschrieben werde. Ich bin irgendwie noch immer für die ActivX Schiene.
Bin mal gespannt.
Danke im Voraus
Bene