From a8f924a4a75285c7067611bfa12dd316377fc3c4 Mon Sep 17 00:00:00 2001 From: tomty89 Date: Fri, 2 Feb 2018 14:28:30 +0800 Subject: [PATCH 1/4] AudioAPI: get main code out of ResultJsonWriter --- .../main/java/com/termux/api/AudioAPI.java | 44 +++++++++---------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/termux/api/AudioAPI.java b/app/src/main/java/com/termux/api/AudioAPI.java index 51a4c7b7d..077cb3356 100644 --- a/app/src/main/java/com/termux/api/AudioAPI.java +++ b/app/src/main/java/com/termux/api/AudioAPI.java @@ -9,30 +9,28 @@ import com.termux.api.util.ResultReturner; import com.termux.api.util.ResultReturner.ResultWriter; - - public class AudioAPI { static void onReceive(TermuxApiReceiver apiReceiver, final Context context, Intent intent) { - ResultReturner.returnData(apiReceiver, intent, new ResultReturner.ResultJsonWriter() { - - AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); - String SampleRate = am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE); - String framesPerBuffer = am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER); - String AudioUnprocessed = am.getProperty(AudioManager.PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED); - int nativeoutput = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_MUSIC); - int volume_level= am.getStreamVolume(AudioManager.STREAM_MUSIC); - int maxvolume_level = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); - public void writeJson(JsonWriter out) throws Exception { - out.beginObject(); - out.name("PROPERTY_OUTPUT_SAMPLE_RATE").value(SampleRate); - out.name("PROPERTY_OUTPUT_FRAMES_PER_BUFFER").value(framesPerBuffer); - out.name("PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED").value(AudioUnprocessed); - out.name("STREAM_MUSIC_VOLUME").value(volume_level); - out.name("STREAM_MUSIC_MAXVOLUME").value(maxvolume_level); - out.name("CURRENT_NATIVE_OUTPUT_SAMPLERATE").value(nativeoutput); - out.endObject(); - } - }); + AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + + String SampleRate = am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE); + String framesPerBuffer = am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER); + String AudioUnprocessed = am.getProperty(AudioManager.PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED); + int nativeoutput = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_MUSIC); + int volume_level= am.getStreamVolume(AudioManager.STREAM_MUSIC); + int maxvolume_level = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + + ResultReturner.returnData(apiReceiver, intent, new ResultReturner.ResultJsonWriter() { + public void writeJson(JsonWriter out) throws Exception { + out.beginObject(); + out.name("PROPERTY_OUTPUT_SAMPLE_RATE").value(SampleRate); + out.name("PROPERTY_OUTPUT_FRAMES_PER_BUFFER").value(framesPerBuffer); + out.name("PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED").value(AudioUnprocessed); + out.name("STREAM_MUSIC_VOLUME").value(volume_level); + out.name("STREAM_MUSIC_MAXVOLUME").value(maxvolume_level); + out.name("CURRENT_NATIVE_OUTPUT_SAMPLERATE").value(nativeoutput); + out.endObject(); + } + }); } } - From f488e90b50c505593505c170c5c0dedb240165e9 Mon Sep 17 00:00:00 2001 From: tomty89 Date: Fri, 2 Feb 2018 14:33:45 +0800 Subject: [PATCH 2/4] AudioAPI: get info with an AudioTrack instance --- .../main/java/com/termux/api/AudioAPI.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/api/AudioAPI.java b/app/src/main/java/com/termux/api/AudioAPI.java index 077cb3356..884dba72c 100644 --- a/app/src/main/java/com/termux/api/AudioAPI.java +++ b/app/src/main/java/com/termux/api/AudioAPI.java @@ -4,7 +4,9 @@ import android.content.Intent; import android.media.AudioManager; import android.util.JsonWriter; -import android.media.AudioTrack; +import android.media.AudioTrack; +import android.media.AudioFormat; +import android.media.AudioAttributes; import com.termux.api.util.ResultReturner; import com.termux.api.util.ResultReturner.ResultWriter; @@ -12,6 +14,16 @@ public class AudioAPI { static void onReceive(TermuxApiReceiver apiReceiver, final Context context, Intent intent) { AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + AudioTrack at = new AudioTrack ( + new AudioAttributes.Builder() + .setFlags(256) // FLAG_LOW_LATENCY + .build(), + new AudioFormat.Builder() + .build(), + 4, // bytes; i.e. one 16bit 2ch frame + AudioTrack.MODE_STREAM, + AudioManager.AUDIO_SESSION_ID_GENERATE + ); String SampleRate = am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE); String framesPerBuffer = am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER); @@ -19,6 +31,12 @@ static void onReceive(TermuxApiReceiver apiReceiver, final Context context, Inte int nativeoutput = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_MUSIC); int volume_level= am.getStreamVolume(AudioManager.STREAM_MUSIC); int maxvolume_level = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + int sr = at.getSampleRate(); + int pr = at.getPlaybackRate(); + int bc = at.getBufferCapacityInFrames(); + int bs = at.getBufferSizeInFrames(); + + at.release(); ResultReturner.returnData(apiReceiver, intent, new ResultReturner.ResultJsonWriter() { public void writeJson(JsonWriter out) throws Exception { @@ -29,6 +47,10 @@ public void writeJson(JsonWriter out) throws Exception { out.name("STREAM_MUSIC_VOLUME").value(volume_level); out.name("STREAM_MUSIC_MAXVOLUME").value(maxvolume_level); out.name("CURRENT_NATIVE_OUTPUT_SAMPLERATE").value(nativeoutput); + out.name("SR").value(sr); + out.name("PR").value(pr); + out.name("BC").value(bc); + out.name("BS").value(bs); out.endObject(); } }); From e51cebf786c8d3dbae890550b4ff495f7d323119 Mon Sep 17 00:00:00 2001 From: its-pointless Date: Sat, 3 Feb 2018 10:47:14 +1100 Subject: [PATCH 3/4] updated clean up working all devices?? --- .../main/java/com/termux/api/AudioAPI.java | 68 ++++++++++++++----- 1 file changed, 51 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/termux/api/AudioAPI.java b/app/src/main/java/com/termux/api/AudioAPI.java index 884dba72c..41d79aac1 100644 --- a/app/src/main/java/com/termux/api/AudioAPI.java +++ b/app/src/main/java/com/termux/api/AudioAPI.java @@ -7,6 +7,7 @@ import android.media.AudioTrack; import android.media.AudioFormat; import android.media.AudioAttributes; +import android.os.Build; import com.termux.api.util.ResultReturner; import com.termux.api.util.ResultReturner.ResultWriter; @@ -14,7 +15,7 @@ public class AudioAPI { static void onReceive(TermuxApiReceiver apiReceiver, final Context context, Intent intent) { AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); - AudioTrack at = new AudioTrack ( + AudioTrack at = new AudioTrack ( new AudioAttributes.Builder() .setFlags(256) // FLAG_LOW_LATENCY .build(), @@ -24,18 +25,47 @@ static void onReceive(TermuxApiReceiver apiReceiver, final Context context, Inte AudioTrack.MODE_STREAM, AudioManager.AUDIO_SESSION_ID_GENERATE ); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + final String SampleRate = am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE); + final String framesPerBuffer = am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER); + final String AudioUnprocessed = am.getProperty(AudioManager.PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED); + final int nativeoutput = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_MUSIC); + final int volume_level= am.getStreamVolume(AudioManager.STREAM_MUSIC); + final int maxvolume_level = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); +/* final int bc = at.getBufferCapacityInFrames(); only available api 24 and up and is always returns same value as + * the initial getbuffersizeinframes */ + final int bs = at.getBufferSizeInFrames(); + final boolean bluetootha2dp = am.isBluetoothA2dpOn(); + final boolean wiredhs = am.isWiredHeadsetOn(); + at.release(); - String SampleRate = am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE); - String framesPerBuffer = am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER); - String AudioUnprocessed = am.getProperty(AudioManager.PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED); - int nativeoutput = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_MUSIC); - int volume_level= am.getStreamVolume(AudioManager.STREAM_MUSIC); - int maxvolume_level = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); - int sr = at.getSampleRate(); - int pr = at.getPlaybackRate(); - int bc = at.getBufferCapacityInFrames(); - int bs = at.getBufferSizeInFrames(); - + ResultReturner.returnData(apiReceiver, intent, new ResultReturner.ResultJsonWriter() { + public void writeJson(JsonWriter out) throws Exception { + out.beginObject(); + out.name("PROPERTY_OUTPUT_SAMPLE_RATE").value(SampleRate); + out.name("PROPERTY_OUTPUT_FRAMES_PER_BUFFER").value(framesPerBuffer); + out.name("PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED").value(AudioUnprocessed); + out.name("STREAM_MUSIC_VOLUME").value(volume_level); + out.name("STREAM_MUSIC_MAXVOLUME").value(maxvolume_level); + out.name("CURRENT_NATIVE_OUTPUT_SAMPLERATE").value(nativeoutput); + out.name("AUDIOTRACK_BUFFER_SIZE_IN_FRAMES").value(bs); + out.name("BLUETOOTH_A2DP_IS_ON").value(bluetootha2dp); + out.name("WIREDHEADSET_IS_CONNECTED").value(wiredhs); + out.endObject(); + } + }); + } +if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + final String SampleRate = am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE); + final String framesPerBuffer = am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER); + final String AudioUnprocessed = am.getProperty(AudioManager.PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED); + final int nativeoutput = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_MUSIC); + final int volume_level= am.getStreamVolume(AudioManager.STREAM_MUSIC); + final int maxvolume_level = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + final int sr = at.getSampleRate(); + final int pr = at.getPlaybackRate(); + final boolean WiredHs = am.isWiredHeadsetOn(); + final boolean bluetootha2dp = am.isBluetoothA2dpOn(); at.release(); ResultReturner.returnData(apiReceiver, intent, new ResultReturner.ResultJsonWriter() { @@ -47,12 +77,16 @@ public void writeJson(JsonWriter out) throws Exception { out.name("STREAM_MUSIC_VOLUME").value(volume_level); out.name("STREAM_MUSIC_MAXVOLUME").value(maxvolume_level); out.name("CURRENT_NATIVE_OUTPUT_SAMPLERATE").value(nativeoutput); - out.name("SR").value(sr); - out.name("PR").value(pr); - out.name("BC").value(bc); - out.name("BS").value(bs); - out.endObject(); + out.name("BLUETOOTH_A2DP_IS_ON").value(bluetootha2dp); + out.name("WIREDHEADSET_IS_CONNECTED").value(WiredHs); + out.endObject(); } }); + } + + + + + } } From 0cbaacd1d1f990f157f2aab7a28e1e785febb62c Mon Sep 17 00:00:00 2001 From: its-pointless Date: Mon, 5 Feb 2018 09:28:25 +1100 Subject: [PATCH 4/4] remove unneeded... --- app/src/main/java/com/termux/api/AudioAPI.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/com/termux/api/AudioAPI.java b/app/src/main/java/com/termux/api/AudioAPI.java index 41d79aac1..0e30c5b83 100644 --- a/app/src/main/java/com/termux/api/AudioAPI.java +++ b/app/src/main/java/com/termux/api/AudioAPI.java @@ -62,8 +62,6 @@ public void writeJson(JsonWriter out) throws Exception { final int nativeoutput = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_MUSIC); final int volume_level= am.getStreamVolume(AudioManager.STREAM_MUSIC); final int maxvolume_level = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); - final int sr = at.getSampleRate(); - final int pr = at.getPlaybackRate(); final boolean WiredHs = am.isWiredHeadsetOn(); final boolean bluetootha2dp = am.isBluetoothA2dpOn(); at.release();