🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.vbclassic
2 messages
2 total messages Started by Klaus Ketelaer Sat, 30 Nov 2024 11:50
Audio-Ausgabe umschalten Analog/Digital
#8204
Author: Klaus Ketelaer
Date: Sat, 30 Nov 2024 11:50
17 lines
644 bytes
Hallo zusammen,
ich habe mir meinen eigenen Media-Player (Musik/Radio) geschrieben
und wĂŒrde gerne die Musikausgabe wahlweise ĂŒber die Lautspreche oder
S/PDIFF ausgeben. Also eine Audio-Umschaltung Analog/Digital realisieren.

Zur Zeit rufe ich den "Realtek HD Audio-Manager" manuell auf, der
jeweils einen Reiter fĂŒr "Lautsprecher" und "Digital Output" besitzt,
in dem man jeweils "StandardgerÀt festlegen" wÀhlen kann.

(Alternativ: Sytem/Sound/Wiedergabe/StandardgerÀt)

Genau das möchte ich per VB (Windows 7-10) erledigen.

Leider finde ich bei Google keinen Ansatz.

Hat jemand eine Idee, wo ich das nachlesen könnte?

Gruß Klaus
Re: Audio-Ausgabe umschalten Analog/Digital
#8205
Author: "Wendelin Uez"
Date: Sat, 30 Nov 2024 17:50
204 lines
7528 bytes
> Hat jemand eine Idee, wo ich das nachlesen könnte?

in NotfĂ€llen frage ich auch schon mal ChatGPT. Da muß dann nicht unbedingt
die Lösung kommen, aber oftmals Stichworte, Begriffe o.À., nach denen man
dann weiter suchen kann.

Nachstehend meine ChatGPT-Anfrage. Insbesonderes die Antwort auf meine 
Nachfrage sollte weiterfĂŒhrend sein. Ich hab's nicht getestet, in Ă€hnlichen 
FĂ€llen ging ChatGPT bisher recht freizĂŒgig mit angeblich vorhandenen 
API-Funktionen um, aber vielleicht gibt's ja wenigstens einen Anstoß.

HTH, wuez





Also folgendes ChatGPT zum Fraß vorgeworfen:

-----  
schnipp-----------------------------------------------------------------------------
> ich habe mir meinen eigenen Media-Player (Musik/Radio) geschrieben
> und wĂŒrde gerne die Musikausgabe wahlweise ĂŒber die Lautspreche oder
> S/PDIFF ausgeben. Also eine Audio-Umschaltung Analog/Digital realisieren.
>
> Zur Zeit rufe ich den "Realtek HD Audio-Manager" manuell auf, der
> jeweils einen Reiter fĂŒr "Lautsprecher" und "Digital Output" besitzt,
> in dem man jeweils "StandardgerÀt festlegen" wÀhlen kann.
>
> (Alternativ: Sytem/Sound/Wiedergabe/StandardgerÀt)
>
> Genau das möchte ich per VB (Windows 7-10) erledigen.
-----  
schnapp-----------------------------------------------------------------------------

und das da unten retour bekommen. Vielleicht ist was Sinnvolles dabei?

-----  
schnipp-----------------------------------------------------------------------------
Das klingt nach einem spannenden Projekt! Um die Audioausgabe in deinem 
Media-Player zwischen Lautsprechern und S/PDIFF (digitaler Ausgang) per 
Visual Basic (VB) umzuschalten, kannst du die Windows-API verwenden, um die 
Standard-AudioausgabegerÀte zu Àndern. Hier ist ein allgemeiner Ansatz, wie 
du das umsetzen kannst:

    Verwende die Windows Core Audio API: Diese API ermöglicht es dir, die 
AudioausgabegerÀte zu steuern. Du kannst die
    IMMDeviceEnumerator
    -Schnittstelle verwenden, um die verfĂŒgbaren AudiogerĂ€te aufzulisten und 
das StandardgerÀt zu Àndern.

    Installiere die notwendigen Bibliotheken: Du benötigst möglicherweise 
eine COM-Bibliothek, um mit der Core Audio API zu interagieren. Eine 
beliebte Wahl ist die
    NAudio
    -Bibliothek, die dir den Zugriff auf Audiofunktionen in .NET 
erleichtert.

    Codebeispiel: Hier ist ein einfaches Beispiel, wie du das StandardgerÀt 
in VB.NET Àndern kannst:

Imports System.Runtime.InteropServices
Imports NAudio.CoreAudioApi

Public Class AudioSwitcher
    Private deviceEnumerator As New MMDeviceEnumerator()

    Public Sub SetDefaultAudioDevice(deviceName As String)
        Dim device As MMDevice = 
deviceEnumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia)
        If device IsNot Nothing Then
            ' Hier kannst du den Code hinzufĂŒgen, um das StandardgerĂ€t zu 
Ă€ndern
            ' Dies erfordert möglicherweise zusÀtzliche Berechtigungen
        End If
    End Sub

    Public Function GetAudioDevices() As List(Of String)
        Dim devices As New List(Of String)()
        For Each device As MMDevice In 
