OSDN Git Service

Initial version for audio on iOS. This needs more work:
authorChristoph Aschwanden <contact@noblemaster.com>
Tue, 25 Sep 2012 16:35:19 +0000 (01:35 +0900)
committerChristoph Aschwanden <contact@noblemaster.com>
Tue, 25 Sep 2012 16:35:19 +0000 (01:35 +0900)
- soundIds not implemented for IOSSound
- looping not supported
- .ogg not supported

backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSAudio.java
backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSMusic.java
backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSSound.java

index 362f5ce..6b661e3 100644 (file)
 package com.badlogic.gdx.backends.ios;
 
 import com.badlogic.gdx.Audio;
+import com.badlogic.gdx.Gdx;\r
 import com.badlogic.gdx.audio.AudioDevice;
 import com.badlogic.gdx.audio.AudioRecorder;
 import com.badlogic.gdx.audio.Music;
 import com.badlogic.gdx.audio.Sound;
 import com.badlogic.gdx.files.FileHandle;
+import com.badlogic.gdx.utils.GdxRuntimeException;\r
+\r
+import cli.MonoTouch.AVFoundation.AVAudioPlayer;\r
+import cli.MonoTouch.Foundation.NSData;\r
+import cli.MonoTouch.Foundation.NSError;\r
+import cli.MonoTouch.Foundation.NSUrl;\r
 
 public class IOSAudio implements Audio {
 
@@ -35,13 +42,124 @@ public class IOSAudio implements Audio {
        }
 
        @Override
-       public Sound newSound(FileHandle fileHandle) {
-               return new IOSSound();
+       public Sound newSound(FileHandle fileHandle) {\r
+               // verify file format\r
+               if (fileHandle.extension().equalsIgnoreCase("ogg")) {  \r
+                       // Ogg is not supported on iOS (return a sound object that does nothing)\r
+                       Gdx.app.error("IOSAudio", "Audio format .ogg is not supported on iOS. Cannot load: " + fileHandle.path());\r
+                       return new Sound() {\r
+                               @Override\r
+                               public long play () {\r
+                                       return 0;\r
+                               }\r
+                               @Override\r
+                               public long play (float volume) {\r
+                                       return 0;\r
+                               }\r
+                               @Override\r
+                               public long play (float volume, float pitch, float pan) {\r
+                                       return 0;\r
+                               }\r
+                               @Override\r
+                               public long loop () {\r
+                                       return 0;\r
+                               }\r
+                               @Override\r
+                               public long loop (float volume) {\r
+                                       return 0;\r
+                               }\r
+                               @Override\r
+                               public long loop (float volume, float pitch, float pan) {\r
+                                       return 0;\r
+                               }\r
+                               @Override\r
+                               public void stop () {\r
+                               }\r
+                               @Override\r
+                               public void dispose () {\r
+                               }\r
+                               @Override\r
+                               public void stop (long soundId) {\r
+                               }\r
+                               @Override\r
+                               public void setLooping (long soundId, boolean looping) {\r
+                               }\r
+                               @Override\r
+                               public void setPitch (long soundId, float pitch) {\r
+                               }\r
+                               @Override\r
+                               public void setVolume (long soundId, float volume) {\r
+                               }\r
+                               @Override\r
+                               public void setPan (long soundId, float pan, float volume) {\r
+                               }                               \r
+                       };\r
+               }\r
+                               
+               // create audio player - from byte array\r
+               NSError[] error = new NSError[1];\r
+               NSData data = NSData.FromArray(fileHandle.readBytes());\r
+               AVAudioPlayer player = AVAudioPlayer.FromData(data, error);\r
+               if (error[0] == null) {\r
+                       // no error: return the music object\r
+                       return new IOSSound(player);\r
+               }\r
+               else {\r
+                       // throw an exception\r
+                       throw new GdxRuntimeException("Error opening file at " + fileHandle.path() + ": " + error[0].ToString());\r
+               }\r
        }
 
        @Override
-       public Music newMusic(FileHandle file) {
-               return new IOSMusic();
+       public Music newMusic(FileHandle fileHandle) {\r
+               // verify file format\r
+               if (fileHandle.extension().equalsIgnoreCase("ogg")) {  \r
+                       // Ogg is not supported on iOS (return a music object that does nothing)\r
+                       Gdx.app.error("IOSAudio", "Audio format .ogg is not supported on iOS. Cannot load: " + fileHandle.path());\r
+                       return new Music() {\r
+                               @Override\r
+                               public void play () {\r
+                               }\r
+                               @Override\r
+                               public void pause () {\r
+                               }\r
+                               @Override\r
+                               public void stop () {\r
+                               }\r
+                               @Override\r
+                               public boolean isPlaying () {\r
+                                       return false;\r
+                               }\r
+                               @Override\r
+                               public void setLooping (boolean isLooping) {\r
+                               }\r
+                               @Override\r
+                               public boolean isLooping () {\r
+                                       return false;\r
+                               }\r
+                               @Override\r
+                               public void setVolume (float volume) {\r
+                               }\r
+                               @Override\r
+                               public float getPosition () {\r
+                                       return 0;\r
+                               }\r
+                               @Override\r
+                               public void dispose () {\r
+                               }                               \r
+                       };\r
+               }\r
+               \r
+               // create audio player - from file path\r
+               NSError[] error = new NSError[1];\r
+               AVAudioPlayer player = AVAudioPlayer.FromUrl(NSUrl.FromFilename(fileHandle.path()), error);\r
+               if (error[0] == null) {\r
+                       // no error: return the music object\r
+                       return new IOSMusic(player);\r
+               }\r
+               else {\r
+                       // throw an exception\r
+                       throw new GdxRuntimeException("Error opening file at " + fileHandle.path() + ": " + error[0].ToString());\r
+               }\r
        }
-
 }
\ No newline at end of file
index 835a538..91d3048 100644 (file)
  ******************************************************************************/
 package com.badlogic.gdx.backends.ios;
 
+import cli.MonoTouch.AVFoundation.AVAudioPlayer;\r
+\r
 import com.badlogic.gdx.audio.Music;
 
 public class IOSMusic implements Music {
-
+\r
+       private AVAudioPlayer player;\r
+       \r
+       \r
+       public IOSMusic(AVAudioPlayer player) {\r
+               this.player = player;\r
+       }\r
+       
        @Override
        public void play() {
-               // TODO Auto-generated method stub
-               
+               player.Play();
        }
 
        @Override
        public void pause() {
-               // TODO Auto-generated method stub
-               
+               player.Pause();
        }
 
        @Override
        public void stop() {
-               // TODO Auto-generated method stub
-               
+               player.Stop();
        }
 
        @Override
        public boolean isPlaying() {
-               // TODO Auto-generated method stub
-               return false;
+               return player.get_Playing();
        }
 
        @Override
        public void setLooping(boolean isLooping) {
-               // TODO Auto-generated method stub
-               
+               // TODO Auto-generated method stub              
        }
 
        @Override
@@ -57,8 +61,7 @@ public class IOSMusic implements Music {
 
        @Override
        public void setVolume(float volume) {
-               // TODO Auto-generated method stub
-               
+               player.set_Volume(volume);
        }
 
        @Override
@@ -69,8 +72,6 @@ public class IOSMusic implements Music {
 
        @Override
        public void dispose() {
-               // TODO Auto-generated method stub
-               
+               player.Dispose();
        }
-
 }
\ No newline at end of file
index 463af16..8848a50 100644 (file)
  ******************************************************************************/
 package com.badlogic.gdx.backends.ios;
 
+import cli.MonoTouch.AVFoundation.AVAudioPlayer;\r
+\r
 import com.badlogic.gdx.audio.Sound;
 
 public class IOSSound implements Sound {
+\r
+       private AVAudioPlayer player;\r
+\r
+       \r
+       public IOSSound(AVAudioPlayer player) {\r
+               this.player = player;\r
+       }\r
 
        @Override
-       public long play() {
-               // TODO Auto-generated method stub
-               return 0;
+       public long play() {\r
+               return play(1.0f);
        }
 
        @Override
-       public long play(float volume) {
-               // TODO Auto-generated method stub
-               return 0;
+       public long play(float volume) {\r
+               return play(volume, 1.0f, 0.5f);
        }
 
        @Override
-       public long play(float volume, float pitch, float pan) {
+       public long play(float volume, float pitch, float pan) {\r
+               player.set_Volume(volume);\r
+               player.set_Pan(pan);\r
+               player.Play();\r
+               
                // TODO Auto-generated method stub
                return 0;
        }
@@ -57,14 +68,12 @@ public class IOSSound implements Sound {
 
        @Override
        public void stop() {
-               // TODO Auto-generated method stub
-               
+               player.Stop();
        }
 
        @Override
        public void dispose() {
-               // TODO Auto-generated method stub
-               
+               player.Dispose();
        }
 
        @Override
@@ -96,5 +105,4 @@ public class IOSSound implements Sound {
                // TODO Auto-generated method stub
                
        }
-
 }
\ No newline at end of file