#include mmsystem.h



  • Tach,

    kennt sich jemand mit den Funktionen mixerOpen(), mixerClose(), mixerSetControlDetails() ???

    Sollte per Knopfdruck die Eingangsquelle der Soundkarte von Mikrofon auf Line umschalten können und andersherum...

    Danke!



  • http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_mixeropen.asp

    steht viel zu in der msdn..

    ich glaube, du musst dein problem spezifizieren.



  • Danke. Die Angaben von Microsoft habe ich. Nur leider gibt Microsof keine Beispiele an und ich tu mir etwas schwer, mit dem was ich der aufgerufenen Funktion übergeben muss.

    Ich habe schon mal versucht, mein Problem in dem WinApi Forum genauer zu erläutern, leider hat dann überhaupt niemand darauf reagiert. Daher dachte ich halten wir es erst mal kurz und erklären bei bedarf...

    Ich müsste zwischen den Recordeingängen Line und Mikrofon umschalten können und wenn es nicht all zu kompliziert ist auch den Aufnamepegel des Mixers verändern können.

    Eigentlich wäre ich froh, wenn ich irgend ein Beispiel finden könnte, wie ich den Mixer ansprechen kann. Im Internet finde ich jedoch nur die Seiten von Microsoft.

    Wenn Du mir da noch ein Tip oder Link hättest, wäre ich sehr dankbar.



  • Hol' Dir das Buch "Das Win32 API, Band 4" von Wolfgang Soltendick (ISBN 3-932311-52-3).
    Oder sehe Dir in der MS-Hilfe alle Funktionen mit mixer..., aux..., mci..., mmio..., und wave... an.
    Zuerst sollte Dein Prog die Sound Capabilities Deines PCs abfragen (auxgetNumDevs()). Dann die Eigenschaften der (hoffentlich) vorhandenen "Geräte" mit auxGetDevCaps(...). Die Lautstärkeeinstellung der "Geräte" kannst Du mit auxGetVolume(...) lesen und schreiben (auxSetVolume(...)).
    Die Mixer kannst Du mit mixerGetNumDevs() und mixerGetDevCaps(...) ermitteln. Öffnen und Schließen (mixerOpen(...)) und und die angeschlossenen "Geräte" kannst Du mit mixerGetLineInfo(...) holen.
    Naja, und so weiter und so fort ...
    Ohne Durchlesen der Funktionsbeschreibungen und Verstehen der Sound-bearbeitung (im PC) wird's wohl zu keinem Ergebnis führen. Es sei denn, igendeiner nimmt Dir die Arbeit ab und schreibt Dir ein Prog nach Deinen Wünschen.
    Wenn Du selber lernen willst, dann fange einfach mit einem DOS32-Prog an, das alle Sound-Eigenschaften und -Einstellungen Deines (oder anderer) Pcs ermittelt. Da lernst Du bereits soviel, dass dann die Umschaltung ein Kinderspiel ist.

    Blackbird



  • Bin nun gerade mal dran, die Soundkartendaten auszulesen, leider funktioniert dies nicht ganz so wie ich das möchte.

    unsigned int MIXER, MIX_STRUKT_SIZE;
    int Res;
    LPHMIXER OPEN_MIXER;
    LPMIXERCAPS MIXCAP;
    
    MIXER=mixerGetNumDevs();
    Res=mixerOpen(OPEN_MIXER, MIXER, 0 ,0, CALLBACK_WINDOW);
    Res=mixerGetDevCaps(MIXER ,MIXCAP, MIX_STRUKT_SIZE);
    Res=mixerClose(OPEN_MIXER);
    ComboBox1->Items->Add(MIXCAP.szPname);
    ComboBox1->ItemIndex=0;
    

    Ich kann nun die Soundkarte öffnen und auch schließen. Nun würde ich gerne die Herstellerbezeichnung der Soundkarte in einer ComboBox ausgeben. Leider bringt er mir folgende Fehlermeldung bei MIXCAP.szPname:

    [C++ Fehler] Mixer.cpp(38): E2294 Auf linker Seite der Struktur ist . oder .* erforderlich

    Hat jemand eine Ahnung, was ich da falsch mache? Thanks...



  • Ich würde für Variablen-Namen keine (zumindest nicht ausschließlich) Großbuchstaben verwenden 🕶



  • Weis auch nicht, warum ich alles in Großbuchstaben geschrieben habe, habe ich vorher noch nie... Aber was solls...
    Habe es nun abgeändert mit dem selben Resultat.

    Kann es daran liegen, weil ich die Variable vom Typ LPMIXERCAPS statts MIXERCAPS erstelle?
    Wenn ich MIXERCAPS verwende, dann würde es passen, jedoch meckert er dann an dieser Stelle:

    Res=mixerGetDevCaps(Mixer,Mixcap,Mix_Strukt_Size);
    

    [C++ Fehler] Mixer.cpp(36): E2034 Konvertierung von 'tagMIXERCAPSA' nach 'tagMIXERCAPSA *' nicht möglich
    [C++ Fehler] Mixer.cpp(36): E2342 Keine Übereinstimmung des Typs beim Parameter 'pmxcaps' ('tagMIXERCAPSA *' erwartet, 'tagMIXERCAPSA' erhalten)

    Ich finde jedoch in der Hilfe keine Angaben zu LPMIXERCAPS, nur zu MIXERCAPS etwas.

    Letztendlich möchte ich einfach sehen, wie die Soundkarten heißen und sie in eimer Auswahlbox auswählen können und anschließend den Mixer ansteuern...



  • Klar, du darft nicht nur den Pointer erstellen. Lass das LP weg und setze für den Funktionsaufruf ein & vor den jeweiligen Variablen-Namen 😉



  • DANKE, jetzt geht es ohne Fehler. Nur leider sehe ich noch keine Info über die Soundkarte, aber da heißt es wohl nun weitersuchen.

    Es scheitert nun wohl doch schon an der mixerOpen Funktion, so wie es aussiht muss ich da noch die mixerGetID zuvor ausführen, damit ich die MxId bekomme...


Anmelden zum Antworten