Winsound funktioniert nicht

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten

Wer nutzt was zum Sound-Machen

Winsound
1
50%
Pygame
1
50%
Tkinter
0
Keine Stimmen
andere
0
Keine Stimmen
 
Insgesamt abgegebene Stimmen: 2
koenigssphinx
User
Beiträge: 14
Registriert: Samstag 11. Mai 2013, 10:51
Kontaktdaten:

Hi an alle!
Ich habe neulich ein Spiel programmiert und möchte ihm nun Musik anfügen.
Bisher habe ich folgenden Code(für den Sound):

Code: Alles auswählen

import os
#---------------------
os.system('start datei.wav')
In meinem Buch steht, dass man dafür Winsound nutzen soll aber anscheinend will winsound den Sound nicht abspielen, da es nur in einer Reihe Windowsnachrichtentöne abspielt :K
Ich würde mich freuen, wenn jemand entweder mir sagen kann was ich falschgemacht habe oder eine Standard-Ersatz gibt

PS:
Buch heißt
Python GE-PACKT 5.Auflage mitp

Code: Alles auswählen

Königssphinx die 1. die Python kann
BlackJack

@koenigssphinx: Es kommt doch darauf an was Du sonst so verwendest für das Spiel. Wenn das zum Beispiel mit `pygame` programmiert ist, dann würde man auch *das* für die Soundausgabe verwenden und nicht noch etwas zusätzliches. `winsound` ist zwar in der Standardbibliothek, funktioniert aber im Gegensatz zu `pygame` nicht plattformunabhängig. Und das ``os.system('start sound.wav')`` funktioniert ja auch nur unter Windows. Falls der Rest des Spiels auch unter anderen Systemen funktioniert würde ich den nicht nur wegen dem Ton an Windows binden.
koenigssphinx
User
Beiträge: 14
Registriert: Samstag 11. Mai 2013, 10:51
Kontaktdaten:

Ich wollte Swampy nachprogrammieren. Der Code der Hauptdatei:

Code: Alles auswählen

# -*- coding: cp1252 -*-
from Tkinter import *
import os
os.system('start C:\\\\Python27\\tapi\\song.wav')
from sayhellototapi.level1 import *
from sayhellototapi.level2 import *
from sayhellototapi.level3 import *
from sayhellototapi.level4 import *
from sayhellototapi.level5 import *
from firstswimming.level1 import *
from firstswimming.level2 import *
from firstswimming.level3 import *
from firstswimming.level4 import *
from firstswimming.level5 import *
from hotandcold.level1 import *
from hotandcold.level2 import *
from hotandcold.level3 import *
from hotandcold.level4 import *
from hotandcold.level5 import *
from bonuslevel import *
import webbrowser as www
class Main:
    def __init__(self):
        self.tk = Tk()
        self.tk.title('Tapi\'s Water')
        self.tk['bg'] = 'blue'
        Label(self.tk, text='Sag Hallo zu Tapi', fg='white', bg='blue').grid(row=0, column=0)
        Button(self.tk, text='Level 1', command=self.level1_1).grid(row=1, column=0)
        Button(self.tk, text='Level 2', command=self.level1_2).grid(row=2, column=0)
        Button(self.tk, text='Level 3', command=self.level1_3).grid(row=3, column=0)
        Button(self.tk, text='Level 4', command=self.level1_4).grid(row=4, column=0)
        Button(self.tk, text='Level 5', command=self.level1_5).grid(row=5, column=0)
        Label(self.tk, text='Erster Schwimmunterricht', fg='white', bg='blue').grid(row=0, column=1)
        Button(self.tk, text='Level 1', command=self.level2_1).grid(row=1, column=1)
        Button(self.tk, text='Level 2', command=self.level2_2).grid(row=2, column=1)
        Button(self.tk, text='Level 3', command=self.level2_3).grid(row=3, column=1)
        Button(self.tk, text='Level 4', command=self.level2_4).grid(row=4, column=1)
        Button(self.tk, text='Level 5', command=self.level2_5).grid(row=5, column=1)
        Label(self.tk, text='Heiß und Kalt', fg='white', bg='blue').grid(row=0, column=2)
        Button(self.tk, text='Level 1', command=self.level3_1).grid(row=1, column=2)
        Button(self.tk, text='Level 2', command=self.level3_2).grid(row=2, column=2)
        Button(self.tk, text='Level 3', command=self.level3_3).grid(row=3, column=2)
        Button(self.tk, text='Level 4', command=self.level3_4).grid(row=4, column=2)
        Button(self.tk, text='Level 5', command=self.level3_5).grid(row=5, column=2)
        Button(self.tk, text='Bonuslevel', command=self.bonus).grid(row=3, column=3)
        Button(self.tk, text='Buy Fullversion', state=DISABLED, command=self.buyfullversion).grid(row=5, column=3)
        self.tk.mainloop()
    def level1_1(self):
        Level1_1()
    def level1_2(self):
        Level1_2()
    def level1_3(self):
        Level1_3()
    def level1_4(self):
        Level1_4()
    def level1_5(self):
        Level1_5()
    def level2_1(self):
        Level2_1()
    def level2_2(self):
        Level2_2()
    def level2_3(self):
        Level2_3()
    def level2_4(self):
        Level2_4()
    def level2_5(self):
        Level2_5()
    def level3_1(self):
        Level3_1()
    def level3_2(self):
        Level3_2()
    def level3_3(self):
        Level3_3()
    def level3_4(self):
        Level3_4()
    def level3_5(self):
        Level3_5()
    def bonus(self):
        LevelB()
    def buyfullversion(self):
        www.open('http://store.paulstrobach.de/tapi-full/buy.html')
if __name__ == '__main__':
    Main()
Ausserdem würde ich gerne eine Plattformunabhänige Version wissen, die aber trotzdem in der Standardbibliothek ist.

Danke aber, KOENIGSSPHINX
BlackJack

Falls damit das Spiel hier gemeint ist: http://www.disney.co.uk/disney-games/pl ... -my-water/ dann hast Du Dir für einen Anfänger IMHO ganz schön viel vorgenommen, beziehungsweise IMHO zu viel. Das ist ein Spiel mit einem ziemlich frei gestaltbaren Spielfeld in Vektorgrafik und mit einer physikalischen Simulation von dem Wasser. Vereinfachte Spielphysik, aber immerhin.

Bei dem Quelltext fällt auf dass sehr viel wiederholt eingegeben oder kopiert wurde mit nur kleinen Änderungen. Du schreibst Code für Dinge die eigentlich in einer Datenstruktur abgebildet werden sollten und nicht in statischem Quelltext. Die Level zum Beispiel würde man in einer verschachtelten Datenstruktur speichern für Haupt- und Unterlevel, so dass man statt ``Level2_5()`` zum Beispiel ``levels[1][4]()`` schreiben kann, beziehungsweise ganz allgemein ``levels[main_level_number][sublevel_number]()``. Dann braucht man nur noch eine Methode um ein Level aufzurufen, welche die beiden Nummern übergeben bekommt, und die Schaltflächen dafür könnte man in einer Schleife erzeugen und muss nicht für jede den Quelltext hinschreiben. Andererseits könnte man dann auch gleich das Level selber an die Schaltfläche binden ohne dass man den Umweg über die Indizes gehen muss.
Antworten