Ton in Pygame

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
willy
User
Beiträge: 5
Registriert: Freitag 18. Juni 2021, 07:56

Der folgende Code macht einen Ton
import pygame
import base64

pygame.init()
sound1 = pygame.mixer.Sound('cow.wav')
sound1.set_volume(1.0)
sound1.play()
Ich möchte keine externe Datei verwenden.
Ein online wav-to-base64 converter dekodiert "cow.wav" in
UklGRqKSAABXQVZFZm10IBAA......A/w== (viele Bits)

Einfach ersetzen von
sound1 = pygame.mixer.Sound('cow.wav')
durch
sound1 = pygame.mixer.Sound(base64.b64encode(b'UklGRqKSAABXQVZFZm10IBAA......A/w=='))
ist nicht richtig.

Was mache ich falsch?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst dekodieren. Nicht enkodieren. Dein online Tool enkodiert auch. Nicht dekodiert.
willy
User
Beiträge: 5
Registriert: Freitag 18. Juni 2021, 07:56

sound1 = pygame.mixer.Sound(base64.b64decode(b'UklGRqKSAABXQVZFZm10IBAA......A/w=='))

ist leider ach nicht die Lösung.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was heisst "ist auch nicht die Loesung"? Bekommst du eine Fehlermeldung? Wenn ja, wie sieht die aus.

Das Prinzip von En/Dekodierung ist in jedem Fall vorher falsch gewesen. Wenn es jetzt also nicht geht, dann muss da was anderes faul sein.
willy
User
Beiträge: 5
Registriert: Freitag 18. Juni 2021, 07:56

Ich bekomme keine Fehlermeldung.
Der Ton stimmt nich.
Naja, was kann ich noch mehr dazu sagen.
Cow.was sagt muh, die dekodierte Version sagt pluff.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann ist dein Ton nicht richtig Bach base64 umgewandelt. Wie hast du das gemacht?
Mach sas doch mit Python und nicht mit irgendeinem online-Tool.
willy
User
Beiträge: 5
Registriert: Freitag 18. Juni 2021, 07:56

Ich habe es auch in Python gemacht.
Kein Unterschied.
Die Datei cow.wav einlesen, konvertieren (encode/decode) und wieder speichern als cow2.wav geht gut.
cow2.wav und cow.wav sind gleich.
Also in dem Programm geht etwas schief.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn man der Dokumentation folgt, dann geht's halt so nicht: https://www.pygame.org/docs/ref/mixer.h ... ixer.Sound

Der denkt das ist ein Buffer mit Samples, nicht ein WAV-File. Du kannst das also entweder versuchen, in ein file-like object zu wandeln, via https://docs.python.org/3/library/io.html#io.BytesIO. Oder schreibst einen eigenen Konverter, der mit get_raw die wirklichen Bytes extrahiert, und die kann man dann denke ich base64 en/dekodieren.
willy
User
Beiträge: 5
Registriert: Freitag 18. Juni 2021, 07:56

Danke für die Antwort und die Mühe.
Antworten