sound endlosschleife bzw. wecker

  • hi,
    habe vor kurzem erst autoit für mich entdeckt und stehe nun vor meinem ersten problem ...:

    ich habe ein programm geschrieben, welches den bildschirm nach einer bestimmten farbe durchsuchen soll, wenn eben diese farbe gefunden wird soll ein sound ausgegeben werden und dazu ein fenster erscheinen. der sound soll wie eine art wecker solange gespielt werden, bis der user in dem fenster auf ok geklickt hat. soweit so gut, mein problem ist jetzt dass der sound zwar gespielt wird, aber ich entweder keine endlosschleife hinbekomme oder das fenster erst erscheint, wenn die sounddatei endgültig abgespielt wurde.
    noch kurz der quelltext (bitte nicht über die unordnung wundern, hab da schon so einiges ausprobiert):

    Spoiler anzeigen
    [autoit]

    #include <Sound.au3>

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

    $i = 0

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

    While $i < 1

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

    ; Get initial checksum
    $checksum = PixelChecksum(0,0, 256,500)

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

    ; Wait for the region to change, the region is checked every 100ms to reduce CPU load
    While $checksum = PixelChecksum(0,0, 256, 500)
    Sleep(100)
    WEnd

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

    ; Find a orange pixel in the range 0,0-20,300
    $coord = PixelSearch( 0, 0, 256, 500, 0xE66008)

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

    If Not @error Then

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

    MsgBox(64,'Achtung','Angriff!' & Functionsname())

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

    $i = $i + 1

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

    EndIf

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

    WEnd

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

    Func Functionsname()

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

    $sound = SoundPlay("H:\Alarm.wav", 0)

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

    EndFunc

    [/autoit]


    mfg inkubus

    Einmal editiert, zuletzt von Inkubus (13. September 2008 um 18:38)

  • Moin,

    so in etwa ?

    Spoiler anzeigen
    [autoit]

    ;#include <Sound.au3>

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

    Global Const $MSG_OK = 1

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

    While True

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

    ; Get initial checksum
    $checksum = PixelChecksum(0,0, 256,500)

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

    ; Wait for the region to change, the region is checked every 100ms to reduce CPU load
    While $checksum = PixelChecksum(0,0, 256, 500)
    Sleep(100)
    WEnd

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

    ; Find a orange pixel in the range 0,0-20,300
    $coord = PixelSearch( 0, 0, 256, 500, 0xE66008)

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

    If IsArray ($coord) Then

    Functionsname()
    ; MessageBox Flags = 262144 + 4096 + 64 + 0
    $iMsg = MsgBox(266304,'Achtung','Angriff!' & @TAB & @CRLF)
    ; Prüfen ob der OK Button gedrückt wurde
    If $iMsg == $MSG_OK Then ExitLoop

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

    EndIf
    WEnd

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

    Func Functionsname()

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

    $sound = SoundPlay("H:\Alarm.wav", 0)

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

    EndFunc

    [/autoit]


    Gruß
    Greenhorn


  • mmh joa, dank dir, geht auf jeden fall in die richtige richtung :). jetzt fehlt nurnoch die endlosschleife der sounddatei ... hab das auch schonmal mit ner schleife probiert, aber irgendwie macht er jedesmal nach einmaligen abspielen wieder schlapp.

  • Spoiler anzeigen
    [autoit]

    #include <Sound.au3>

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

    Global Const $MSG_OK = 1

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

    While 1
    ; Get initial checksum
    $checksum = PixelChecksum(0,0, 256,500)

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

    ; Wait for the region to change, the region is checked every 100ms to reduce CPU load
    While $checksum = PixelChecksum(0,0, 256, 500)
    Sleep(100)
    WEnd

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

    ; Find a orange pixel in the range 0,0-20,300
    $coord = PixelSearch( 0, 0, 256, 500, 0xE66008)

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

    If IsArray ($coord) Then

    _Alarm(1)
    ; MessageBox Flags = 262144 + 4096 + 64 + 0
    $iMsg = MsgBox(266304,'Achtung','Angriff!' & @TAB & @CRLF)
    ; Prüfen ob der OK Button gedrückt wurde
    If $iMsg == $MSG_OK Then
    _Alarm(0)
    ExitLoop
    EndIf
    EndIf
    WEnd

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

    Func _Alarm($status)
    While $status
    $sound = SoundPlay("H:\Alarm.wav", 1)
    WEnd
    EndFunc

    [/autoit]

    Nicht getestet, sollte aber gehen.

    Edit: Ups, die Leichtsinnsfehler immer :D -> korrigiert.

    2 Mal editiert, zuletzt von Taek (11. September 2008 um 09:33)

  • mmh joa, dank dir, geht auf jeden fall in die richtige richtung :). jetzt fehlt nurnoch die endlosschleife der sounddatei ... hab das auch schonmal mit ner schleife probiert, aber irgendwie macht er jedesmal nach einmaligen abspielen wieder schlapp.

    na machs doch einfach so, dass du den sound in die fenster abfrage einbaust, wei ldu wolltest den doch so lange abspielen bis jemand einen besitmmten button klickt.

    zB

    [autoit]

    GUICreate('Wecker',250,110,-1,-1)

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

    $button = guictrlcreatebutton ("ok", 10,42,40,20)

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

    GUISetState ()

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

    while 1
    $sound = SoundPlay("H:\Alarm.wav", 0)

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

    $msg = guigetmsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $button
    exitloop
    endselect
    wend

    [/autoit]
  • du rufst die funktion mit nem unterstrich davor auf. (_Alarm())

  • bekomme aber bei beiden versionen keine endlosschleife ...
    bei $sound = SoundPlay("H:\Alarm.wav", 1) bekomme ich (bei Teak's version) kein fenster und bei darksideofsanta's version kann ich das fenster wiederrum nicht wegklicken.

    bei $sound = SoundPlay("H:\Alarm.wav", 0) bekomm ich bei beiden versionen keine soundwiedergabe. dafür aber bei darksideofsanta's version ein fenster, welches ich wegklicken kann, bei teak bekomm ich garnichts...

    wie ichs auch drehe und wende, ich bekomme entweder ein fenster zum wegklicken oder der sound spielt dauerhaft, beides geht irgendwie nicht.

  • hab mir mal aus allen vorschlägen was gebastelt. sieht vielleicht nich schön aus, aber es funktioniert :

    Spoiler anzeigen
    [autoit]


    #include <Sound.au3>
    #include <GUIConstants.au3>
    Opt("WinTitleMatchMode", 3)
    GUICreate('Wecker', 150,75,-1,-1)

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

    $button = guictrlcreatebutton ("ok", 45,42,70,25)
    $label = GUICtrlCreateLabel ("Sound beenden." , 40, 20)

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

    Global Const $MSG_OK = 1

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

    Global $sound, $pos, $lenght
    $sound = _SoundOpen(@WindowsDir & "\Media\Windows XP-Startvorgang.wav") ; nur testsound
    $pos = _SoundPos($sound, 2)
    $lenght = _SoundLength($sound, 2)

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

    $i = 0

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

    While $i < 1
    ; Get initial checksum
    $checksum = PixelChecksum(0,0, 256,500)

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

    ; Wait for the region to change, the region is checked every 100ms to reduce CPU load
    While $checksum = PixelChecksum(0,0, 256, 500)
    Sleep(100)
    WEnd

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

    ; Find a orange pixel in the range 0,0-20,300
    $coord = PixelSearch( 0, 0, 256, 500, 0xE66008)

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

    If Not @error Then

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

    _Alarm()

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

    $i = $i + 1

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

    EndIf

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

    WEnd

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

    Func _Alarm()

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

    _SoundPlay($sound, 0)
    GUISetState ()

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

    While 1
    $msg = guigetmsg()

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

    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $button
    exitloop
    Case Else
    Sleep(100)
    ControlSetText("Current Position", "", "Static1", _SoundPos($sound, 1))
    If _SoundPos($sound, 2) = _SoundLength($sound, 2) Then
    _SoundPlay($sound, 0)
    EndIf
    EndSelect
    WEnd

    EndFunc

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

    danke an alle die mir geholfen haben :) .