deviceEnumerator.EnumerateAudioEndPoints(DataFlow.Render, 
DeviceState.Active)
            devices.Add(device.FriendlyName)
        Next
        Return devices
    End Function
End Class

    BenutzeroberflÀche: Du kannst eine einfache BenutzeroberflÀche 
erstellen, die es dem Benutzer ermöglicht, zwischen den verfĂŒgbaren 
AudiogerÀten zu wÀhlen und die
    SetDefaultAudioDevice
    -Methode aufzurufen.

    Berechtigungen: Beachte, dass das Ändern des Standard-AudiogerĂ€ts 
möglicherweise Administratorrechte erfordert, abhÀngig von den 
Sicherheitseinstellungen deines Systems.

    Testen: Teste deine Anwendung grĂŒndlich, um sicherzustellen, dass die 
Umschaltung zwischen den GerÀten reibungslos funktioniert.

Wenn du weitere Fragen hast oder spezifische Probleme auftraten, lass es 
mich wissen! Viel Erfolg mit deinem Media-Player!
-----  
schnapp-----------------------------------------------------------------------------




Ich habe dann nachgefragt:

-----  
schnipp-----------------------------------------------------------------------------
Hast du mir ein Beispiel in VB6 statt VB.net ?
-----  
schnapp-----------------------------------------------------------------------------

und bekomme

-----  
schnipp-----------------------------------------------------------------------------
NatĂŒrlich! In VB6 kannst du die Windows API verwenden, um das 
Standard-AudiogerÀt zu Àndern. Hier ist ein einfaches Beispiel, wie du das 
umsetzen kannst. Beachte, dass die Verwendung der Windows Core Audio API in 
VB6 etwas komplizierter ist, da VB6 nicht nativ mit COM-Objekten umgehen 
kann, die in neueren Versionen von Windows verwendet werden.

Hier ist ein Beispiel, das zeigt, wie du die Standard-Audioausgabe zwischen 
Lautsprechern und S/PDIFF umschalten kannst:

    FĂŒge die notwendigen API-Deklarationen hinzu:

Private Declare Function waveOutGetNumDevs Lib "winmm.dll" () As Long
Private Declare Function waveOutGetDevCaps Lib "winmm.dll" (ByVal uDeviceID 
As Long, lpCaps As WAVEOUTCAPS, ByVal uSize As Long) As Long
Private Declare Function waveOutGetVolume Lib "winmm.dll" (ByVal uDeviceID 
As Long) As Long
Private Declare Function waveOutSetVolume Lib "winmm.dll" (ByVal uDeviceID 
As Long, ByVal dwVolume As Long) As Long

Private Type WAVEOUTCAPS
    wMid As Integer
    wPid As Integer
    vDriverVersion As Integer
    szPname As String * 32
    dwFormats As Long
    wChannels As Integer
    dwSupport As Long
End Type

    FĂŒge eine Funktion hinzu, um die AudiogerĂ€te aufzulisten:

Private Sub ListAudioDevices()
    Dim numDevices As Long
    Dim i As Long
    Dim caps As WAVEOUTCAPS

    numDevices = waveOutGetNumDevs()
    For i = 0 To numDevices - 1
        waveOutGetDevCaps i, caps, Len(caps)
        Debug.Print "Device " & i & ": " & Left(caps.szPname, 
InStr(caps.szPname, vbNullChar) - 1)
    Next i
End Sub

    FĂŒge eine Funktion hinzu, um das StandardgerĂ€t zu Ă€ndern:

Das Ändern des StandardgerĂ€ts in VB6 ist nicht so direkt wie in VB.NET. Du 
kannst jedoch die Registry verwenden, um das StandardgerÀt zu Àndern. Hier 
ist ein Beispiel, wie du das machen könntest:

Private Sub SetDefaultAudioDevice(deviceName As String)
    Dim regPath As String
    regPath = 
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\"

    ' Hier musst du den genauen Namen des GerÀts angeben, das du als 
Standard festlegen möchtest.
    ' Dies erfordert möglicherweise zusÀtzliche Logik, um den richtigen 
GerÀtenamen zu finden.

    ' Beispiel: Setze den Standardwert in der Registry (dies ist nur ein 
Platzhalter)
    ' SetRegistryValue regPath, "Default", deviceName
End Sub

    Verwende die Funktionen:

Du kannst die
ListAudioDevices
-Funktion aufrufen, um die verfĂŒgbaren AudiogerĂ€te aufzulisten, und dann die
SetDefaultAudioDevice
-Funktion verwenden, um das gewĂŒnschte GerĂ€t auszuwĂ€hlen.

Hinweis: Das direkte Ändern des Standard-AudiogerĂ€ts ĂŒber die Registry kann 
riskant sein und sollte mit Vorsicht durchgefĂŒhrt werden. Es ist ratsam, 
vorher ein Backup der Registry zu erstellen. Außerdem kann es notwendig 
sein, die Anwendung mit Administratorrechten auszufĂŒhren, um Änderungen an 
der Registry vorzunehmen.

Wenn du weitere Fragen hast oder mehr Details benötigst, lass es mich 
wissen!
-----  
schnapp-----------------------------------------------------------------------------
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads