OSDN Git Service

[fixed] part of issue 301, Mp3, Ogg and Wav now preload in the constructor (== call...
authorbadlogicgames <badlogicgames@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Mon, 20 Jun 2011 14:02:22 +0000 (14:02 +0000)
committerbadlogicgames <badlogicgames@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Mon, 20 Jun 2011 14:02:22 +0000 (14:02 +0000)
[todo] have audio update on separate thread. possible thread contention.

backends/gdx-openal/src/com/badlogic/gdx/backends/openal/Mp3.java
backends/gdx-openal/src/com/badlogic/gdx/backends/openal/Ogg.java
backends/gdx-openal/src/com/badlogic/gdx/backends/openal/Wav.java
tests/gdx-tests-jogl/src/com/badlogic/gdx/tests/jogl/JoglDebugStarter.java
tests/gdx-tests/src/com/badlogic/gdx/tests/MusicTest.java

index b468a42..acfe066 100644 (file)
@@ -39,6 +39,18 @@ public class Mp3 {
 \r
                public Music (OpenALAudio audio, FileHandle file) {\r
                        super(audio, file);\r
+                       bitstream = new Bitstream(file.read());\r
+                       decoder = new MP3Decoder();\r
+                       try {\r
+                               Header header = bitstream.readFrame();\r
+                               if (header == null) throw new GdxRuntimeException("empty ogg");                 \r
+                               int channels = header.mode() == Header.SINGLE_CHANNEL ? 1 : 2;\r
+                               outputBuffer = new OutputBuffer(channels, false);\r
+                               decoder.setOutputBuffer(outputBuffer);\r
+                               setup(channels, header.getSampleRate());                                        \r
+                       } catch(BitstreamException e) {\r
+                               throw new GdxRuntimeException("error while preloading mp3", e);\r
+                       }\r
                }\r
 \r
                protected int read (byte[] buffer) {\r
index 86698ba..1d82cc1 100644 (file)
@@ -28,6 +28,8 @@ public class Ogg {
 \r
                public Music (OpenALAudio audio, FileHandle file) {\r
                        super(audio, file);\r
+                       input = new OggInputStream(file.read());\r
+                       setup(input.getChannels(), input.getSampleRate());\r
                }\r
 \r
                protected int read (byte[] buffer) {\r
index 4eec27c..ee6e602 100644 (file)
@@ -28,6 +28,8 @@ public class Wav {
 \r
                public Music (OpenALAudio audio, FileHandle file) {\r
                        super(audio, file);\r
+                       input = new WavInputStream(file);\r
+                       setup(input.channels, input.sampleRate);\r
                }\r
 \r
                protected int read (byte[] buffer) {\r
index f0a45b3..b596b87 100644 (file)
@@ -20,6 +20,6 @@ import com.badlogic.gdx.backends.jogl.JoglApplication;
 public class JoglDebugStarter {\r
 \r
        public static void main (String[] argv) {\r
-               new JoglApplication(new com.badlogic.gdx.tests.Box2DTest(), "Debug Test", 480, 320, false);\r
+               new JoglApplication(new com.badlogic.gdx.tests.MusicTest(), "Debug Test", 480, 320, false);\r
        }\r
 }\r
index 31ce2a9..589f0d0 100644 (file)
@@ -37,6 +37,8 @@ public class MusicTest extends GdxTest {
        \r
        @Override public void create() {\r
                music = Gdx.audio.newMusic(Gdx.files.internal("data/threeofaperfectpair.mp3"));\r
+//             music = Gdx.audio.newMusic(Gdx.files.internal("data/cloudconnected.ogg"));\r
+//             music = Gdx.audio.newMusic(Gdx.files.internal("data/sell_buy_item.wav"));               \r
                buttons = new TextureRegion(new Texture(Gdx.files.internal("data/playback.png")));\r
                batch = new SpriteBatch();\r
                font = new BitmapFont();\r