Seite 1 von 1
Ton in Pygame
Verfasst: Freitag 18. Juni 2021, 08:45
von willy
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?
Re: Ton in Pygame
Verfasst: Freitag 18. Juni 2021, 08:48
von __deets__
Du musst dekodieren. Nicht enkodieren. Dein online Tool enkodiert auch. Nicht dekodiert.
Re: Ton in Pygame
Verfasst: Freitag 18. Juni 2021, 15:22
von willy
sound1 = pygame.mixer.Sound(base64.b64decode(b'UklGRqKSAABXQVZFZm10IBAA......A/w=='))
ist leider ach nicht die Lösung.
Re: Ton in Pygame
Verfasst: Freitag 18. Juni 2021, 15:46
von __deets__
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.
Re: Ton in Pygame
Verfasst: Freitag 18. Juni 2021, 17:22
von willy
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.
Re: Ton in Pygame
Verfasst: Freitag 18. Juni 2021, 19:23
von Sirius3
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.
Re: Ton in Pygame
Verfasst: Freitag 18. Juni 2021, 19:46
von willy
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.
Re: Ton in Pygame
Verfasst: Samstag 19. Juni 2021, 09:55
von __deets__
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.
Re: Ton in Pygame
Verfasst: Samstag 19. Juni 2021, 11:55
von willy
Danke für die Antwort und die Mühe.