AudioSystem.java revision 4e1ccd370fc268f3207c5baee08ac8c943c3fdf9
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.media; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 196156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlockimport android.content.Context; 206156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlockimport android.content.pm.PackageManager; 217f5eb9fe3c10d8d83ff0e2b0fc60a05c2e6d5b02Eric Laurentimport android.media.audiopolicy.AudioMix; 225a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Triviimport android.util.Log; 236156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 24b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurentimport java.util.ArrayList; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* IF YOU CHANGE ANY OF THE CONSTANTS IN THIS FILE, DO NOT FORGET 278b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten * TO UPDATE THE CORRESPONDING NATIVE GLUE AND AudioManager.java. 288b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten * THANK YOU FOR YOUR COOPERATION. 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class AudioSystem 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 365a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi private static final String TAG = "AudioSystem"; 37a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi /* These values must be kept in sync with system/audio.h */ 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If these are modified, please also update Settings.System.VOLUME_SETTINGS 408b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten * and attrs.xml and AudioManager.java. 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 42a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi /* The default audio stream */ 43a1d80e3b1d210c60c6881a55ed39a4077ff66080Jean-Michel Trivi public static final int STREAM_DEFAULT = -1; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* The audio stream for phone calls */ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_VOICE_CALL = 0; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* The audio stream for system sounds */ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_SYSTEM = 1; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* The audio stream for the phone ring and message alerts */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_RING = 2; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* The audio stream for music playback */ 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_MUSIC = 3; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* The audio stream for alarms */ 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_ALARM = 4; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* The audio stream for notifications */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_NOTIFICATION = 5; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* @hide The audio stream for phone calls when connected on bluetooth */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_BLUETOOTH_SCO = 6; 58a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /* @hide The audio stream for enforced system sounds in certain countries (e.g camera in Japan) */ 59a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int STREAM_SYSTEM_ENFORCED = 7; 60a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /* @hide The audio stream for DTMF tones */ 61a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int STREAM_DTMF = 8; 62a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /* @hide The audio stream for text to speech (TTS) */ 63a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int STREAM_TTS = 9; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @deprecated Use {@link #numStreamTypes() instead} 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NUM_STREAMS = 5; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Expose only the getter method publicly so we can change it in the future 70a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent private static final int NUM_STREAM_TYPES = 10; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int getNumStreamTypes() { return NUM_STREAM_TYPES; } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 736156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final String[] STREAM_NAMES = new String[] { 746156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_VOICE_CALL", 756156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_SYSTEM", 766156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_RING", 776156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_MUSIC", 786156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_ALARM", 796156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_NOTIFICATION", 806156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_BLUETOOTH_SCO", 816156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_SYSTEM_ENFORCED", 826156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_DTMF", 836156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock "STREAM_TTS" 846156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock }; 856156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the microphone mute on or off. 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * @param on set <var>true</var> to mute the microphone; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>false</var> to turn mute off 91ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * @return command completion status see AUDIO_STATUS_OK, see AUDIO_STATUS_ERROR 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static native int muteMicrophone(boolean on); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks whether the microphone mute is on or off. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 98ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * @return true if microphone is muted, false if it's not 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static native boolean isMicrophoneMuted(); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 102ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten /* modes for setPhoneState, must match AudioSystem.h audio_mode */ 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_INVALID = -2; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_CURRENT = -1; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_NORMAL = 0; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_RINGTONE = 1; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MODE_IN_CALL = 2; 1088f677d66d9c3ba34c97e69b2bb9e161f129af0eeJean-Michel Trivi public static final int MODE_IN_COMMUNICATION = 3; 1098f677d66d9c3ba34c97e69b2bb9e161f129af0eeJean-Michel Trivi public static final int NUM_MODES = 4; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 112ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten /* Routing bits for the former setRouting/getRouting API */ 113a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 114a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_EARPIECE = (1 << 0); 115a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 116a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_SPEAKER = (1 << 1); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @deprecated use {@link #ROUTE_BLUETOOTH_SCO} */ 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Deprecated public static final int ROUTE_BLUETOOTH = (1 << 2); 119a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 120a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_BLUETOOTH_SCO = (1 << 2); 121a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 122a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_HEADSET = (1 << 3); 123a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 124a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_BLUETOOTH_A2DP = (1 << 4); 125a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /** @deprecated */ 126a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent @Deprecated public static final int ROUTE_ALL = 0xFFFFFFFF; 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 128b2b292317482d00d067bc91669322b273be61926Rom Lemarchand // Keep in sync with system/media/audio/include/system/audio.h 12960bd67f7b1b85ed0ee19f77b056b90350a3d5343Glenn Kasten public static final int AUDIO_SESSION_ALLOCATE = 0; 13060bd67f7b1b85ed0ee19f77b056b90350a3d5343Glenn Kasten 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 13223f25cda0c73f8eb878844dea32fb0bd419edca2Eric Laurent * Checks whether the specified stream type is active. 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13423f25cda0c73f8eb878844dea32fb0bd419edca2Eric Laurent * return true if any track playing on this stream is active. 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13625101b0b9a84571ead15b26e9f4cd9c4298d7823Eric Laurent public static native boolean isStreamActive(int stream, int inPastMs); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 139679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi * Checks whether the specified stream type is active on a remotely connected device. The notion 140679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi * of what constitutes a remote device is enforced by the audio policy manager of the platform. 141679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi * 142679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi * return true if any track playing on this stream is active on a remote device. 143679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi */ 144679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi public static native boolean isStreamActiveRemotely(int stream, int inPastMs); 145679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi 146679d5046f245ea8b39f9b5596195f3468808dd54Jean-Michel Trivi /* 147d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi * Checks whether the specified audio source is active. 148d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi * 149d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi * return true if any recorder using this source is currently recording 150d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi */ 151d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi public static native boolean isSourceActive(int source); 152d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi 153d677054ca63f55abaa1c478ea3c50f6be665a979Jean-Michel Trivi /* 1548a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi * Returns a new unused audio session ID 1558a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi */ 1568a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi public static native int newAudioSessionId(); 1578a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi 1588a21f5dd79e93aa4e4b08ab4f33b9255d7c06961Jean-Michel Trivi /* 159a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * Sets a group generic audio configuration parameters. The use of these parameters 160ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * are platform dependent, see libaudio 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 162a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * param keyValuePairs list of parameters key value pairs in the form: 163a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * key1=value1;key2=value2;... 164a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent */ 165a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int setParameters(String keyValuePairs); 166a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 167a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /* 168a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * Gets a group generic audio configuration parameters. The use of these parameters 169ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * are platform dependent, see libaudio 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 171a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * param keys list of parameters 172a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * return value: list of parameters key value pairs in the form: 173a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * key1=value1;key2=value2;... 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 175a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native String getParameters(String keys); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 177ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten // These match the enum AudioError in frameworks/base/core/jni/android_media_AudioSystem.cpp 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Command sucessful or Media server restarted. see ErrorCallback */ 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int AUDIO_STATUS_OK = 0; 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Command failed or unspecified audio error. see ErrorCallback */ 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int AUDIO_STATUS_ERROR = 1; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Media server died. see ErrorCallback */ 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int AUDIO_STATUS_SERVER_DIED = 100; 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static ErrorCallback mErrorCallback; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Handles the audio error callback. 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface ErrorCallback 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Callback for audio server errors. 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * param error error code: 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - AUDIO_STATUS_OK 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * - AUDIO_STATUS_SERVER_DIED 197ef02827d4c3b9c0601eddc9c348fc2ea866420a2Eric Laurent * - AUDIO_STATUS_ERROR 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void onError(int error); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Registers a callback to be invoked when an error occurs. 204ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten * @param cb the callback to run 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void setErrorCallback(ErrorCallback cb) 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 208a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent synchronized (AudioSystem.class) { 209a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent mErrorCallback = cb; 210dfb881f96af7898151940a4bbc52e45e6043d38bEric Laurent if (cb != null) { 211dfb881f96af7898151940a4bbc52e45e6043d38bEric Laurent cb.onError(checkAudioFlinger()); 212dfb881f96af7898151940a4bbc52e45e6043d38bEric Laurent } 213a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void errorCallbackFromNative(int error) 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 218a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent ErrorCallback errorCallback = null; 219a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent synchronized (AudioSystem.class) { 220a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent if (mErrorCallback != null) { 221a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent errorCallback = mErrorCallback; 222a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent } 223a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent } 224a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent if (errorCallback != null) { 225a25c5d88d17f251262307ce31e799c9cf361d145Eric Laurent errorCallback.onError(error); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 228a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 2295a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi /** 2305a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi * Handles events for the audio policy manager about dynamic audio policies 2315a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi * @see android.media.audiopolicy.AudioPolicy 2325a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi */ 2335a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi public interface DynamicPolicyCallback 2345a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi { 2355a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi void onDynamicPolicyMixStateUpdate(String regId, int state); 2365a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2375a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 2385a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi //keep in sync with include/media/AudioPolicy.h 2395a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi private final static int DYNAMIC_POLICY_EVENT_MIX_STATE_UPDATE = 0; 2405a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 2415a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi private static DynamicPolicyCallback sDynPolicyCallback; 2425a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 2435a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi public static void setDynamicPolicyCallback(DynamicPolicyCallback cb) 2445a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi { 2455a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi synchronized (AudioSystem.class) { 2465a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi sDynPolicyCallback = cb; 2475a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi native_register_dynamic_policy_callback(); 2485a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2495a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2505a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 2515a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi private static void dynamicPolicyCallbackFromNative(int event, String regId, int val) 2525a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi { 2535a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi DynamicPolicyCallback cb = null; 2545a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi synchronized (AudioSystem.class) { 2555a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi if (sDynPolicyCallback != null) { 2565a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi cb = sDynPolicyCallback; 2575a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2585a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2595a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi if (cb != null) { 2605a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi switch(event) { 2615a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi case DYNAMIC_POLICY_EVENT_MIX_STATE_UPDATE: 2625a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi cb.onDynamicPolicyMixStateUpdate(regId, val); 2635a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi break; 2645a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi default: 2655a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi Log.e(TAG, "dynamicPolicyCallbackFromNative: unknown event " + event); 2665a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2675a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2685a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi } 2695a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 2705a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 271bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent /* 272bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent * Error codes used by public APIs (AudioTrack, AudioRecord, AudioManager ...) 273bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent * Must be kept in sync with frameworks/base/core/jni/android_media_AudioErrors.h 274bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent */ 275bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int SUCCESS = 0; 276bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int ERROR = -1; 277bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int BAD_VALUE = -2; 278bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int INVALID_OPERATION = -3; 279bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int PERMISSION_DENIED = -4; 280bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int NO_INIT = -5; 281bc11a696f6856624de532a6830d5db9dbbe2384cEric Laurent public static final int DEAD_OBJECT = -6; 2824e1ccd370fc268f3207c5baee08ac8c943c3fdf9Eric Laurent public static final int WOULD_BLOCK = -7; 2839bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent 284a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent /* 285a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent * AudioPolicyService methods 286a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent */ 287a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 28853082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent // 28953082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent // audio device definitions: must be kept in sync with values in system/core/audio.h 29053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent // 29153082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent 292d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public static final int DEVICE_NONE = 0x0; 29353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent // reserved bits 29453082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_BIT_IN = 0x80000000; 29553082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_BIT_DEFAULT = 0x40000000; 2968b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten // output devices, be sure to update AudioManager.java also 297a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_EARPIECE = 0x1; 298a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_SPEAKER = 0x2; 299a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_WIRED_HEADSET = 0x4; 300a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_WIRED_HEADPHONE = 0x8; 301a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_SCO = 0x10; 302a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20; 303a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40; 304a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_A2DP = 0x80; 305a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100; 306a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200; 307a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_OUT_AUX_DIGITAL = 0x400; 308948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_HDMI = DEVICE_OUT_AUX_DIGITAL; 30921e941bf43362ddc6639a9f2d0828053360f53d7Praveen Bharathi public static final int DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800; 31021e941bf43362ddc6639a9f2d0828053360f53d7Praveen Bharathi public static final int DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000; 31159f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent public static final int DEVICE_OUT_USB_ACCESSORY = 0x2000; 31259f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent public static final int DEVICE_OUT_USB_DEVICE = 0x4000; 31353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_OUT_REMOTE_SUBMIX = 0x8000; 314948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_TELEPHONY_TX = 0x10000; 315948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_LINE = 0x20000; 316948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_HDMI_ARC = 0x40000; 317948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_SPDIF = 0x80000; 318948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_OUT_FM = 0x100000; 31912307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang public static final int DEVICE_OUT_AUX_LINE = 0x200000; 32007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final int DEVICE_OUT_SPEAKER_SAFE = 0x400000; 3211e725f8137391474b71ebd9109a0968ecef5373fEric Laurent public static final int DEVICE_OUT_IP = 0x800000; 32259f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent 32353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_OUT_DEFAULT = DEVICE_BIT_DEFAULT; 3242ac2afeac989ea1dc326b0db996d6c6c8e00cc29Jean-Michel Trivi 3259bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final int DEVICE_OUT_ALL = (DEVICE_OUT_EARPIECE | 3269bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_SPEAKER | 3279bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_WIRED_HEADSET | 3289bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_WIRED_HEADPHONE | 3299bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_SCO | 3309bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 3319bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_SCO_CARKIT | 3329bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP | 3339bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 3349bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | 335948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_HDMI | 3369bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_ANLG_DOCK_HEADSET | 3379bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_DGTL_DOCK_HEADSET | 33859f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_USB_ACCESSORY | 33959f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_USB_DEVICE | 34053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_OUT_REMOTE_SUBMIX | 341948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_TELEPHONY_TX | 342948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_LINE | 343948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_HDMI_ARC | 344948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_SPDIF | 345948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_OUT_FM | 34612307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang DEVICE_OUT_AUX_LINE | 34707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood DEVICE_OUT_SPEAKER_SAFE | 3481e725f8137391474b71ebd9109a0968ecef5373fEric Laurent DEVICE_OUT_IP | 3499bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_DEFAULT); 3509bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final int DEVICE_OUT_ALL_A2DP = (DEVICE_OUT_BLUETOOTH_A2DP | 3519bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 3529bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER); 35359f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent public static final int DEVICE_OUT_ALL_SCO = (DEVICE_OUT_BLUETOOTH_SCO | 35459f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 35559f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_BLUETOOTH_SCO_CARKIT); 35659f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent public static final int DEVICE_OUT_ALL_USB = (DEVICE_OUT_USB_ACCESSORY | 35759f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent DEVICE_OUT_USB_DEVICE); 35812307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang public static final int DEVICE_OUT_ALL_HDMI_SYSTEM_AUDIO = (DEVICE_OUT_AUX_LINE | 35941d974631c5f525da49c88d34cecedd5a4cfeda8Jungshik Jang DEVICE_OUT_HDMI_ARC | 36041d974631c5f525da49c88d34cecedd5a4cfeda8Jungshik Jang DEVICE_OUT_SPDIF); 3616f34f5ab8ab1b1db7887e5405d8b0031e105ab05Jungshik Jang public static final int DEVICE_ALL_HDMI_SYSTEM_AUDIO_AND_SPEAKER = 3626f34f5ab8ab1b1db7887e5405d8b0031e105ab05Jungshik Jang (DEVICE_OUT_ALL_HDMI_SYSTEM_AUDIO | 3636f34f5ab8ab1b1db7887e5405d8b0031e105ab05Jungshik Jang DEVICE_OUT_SPEAKER); 36459f482764e346a5c5ac118ee1f7b24da645c2559Eric Laurent 365a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent // input devices 36653082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_COMMUNICATION = DEVICE_BIT_IN | 0x1; 36753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_AMBIENT = DEVICE_BIT_IN | 0x2; 36853082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_BUILTIN_MIC = DEVICE_BIT_IN | 0x4; 36953082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_BLUETOOTH_SCO_HEADSET = DEVICE_BIT_IN | 0x8; 37053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_WIRED_HEADSET = DEVICE_BIT_IN | 0x10; 37153082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_AUX_DIGITAL = DEVICE_BIT_IN | 0x20; 372948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_HDMI = DEVICE_IN_AUX_DIGITAL; 37353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_VOICE_CALL = DEVICE_BIT_IN | 0x40; 374948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_TELEPHONY_RX = DEVICE_IN_VOICE_CALL; 37553082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_BACK_MIC = DEVICE_BIT_IN | 0x80; 37653082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_REMOTE_SUBMIX = DEVICE_BIT_IN | 0x100; 37753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_ANLG_DOCK_HEADSET = DEVICE_BIT_IN | 0x200; 37853082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_DGTL_DOCK_HEADSET = DEVICE_BIT_IN | 0x400; 37953082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_USB_ACCESSORY = DEVICE_BIT_IN | 0x800; 38053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_USB_DEVICE = DEVICE_BIT_IN | 0x1000; 381948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_FM_TUNER = DEVICE_BIT_IN | 0x2000; 382948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_TV_TUNER = DEVICE_BIT_IN | 0x4000; 383948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_LINE = DEVICE_BIT_IN | 0x8000; 384948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final int DEVICE_IN_SPDIF = DEVICE_BIT_IN | 0x10000; 3850a40ec2192e4836b2fcb6ba51a7688aa6bd4ee98Mike Lockwood public static final int DEVICE_IN_BLUETOOTH_A2DP = DEVICE_BIT_IN | 0x20000; 386112c19ee8b459439c3462767199832e5394b37a8Terry Heo public static final int DEVICE_IN_LOOPBACK = DEVICE_BIT_IN | 0x40000; 3871e725f8137391474b71ebd9109a0968ecef5373fEric Laurent public static final int DEVICE_IN_IP = DEVICE_BIT_IN | 0x80000; 38853082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_DEFAULT = DEVICE_BIT_IN | DEVICE_BIT_DEFAULT; 38953082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent 39053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_ALL = (DEVICE_IN_COMMUNICATION | 39153082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_AMBIENT | 39253082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_BUILTIN_MIC | 39353082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_BLUETOOTH_SCO_HEADSET | 39453082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_WIRED_HEADSET | 395948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_HDMI | 396948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_TELEPHONY_RX | 39753082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_BACK_MIC | 39853082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_REMOTE_SUBMIX | 39953082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_ANLG_DOCK_HEADSET | 40053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_DGTL_DOCK_HEADSET | 40153082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_USB_ACCESSORY | 40253082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_USB_DEVICE | 403948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_FM_TUNER | 404948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_TV_TUNER | 405948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_LINE | 406948d32748caaac5be06c991ebf00f74265a7849fEric Laurent DEVICE_IN_SPDIF | 4070a40ec2192e4836b2fcb6ba51a7688aa6bd4ee98Mike Lockwood DEVICE_IN_BLUETOOTH_A2DP | 408112c19ee8b459439c3462767199832e5394b37a8Terry Heo DEVICE_IN_LOOPBACK | 4091e725f8137391474b71ebd9109a0968ecef5373fEric Laurent DEVICE_IN_IP | 41053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent DEVICE_IN_DEFAULT); 41153082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final int DEVICE_IN_ALL_SCO = DEVICE_IN_BLUETOOTH_SCO_HEADSET; 412c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean public static final int DEVICE_IN_ALL_USB = (DEVICE_IN_USB_ACCESSORY | 413c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean DEVICE_IN_USB_DEVICE); 414a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 415ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten // device states, must match AudioSystem::device_connection_state 416a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_STATE_UNAVAILABLE = 0; 417a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int DEVICE_STATE_AVAILABLE = 1; 418ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten private static final int NUM_DEVICE_STATES = 1; 419a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 4209bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_EARPIECE_NAME = "earpiece"; 4219bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_SPEAKER_NAME = "speaker"; 4229bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_WIRED_HEADSET_NAME = "headset"; 4239bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_WIRED_HEADPHONE_NAME = "headphone"; 4249bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_SCO_NAME = "bt_sco"; 4259bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_SCO_HEADSET_NAME = "bt_sco_hs"; 4269bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_SCO_CARKIT_NAME = "bt_sco_carkit"; 4279bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_A2DP_NAME = "bt_a2dp"; 4289bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES_NAME = "bt_a2dp_hp"; 4299bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER_NAME = "bt_a2dp_spk"; 4309bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_AUX_DIGITAL_NAME = "aux_digital"; 431948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_HDMI_NAME = "hdmi"; 4329bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_ANLG_DOCK_HEADSET_NAME = "analog_dock"; 4339bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static final String DEVICE_OUT_DGTL_DOCK_HEADSET_NAME = "digital_dock"; 434bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent public static final String DEVICE_OUT_USB_ACCESSORY_NAME = "usb_accessory"; 435bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent public static final String DEVICE_OUT_USB_DEVICE_NAME = "usb_device"; 43653082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent public static final String DEVICE_OUT_REMOTE_SUBMIX_NAME = "remote_submix"; 437948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_TELEPHONY_TX_NAME = "telephony_tx"; 438948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_LINE_NAME = "line"; 439948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_HDMI_ARC_NAME = "hmdi_arc"; 440948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_SPDIF_NAME = "spdif"; 441948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static final String DEVICE_OUT_FM_NAME = "fm_transmitter"; 4422b29bc4c1cef64abdf3a68b60bdcf7207193e980John Spurlock public static final String DEVICE_OUT_AUX_LINE_NAME = "aux_line"; 44307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_OUT_SPEAKER_SAFE_NAME = "speaker_safe"; 4441e725f8137391474b71ebd9109a0968ecef5373fEric Laurent public static final String DEVICE_OUT_IP_NAME = "ip"; 44507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood 44607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_COMMUNICATION_NAME = "communication"; 44707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_AMBIENT_NAME = "ambient"; 44807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_BUILTIN_MIC_NAME = "mic"; 44907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_BLUETOOTH_SCO_HEADSET_NAME = "bt_sco_hs"; 45007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_WIRED_HEADSET_NAME = "headset"; 45107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_AUX_DIGITAL_NAME = "aux_digital"; 45207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_TELEPHONY_RX_NAME = "telephony_rx"; 45307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_BACK_MIC_NAME = "back_mic"; 45407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_REMOTE_SUBMIX_NAME = "remote_submix"; 45507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_ANLG_DOCK_HEADSET_NAME = "analog_dock"; 45607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_DGTL_DOCK_HEADSET_NAME = "digital_dock"; 45707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_USB_ACCESSORY_NAME = "usb_accessory"; 45807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_USB_DEVICE_NAME = "usb_device"; 45907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_FM_TUNER_NAME = "fm_tuner"; 46007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_TV_TUNER_NAME = "tv_tuner"; 46107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_LINE_NAME = "line"; 46207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_SPDIF_NAME = "spdif"; 46307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_BLUETOOTH_A2DP_NAME = "bt_a2dp"; 46407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static final String DEVICE_IN_LOOPBACK_NAME = "loopback"; 4651e725f8137391474b71ebd9109a0968ecef5373fEric Laurent public static final String DEVICE_IN_IP_NAME = "ip"; 4669bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent 467948d32748caaac5be06c991ebf00f74265a7849fEric Laurent public static String getOutputDeviceName(int device) 4689bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent { 4699bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent switch(device) { 4709bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_EARPIECE: 4719bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_EARPIECE_NAME; 4729bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_SPEAKER: 4739bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_SPEAKER_NAME; 4749bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_WIRED_HEADSET: 4759bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_WIRED_HEADSET_NAME; 4769bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_WIRED_HEADPHONE: 4779bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_WIRED_HEADPHONE_NAME; 4789bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_SCO: 4799bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_SCO_NAME; 4809bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_SCO_HEADSET: 4819bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_SCO_HEADSET_NAME; 4829bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_SCO_CARKIT: 4839bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_SCO_CARKIT_NAME; 4849bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_A2DP: 4859bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_A2DP_NAME; 4869bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES: 4879bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES_NAME; 4889bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER: 4899bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER_NAME; 490948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_HDMI: 491948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_HDMI_NAME; 4929bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_ANLG_DOCK_HEADSET: 4939bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_ANLG_DOCK_HEADSET_NAME; 4949bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent case DEVICE_OUT_DGTL_DOCK_HEADSET: 4959bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent return DEVICE_OUT_DGTL_DOCK_HEADSET_NAME; 496bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent case DEVICE_OUT_USB_ACCESSORY: 497bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent return DEVICE_OUT_USB_ACCESSORY_NAME; 498bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent case DEVICE_OUT_USB_DEVICE: 499bffc3d1bd33eb2d8e00a9f8b6261d815db503311Eric Laurent return DEVICE_OUT_USB_DEVICE_NAME; 50053082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent case DEVICE_OUT_REMOTE_SUBMIX: 50153082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent return DEVICE_OUT_REMOTE_SUBMIX_NAME; 502948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_TELEPHONY_TX: 503948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_TELEPHONY_TX_NAME; 504948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_LINE: 505948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_LINE_NAME; 506948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_HDMI_ARC: 507948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_HDMI_ARC_NAME; 508948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_SPDIF: 509948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_SPDIF_NAME; 510948d32748caaac5be06c991ebf00f74265a7849fEric Laurent case DEVICE_OUT_FM: 511948d32748caaac5be06c991ebf00f74265a7849fEric Laurent return DEVICE_OUT_FM_NAME; 5122b29bc4c1cef64abdf3a68b60bdcf7207193e980John Spurlock case DEVICE_OUT_AUX_LINE: 5132b29bc4c1cef64abdf3a68b60bdcf7207193e980John Spurlock return DEVICE_OUT_AUX_LINE_NAME; 51407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_OUT_SPEAKER_SAFE: 51507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_OUT_SPEAKER_SAFE_NAME; 5161e725f8137391474b71ebd9109a0968ecef5373fEric Laurent case DEVICE_OUT_IP: 5171e725f8137391474b71ebd9109a0968ecef5373fEric Laurent return DEVICE_OUT_IP_NAME; 51853082eced917e0af8fd06486e824d3ea78bc65b6Eric Laurent case DEVICE_OUT_DEFAULT: 5199bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent default: 52007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return Integer.toString(device); 5219bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent } 5229bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent } 5239bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent 52407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood public static String getInputDeviceName(int device) 52507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood { 52607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood switch(device) { 52707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_COMMUNICATION: 52807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_COMMUNICATION_NAME; 52907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_AMBIENT: 53007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_AMBIENT_NAME; 53107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_BUILTIN_MIC: 53207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_BUILTIN_MIC_NAME; 53307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_BLUETOOTH_SCO_HEADSET: 53407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_BLUETOOTH_SCO_HEADSET_NAME; 53507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_WIRED_HEADSET: 53607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_WIRED_HEADSET_NAME; 53707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_AUX_DIGITAL: 53807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_AUX_DIGITAL_NAME; 53907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_TELEPHONY_RX: 54007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_TELEPHONY_RX_NAME; 54107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_BACK_MIC: 54207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_BACK_MIC_NAME; 54307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_REMOTE_SUBMIX: 54407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_REMOTE_SUBMIX_NAME; 54507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_ANLG_DOCK_HEADSET: 54607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_ANLG_DOCK_HEADSET_NAME; 54707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_DGTL_DOCK_HEADSET: 54807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_DGTL_DOCK_HEADSET_NAME; 54907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_USB_ACCESSORY: 55007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_USB_ACCESSORY_NAME; 55107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_USB_DEVICE: 55207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_USB_DEVICE_NAME; 55307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_FM_TUNER: 55407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_FM_TUNER_NAME; 55507cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_TV_TUNER: 55607cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_TV_TUNER_NAME; 55707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_LINE: 55807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_LINE_NAME; 55907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_SPDIF: 56007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_SPDIF_NAME; 56107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_BLUETOOTH_A2DP: 56207cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_BLUETOOTH_A2DP_NAME; 56307cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_LOOPBACK: 56407cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return DEVICE_IN_LOOPBACK_NAME; 5651e725f8137391474b71ebd9109a0968ecef5373fEric Laurent case DEVICE_IN_IP: 5661e725f8137391474b71ebd9109a0968ecef5373fEric Laurent return DEVICE_IN_IP_NAME; 56707cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood case DEVICE_IN_DEFAULT: 56807cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood default: 56907cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood return Integer.toString(device); 57007cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood } 57107cd124b09a63985f0b200de248fab165f736ae4Mike Lockwood } 572948d32748caaac5be06c991ebf00f74265a7849fEric Laurent 573ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten // phone state, match audio_mode??? 574a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int PHONE_STATE_OFFCALL = 0; 575a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int PHONE_STATE_RINGING = 1; 576a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int PHONE_STATE_INCALL = 2; 577a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 578ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten // device categories config for setForceUse, must match AudioSystem::forced_config 579a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_NONE = 0; 580a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_SPEAKER = 1; 581a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_HEADPHONES = 2; 582a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_BT_SCO = 3; 583a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_BT_A2DP = 4; 584a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_WIRED_ACCESSORY = 5; 585eb14a783be073b5fd6e8c8c9bc87d2d1919f2c9eEric Laurent public static final int FORCE_BT_CAR_DOCK = 6; 586eb14a783be073b5fd6e8c8c9bc87d2d1919f2c9eEric Laurent public static final int FORCE_BT_DESK_DOCK = 7; 58721e941bf43362ddc6639a9f2d0828053360f53d7Praveen Bharathi public static final int FORCE_ANALOG_DOCK = 8; 58821e941bf43362ddc6639a9f2d0828053360f53d7Praveen Bharathi public static final int FORCE_DIGITAL_DOCK = 9; 5897847211fb4699bf6018e29d214a918ed6657319bEric Laurent public static final int FORCE_NO_BT_A2DP = 10; 590c203ecfd9f6c356542fcb10bc85b27b98b170ddfJean-Michel Trivi public static final int FORCE_SYSTEM_ENFORCED = 11; 59112307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang public static final int FORCE_HDMI_SYSTEM_AUDIO_ENFORCED = 12; 59212307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang private static final int NUM_FORCE_CONFIG = 13; 593a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FORCE_DEFAULT = FORCE_NONE; 594a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 595ed0079ddddd4070f3369b13b274222da2e69f4b9Glenn Kasten // usage for setForceUse, must match AudioSystem::force_use 596a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FOR_COMMUNICATION = 0; 597a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FOR_MEDIA = 1; 598a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static final int FOR_RECORD = 2; 5996154412ee8e07e9cde129cccb944dd7ed9dcef53Jean-Michel Trivi public static final int FOR_DOCK = 3; 600dd45d01128423a82652a3c9d77fa393631d95229Eric Laurent public static final int FOR_SYSTEM = 4; 60112307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang public static final int FOR_HDMI_SYSTEM_AUDIO = 5; 60212307ca810e8100981b2b60e3f2c6a7e451b9774Jungshik Jang private static final int NUM_FORCE_USE = 6; 603a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent 604505e5c8859f596ed58489be565d6e029314b2ac8Eric Laurent // usage for AudioRecord.startRecordingSync(), must match AudioSystem::sync_event_t 605505e5c8859f596ed58489be565d6e029314b2ac8Eric Laurent public static final int SYNC_EVENT_NONE = 0; 606505e5c8859f596ed58489be565d6e029314b2ac8Eric Laurent public static final int SYNC_EVENT_PRESENTATION_COMPLETE = 1; 607505e5c8859f596ed58489be565d6e029314b2ac8Eric Laurent 6086d00e41145a577de114f93985bf05d7eca99ccc3Jean-Michel Trivi /** 6096d00e41145a577de114f93985bf05d7eca99ccc3Jean-Michel Trivi * @return command completion status, one of {@link #AUDIO_STATUS_OK}, 6106d00e41145a577de114f93985bf05d7eca99ccc3Jean-Michel Trivi * {@link #AUDIO_STATUS_ERROR} or {@link #AUDIO_STATUS_SERVER_DIED} 6116d00e41145a577de114f93985bf05d7eca99ccc3Jean-Michel Trivi */ 61210804eb2818ab59b763a37b4f6151693c2ebba7bPaul McLean public static native int setDeviceConnectionState(int device, int state, 61310804eb2818ab59b763a37b4f6151693c2ebba7bPaul McLean String device_address, String device_name); 614a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int getDeviceConnectionState(int device, String device_address); 615a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int setPhoneState(int state); 616a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int setForceUse(int usage, int config); 617a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int getForceUse(int usage); 618a553c25b33c99b345cf1c8688f8df0ed8df14e5aEric Laurent public static native int initStreamVolume(int stream, int indexMin, int indexMax); 6199bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static native int setStreamVolumeIndex(int stream, int index, int device); 6209bc8358ddaa01c3490f9709991989633a6a3dd42Eric Laurent public static native int getStreamVolumeIndex(int stream, int device); 621cbdb49dc5e1b993a0bc5c68dbfb9486bfa0cd762Mike Lockwood public static native int setMasterVolume(float value); 622cbdb49dc5e1b993a0bc5c68dbfb9486bfa0cd762Mike Lockwood public static native float getMasterVolume(); 623cbdb49dc5e1b993a0bc5c68dbfb9486bfa0cd762Mike Lockwood public static native int setMasterMute(boolean mute); 624cbdb49dc5e1b993a0bc5c68dbfb9486bfa0cd762Mike Lockwood public static native boolean getMasterMute(); 6258b4b97a14ad9b5b982d8fe92755efabec8ad0076Glenn Kasten public static native int getDevicesForStream(int stream); 626c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten 627c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten // helpers for android.media.AudioManager.getProperty(), see description there for meaning 628c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten public static native int getPrimaryOutputSamplingRate(); 629c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten public static native int getPrimaryOutputFrameCount(); 63061dcdf3764b614c6f01e77cb4342d192e3101f8aOliver Woodman public static native int getOutputLatency(int stream); 631c6c4365ddb0213c548b055f257dc8077389224fbGlenn Kasten 632fd116ad1ab02f6060a0b2201f018317fa32e28b4Glenn Kasten public static native int setLowRamDevice(boolean isLowRamDevice); 633dfb881f96af7898151940a4bbc52e45e6043d38bEric Laurent public static native int checkAudioFlinger(); 634b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent 635b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent public static native int listAudioPorts(ArrayList<AudioPort> ports, int[] generation); 636b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent public static native int createAudioPatch(AudioPatch[] patch, 637b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent AudioPortConfig[] sources, AudioPortConfig[] sinks); 638b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent public static native int releaseAudioPatch(AudioPatch patch); 639b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent public static native int listAudioPatches(ArrayList<AudioPatch> patches, int[] generation); 6403a24199a0fe9479802ff6096d82cb3745efa1f1fEric Laurent public static native int setAudioPortConfig(AudioPortConfig config); 641b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent 6425a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi // declare this instance as having a dynamic policy callback handler 6435a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi private static native final void native_register_dynamic_policy_callback(); 6445a56109d1f5c00404c8f0e4281b9ac1392d72886Jean-Michel Trivi 645b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent // must be kept in sync with value in include/system/audio.h 646b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent public static final int AUDIO_HW_SYNC_INVALID = 0; 647b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent 648b634e1b6d6bda56128c354b1803b04b537e3799dEric Laurent public static native int getAudioHwSyncForSession(int sessionId); 6497f5eb9fe3c10d8d83ff0e2b0fc60a05c2e6d5b02Eric Laurent 6507f5eb9fe3c10d8d83ff0e2b0fc60a05c2e6d5b02Eric Laurent public static native int registerPolicyMixes(ArrayList<AudioMix> mixes, boolean register); 6516156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6520867bed9ddb3bea3d7c252791f8b62ae21ad3de5Eric Laurent public static native int systemReady(); 6536156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6546156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock // Items shared with audio service 6556156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6566156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** 6576156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * The delay before playing a sound. This small period exists so the user 6586156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * can press another key (non-volume keys, too) to have it NOT be audible. 6596156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <p> 6606156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * PhoneWindow will implement this part. 6616156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock */ 6626156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int PLAY_SOUND_DELAY = 300; 6636156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6646156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** 6656156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * Constant to identify a focus stack entry that is used to hold the focus while the phone 6666156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * is ringing or during a call. Used by com.android.internal.telephony.CallManager when 6676156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * entering and exiting calls. 6686156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock */ 6696156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public final static String IN_VOICE_COMM_FOCUS_ID = "AudioFocus_For_Phone_Ring_And_Calls"; 6706156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6716156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** 6726156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * @see AudioManager#setVibrateSetting(int, int) 6736156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock */ 6746156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static int getValueForVibrateSetting(int existingValue, int vibrateType, 6756156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock int vibrateSetting) { 6766156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6776156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock // First clear the existing setting. Each vibrate type has two bits in 6786156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock // the value. Note '3' is '11' in binary. 6796156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock existingValue &= ~(3 << (vibrateType * 2)); 6806156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6816156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock // Set into the old value 6826156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock existingValue |= (vibrateSetting & 3) << (vibrateType * 2); 6836156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6846156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return existingValue; 6856156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 6866156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6876156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static int getDefaultStreamVolume(int streamType) { 6886156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return DEFAULT_STREAM_VOLUME[streamType]; 6896156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 6906156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6916156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static int[] DEFAULT_STREAM_VOLUME = new int[] { 6926156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 4, // STREAM_VOICE_CALL 6936156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7, // STREAM_SYSTEM 6946156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 5, // STREAM_RING 6956156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 11, // STREAM_MUSIC 6966156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 6, // STREAM_ALARM 6976156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 5, // STREAM_NOTIFICATION 6986156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7, // STREAM_BLUETOOTH_SCO 6996156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7, // STREAM_SYSTEM_ENFORCED 7006156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 11, // STREAM_DTMF 7016156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 11 // STREAM_TTS 7026156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock }; 7036156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7046156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static String streamToString(int stream) { 7056156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock if (stream >= 0 && stream < STREAM_NAMES.length) return STREAM_NAMES[stream]; 7066156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock if (stream == AudioManager.USE_DEFAULT_STREAM_TYPE) return "USE_DEFAULT_STREAM_TYPE"; 7076156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return "UNKNOWN_STREAM_" + stream; 7086156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 7096156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7106156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** The platform has no specific capabilities */ 7116156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int PLATFORM_DEFAULT = 0; 7126156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** The platform is voice call capable (a phone) */ 7136156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int PLATFORM_VOICE = 1; 7146156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** The platform is a television or a set-top box */ 7156156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int PLATFORM_TELEVISION = 2; 7166156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7176156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock /** 7186156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * Return the platform type that this is running on. One of: 7196156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <ul> 7206156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <li>{@link #PLATFORM_VOICE}</li> 7216156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <li>{@link #PLATFORM_TELEVISION}</li> 7226156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * <li>{@link #PLATFORM_DEFAULT}</li> 7236156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock * </ul> 7246156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock */ 7256156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static int getPlatformType(Context context) { 7266156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock if (context.getResources().getBoolean(com.android.internal.R.bool.config_voice_capable)) { 7276156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return PLATFORM_VOICE; 7286156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } else if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK)) { 7296156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return PLATFORM_TELEVISION; 7306156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } else { 7316156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock return PLATFORM_DEFAULT; 7326156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 7336156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock } 7346156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock 7356156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock public static final int DEFAULT_MUTE_STREAMS_AFFECTED = 7366156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock (1 << STREAM_MUSIC) | 7376156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock (1 << STREAM_RING) | 7386156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock (1 << STREAM_NOTIFICATION) | 7396156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock (1 << STREAM_SYSTEM); 7404bcdba848449b33d7022de527c526943aff1f5fdEric Laurent 7414bcdba848449b33d7022de527c526943aff1f5fdEric Laurent /** 7424bcdba848449b33d7022de527c526943aff1f5fdEric Laurent * Event posted by AudioTrack and AudioRecord JNI (JNIDeviceCallback) when routing changes. 7434bcdba848449b33d7022de527c526943aff1f5fdEric Laurent * Keep in sync with core/jni/android_media_DeviceCallback.h. 7444bcdba848449b33d7022de527c526943aff1f5fdEric Laurent */ 7454bcdba848449b33d7022de527c526943aff1f5fdEric Laurent final static int NATIVE_EVENT_ROUTING_CHANGE = 1000; 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 747b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent 748