Seite 1 von 1

Sound abspielen ohne Verzögerung in der Ausführung

Verfasst: Donnerstag 18. Juni 2020, 18:03
von Kahnbein.Kai
Hallo,
ich möchte mehrere Töne nach einer bestimmten Zeit abspielen.
Es soll z. B. ein Countdown ablaufen, von der 3 bis zur 0 Sekunde soll bei jeder vollen Sekunde ein beep abgespielt werden.
Zum abspielen des Tones nutze ich playsound, das mit dem Argument "0" wohl im Hintergrund ausgeführt werden kann.
Hier ist mein Code zum Testen:

Code: Alles auswählen

from playsound import playsound
import time as time

x = 5

for i in range(1,x+1):
    print(f"Iteration: {i}")
    start = time.time()
    time.sleep(1)
    end = time.time()
    print(f"Sek: {end-start:.3f}")
      
for i in range(1,x+1):
    print(f"Iteration mit Sound: {i}")
    start = time.time()
    time.sleep(1)
    if i > x-3:
        playsound('C:/Users/Kai/Downloads/beep-02_b.mp3', 0) 
        end = time.time()
        print(f"Sek mit Sound: {end-start:.3f}")
    else:
        end = time.time()
        print(f"Sek mit Sound: {end-start:.3f}")
Dabei wird folgende Ausgabe erzeugt:

Code: Alles auswählen

Iteration: 1
Sek: 1.000
Iteration: 2
Sek: 1.000
Iteration: 3
Sek: 1.000
Iteration: 4
Sek: 1.000
Iteration: 5
Sek: 1.000
Iteration mit Sound: 1
Sek mit Sound: 1.000
Iteration mit Sound: 2
Sek mit Sound: 1.000
Iteration mit Sound: 3
Sek mit Sound: 1.104
Iteration mit Sound: 4
Sek mit Sound: 1.046
Iteration mit Sound: 5
Sek mit Sound: 1.044
Man sieht das die Zeit beim Ausführen länger wird wenn der Ton abgespielt wird.
Ist es möglich einen Ton abzuspielen und die Ausführungsdauer bei 1 Sekunde zu belassen ?
Oder ist meine Meßmethode evtl. falsch und es wird die CPU Zeit oder so was ausgegeben ?

Gruß Kai

Re: Sound abspielen ohne Verzögerung in der Ausführung

Verfasst: Donnerstag 18. Juni 2020, 18:09
von __deets__
Deine messmethode ist korrekt. Dein warten ist falsch. Du denkst eine Sekunde zu schlafen würde eine Sekunde schlafen. Das stimmt nicht. Es ist meistens länger, und du akkumulierst einen Fehler. Mit dem Sound hat das an sich nix zu tun.

Stattdessen musst du ausrechnen vom Startpunkt, wann der nächste Zeitpunkt ist, an dem du aufwachen willst. Und dann nur die Differenz lang warten! Damit kompensierst du die Fehler.

Re: Sound abspielen ohne Verzögerung in der Ausführung

Verfasst: Sonntag 21. Juni 2020, 19:02
von Kahnbein.Kai
Hallo __deets__,
Danke für deine Antwort. leider verstehe ich diese nicht ganz. Warum ist es meist länger wenn ich 1 Sekunde schlafe ? Ohne Sound stimmt die Zeit des Wartens auf drei Nachkommestellen.
Wenn ich von 12:00:00 bis 12:00:01 Schlafen möchte, ist die Differenz doch 1 Sekunde ?

Gruß Kai

Re: Sound abspielen ohne Verzögerung in der Ausführung

Verfasst: Sonntag 21. Juni 2020, 19:12
von Sirius3
Und die Zeit die ein sleep von 1 Sekunde und ein playsound braucht sind halt 1.1 Sekunden.