ich bin noch reltaiv neu bei Python, habe aber schon allgemeine Programmiererfahrung.
Zur Problembeschreibung muss ich etwas weiter ausholen:
Mein Vater baut momentan das RC Modell und möchte dafür nun ein eigenes Sound-Modul entwickeln (um den Sound authentisch hin zu bekommen). Ich möchte ihm dabei helfen.
Das ganze soll wie folgt funktionieren:
Er hat von seinem Traktor das Motor-Geräusch in unterschiedlichen Last-Zuständen aufgezeichnet. Immer 3 Umdrehungen des Motors hat er dann in eine WAV-Datei gepackt. Diese Dateien sind etwa 230 Millisekunden lang.
Mit einem Sensor möchte er dann den aktuellen Stromverbrauch des Elektromotors im Modell messen, das passende Soundfile raussuchen und abspielen. Während dieses dann abgespielt wird muss wieder der Stromverbrauch gemessen werden, das nächste Soundfile rausgesucht und dann möglichst lückenlos nach dem ersten abgespielt werden. Dann geht es immer so weiter.
Diese Probleme sehe ich momentan dabei:
Die Pause zwischen den einzelnen Files darf allerhöchstens 10ms betragen (kürzer = besser). Ansonsten hört es sich nicht mehr "rund" an. Die Dateien dürfen sich natürlich auch nicht überschneiden ("negative" Pause).
Außerdem sind nicht alle Soundfiles gleich lang, denn wenn mehr Gas gegeben wird ändert sich die Drehzahl des Motors und damit die Länge der Datei.
Ich habe mittels pygame schon Soundfiles abgespielt:
Code: Alles auswählen
import pygame
pygame.mixer.init(frequency=22050, size=-16, channels=2, buffer=128)
sound0 = pygame.mixer.Sound("T00.wav")
sound0.set_volume(1)
sound0.play()
Folgenden Lösungsansatz könnte ich mir jetzt vorstellen:
- Die Länge jedes Files ist bekannt und kann in einer Variablen gespeichert werden.
- Es gibt eine Unterfunktion (neuer Thread? neuer Prozess?) die einfach nur ein übergebenes File abspielen kann.
- Der Hauptprozess weiß ja, wann er die Unterfunktion gestartet hat und er weiß die Länge des Soundfiles. Also weiß er auch, wann das nächste File abgespielt werden muss.
- Gibt es eine Möglichkeit eine Funktion zu einem bestimmten Zeitpunkt ausführen zu lassen?
- Wie würdet ihr an dieses Problem rangehen?
Ich bräuchte ein paar Ansätze nach was ich googeln soll, momentan komme ich leider nicht weiter.
Gruß
Marius