2009-07-02 9 views
0

Ich verwende die neueste Version des QuickTime SDK und möchte das Audio von den "Filmen" (sie sind als Filme referenziert, aber können mp3, m4a, mov und andere Dateitypen sein) über bestimmte Audiogeräte abgespielt werden Benutzer hat mehr als ein Audiogerät.Wie wird das Ausgabegerät für einen Film im QuickTime SDK in C# festgelegt, wenn die Funktion in der Interop-Assembly nicht verfügbar ist?

Apple hat ein paar Funktionen in einem ihrer Beispiele, die Ihnen erlauben, dies zu tun, aber sie sind in C++. Ich kann die Funktionen nirgendwo in den C# Interop-Assemblies finden. Sie sind SetMovieAudioContext und QTAudioContextCreateForAudioDevice. Die Beispieldokumentation für den Aufruf dieser Funktionen in C++ ist unter Technical FAQ: How can I render QuickTime Movie audio to a specific Audio Device once I have a Audio Device ID? aufgeführt.

Hier ist ein Beispiel .NET 2003 C++ Programm, das dies das Audiogerät GUID funktioniert mit: http://developer.apple.com/samplecode/QTSetMovieAudioDevice/index.html#//apple_ref/doc/uid/DTS10003897

Wie würde ich verweisen diese in C# und der Lage sein, ein Film-Objekt übergeben in sie es die Audio-Gerät zu haben, Kontext? Müsste ich eine C++ - DLL erstellen, die ich anrufe (wäre das überhaupt möglich)?

Wenn Sie das SDK benötigen, können Sie das Quicktime 7.3 SDK von https://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?bundleID=19910 herunterladen. Es erfordert einen kostenlosen ADC-Account zum Download.

Jede Hilfe würde sehr geschätzt werden.

Danke,

John

Antwort

1

nativen Code in C# Verpackung ist oft ein langer und mühsamer Prozess (es sei denn, Sie Windows-API tun, wenn die P in der Regel zur Verfügung stellen kann googeln/Invoke Unterschriften). Sie müssen entweder den Treffer nehmen und verwaltete P/Invoke-Wrapper für alle Funktionen und Strukturen erstellen, die von der betreffenden API verwendet werden, oder Sie können C++/CLI (verfügbar mit Visual C++ Express Edition kostenlos) verwenden. Mit C++/CLI können Sie Ihren systemeigenen Code direkt aufrufen und eine vereinfachte verwaltete Schnittstelle bereitstellen, die Ihr C# -Code verwenden kann.