[PROJEKT] Automatisierter Download und Verarbeitung von Audiodateien

  • Das heißt der erste Progress zeigt schon alle vier Downloads an und der Zweite springt nur noch auf weil er muß?

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Also zu sehen bekomme ich nur zwei Progress Anzeigen.

    Die erste läuft von 0 - 100 % durch

    Die zweite wird nur angezeigt, aber es passiert nix.

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Ich habe nochmal etwas rumexperimentiert.

    So wie es aussieht, geben die Variablen $DL_state und $DL_size keine Werte aus.

    [autoit]


    $DL_size = InetGetInfo($DL_Get, 1)
    $DL_state = InetGetInfo($DL_Get, 0)
    MsgBox(64, "TEST", $DL_size & $DL_state)

    [/autoit]

    Dabei gibts nur ne leere Box

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Ja, das habe ich beides versucht.

    Was ich fstgestellt habe ist, dass die While-Schleife nur läuft wenn der Eingangswert "True" ist, aber mit der Abfrage bekomme ich den Wert "False" und die schleife wird garnicht erst gestartet.

    Des weiteren scheint es so, dass über InetGetInfo(1) ... also der Gesamtgröße des Files erst nach abgeschlossenem Download ausgegeben wird. Was ja wiederum nicht helfen würde.

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Dann wirst du im Schleifenkopf wohl InetGetInfo(..., 2) verwenden müssen. Die Progressbar funktioniert dann natürlich auch nicht. Vielleicht kannst du die Größe aber auch mit InetGetSize abfragen.

  • So, jetzt habe ich zwischendurch mal neue Fliegengitter aufgezogen :D

    Das hat wohl dann den Wald gelichtet und ich habe wieder die Bäume gesehen ... *lach*

    Spaß bei Seite, so wie es aussieht habe ich jetzt eine funktionierende Lösung gefunden.

    Spoiler anzeigen
    [autoit]

    Local $media_server = "server.de"
    Local $media_user = "user"
    Local $media_passwd = "XXXXXX"
    Local $ews = "Nachrichten.mp3"

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

    Local $_S2_Conn = ("http://" & $media_user & ":" & $media_passwd & "@" & $media_server)
    ProgressOn ( "News Download", "Aktuelle News wird geladen")
    Local $hDownload = InetGet($_S2_Conn & "/News/News.mp3", "..\temp" & $news, 1, 1)
    Local $aDataSize = InetGetSize($_S2_Conn & "/News/News.mp3", "..\temp")
    Sleep(250)

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

    Do
    Local $aDataState = InetGetInfo($hDownload, 0)
    Local $aDataProzent = Round(($aDataState / $aDataSize) * 100)

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

    #cs
    ; ### TESTBOX ###
    MsgBox(0, "Blöööck", "Prozente: " & $aDataProzent & @CRLF & _
    "aData State: " & $aDataState & @CRLF & _
    "aData Size: " & $aDataSize)
    #ce
    _UpdateProgress($aDataProzent)
    Until InetGetInfo($hDownload, 2) ; Check if the download is complete.

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

    ProgressOff ( )

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

    MsgBox(0, "ENDE", "Prozente: " & $aDataProzent & @CRLF & _
    "aData State: " & $aDataState & @CRLF & _
    "aData Size: " & $aDataSize)

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

    Exit

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

    Func _UpdateProgress($percent)
    ProgressSet($percent, int($percent) & "%")
    return 1
    EndFunc ;==>_UpdateProgress

    [/autoit]

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Jetzt hab ich bei dem Script-Schnipsel nur noch ein Problem, aber nur eine optische Angelegenheit.

    Im Progress Fenster zählt er zwar schön von 0 auf 100% hoch und auch der Ladebalken bewegt sich. Aber irgendwie kommt der Ladebalken nur bis zur Hälfte, dann stehen unten schon 100% und der DL ist abgeschlossen. Ich finde aber den Denkfehler nicht. :(

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • OK, ich weiß jetzt wo das Problem liegt. Die Downloads sind schneller abgeschlossen als die Progressbar den Ladebalken animiert.

    Bevor ich mich hier jetzt weiter reinsteigere .... habe ich nochmal eine wichtige Frage.

    Die geladenen Audio-Files sollen ja im Laufe des Projektes noch normalisiert und am Ende zu einem File zusammengeführt werden.

    Ist es denn möglich den Download, das Normalisieren und die Zusammenführung usw. alles unter einer Progressbar laufen zu lassen?

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Ist es denn möglich den Download, das Normalisieren und die Zusammenführung usw. alles unter einer Progressbar laufen zu lassen?

    Ja. Wenn es nur diese 3 Teile sind teilst du die % des Downloads durch 3, bei den anderen beiden machst du das selbe (sodass alle von 0 bis 33% gehen) und addierst 33 bzw. 66.
    Download: 0 bis 33%
    Normalisieren: 34 bis 66%
    Zusammenführung: 67 bis 100%

  • Die Prograssbar muß jetzt erstmal warten bis ich die anderen Bauteile des Scripts fertig habe, sonst kann ich das immer wieder anpassen :)

    Wie schon in der SB angesprochen kümmere ich mich derzeit um das Zeitmanagement. Also Abfrage der Wochentage, Stunden und Minuten um entsprechende Downloads zu veranlassen.

    Die Wochentage konne ich noch recht gut lösen:

    [autoit]

    If $sShortDayName = "Sam" or $sShortDayName = "Son" Then
    If MsgBox(16, "Keine Nachrichten", "Heute ist " & $sLongDayName & @CRLF & @CRLF & "Es gibt am Wochenende" & @CRLF & "keine Nachrichten!" & @CRLF & @CRLF & "Bitte Wochenrückblick nutzen!") = 1 Then Exit
    EndIf

    [/autoit]

    Bei der Zeitberechnung wirds wohl etwas schwieriger .. Irgendwo habe ich hier noch einen Denkfehler, da die bedingte Anweisung noch nciht zur entsprechenden Zeit die Variable anpasst.

    [autoit]

    If (@HOUR < 6) AND (@MIN < 50) Then
    MsgBox(0, "Keine Nachrichten", "Nachrichten erst ab" & @CRLF & "05:50 Uhr")
    ElseIf (@HOUR <9) AND (@MIN < 50) Then
    $sStd = 06
    ElseIf (@HOUR <12) AND (@MIN < 50) Then
    $sStd = 09
    ElseIf (@HOUR <16) AND (@MIN < 50) Then
    $sStd = 12
    ElseIf (@HOUR <20) AND (@MIN < 50) Then
    $sStd = 16
    ElseIf (@HOUR <24) AND (@MIN < 50) Then
    $sStd = 20
    EndIf

    [/autoit]

    EDIT:
    OK, gleich zwei Denkfehler habe ich gefunden.
    Zum einen müßendie Stunden um 1 reduziert werden, das ist ja kein Thema.
    Zum anderen werdenja die Zeiten über 50 Minuten komplett ausgeklammert :( Da muß ich wohl ganz anders vorgehen ...

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

    Einmal editiert, zuletzt von AnMa (11. September 2013 um 21:22)

  • Das mit den Abfragen ist leider etwas komplizierter.

    Dein erstes Beispiel sieht ja so aus:

    [autoit]

    If (@HOUR < 6) AND (@MIN < 50) Then

    [/autoit]


    04:59 Uhr wäre ja zum Beispiel auch vor 05:50 Uhr, würde aber nicht erkannt werden, da 59 größer als 50 ist. Du musst also all diese "Sonderfälle" durch weitere/andere Abfragen richtig erkennen können.

  • Ja genau .. das ist mir vorhin auch aufgefallen .. aber dann muß ich das ja für jede Stunde und die wechsel-Stunden zweimal schreiben. :(


    In CMD hatte ich das wie folgt gelöst.

    Etwas ähnliches gibt es in Autoit nicht oder?

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Keine Ahnung, ich habe aber eine andere Idee: Du könntest die Uhrzeit einfach in Sekunden umrechnen, dann würde das reibungslos funktionieren.

    [autoit]

    If (_() < _(5, 50)) Then
    MsgBox(0, "Keine Nachrichten", "Nachrichten erst ab" & @CRLF & "05:50 Uhr")
    ElseIf ...
    ...
    EndIf

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

    Func _($iHour=@HOUR, $iMin=@MIN)
    Return $iHour * 60 + $iMin
    EndFunc

    [/autoit]
  • Ein Blick in die Vergangenheit hat mir die einfache Lösung gebracht :)

    [autoit]

    $aktUhrzeit = (@HOUR & @MIN)

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

    If ($aktUhrzeit < 0550) Then
    If MsgBox(16, "Keine Nachrichten", "Nachrichten erst ab" & @CRLF & "05:50 Uhr") = 1 Then Exit
    ElseIf ($aktUhrzeit < 0850) Then
    $sStd = "06"
    ElseIf ($aktUhrzeit < 1150) Then
    $sStd = "09"
    ElseIf ($aktUhrzeit < 1550) Then
    $sStd = "12"
    ElseIf ($aktUhrzeit < 1950) Then
    $sStd = "16"
    ElseIf ($aktUhrzeit < 2350) Then
    $sStd = "20"
    EndIf

    [/autoit]

    Die Zeit nach 23:50 uhr ist absichtlich noch offen ....

    Aber so bekomme ich im ensprechenden Zeitfenster von zum Beispiel 05:50 uhr bis 08:50 Uhr die ensprechende Variable (in dem Fall: "06")

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Naja, wenn Du sagst das wäre gefährlich, dass lass ich ja lieber die Finger von meiner Lösung. :)


    Deinen Vorschlag habe ich jetzt erst gesehen ja, aber ich versteh ihn nicht. :(

    In der ersten Zeile rufe ich nach dem "IF" die Funktion "_" auf und gebe ihr keinen Wert mit "()" ... Richtig?

    In der Funktion werden die Stunden dann mal 60 genommen und die Minuten hinzuaddiert (Bsp: 12:16 Uhr = 12*60+16 = 736), also wird der 736 zurück gegeben.

    Was aber dann passiert entzieht sich mir komplett :( _(5, 50) <-- ??

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)