PyGame

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.
Beltistos
User
Beiträge: 5
Registriert: Dienstag 20. November 2007, 17:56

Donnerstag 22. November 2007, 17:56

Hi,

wenn ich über PyGame Musik (mp3 und ogg, den Rest habe ich nicht ausprobiert) abspielen will, höre ich im Hintergrund immer so eine Art Rauschen. Woran liegt das? An mir? An PyGame? An SDL?

Mein Code:

Code: Alles auswählen

import pygame
from pygame.mixer import music
import time

pygame.mixer.init()
music.load('/home/beltistos/Test.mp3')
music.play()
time.sleep(5)
music.stop()
pygame.mixer.quit()
Beltistos
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Donnerstag 22. November 2007, 18:38

Ähem, ich weiß es jetzt nicht konkret, aber gestalte den Code doch ein bisschen sauberer. Du musst music nicht extra importieren etc.

Code: Alles auswählen

import pygame
from pygame.locals import
pygame.init()
reicht vollkommen aus und ist flexibler. Das mixer.quit() ist glaube ich außerdem auch überflüssig. Probiers dann einfach nochmal.
Beltistos
User
Beiträge: 5
Registriert: Dienstag 20. November 2007, 17:56

Donnerstag 22. November 2007, 19:21

Danke für die Antwort.
Irgendwie verstehe ich nicht, was
from pygame.locals import
heißen soll? Ich glaube, dahinter fehlt irgendwas, kann mir aber nicht vorstellen, was das sein könnte.
Nur zum Verständnis: Was ist daran unsauber, music zu importieren? Ist zumindest weniger zu schreiben.
Und ja, ich bin Python-Anfänger
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Donnerstag 22. November 2007, 19:36

Oh sorry, hinter dem import fehlr ein *. Nun es heißt, dass ein paar Konstanten und Funktionen in das Script eingebunden werden. Für ausführlichere Informationen zum importieren und initiieren von pygame lies dir doch einfach mal das hier durch: http://www.pygame.org/docs/tut/ImportInit.html

Music zu importieren ist von daher unsauber, dass es durch import pygame ja schon importiert wurde. Music so wie du es gemacht hast zu importieren gibt nur dann Sinn, wenn du lediglich das Musicmodul verwenden willst. Und kein richtiges Spiel machen willst.
Beltistos
User
Beiträge: 5
Registriert: Dienstag 20. November 2007, 17:56

Donnerstag 22. November 2007, 21:11

Imperator hat geschrieben:Music zu importieren ist von daher unsauber, dass es durch import pygame ja schon importiert wurde. Music so wie du es gemacht hast zu importieren gibt nur dann Sinn, wenn du lediglich das Musicmodul verwenden willst. Und kein richtiges Spiel machen willst.
Will ich auch eigentlich nicht. Es war nur die einfachste Möglichkeit, Musik abzuspielen. Wenn ich aber nur music importiere, komme ich ja nicht mehr an das init() von pygame bzw. pygame.mixer ran. Dann importiere ich einfach pygame.mixer und schreib dann ich halt bisschen mehr, wenn es dadurch besser wird. Danke.
Meine eigentliche Frage ist aber noch nicht beantwortet: Woher kommt das Rauschen und wie kriege ich es weg?

Beltistos
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Donnerstag 22. November 2007, 21:23

Imperator: *-Imports sind gaaanz böse und gaaanz weit von "sauber" entfernt.

Folgendes könnte man aber machen:

Code: Alles auswählen

import time

from pygame import mixer


mixer.init()
mixer.music.load('/home/beltistos/Test.mp3')
mixer.music.play()
time.sleep(5)
mixer.music.stop()
mixer.quit()
Letztlich ist das aber recht egal und hängt auch von dem Rest ab, den man in dem Modul noch zu importieren gedenkt.


Beltistos: Was es mit dem Rauschen auf sich hat, weiß ich leider nicht. Ich würde da als erstes die Lautstärke sowie eventuelle Einschränkungen der nutzbaren Bitraten, VBR sowie andere Eigenschaften der Musikdaten überprüfen.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Donnerstag 22. November 2007, 23:21

Ich behaupte jetzt einfach mal dass das time.sleep für Probleme sorgt, ersetze es doch einfach einmal Testweise durch ein while True: pass;
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Freitag 23. November 2007, 11:51

Interessanter Einwand. Gibt es in Pygame nicht auch eine Timer-Funktionalität? Mit dieser Tritt das Phänomen möglicherweise nicht auf.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Freitag 23. November 2007, 14:37

Y0Gi hat geschrieben:Imperator: *-Imports sind gaaanz böse und gaaanz weit von "sauber" entfernt.
Dann sag doch bitte eine Alternative zu from pygame.locals import*
das wird in jedem Tutorial so gemacht.

@Topic: Pygame hat tatsächlich einige zeitfunktionen zu bieten. In diesem Fall dürfte die hier die Richtige sein:

Code: Alles auswählen

pygame.time.wait(milliseconds)
BlackJack

Freitag 23. November 2007, 14:52

Na die Alternative ist es das eben *nicht* zu tun und alles was man haben möchte explizit zu importieren.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Freitag 23. November 2007, 15:29

BlackJack hat geschrieben:Na die Alternative ist es das eben *nicht* zu tun und alles was man haben möchte explizit zu importieren.
Von dem Statement, dass * böse mal sind, abgesehen, was spricht _in diesem Fall_ dagegen? Das locals-ding enthält ausschliesslich konstanten und scheint mir eigentlich genau dafür gemacht zu sein.
BlackJack

Freitag 23. November 2007, 15:56

Geschmackssache. Die ca. 240 Namen, die man da importiert, wird man sicher nicht alle brauchen.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 23. November 2007, 16:18

Schon seit ewig in meinen Code:

Code: Alles auswählen

import pygame.locals as pyl
Funktioniert, nicht viel Tipparbeit, Namespaces, sauber.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Freitag 23. November 2007, 18:41

Interessant. Muss man dann was spezielles beachten beim Coden?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 23. November 2007, 18:44

Imperator hat geschrieben:Interessant. Muss man dann was spezielles beachten beim Coden?
Nein, was denn auch. Es macht nichts magisches, es importiert nur die Locals in einen eigenen Namespace.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten