2011-09-01 2 views
6

Ho scritto un'applicazione WPF che sta acquisendo il display e il suono dalla scheda TV dal codice C#. Posso ottenere il display dalla scheda TV, ma non riesco ad ottenere alcun suono dalla scheda TV. A proposito, sto usando .NET Framework 3.5 con Visual Studio 2010. La mia domanda è: come posso ottenere il suono dalla scheda TV?Cattura di audio dalla scheda TV con C#

Infine, ho provato qualcosa di simile utilizzando la libreria DirectSound di DirectX. Tuttavia, ho ricevuto i seguenti errori.

  1. Il metodo migliore partita overload per 'Microsoft.DirectX.DirectSound.Device.SetCooperativeLevel(System.Windows.Forms.Control, Microsoft.DirectX.DirectSound.CooperativeLevel)' ha alcuni validi argomenti.
  2. Argomento 1: non può convertire da 'Wpfvideo.MainWindow' a 'System.Windows.Forms.Control'

Codice:

private DS.Device soundDevice; 
private SecondaryBuffer buffer; 
private ArrayList soundlist = new ArrayList(); 

private void InitializeSound() 
{ 
    soundDevice = new DS.Device(); 
    soundDevice.SetCooperativeLevel(this, CooperativeLevel.Priority); 

    BufferDescription description = new BufferDescription(); 
    description.ControlEffects = false; 
    buffer = new SecondaryBuffer(CaptureDeviceName, description, soundDevice); 
    buffer.Play(0, BufferPlayFlags.Default); 
    SecondaryBuffer newshotsound = buffer.Clone(soundDevice); 
    newshotsound.Play(0, BufferPlayFlags.Default); 
} 
+0

hai trovato l'errore perché il metodo SetCooperativeLevel si aspetta un controllo Windows Form e si passa una finestra di WPF. –

+0

grazie per la tua risposta. Cosa devo fare? – Selo

+0

Non esiste una "correzione" per cui non è possibile trasformare una finestra wpf in un controllo winforms. –

risposta

4

Prova questo:

var windowInteropHelper = new WindowInteropHelper(this); 
soundDevice = new DS.Device(); 
soundDevice.SetCooperativeLevel(windowInteropHelper.Handle, CooperativeLevel.Priority); 
0

La chiamata a soundDevice.SetCooperativeLevel(...) si aspetta un controllo di WinForms come è primo parametro, e si sta cercando di dargli una finestra WPF (che non è un controllo winforms).