diff --git a/api/current.txt b/api/current.txt index f92518f88be99..6e03e0f9281d6 100644 --- a/api/current.txt +++ b/api/current.txt @@ -19365,6 +19365,7 @@ package android.media { field public static final deprecated int NUM_STREAMS = 5; // 0x5 field public static final java.lang.String PROPERTY_OUTPUT_FRAMES_PER_BUFFER = "android.media.property.OUTPUT_FRAMES_PER_BUFFER"; field public static final java.lang.String PROPERTY_OUTPUT_SAMPLE_RATE = "android.media.property.OUTPUT_SAMPLE_RATE"; + field public static final java.lang.String PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED = "android.media.property.SUPPORT_AUDIO_SOURCE_UNPROCESSED"; field public static final java.lang.String PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND = "android.media.property.SUPPORT_MIC_NEAR_ULTRASOUND"; field public static final java.lang.String PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND = "android.media.property.SUPPORT_SPEAKER_NEAR_ULTRASOUND"; field public static final java.lang.String RINGER_MODE_CHANGED_ACTION = "android.media.RINGER_MODE_CHANGED"; @@ -20725,6 +20726,7 @@ package android.media { field public static final int DEFAULT = 0; // 0x0 field public static final int MIC = 1; // 0x1 field public static final int REMOTE_SUBMIX = 8; // 0x8 + field public static final int UNPROCESSED = 9; // 0x9 field public static final int VOICE_CALL = 4; // 0x4 field public static final int VOICE_COMMUNICATION = 7; // 0x7 field public static final int VOICE_DOWNLINK = 3; // 0x3 diff --git a/api/system-current.txt b/api/system-current.txt index 6bba573f67873..12b9b325c759d 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -20670,6 +20670,7 @@ package android.media { field public static final deprecated int NUM_STREAMS = 5; // 0x5 field public static final java.lang.String PROPERTY_OUTPUT_FRAMES_PER_BUFFER = "android.media.property.OUTPUT_FRAMES_PER_BUFFER"; field public static final java.lang.String PROPERTY_OUTPUT_SAMPLE_RATE = "android.media.property.OUTPUT_SAMPLE_RATE"; + field public static final java.lang.String PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED = "android.media.property.SUPPORT_AUDIO_SOURCE_UNPROCESSED"; field public static final java.lang.String PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND = "android.media.property.SUPPORT_MIC_NEAR_ULTRASOUND"; field public static final java.lang.String PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND = "android.media.property.SUPPORT_SPEAKER_NEAR_ULTRASOUND"; field public static final java.lang.String RINGER_MODE_CHANGED_ACTION = "android.media.RINGER_MODE_CHANGED"; @@ -22035,6 +22036,7 @@ package android.media { field public static final int MIC = 1; // 0x1 field public static final int RADIO_TUNER = 1998; // 0x7ce field public static final int REMOTE_SUBMIX = 8; // 0x8 + field public static final int UNPROCESSED = 9; // 0x9 field public static final int VOICE_CALL = 4; // 0x4 field public static final int VOICE_COMMUNICATION = 7; // 0x7 field public static final int VOICE_DOWNLINK = 3; // 0x3 diff --git a/api/test-current.txt b/api/test-current.txt index 66c856f08b7ae..5e07343399115 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -19373,6 +19373,7 @@ package android.media { field public static final deprecated int NUM_STREAMS = 5; // 0x5 field public static final java.lang.String PROPERTY_OUTPUT_FRAMES_PER_BUFFER = "android.media.property.OUTPUT_FRAMES_PER_BUFFER"; field public static final java.lang.String PROPERTY_OUTPUT_SAMPLE_RATE = "android.media.property.OUTPUT_SAMPLE_RATE"; + field public static final java.lang.String PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED = "android.media.property.SUPPORT_AUDIO_SOURCE_UNPROCESSED"; field public static final java.lang.String PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND = "android.media.property.SUPPORT_MIC_NEAR_ULTRASOUND"; field public static final java.lang.String PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND = "android.media.property.SUPPORT_SPEAKER_NEAR_ULTRASOUND"; field public static final java.lang.String RINGER_MODE_CHANGED_ACTION = "android.media.RINGER_MODE_CHANGED"; @@ -20733,6 +20734,7 @@ package android.media { field public static final int DEFAULT = 0; // 0x0 field public static final int MIC = 1; // 0x1 field public static final int REMOTE_SUBMIX = 8; // 0x8 + field public static final int UNPROCESSED = 9; // 0x9 field public static final int VOICE_CALL = 4; // 0x4 field public static final int VOICE_COMMUNICATION = 7; // 0x7 field public static final int VOICE_DOWNLINK = 3; // 0x3 diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index b6150e045f174..53a733d260f8a 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2362,6 +2362,9 @@ (range of 18 - 21 kHz). --> true + + false + true diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 3641061f1e10b..dc288d5d0223f 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -303,6 +303,7 @@ + diff --git a/media/java/android/media/AudioAttributes.java b/media/java/android/media/AudioAttributes.java index 0db631542f6d0..606447b5e45f9 100644 --- a/media/java/android/media/AudioAttributes.java +++ b/media/java/android/media/AudioAttributes.java @@ -529,8 +529,9 @@ public final class AudioAttributes implements Parcelable { * instance with {@link AudioRecord#AudioRecord(AudioAttributes, AudioFormat, int)}. * @param preset one of {@link MediaRecorder.AudioSource#DEFAULT}, * {@link MediaRecorder.AudioSource#MIC}, {@link MediaRecorder.AudioSource#CAMCORDER}, - * {@link MediaRecorder.AudioSource#VOICE_RECOGNITION} or - * {@link MediaRecorder.AudioSource#VOICE_COMMUNICATION}. + * {@link MediaRecorder.AudioSource#VOICE_RECOGNITION}, + * {@link MediaRecorder.AudioSource#VOICE_COMMUNICATION} or + * {@link MediaRecorder.AudioSource#UNPROCESSED} * @return the same Builder instance. */ @SystemApi @@ -541,6 +542,7 @@ public final class AudioAttributes implements Parcelable { case MediaRecorder.AudioSource.CAMCORDER: case MediaRecorder.AudioSource.VOICE_RECOGNITION: case MediaRecorder.AudioSource.VOICE_COMMUNICATION: + case MediaRecorder.AudioSource.UNPROCESSED: mSource = preset; break; default: diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index ea1690fd26912..5ad6b08f542b8 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -3304,13 +3304,20 @@ public class AudioManager { public static final String PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND = "android.media.property.SUPPORT_SPEAKER_NEAR_ULTRASOUND"; + /** + * Used as a key for {@link #getProperty} to determine if the unprocessed audio source is + * available and supported with the expected frequency range and level response. + */ + public static final String PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED = + "android.media.property.SUPPORT_AUDIO_SOURCE_UNPROCESSED"; /** * Returns the value of the property with the specified key. * @param key One of the strings corresponding to a property key: either * {@link #PROPERTY_OUTPUT_SAMPLE_RATE}, * {@link #PROPERTY_OUTPUT_FRAMES_PER_BUFFER}, - * {@link #PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND}, or - * {@link #PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND}. + * {@link #PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND}, + * {@link #PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND}, or + * {@link #PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED}. * @return A string representing the associated value for that property key, * or null if there is no value for that key. */ @@ -3329,6 +3336,9 @@ public class AudioManager { } else if (PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND.equals(key)) { return String.valueOf(getContext().getResources().getBoolean( com.android.internal.R.bool.config_supportSpeakerNearUltrasound)); + } else if (PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED.equals(key)) { + return String.valueOf(getContext().getResources().getBoolean( + com.android.internal.R.bool.config_supportAudioSourceUnprocessed)); } else { // null or unknown key return null; diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java index 8ac86b01dcb8f..504c6d0d20033 100644 --- a/media/java/android/media/MediaRecorder.java +++ b/media/java/android/media/MediaRecorder.java @@ -251,6 +251,10 @@ public class MediaRecorder */ public static final int REMOTE_SUBMIX = 8; + /** Microphone audio source tuned for unprocessed (raw) sound if available, behaves like + * {@link #DEFAULT} otherwise. */ + public static final int UNPROCESSED = 9; + /** * Audio source for capturing broadcast radio tuner output. * @hide @@ -405,7 +409,7 @@ public class MediaRecorder * @see android.media.MediaRecorder.AudioSource */ public static final int getAudioSourceMax() { - return AudioSource.REMOTE_SUBMIX; + return AudioSource.UNPROCESSED; } /**