sudden
Goto Top

Mit Hilfe vom DirectX SDK ein selectedDevice setzen.

Hi Admins,

ich habe im Rahmen eines kleinen Projektes ein Programm geschrieben, welches mir derzeit meine Audio Ausgabegeräte anzeigt.
Das habe ich mit Hilfe des DirectX SDK geschafft. Ich habe auf DirectX und DirectX.DirectSound verwiesen.
Nun kann ich mir meine ganzen Ausgabegeräte anzeigen lassen (TV via HDMI, Lautsprecher via Klinke und Headset via USB). Diese kann ich auch auswählen, aber noch nicht setzen. gibt es da vielleicht ein "setSoundDevice" oder sowas ähnliches? Wurde in der Doku von DirektX leider nicht fündig.
Hier nochmal der Code:

'Pruefen ob eine Soundkarte im System installiert ist und auflisten der vorhandenen Soundkarten  
Option Explicit On
Option Strict On

Imports Microsoft.DirectX
Imports Microsoft.DirectX.DirectSound

Public Class Form1

    ' List der vorhandenen Soundkarten im System ermitteln  
    Public Class GetSoundDevices

        ' Rueckgabe der gefundenen Soundkarten  
        Public Shared ReadOnly Property DeviceList() As List(Of String)
            Get
                Return GetDeviceList()
            End Get
        End Property

        ' Soundkarten ermitteln  
        ' Rueckgabe der gefundenen Soundkarten an eine List(...)  
        Private Shared Function GetDeviceList() As List(Of String)
            Dim List As New List(Of String)
            Dim DeviceList As New DevicesCollection
            Try
                Dim n As Integer = 0
                Do While n < DeviceList.Count
                    List.Add(DeviceList(n).Description)
                    n += 1
                Loop
            Catch ex As Exception
                Throw New Exception(ex.Message.ToString())
            End Try
            Return List
        End Function

    End Class

    ' Pruefen ob im System eine Soundkarte installiert ist  
    Public Class DirectX_SoundkarteInstalliert

        ' Rueckgabe ob eine Soundkarte gefunden wurde. True - es wurde eine Soundkarte gefunden sonst False  
        Public Shared ReadOnly Property SoundkarteInstalliert() As Boolean
            Get
                Return GetSoundCard()
            End Get
        End Property

        ' Soundkarten ermitteln  
        Private Shared Function GetSoundCard() As Boolean
            Dim Result As Boolean = False
            Try
                Dim Device As DirectSound.Device = New DirectSound.Device()

                If Device = Nothing Then
                    Result = False
                Else
                    Result = True
                End If
            Catch ex As Exception
                Throw New Exception(ex.Message.ToString())
            End Try
            Return Result
        End Function
    End Class


    ' Initialisierung  
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles MyBase.Load
        With Me
            .CenterToScreen()
            .Text = "Auf Soundkarte pruefen"  
            With Me.Button1
                .Text = "Test"  
            End With
        End With
    End Sub

    ' Funktionsauswertung  
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles Button1.Click
        ListBox1.Items.Clear()
        Try
            'Ist eine Soundkarte im System vorhanden?...  
            Dim IstInstalliert As Boolean = DirectX_SoundkarteInstalliert.SoundkarteInstalliert()
            Select Case IstInstalliert
                '...wenn ja ...  
                Case True
                    '... wird versucht eine Liste der vorhandenen Geraete anzulegen...  
                    Dim List As New List(Of String)(GetSoundDevices.DeviceList())
                    '... enthaelt die Liste Daten?... dann ...  
                    If List IsNot Nothing Then
                        '... wird die Liste in einer Schleife durchlaufen und das Ergebnis  
                        'in einer ComboBox aufgelistet  
                        For Each Devices As String In List
                            'Me.ComboBox1.Items.Add(Devices)  
                            Me.ListBox1.Items.Add(Devices)
                        Next
                        If Me.ListBox1.Items.Count > 0 Then
                            'Erstes Item in der ComboBox selektieren  
                            Me.ListBox1.SelectedIndex = 1
                        End If
                    End If
                Case Else
                    '... wenn keine Soundkarte gefunden werden konnte :  
                    MessageBox.Show("Es ist keine Soundkarte installiert!", "Info")  
            End Select
            'Eventuell auftretenden Fehler abfangen.  
        Catch ex As Exception
            Throw New Exception(ex.Message.ToString())
        End Try
    End Sub

End Class

