2008-10-28 15 views
10

Für das Computerspiel, das ich mache, möchte ich natürlich Sound zu spielen. Bis jetzt habe ich AudioClip verwendet, um WAV-Dateien abzuspielen. Während dieser Ansatz gut funktioniert, sind die WAV-Dateien eher gigantisch. Ein paar Sekunden Sound enden mit hunderten von kB. Ich bin konfrontiert mit einem Spiel-Download, der 95% Audio ist!Spielen von kleinen Sounds in Java Spiel

Die naheliegende Option wäre hier MP3 oder Ogg Vorbis zu verwenden. Aber ich hatte damit begrenzten Erfolg - ich kann MP3 mit JLayer abspielen (aber es spielt im selben Thread). Was Ogg betrifft, ich hatte überhaupt kein Glück. Schlimmer noch, JLayers legaler Status ist ein bisschen auf der zweifelhaften Seite.

Meine Frage ist also sowohl an Java-Entwickler als auch an Leute, die etwas über Sound wissen: Was mache ich? Kann ich irgendwie das Fett von meinen WAVs "abschneiden"? Gibt es eine Möglichkeit Ogg in Java zu spielen? Gibt es ein anderes Tonformat, das ich stattdessen verwenden sollte?

Antwort

4

Sie können JOrbis Bibliothek verwenden, um OGG-Musik wiederzugeben. Für die Arbeit mit Beispielanwendungen können Sie diese Dateien ansehen here.

Ich experimentierte auch mit einigen verlustfreien Audiokompression, zum Beispiel hatte ich einen 16-Bit-Mono-Sound. Ich habe die oberen und unteren Bytes jeder Probe getrennt und sie nacheinander angeordnet. Dann habe ich eine differenzielle Ersetzung angewendet, bei der jedes Byte durch seine Differenz vom letzten Byte ersetzt wird. Und schließlich GZIP verwendet, um die Daten zu komprimieren. Ich konnte die Datengröße auf 50-60% der ursprünglichen Größe reduzieren. Leider war das nicht genug, also wandte ich mich dem OGG-Format zu.

Eine Sache, die ich mit 8-Bit-Musik bemerkte, ist, dass wenn ich die Lautstärke ändere, die Wiedergabe sehr laut wird. Ich löste dieses Problem, indem ich die Audiodaten direkt vor der SourceDataLine.write() auf 16 Bit upsamte.

+0

Brilliant! Ich habe Jörbis schon einmal angeschaut, aber sein scheinbarer Mangel an Dokumentation ließ mich nicht herausfinden, wie man es tatsächlich auf eine .ogg-Datei zeigt und Geräusche aus dem Lautsprecher kommen lässt. – Zarkonnen

+0

Ich habe JOrbis, VorbisSPI und Tritonus-Share in einer einzigen Bibliothek zusammengestellt, damit Sie die Java Sound API (AudioSystem) zum Dekodieren von Java-Dateien verwenden können. [Link] (http://www.twelvep.de/vorbis/) – Trilarion

2

Das von Ihnen beschriebene Problem wird von der Service Provider Interface (SPI) für Sound in Java behoben. Das Ergebnis ist, dass das Hinzufügen von JAR-Dateien zum Klassenpfad die Funktionalität der Standard-Java-Sound-API erweitert. So können Sie mehr Klangformate bearbeiten, ohne den Code zu ändern.

Letztes Mal probierte ich die Javazoom Leute an, die ein funktionierendes MP3 SPI JAR anboten. Was auf dem von Ihnen erwähnten JLayer basierte.

Für Vorbis OGG scheint es jetzt auch eine SPI-Bibliothek zu geben. Schauen Sie sich die Dokumentation auf Vorbis SPI auf Javazoom.

2

Wenn Sie sich entscheiden, mit WAV-Format ...

Es ist wahrscheinlich nicht sehr wichtig, um qualitativ hochwertige Sound-Dateien zu bleiben. Sie können Ihren bevorzugten Wav-Editor verwenden, um die Bitrate zu verringern, zu mono zu wechseln oder beides. Das spart viel Platz und Sie werden den Qualitätsunterschied beim Spielen nicht bemerken.

Hoffe, das hilft.

Verwandte Themen