pygame - play sound/music: grundlegegende Verständnisfragen

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
djh
User
Beiträge: 7
Registriert: Samstag 5. Februar 2011, 09:28

Hallo Leute,

sorry, newby-Frage, aber ich habe da offenbar etwas Grundlegendes nicht verstanden. Ich will aus einem Python-Script eine sound-Datei abspielen. Beim Stöbern im Internet bin ich daher auf pygame gestossen und ein ganz einfaches Bsp.-Programm. Wenn ich folgende Zeilen im interaktiven Modus dem Python-Interpreter übergebe, funktioniert das auch, aber wenn sie als Skript.py abspeichere und ausführen will, funktioniert das nicht.

so gehts:

Code: Alles auswählen

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pygame
>>> pygame.init()
(6, 0)
>>> pygame.mixer.music.load('/home/dirk/sounds/gong.wav')
>>> pygame.mixer.music.play()
>>> 
so nicht:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

import pygame
pygame.init()
pygame.mixer.music.load("/home/dirk/sounds/gong.wav")
pygame.mixer.music.play()

# das hier war ein anderes Experiment - das funktioniert allerdings
#import subprocess
#subprocess.call("play /home/dirk/sounds/gong-chinese.wav", shell=True)

print "ende"
Das Skript läuft ohne Fehlermeldung bis zur Ausgabe von "ende" durch, aber ich höre nix!? Kann mir da einer vielleicht etwas auf die Sprünge helfen? Danke im voraus,
Grüße, Dirk
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

djh hat geschrieben:Das Skript läuft ohne Fehlermeldung bis zur Ausgabe von "ende" durch, aber ich höre nix!? Kann mir da einer vielleicht etwas auf die Sprünge helfen?
Ich vermute mal, dass die Soundausgabe beim Beenden des Programms direkt abgebrochen wird. Bau doch mal am Ende einfach noch ein sleep oder ein raw_input ein um das Programm länger laufen zu lassen.
djh
User
Beiträge: 7
Registriert: Samstag 5. Februar 2011, 09:28

Ah - danke! Sowohl raw_input als auch time.sleep(0) vor dem print-ende-Statement hilft hier ab.

So richtig verstehe ich das aber nicht: "wartet" das Statement nicht darauf, daß das vorhergehende abgearbeitet ist?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

djh hat geschrieben:So richtig verstehe ich das aber nicht: "wartet" das Statement nicht darauf, daß das vorhergehende abgearbeitet ist?
Nein, offensichtlich nicht. Es ist auch typischerweise nicht sinnvoll das Programm einzufrieren nur um Musik oder Sounds abzuspielen.

Stell dir einen Ego-Shooter vor. Du schießt die Pistole ab, dann wird der passende Sound abgespielt und währenddessen friert das Bild ein bis der Sound vorbei ist. Das wäre dann zwar eine einerseits interessante, andererseits aber völlig unbrauchbare Spielweise. Folglich erfolgt das Abspielen asynchron.
djh
User
Beiträge: 7
Registriert: Samstag 5. Februar 2011, 09:28

Hmmja, in dem Zusammenhang leuchtet das ein. So gesehen ist das ja ganz pfiffig gelöst. :)

(A propos gelöst: Muß/kann ich den thread irgendwo als gelöst markieren? Seh's grad' nicht.)
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

djh hat geschrieben:(A propos gelöst: Muß/kann ich den thread irgendwo als gelöst markieren? Seh's grad' nicht.)
Nein, muss man hier zum Glück nicht.
Antworten