Soundvolume bekommen - mciSendString

  • Hallo!
    Ich habe vor, einen Audioplayer zu basteln. Dazu möchte ich auch eine Art Visualisierung machen. Beim rumprobieren bin ich auf die winmm.dll gestoßen, mit der der Sound abgespielt wird.
    Laut MSDN kann ich damit noch mehr machen, als nur Pause/Play/Stop. Allerdings hapert es bei mir mit dem DLL Verständnis. Folgendes hab ich schon probiert.

    Spoiler anzeigen
    [autoit]

    #include <Sound.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $sound = _SoundOpen(@WindowsDir & "\media\Windows XP Startup.wav", "Startup")
    _SoundPlay($sound)
    Sleep(1000)
    $get = _Soundvolume($sound)
    MsgBox(0,"",$get)
    _SoundClose($sound)

    [/autoit] [autoit][/autoit] [autoit]

    Func _Soundvolume($sSnd_id)
    ;Declare variables
    Local $iRet

    If StringInStr($sSnd_id, '!') Then Return SetError(3, 0, 0) ; invalid file/alias

    [/autoit] [autoit][/autoit] [autoit]

    ;pause sound
    $iRet = mciSendString("status " & FileGetShortName($sSnd_id) & " volume")
    ;return
    Return $iRet
    EndFunc

    [/autoit]

    Ich bekomme anscheinend nichts zurück, wie komme ich also an die Lautstärke....?

    Danke für jede Hilfe!
    MFG

    Einmal editiert, zuletzt von Taek (3. September 2008 um 12:53)

  • Das Beispiel habe ich ja aus der Sound.au3 abgewandelt.
    _Soundopen, _Soundplay etc. kenn ich ja schon, aber z.B. _SoundGetBass oder _SoundGetTreble wäre interessant.

    Die Audio.au3 hab ich jetzt im englischen Forum gefunden...
    ... und hat wenigstens die Lautstärke mit drin (_SoundGetMasterVolume()), Danke!

    Eines also noch:
    Ich würde auch gern Bass und Treble abfragen, damit ich mehr Infos zeigen kann.

    EDIT:
    Die _SoundGetMasterVolume() zeigt immer den Wert des "Mixer"s an und nicht die aktuelle Lautstärke eines Lieds oder?
    EDIT2:
    Ich kann nur Befehle für "waveaudio" verwenden. Die Bass und Treble Werte kann ich nur für "digitalvideo" nehmen? Heisst das, ich brauch ein Video? Oder reicht eine MP3?
    EDIT3: Bei mp3 gehts auch nicht... :(

    2 Mal editiert, zuletzt von Taek (3. September 2008 um 11:57)

  • Haha, ich hab endlich gefunden, was ich wollte. Und dazu muss ich nichtmal ne DLL plagen. :rock::D:thumbup:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $main = GUICreate("wmplayer.ocx Example",340,300,-1,-1)
    $WMP = ObjCreate("wmplayer.ocx")
    GUICtrlCreateObj($WMP,20,40,300,100)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE")
    $btn1 = GUICtrlCreateButton("Load mp3",40,200,60,30)
    GUICtrlSetOnEvent($btn1,"open")
    $btn_stop = GUICtrlCreateButton("Stop",110,200,60,30)
    GUICtrlSetOnEvent($btn_stop,"stop")

    [/autoit] [autoit][/autoit] [autoit]

    With $WMP
    .windowlessVideo = True
    .fullscreen = False
    .stretchToFit = False
    .uiMode = 'None'; None, mini, full
    .enableContextMenu = False
    EndWith

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_show)

    [/autoit] [autoit][/autoit] [autoit]

    while 1
    sleep(1000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func open()
    $get_mp3 = FileOpenDialog("open .mp3 file","c:\","(*.mp3)",1)
    $WMP.url = $get_mp3
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func stop()
    $WMP.controls.stop
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func CLOSE()
    Exit
    EndFunc

    [/autoit]

    Herzlichen Dank an das englische Forum an dieser Stelle *lol*