Sound abspielen ohne Verzögerung in der Ausführung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kahnbein.Kai
User
Beiträge: 104
Registriert: Mittwoch 24. Juni 2015, 14:12
Wohnort: Bochum

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Kahnbein.Kai
User
Beiträge: 104
Registriert: Mittwoch 24. Juni 2015, 14:12
Wohnort: Bochum

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
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Und die Zeit die ein sleep von 1 Sekunde und ein playsound braucht sind halt 1.1 Sekunden.
Antworten