diff --git a/android/phoenix/project.properties b/android/phoenix/project.properties index 9b84a6b4bf..a3ee5ab64f 100644 --- a/android/phoenix/project.properties +++ b/android/phoenix/project.properties @@ -11,4 +11,4 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-16 +target=android-17 diff --git a/android/phoenix/src/org/retroarch/browser/RetroArch.java b/android/phoenix/src/org/retroarch/browser/RetroArch.java index 2d9e2bcce9..66fd58254e 100644 --- a/android/phoenix/src/org/retroarch/browser/RetroArch.java +++ b/android/phoenix/src/org/retroarch/browser/RetroArch.java @@ -10,6 +10,7 @@ import android.content.res.AssetManager; import android.annotation.TargetApi; import android.app.*; import android.media.AudioManager; +import android.media.AudioTrack; import android.net.Uri; import android.os.*; import android.preference.PreferenceManager; @@ -351,10 +352,27 @@ public class RetroArch extends Activity implements return "/mnt/sd/retroarch.cfg"; } + @TargetApi(android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) + private int getLowLatencyOptimalSamplingRate() { + AudioManager manager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE); + return Integer.parseInt(manager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE)); + } + + private int getOptimalSamplingRate() { + int ret; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) + ret = getLowLatencyOptimalSamplingRate(); + else + ret = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_MUSIC); + + Log.i(TAG, "Using sampling rate: " + ret + " Hz"); + return ret; + } + private void updateConfigFile() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); config.setBoolean("audio_rate_control", prefs.getBoolean("audio_rate_control", true)); - config.setInt("audio_out_rate", 44100); // Much better than 48000 on Nexus 10, need to investigate. Could fix most audio issues on Android. + config.setInt("audio_out_rate", getOptimalSamplingRate()); config.setBoolean("audio_enable", prefs.getBoolean("audio_enable", true)); config.setBoolean("video_smooth", prefs.getBoolean("video_smooth", true)); config.setBoolean("video_allow_rotate", prefs.getBoolean("video_allow_rotate", true));