Seite 1 von 1

Befehl um Soundwiedergabe zu wechseln gesucht

Verfasst: 01.03.2006 20:29
von AND51
Hallo!

Ich habe "normale Lautsprecherboxen" und ein Bluetooth Headset. Nun möchte ich, da die Automatik für mich nicht ganz zufriedenstellend ist, manuell festlegen, also per Shortcut ein PB-Programm aufrufen, welches die Soundwiedergabe auf ds jeweilige Ziel umleitet.

Die Soundwiedergabe ist zu finden unter:

START => SYSTEMSTEURUNG => SOUNDS UND AUDIOGERÄTE => im PanelGadget() AUDIO => im Frame3DGadget() SOUNDWIEDERGABE
Nachtrag: Auch zu finden unter START => Ausführen => Control.exe Mmsys.cpl,@0,2

Dort stehen bei mir die oben zwei beschriebenen Audiowiedergabegeräte drin. Gibt es einen Befehl (oder mehrere), womit ich zwischen diesen beiden Geräten manuell wechseln kann? TeamSpeak kann das ja auch, da kann man ja auch auswählen, welches Device man für Input und Output benutzt.

Verfasst: 04.03.2006 00:28
von AND51
Hallo, hat denn keiner eine Idee ?

Verfasst: 04.03.2006 21:36
von AND51
Ach kommt schon... Irgendeiner wird doch was wissen oder vielleicht einen klitze kleinen Hinweis oder wenigstens den Hauch einer Ahnung haben.... :(

Verfasst: 04.03.2006 22:09
von Froggerprogger
Mann, bist du hartnäckig... ...aber aufgrund dessen habe ich mal in meinem Diverse-Orderner unter W wie WaveOut gesucht und einen uralten Code-Snippet gefunden, der vielleicht weiterhelfen könnte:

Code: Alles auswählen

; Structure WaveFormatEx
  ; FormatTag.w
  ; Channels.w
  ; SamplesPerSec.l
  ; AvgBytesPerSec.l
  ; BlockAlign.w
  ; BitsPerSample.w
  ; ExtraDataSize.w
; EndStructure

Declare MaleListe()
Global AktDevice.WaveOutCaps

Dim Ausgabe.s(10)

NewList Daten.s()


OpenWindow(0,0,0,GetSystemMetrics_(#SM_CXSCREEN)-16,600,#PB_Window_Systemmenu | #PB_Window_ScreenCentered,"gefundene Audio-Hardware")

    AddElement(Daten())
    Daten() = ""
    AddElement(Daten())
    Daten() = Chr(10) + "AUDIO - AUSGÄNGE:"
    AddElement(Daten())
    Daten() = ""

AudioOutNum.l = waveOutGetNumDevs_()
For i=-1 To AudioOutNum 
  WaveOutGetDevCaps_(i,AktDevice,50)
  
  Ausgabe(0) = Str(i)  
  Ausgabe(1) = PeekS(@AktDevice\szPname)
  Ausgabe(2) = StrU(AktDevice\wMid, #Word)
  Ausgabe(3) = StrU(AktDevice\wPid, #Word)
  Ausgabe(4) = StrU(AktDevice\vDriverVersion, #Word)
  Ausgabe(5) = StrU(AktDevice\dwFormats, #Long)
  Ausgabe(6) = StrU(AktDevice\wChannels, #Word)
  Ausgabe(7) = StrU(AktDevice\dwSupport, #Long)

  Ausgabe(10) = ""
  For j=0 To 9
     Ausgabe(10) + Ausgabe(j) + Chr(10)
  Next
    AddElement(Daten())
    Daten() = Ausgabe(10)
Next
    
    AddElement(Daten())
    Daten() = ""
    AddElement(Daten())
    Daten() = Chr(10) + "AUDIO - EINGÄNGE:"
    AddElement(Daten())
    Daten() = ""



AudioINNum.l = waveINGetNumDevs_()
For i=-1 To AudioINNum 
  WaveINGetDevCaps_(i,AktDevice,50)

  Ausgabe(0) = Str(i)  
  Ausgabe(1) = PeekS(@AktDevice\szPname)
  Ausgabe(2) = StrU(AktDevice\wMid, #Word)
  Ausgabe(3) = StrU(AktDevice\wPid, #Word)
  Ausgabe(4) = StrU(AktDevice\vDriverVersion, #Word)
  Ausgabe(5) = StrU(AktDevice\dwFormats, #Long)
  Ausgabe(6) = StrU(AktDevice\wChannels, #Word)
  Ausgabe(7) = StrU(AktDevice\dwSupport, #Long)

  Ausgabe(10) = ""
  For j=0 To 9
     Ausgabe(10) + Ausgabe(j) + Chr(10)
  Next
    AddElement(Daten())
    Daten() = Ausgabe(10)
Next





MaleListe()



Resume = 1
While Resume
  Select WaitWindowEvent()
    Case #PB_EventCloseWindow
      End
    

EndSelect

Wend


Procedure MaleListe()
CreateGadgetList(WindowID(0))
  ListIconGadget(1,0,0,WindowWidth(), WindowHeight(),"#ID" , WindowWidth() * 3 / 80,#PB_ListIcon_FullRowSelect)
  AddGadgetColumn(1,2,"Audio - Name",WindowWidth() * 32 / 80)
  AddGadgetColumn(1,3,"wMid",WindowWidth() * 5 / 80)
  AddGadgetColumn(1,4,"wPid",WindowWidth() * 5 / 80)
  AddGadgetColumn(1,5,"vDriverVersion",WindowWidth() * 10 / 80)
  AddGadgetColumn(1,6,"dwFormats",WindowWidth() * 10 / 80)
  AddGadgetColumn(1,7,"nChannels",WindowWidth() * 5 / 80)
  AddGadgetColumn(1,8,"Support",WindowWidth() * 10 / 80)
    
  ResetList(Daten())
  While NextElement(Daten())
    AddGadgetItem(1,-1,Daten())
  Wend

EndProcedure
Hier werden die verschiedenen Audioaus/eingänge angezeigt. Die zentrale Funktion ist hier die WinAPI-Funktion "waveOutGetNumDevs_".
Da gibts noch einige weitere, die mit "waveOut*..." beginnen.
Da gibts bestimmt auch sowas wie Audioausgang öffnen, und dann darauf wiedergeben, oder so. Allerdings habe ich mit diesen Funktionen schon seit Ewigkeiten nichts mehr gemacht. Aber vielleicht hilft dir das ja?

Ansonsten kannst Du wohl auch die fmod.dll-Keule drauf loslassen, da lassen sich auch sämtliche Ausgänge durchnummerieren und dann auf einem von denen Sounds wiedergeben.

Verfasst: 04.03.2006 22:32
von AND51
Froggerprogger hat geschrieben:Mann, bist du hartnäckig...
Ähem, dankeschön :oops: :roll: :lol:

ich habe aber noch eine lösung, die fällt mir grad ein. Dazu müsste ich aber zwei Tasten simulieren. einmal die Pfeil-nach-oben-taste und die Eingabetaste.

Natürlich könnt ich jetzt auch wie oben beschrieben Control.exe Mmsys.cpl,@0,2 ausführen und dann die beiden Tasten simulieren mit keybd_event_(), dazu braucht das kleine fensterchen aber den Fokus. ich will aber, dass quasi nur dieses fensterchen denkt, die Tasten seien simuliert worden; sodass ich per Shortcut (m)ein PB-Programm aufrufe, das öffnet das fenster im hintergrund (vielleicht sogar unsichtbar)und simuliert die tasten. geht das auch? Bzw. Wie geht das?

Also im Prinzip so:

Code: Alles auswählen

RunProgram("Control.exe", "Mmsys.cpl,@0,2", "")
Delay(1111)
keybd_event_(#VK_DOWN, 0, 0, 0) : keybd_event_(#VK_DOWN, 0, #KEYEVENTF_KEYUP, 0)
keybd_event_(#VK_RETURN, 0, 0, 0) : keybd_event_(#VK_RETURN, 0, #KEYEVENTF_KEYUP, 0)
Nur, das halt andere, aktive fenster weder den Fokus verlieren, noch durch die Simulation beeinflusst werden.