Ihr müsst mir nicht unbedingt den code schreiben, aber Hinweise, wie ich das hinbekommen könnte wären echt cool.
Vielen Dank im voraus.

MfG,


Sudden

Content-ID: 234078

Url: https://administrator.de/contentid/234078

Ausgedruckt am: 26.11.2024 um 11:11 Uhr

colinardo
colinardo 31.03.2014 aktualisiert um 13:55:03 Uhr
Goto Top
-edit- unter Windows 7 scheint das ganze nicht mehr so richtig zu funktionieren, deshalb die Empfehlung der Nutzung diese Tools zum setzen des Output-Devices:
Bluetooth Audio per Powershell verbinden

Grüße Uwe
Sudden
Sudden 31.03.2014 um 12:33:51 Uhr
Goto Top
Hi Uwe,

hast du wirklich? Dann Sorry. Habs wahrscheinlich überlesen. Sorry.

Ich werde das ausprobieren und berichten.

Vielen Dank nochmal.

MfG,

Sudden
Sudden
Sudden 31.03.2014 um 12:35:54 Uhr
Goto Top
Achja, nochwas. Wenn ich mein Programm öffne steht als erstes in der Liste "Primärer Soundtreiber" kann ich das irgendwie wegbekommen?
colinardo
colinardo 31.03.2014 aktualisiert um 12:40:07 Uhr
Goto Top
Zitat von @Sudden:
Achja, nochwas. Wenn ich mein Programm öffne steht als erstes in der Liste "Primärer Soundtreiber" kann ich
das irgendwie wegbekommen?
indem du es nicht zu deiner Liste hinzufügst (bzw. es aus deiner Liste entfernst)...
Sudden
Sudden 01.04.2014 um 13:42:30 Uhr
Goto Top
Ich finde den .NET code nicht auf dieser seite.und die sln in der zip ann ich mit meinem Visual Studio 2008 leider nicht öffnen.
colinardo
colinardo 01.04.2014 aktualisiert um 13:47:36 Uhr
Goto Top
Zitat von @Sudden:
Ich finde den .NET code nicht auf dieser seite.und die sln in der zip ann ich mit meinem Visual Studio 2008 leider nicht
öffnen.
Nimm die fertige EndPointController.exe aus dem ZIP-File. Zur Info: Das ist ein C++ Codeproject ...
Sudden
Sudden 01.04.2014 um 13:52:42 Uhr
Goto Top
Nimm die fertige EndPointController.exe aus dem ZIP-File. Zur Info: Das ist ein C++ Codeproject ...

Ich verstehe nicht was ich damit machen soll.
colinardo
colinardo 01.04.2014 aktualisiert um 13:57:25 Uhr
Goto Top
Zitat von @Sudden:

> Nimm die fertige EndPointController.exe aus dem ZIP-File. Zur Info: Das ist ein C++ Codeproject ...

Ich verstehe nicht was ich damit machen soll.
steht doch oben in meinem Link...Bluetooth Audio per Powershell verbinden
Zum Umschalten des Outputs führst du die EndpointController.exe mit einer Nummer als Parameter aus welches Device du aktivieren willst...
(das ganze z.B. mit Process.Start)
Sudden
Sudden 01.04.2014 um 14:18:01 Uhr
Goto Top
Ahhh, perfect. jezz hab ichs gechekt. und diese controller exe kann ich dann in mein programm einbauen?
colinardo
colinardo 01.04.2014 aktualisiert um 14:24:21 Uhr
Goto Top
Zitat von @Sudden:

Ahhh, perfect. jezz hab ichs gechekt. und diese controller exe kann ich dann in mein programm einbauen?
einfach mit ins Programmverzeichnis kopieren und von dort aus ausführen lassen ...
Sudden
Sudden 01.04.2014 um 14:29:18 Uhr
Goto Top
Okay, soweit hab ich das verstanden. Aber wenn ich jezz mein Programm starte, bekomme ich die Devices aufgelistet. wenn ich jetzt sagen wir mal Device 2 anklicke... wie kann ich das dann machen dass der EndPointController durch diesen Klick mir das passende Device auswählt. also ich meine wie lautet dann der Befehl?
colinardo
colinardo 01.04.2014 aktualisiert um 14:50:03 Uhr
Goto Top
dir muss man aber alles auf dem Silbertablett servieren ...
process.start("pfadzurEndpointController.exe","2")
Die Reihenfolge der Devices müsste die selbe sein.. Anstatt der hier hardgecodeten 2 nimmst du dann den entsprechenden Index der Combobox.