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
Author: Klaus Ketelaer
Date: Sat, 30 Nov 2024 11:50
Date: Sat, 30 Nov 2024 11:50
17 lines
644 bytes
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
Author: "Wendelin Uez"
Date: Sat, 30 Nov 2024 17:50
Date: Sat, 30 Nov 2024 17:50
204 lines
7528 bytes
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