2009-03-07 5 views
4

Gegenwärtig verfügt SDL_Mixer über zwei Arten von Soundressourcen: Chunks und Musik.Ausführen von Musik als SDL_Mixer-Chunks

Abgesehen von der API und unterstützten Formaten Einschränkungen, gibt es keine Gründe, Musik nicht als SDL_Chunk und Kanal zu laden und abzuspielen? (Speicher, Geschwindigkeit usw.)

Antwort

1

Die API ist das eigentliche Problem. Die "Musik" -APIs sind dafür ausgelegt, komprimierte Musik zu streamen, während die "Sound" -APIs dies nicht tun. Wenn es Ihnen gelingt, es in Ihrer App zum Laufen zu bringen, funktioniert es.

+0

Also, mit großen Sound-Musik-Dateien, die Musik-API ist schneller zu laden als die Sound-API ...? – luiscubal

+0

Ich denke schon. Es ist eine Weile her, seit ich mit SDL_Mixer gearbeitet habe. Ich dachte nur, ich würde versuchen, etwas beizutragen, da niemand sonst irgendwas hier beantwortet ... –

+0

Ich glaube nicht, dass es darum geht, schneller zu laden, ich denke, es geht darum, Speicher zu sparen. Roh-PCM-Daten sind sehr teuer. Einen Musikstream zu dekomprimieren und zu spielen, ist rechenintensiver als nur das Abspielen, aber er spart viel Platz. – notlesh

1

Ich habe nicht auf den SDL-Code geschaut, aber meine Vermutung wäre, dass die "Chunks" für kleinere Soundsamples gedacht sind und vollständig im Speicher zwischengespeichert werden, während die "Musik" gestreamt wird (nicht vollständig im Speicher zwischengespeichert, aber je nach Bedarf decodiert und gepuffert, mit der Annahme, dass es größtenteils von Anfang an und kontinuierlich von diesem Punkt an abgespielt wird, wobei einige gelegentlich wieder auf den Anfang zurückgestellt werden)

Der Grund ist Speicher. Du willst nicht sagen, 4 Minuten eines 16-Bit-Stereo-Songs in den Speicher zu entschlüsseln, da es 44100Hz * 2bytes * 2channels * 4minutes * 60sec/min = 42366000 byte beim Versuch, dekodieren und dekadieren lässt puffern kleinere Stücke davon.

OTOH, wenn Sie die ~ 10MB RAM pro Minute Musik zu verschwenden haben und Sie die CPU benötigen, die von der on-the-fly Dekodierung verbraucht würde ... könnten Sie wahrscheinlich Brocken verwenden.