wav-Datei in PyGame abspielen

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
ahorn6
User
Beiträge: 13
Registriert: Samstag 19. Dezember 2020, 09:39

Hallo allen!

Ich bin neu hier aber schon alt, ich habe schon mit der Z22 gerechnet und verstehe nur Linux.
Ich möchte pygame nutzen und versuche ein Script aus dem Netz zu verwenden, um mich in pygame einzuarbeiten.

Das Script verwendet die Anweisung:

Code: Alles auswählen

crash_sound = pygame.mixer.Sound("test.wav") 
wobei die test.wav-Datei von mir stammt.
Ich erhalte den Fehlerkommentar

Code: Alles auswählen

Unable to open file 'test.wav'
Die wav-Datei lässt sich anderweitig abspielem.
Ich bin davon ausgegangen, dass, wenn das verwendete Script und die wav-Datei im selben Ordner stehen, die gewählte
Addressierung korrekt ist.

Könnte es sein, dass ich weitere Module installieren muss und welche müssten das sein? Ich verwende Mint20

Gruß Erich
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ob die Datei gefunden wird, hängt vom Arbeitsverzeichnis ab. Nicht relativ zum Skript. Benutze einen absoluten Pfad, oder baue dir eine passenden mit pathlib und der Variable __file__ die den Pfad des Skriptes enthält zusammen.
ahorn6
User
Beiträge: 13
Registriert: Samstag 19. Dezember 2020, 09:39

Danke für die Antwort
auch

Code: Alles auswählen

crash_sound = pygame.mixer.Sound("/home/erich/Test/test.wav")
gibt denselben Fehler
pwd gibt

Code: Alles auswählen

/home/erich/Test
Gruß Erich
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ahorn6: Bei Fehlern bitte immer den kompletten Traceback zeigen. Dann hätten wir beispielsweise schon mal gesehen, dass es *kein* `FileNotFoundError` ist. Also stimmt etwas mit dem Dateiinhalt nicht. Es ist kein Wave, oder es enthält Daten mit denen Pygame nichts anfangen kann. Was sagt denn ``file`` zu der WAV-Datei?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
ahorn6
User
Beiträge: 13
Registriert: Samstag 19. Dezember 2020, 09:39

Hallo

Code: Alles auswählen

erich@erich-pc:~/Test$ python3 sound.py 
pygame 2.0.0 (SDL 2.0.12, python 3.8.5)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
  File "sound.py", line 8, in <module>
    crash_sound = pygame.mixer.Sound("/home/erich/Test/test.wav")
pygame.error: Unable to open file '/home/erich/Test/test.wav'
erich@erich-pc:~/Test$ pwd
/home/erich/Test
Die test.wav-Datei wird gefunden; pygame.mixer.Sound kann die Datei allem Anschein nach nicht auswerten; ich habe die Datei mit timidity aus einer Midi-Datei erzeugt und kann sie auch abspielen, wie ich schon eingangs geschrieben hatte. Ich habe schon hunderte solcher Dateien erzeugt; sie waren immer abspielbar.
könnte es sein, dass ich nicht alle erforderlichen Module installiert habe?

Gruß
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein, das kann nicht durch weitere Module gelöst werden. Kannst du mal eine andere wav Datei, die du nicht selbst erstellt hast, ausprobieren? Und was sagt das file command, das blackjack vorgeschlagen hat?
ahorn6
User
Beiträge: 13
Registriert: Samstag 19. Dezember 2020, 09:39

hier die Antwort:

Code: Alles auswählen

erich@erich-pc:~/Test$ file test.wav 
test.wav: MPEG ADTS, layer III, v1, 128 kbps, 44.1 kHz, JntStereo
ahorn6
User
Beiträge: 13
Registriert: Samstag 19. Dezember 2020, 09:39

Hallo,

ich habe es mal mit einer anderen Datei versucht, dann trat der Fehler nicht mehr auf; ich bin damit aber noch nicht viel weiter.
Ich habe nun eine Bitte, kann mit der eine oder die andere von euch ein kurzes pygame-Programm zeigen mit einer Schaltfläche, die man anklicken kann, und es spielt dann eine wav-Datei ab.

Gruß Erich
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ahorn6: Nun, Deine ”Wav”-Datei ist ja ganz offensichtlich keine. ``file`` sagt das ist eine MP3-Datei. Also nicht einmal MP3 in einem WAV-Container sondern wirklich reines MP3. Nur weil man eine Dateiendung .wav nennt, macht den Dateiinhalt nicht automagisch dann auch tatsächlich zu einer WAV-Datei.

Du müsstest bei `timidity` die Option `-Ow` verwenden um eine normale (PCM-)WAV-Datei zu erstellen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
ahorn6
User
Beiträge: 13
Registriert: Samstag 19. Dezember 2020, 09:39

Hallo _blackjack_

Ich habe noch mal nachgesehen, wie mein timidity-Aufruf war; das ließ sich rekonstruieren:

Code: Alles auswählen

timidity -Ow -o - test-wav.midi | lame - test-wav.wav
wo sich dann der Fehler eingeschlichen hat, kann ich nicht mehr nachvollziehen.

Aber vielleicht schreibt mir noch mal eine*r ein kleines Testscript, wie ich es oben angedeutet habe; das würde mir in meinem Vorhaben sicher helfen.

Gruß Erich
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ahorn6: Ähm, der Fehler ist doch offensichtlich: Du lässt ``timidity`` WAV schreiben und kodierst das dann mit ``lame`` nach MP3, nennst die Datei dann aber verwirrenderweise ``test-wav.wav``. Wenn Du PCM-WAV haben willst, darfst Du halt nicht nach MP3 kodieren.

Falls Dir so eine WAV-Datei zu gross ist, kannst Du ``timidity`` auch gleich eine Datei im Ogg Vorbis-Format schreiben lassen. Das sollte Pygame auch abspielen können.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
ahorn6
User
Beiträge: 13
Registriert: Samstag 19. Dezember 2020, 09:39

Ich hatte gelesen, dass pygame eine mp3-Datei nicht immer sicher verarbeitet; ich würde lieber eine komprimierte Audio-Datei als eine wav-Datei verwenden; ist das mit ogg sicherer als mit mp3?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Keine Ahnung was du da gelesen hast. Ist mir neu. Aber ein MP3 als WAV zu verkleiden ist halt ein Fehler.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@__deets__: MP3 ist halt was was Linux-Distributionen mal ganz gerne in Extrapakete verschieben oder bei bestimmter Software auch ganz weglassen, wegen Patenten/nicht-freier Software und so. Timidity kann beispielsweise kein MP3 erzeugen, Ogg Vorbis schon.

Die Pygame-Dokumentation sagt dazu: „Be aware that MP3 support is limited. On some systems an unsupported format can crash the program, e.g. Debian Linux. Consider using OGG instead.“
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

AFAIK sind die Patente ausgelaufen. Deshalb haben wir es auch in unserer Audio Software eingebaut. Aber kann natürlich sein, dass die Distros da hinterher hängen.
Antworten