常用音频概念
常用音頻概念
1、音頻輸出通道-setForceUse()強制使用的設備類型配置
設置強制使用的設備類型配置
D AudioPolicyManagerCustom: setForceUse() usage 7, config 0, mPhoneState 3
usage:指的是音頻的使用場景,config:指的是音頻從哪里發出,
frameworks/base/media/java/android/media/AudioSystem.java
1323 // device categories config for setForceUse, must match audio_policy_forced_cfg_t 1324 /** @hide */ @UnsupportedAppUsage public static final int FORCE_NONE = 0; 1325 /** @hide */ public static final int FORCE_SPEAKER = 1; //揚聲器通道 1326 /** @hide */ public static final int FORCE_HEADPHONES = 2; //耳機通道 1327 /** @hide */ public static final int FORCE_BT_SCO = 3; //是一種雙向的音頻數據的傳輸鏈路,只能用于普通語音的傳輸,不能播放音樂 1328 /** @hide */ public static final int FORCE_BT_A2DP = 4; //是一種單向的高品質音頻數據傳輸鏈路,通常用于播放立體聲音樂 1329 /** @hide */ public static final int FORCE_WIRED_ACCESSORY = 5; //有線設備通道,如有線耳機 1330 /** @hide */ @UnsupportedAppUsage public static final int FORCE_BT_CAR_DOCK = 6; 1331 /** @hide */ @UnsupportedAppUsage public static final int FORCE_BT_DESK_DOCK = 7; 1332 /** @hide */ @UnsupportedAppUsage public static final int FORCE_ANALOG_DOCK = 8; 1333 /** @hide */ @UnsupportedAppUsage public static final int FORCE_DIGITAL_DOCK = 9; 1334 /** @hide */ public static final int FORCE_NO_BT_A2DP = 10; 1335 /** @hide */ public static final int FORCE_SYSTEM_ENFORCED = 11; 1336 /** @hide */ public static final int FORCE_HDMI_SYSTEM_AUDIO_ENFORCED = 12; 1337 /** @hide */ public static final int FORCE_ENCODED_SURROUND_NEVER = 13; 1338 /** @hide */ public static final int FORCE_ENCODED_SURROUND_ALWAYS = 14; 1339 /** @hide */ public static final int FORCE_ENCODED_SURROUND_MANUAL = 15; 1340 /** @hide */ public static final int FORCE_EARPIECE = 16; 1341 /** @hide */ public static final int NUM_FORCE_CONFIG = 17; 1342 /** @hide */ public static final int FORCE_DEFAULT = FORCE_NONE;AUDIO_DEVICE_OUT_EARPIECE = 0x1, // 聽筒 AUDIO_DEVICE_OUT_SPEAKER = 0x2, // 揚聲器 AUDIO_DEVICE_OUT_WIRED_HEADSET = 0x4, // 線控耳機 AUDIO_DEVICE_OUT_WIRED_HEADPHONE = 0x8, // 普通耳機 AUDIO_DEVICE_OUT_BLUETOOTH_SCO = 0x10, // 單聲道藍牙耳機 AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20, // 藍牙電話 AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40, // 車載免提藍牙設備 AUDIO_DEVICE_OUT_BLUETOOTH_A2DP = 0x80, // 立體聲藍牙耳機
2、設置通道模式 setMode()
frameworks/base/media/java/android/media/AudioSystem.java
154 /* modes for setPhoneState, must match AudioSystem.h audio_mode */ 155 /** @hide */ 156 public static final int MODE_INVALID = -2; 157 /** @hide */ 158 public static final int MODE_CURRENT = -1; 159 /** @hide */ 160 public static final int MODE_NORMAL = 0; //待機模式 161 /** @hide */ 162 public static final int MODE_RINGTONE = 1; //l鈴聲模式 163 /** @hide */ 164 public static final int MODE_IN_CALL = 2; //音頻通話模式 165 /** @hide */ 166 public static final int MODE_IN_COMMUNICATION = 3; //通信模式,包括音視頻,voip通話 167 /** @hide */ 168 public static final int MODE_CALL_SCREENING = 4; 169 /** @hide */ 170 public static final int NUM_MODES = 5;與底層代碼system/media/audio/include/system/audio-base.h相對應
333#endif // AUDIO_NO_SYSTEM_DECLARATIONS 334 AUDIO_MODE_NORMAL = 0, 335 AUDIO_MODE_RINGTONE = 1, 336 AUDIO_MODE_IN_CALL = 2, 337 AUDIO_MODE_IN_COMMUNICATION = 3, 338 AUDIO_MODE_CALL_SCREEN = 4, 339} audio_mode_t;3、音頻流類型
frameworks/base/media/java/android/media/AudioSystem.java
64 /** @hide Used to identify the default audio stream volume */65 @TestApi66 public static final int STREAM_DEFAULT = -1; //默認流67 /** @hide Used to identify the volume of audio streams for phone calls */68 public static final int STREAM_VOICE_CALL = 0; //電話通話音頻流69 /** @hide Used to identify the volume of audio streams for system sounds */70 public static final int STREAM_SYSTEM = 1; //系統音頻流71 /** @hide Used to identify the volume of audio streams for the phone ring and message alerts */72 public static final int STREAM_RING = 2; //鈴聲音頻流73 /** @hide Used to identify the volume of audio streams for music playback */74 public static final int STREAM_MUSIC = 3; //音樂音頻流75 /** @hide Used to identify the volume of audio streams for alarms */76 public static final int STREAM_ALARM = 4; //鬧鐘流77 /** @hide Used to identify the volume of audio streams for notifications */78 public static final int STREAM_NOTIFICATION = 5; //通知音頻流79 /** @hide80 * Used to identify the volume of audio streams for phone calls when connected on bluetooth */81 public static final int STREAM_BLUETOOTH_SCO = 6;82 /** @hide Used to identify the volume of audio streams for enforced system sounds in certain83 * countries (e.g camera in Japan) */84 @UnsupportedAppUsage 85 public static final int STREAM_SYSTEM_ENFORCED = 7;86 /** @hide Used to identify the volume of audio streams for DTMF tones */87 public static final int STREAM_DTMF = 8;88 /** @hide Used to identify the volume of audio streams exclusively transmitted through the89 * speaker (TTS) of the device */90 public static final int STREAM_TTS = 9;91 /** @hide Used to identify the volume of audio streams for accessibility prompts */92 public static final int STREAM_ACCESSIBILITY = 10;93 /** @hide Used to identify the volume of audio streams for virtual assistant */94 public static final int STREAM_ASSISTANT = 11;
4、audio output devices 輸入/輸出設備
frameworks/base/media/java/android/media/AudioSystem.java
644 public static final String DEVICE_OUT_EARPIECE_NAME = "earpiece"; 聽筒 645 public static final String DEVICE_OUT_SPEAKER_NAME = "speaker"; 揚聲器 646 public static final String DEVICE_OUT_WIRED_HEADSET_NAME = "headset"; 帶話筒的耳機 647 public static final String DEVICE_OUT_WIRED_HEADPHONE_NAME = "headphone"; 不帶話筒的耳機 648 public static final String DEVICE_OUT_BLUETOOTH_SCO_NAME = "bt_sco"; 藍牙,面向連接(SCO)方式:主要用于話音傳輸 649 public static final String DEVICE_OUT_BLUETOOTH_SCO_HEADSET_NAME = "bt_sco_hs"; 藍牙耳機,帶話筒 650 public static final String DEVICE_OUT_BLUETOOTH_SCO_CARKIT_NAME = "bt_sco_carkit"; 藍牙車載設備 651 public static final String DEVICE_OUT_BLUETOOTH_A2DP_NAME = "bt_a2dp"; 藍牙立體聲 652 public static final String DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES_NAME = "bt_a2dp_hp"; 藍牙立體聲音耳機 653 public static final String DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER_NAME = "bt_a2dp_spk"; 帶話筒的 654 public static final String DEVICE_OUT_AUX_DIGITAL_NAME = "aux_digital"; 655 public static final String DEVICE_OUT_HDMI_NAME = "hdmi"; 656 public static final String DEVICE_OUT_ANLG_DOCK_HEADSET_NAME = "analog_dock"; 通過基座連接的模擬有線耳機 657 public static final String DEVICE_OUT_DGTL_DOCK_HEADSET_NAME = "digital_dock"; 通過基座連接的數字有線耳機 658 public static final String DEVICE_OUT_USB_ACCESSORY_NAME = "usb_accessory"; 659 public static final String DEVICE_OUT_USB_DEVICE_NAME = "usb_device"; 660 public static final String DEVICE_OUT_REMOTE_SUBMIX_NAME = "remote_submix"; 661 public static final String DEVICE_OUT_TELEPHONY_TX_NAME = "telephony_tx"; 662 public static final String DEVICE_OUT_LINE_NAME = "line"; 663 public static final String DEVICE_OUT_HDMI_ARC_NAME = "hmdi_arc"; 664 public static final String DEVICE_OUT_SPDIF_NAME = "spdif"; 665 public static final String DEVICE_OUT_FM_NAME = "fm_transmitter"; 666 public static final String DEVICE_OUT_AUX_LINE_NAME = "aux_line"; 667 public static final String DEVICE_OUT_SPEAKER_SAFE_NAME = "speaker_safe"; 668 public static final String DEVICE_OUT_IP_NAME = "ip"; 669 public static final String DEVICE_OUT_BUS_NAME = "bus"; 670 public static final String DEVICE_OUT_PROXY_NAME = "proxy"; 671 public static final String DEVICE_OUT_USB_HEADSET_NAME = "usb_headset"; 672 public static final String DEVICE_OUT_HEARING_AID_NAME = "hearing_aid_out";藍牙解析
藍牙基帶技術支持兩種連接方式:
面向連接(SCO)方式:主要用于話音傳輸;
無連接(ACL)方式:主要用于分組數據傳輸。
A2DP是Advanced Audio Distribution Profile, 是立體聲的.
A2DP只管輸出,立體的,沒有輸入,主要用于播放音樂; SCO管通訊,有輸出也有接收,但是單聲道的,主要用于話音傳輸
vendor/qcom/opensource/commonsys/packages/apps/Bluetooth/src/com/android/bluetooth/a2dp/A2dpStackEvent.java#35
446 // 447 // audio device definitions: must be kept in sync with values in system/core/audio.h 448 // 449 450 public static final int DEVICE_NONE = 0x0; 451 // reserved bits 452 public static final int DEVICE_BIT_IN = 0x80000000; 453 public static final int DEVICE_BIT_DEFAULT = 0x40000000; 454 // output devices, be sure to update AudioManager.java also 455 @UnsupportedAppUsage 456 public static final int DEVICE_OUT_EARPIECE = 0x1; 457 @UnsupportedAppUsage 458 public static final int DEVICE_OUT_SPEAKER = 0x2; 459 @UnsupportedAppUsage 460 public static final int DEVICE_OUT_WIRED_HEADSET = 0x4; 461 @UnsupportedAppUsage 462 public static final int DEVICE_OUT_WIRED_HEADPHONE = 0x8; 463 @UnsupportedAppUsage 464 public static final int DEVICE_OUT_BLUETOOTH_SCO = 0x10; 465 @UnsupportedAppUsage 466 public static final int DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20; 467 @UnsupportedAppUsage 468 public static final int DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40; 469 @UnsupportedAppUsage 470 public static final int DEVICE_OUT_BLUETOOTH_A2DP = 0x80; 471 @UnsupportedAppUsage 472 public static final int DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100; 473 @UnsupportedAppUsage 474 public static final int DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200; 475 @UnsupportedAppUsage 476 public static final int DEVICE_OUT_AUX_DIGITAL = 0x400; 477 public static final int DEVICE_OUT_HDMI = DEVICE_OUT_AUX_DIGITAL; 478 @UnsupportedAppUsage 479 public static final int DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800; 480 @UnsupportedAppUsage 481 public static final int DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000; 482 @UnsupportedAppUsage 483 public static final int DEVICE_OUT_USB_ACCESSORY = 0x2000; 484 @UnsupportedAppUsage 485 public static final int DEVICE_OUT_USB_DEVICE = 0x4000; 486 @UnsupportedAppUsage 487 public static final int DEVICE_OUT_REMOTE_SUBMIX = 0x8000; 488 @UnsupportedAppUsage 489 public static final int DEVICE_OUT_TELEPHONY_TX = 0x10000; 490 public static final int DEVICE_OUT_LINE = 0x20000; 491 public static final int DEVICE_OUT_HDMI_ARC = 0x40000; 492 public static final int DEVICE_OUT_SPDIF = 0x80000; 493 @UnsupportedAppUsage 494 public static final int DEVICE_OUT_FM = 0x100000; 495 public static final int DEVICE_OUT_AUX_LINE = 0x200000; 496 public static final int DEVICE_OUT_SPEAKER_SAFE = 0x400000; 497 public static final int DEVICE_OUT_IP = 0x800000; 498 public static final int DEVICE_OUT_BUS = 0x1000000; 499 public static final int DEVICE_OUT_PROXY = 0x2000000; 500 public static final int DEVICE_OUT_USB_HEADSET = 0x4000000; 501 public static final int DEVICE_OUT_HEARING_AID = 0x8000000;輸出設備的進一步分類:
frameworks/base/media/java/android/media/AudioSystem.java
503 public static final int DEVICE_OUT_DEFAULT = DEVICE_BIT_DEFAULT; 504 505 public static final int DEVICE_OUT_ALL = (DEVICE_OUT_EARPIECE | 506 DEVICE_OUT_SPEAKER | 507 DEVICE_OUT_WIRED_HEADSET | 508 DEVICE_OUT_WIRED_HEADPHONE | 509 DEVICE_OUT_BLUETOOTH_SCO | 510 DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 511 DEVICE_OUT_BLUETOOTH_SCO_CARKIT | 512 DEVICE_OUT_BLUETOOTH_A2DP | 513 DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 514 DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | 515 DEVICE_OUT_HDMI | 516 DEVICE_OUT_ANLG_DOCK_HEADSET | 517 DEVICE_OUT_DGTL_DOCK_HEADSET | 518 DEVICE_OUT_USB_ACCESSORY | 519 DEVICE_OUT_USB_DEVICE | 520 DEVICE_OUT_REMOTE_SUBMIX | 521 DEVICE_OUT_TELEPHONY_TX | 522 DEVICE_OUT_LINE | 523 DEVICE_OUT_HDMI_ARC | 524 DEVICE_OUT_SPDIF | 525 DEVICE_OUT_FM | 526 DEVICE_OUT_AUX_LINE | 527 DEVICE_OUT_SPEAKER_SAFE | 528 DEVICE_OUT_IP | 529 DEVICE_OUT_BUS | 530 DEVICE_OUT_PROXY | 531 DEVICE_OUT_USB_HEADSET | 532 DEVICE_OUT_HEARING_AID | 533 DEVICE_OUT_DEFAULT); 534 public static final int DEVICE_OUT_ALL_A2DP = (DEVICE_OUT_BLUETOOTH_A2DP | 535 DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 536 DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER); 537 public static final int DEVICE_OUT_ALL_SCO = (DEVICE_OUT_BLUETOOTH_SCO | 538 DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 539 DEVICE_OUT_BLUETOOTH_SCO_CARKIT); 540 @UnsupportedAppUsage 541 public static final int DEVICE_OUT_ALL_USB = (DEVICE_OUT_USB_ACCESSORY | 542 DEVICE_OUT_USB_DEVICE | 543 DEVICE_OUT_USB_HEADSET); 544 public static final int DEVICE_OUT_ALL_HDMI_SYSTEM_AUDIO = (DEVICE_OUT_AUX_LINE | 545 DEVICE_OUT_HDMI_ARC | 546 DEVICE_OUT_SPDIF); 547 public static final int DEVICE_ALL_HDMI_SYSTEM_AUDIO_AND_SPEAKER = 548 (DEVICE_OUT_ALL_HDMI_SYSTEM_AUDIO | 549 DEVICE_OUT_SPEAKER);5、audio input devices 輸入設備:
frameworks/base/media/java/android/media/AudioSystem.java
674 public static final String DEVICE_IN_COMMUNICATION_NAME = "communication"; 手機上的話筒 675 public static final String DEVICE_IN_AMBIENT_NAME = "ambient"; 676 public static final String DEVICE_IN_BUILTIN_MIC_NAME = "mic"; 打電話時,我們的聲音會被手機底部的mic采集,底部mic是一個輸入device(主mic) 677 public static final String DEVICE_IN_BLUETOOTH_SCO_HEADSET_NAME = "bt_sco_hs"; 藍牙耳機上的話筒 678 public static final String DEVICE_IN_WIRED_HEADSET_NAME = "headset"; 有線耳機上的話筒 679 public static final String DEVICE_IN_AUX_DIGITAL_NAME = "aux_digital"; 680 public static final String DEVICE_IN_TELEPHONY_RX_NAME = "telephony_rx"; 681 public static final String DEVICE_IN_BACK_MIC_NAME = "back_mic"; 如果打開免提,我們的聲音會被背部的mic采集,背部mic也是一個輸入device(副mic) 682 public static final String DEVICE_IN_REMOTE_SUBMIX_NAME = "remote_submix"; 683 public static final String DEVICE_IN_ANLG_DOCK_HEADSET_NAME = "analog_dock"; 684 public static final String DEVICE_IN_DGTL_DOCK_HEADSET_NAME = "digital_dock"; 685 public static final String DEVICE_IN_USB_ACCESSORY_NAME = "usb_accessory"; 686 public static final String DEVICE_IN_USB_DEVICE_NAME = "usb_device"; 687 public static final String DEVICE_IN_FM_TUNER_NAME = "fm_tuner"; 688 public static final String DEVICE_IN_TV_TUNER_NAME = "tv_tuner"; 689 public static final String DEVICE_IN_LINE_NAME = "line"; 690 public static final String DEVICE_IN_SPDIF_NAME = "spdif"; 691 public static final String DEVICE_IN_BLUETOOTH_A2DP_NAME = "bt_a2dp"; 692 public static final String DEVICE_IN_LOOPBACK_NAME = "loopback"; 693 public static final String DEVICE_IN_IP_NAME = "ip"; 694 public static final String DEVICE_IN_BUS_NAME = "bus"; 695 public static final String DEVICE_IN_PROXY_NAME = "proxy"; 696 public static final String DEVICE_IN_USB_HEADSET_NAME = "usb_headset"; 697 public static final String DEVICE_IN_BLUETOOTH_BLE_NAME = "bt_ble"; 698 public static final String DEVICE_IN_ECHO_REFERENCE_NAME = "echo_reference"; 699 public static final String DEVICE_IN_HDMI_ARC_NAME = "hdmi_arc";frameworks/base/media/java/android/media/AudioSystem.java
551 // input devices 552 @UnsupportedAppUsage 553 public static final int DEVICE_IN_COMMUNICATION = DEVICE_BIT_IN | 0x1; 554 @UnsupportedAppUsage 555 public static final int DEVICE_IN_AMBIENT = DEVICE_BIT_IN | 0x2; 556 @UnsupportedAppUsage 557 public static final int DEVICE_IN_BUILTIN_MIC = DEVICE_BIT_IN | 0x4; 558 @UnsupportedAppUsage 559 public static final int DEVICE_IN_BLUETOOTH_SCO_HEADSET = DEVICE_BIT_IN | 0x8; 560 @UnsupportedAppUsage 561 public static final int DEVICE_IN_WIRED_HEADSET = DEVICE_BIT_IN | 0x10; 562 @UnsupportedAppUsage 563 public static final int DEVICE_IN_AUX_DIGITAL = DEVICE_BIT_IN | 0x20; 564 public static final int DEVICE_IN_HDMI = DEVICE_IN_AUX_DIGITAL; 565 @UnsupportedAppUsage 566 public static final int DEVICE_IN_VOICE_CALL = DEVICE_BIT_IN | 0x40; 567 public static final int DEVICE_IN_TELEPHONY_RX = DEVICE_IN_VOICE_CALL; 568 @UnsupportedAppUsage 569 public static final int DEVICE_IN_BACK_MIC = DEVICE_BIT_IN | 0x80; 570 @UnsupportedAppUsage 571 public static final int DEVICE_IN_REMOTE_SUBMIX = DEVICE_BIT_IN | 0x100; 572 @UnsupportedAppUsage 573 public static final int DEVICE_IN_ANLG_DOCK_HEADSET = DEVICE_BIT_IN | 0x200; 574 @UnsupportedAppUsage 575 public static final int DEVICE_IN_DGTL_DOCK_HEADSET = DEVICE_BIT_IN | 0x400; 576 @UnsupportedAppUsage 577 public static final int DEVICE_IN_USB_ACCESSORY = DEVICE_BIT_IN | 0x800; 578 @UnsupportedAppUsage 579 public static final int DEVICE_IN_USB_DEVICE = DEVICE_BIT_IN | 0x1000; 580 public static final int DEVICE_IN_FM_TUNER = DEVICE_BIT_IN | 0x2000; 581 public static final int DEVICE_IN_TV_TUNER = DEVICE_BIT_IN | 0x4000; 582 public static final int DEVICE_IN_LINE = DEVICE_BIT_IN | 0x8000; 583 public static final int DEVICE_IN_SPDIF = DEVICE_BIT_IN | 0x10000; 584 @UnsupportedAppUsage 585 public static final int DEVICE_IN_BLUETOOTH_A2DP = DEVICE_BIT_IN | 0x20000; 586 public static final int DEVICE_IN_LOOPBACK = DEVICE_BIT_IN | 0x40000; 587 public static final int DEVICE_IN_IP = DEVICE_BIT_IN | 0x80000; 588 public static final int DEVICE_IN_BUS = DEVICE_BIT_IN | 0x100000; 589 public static final int DEVICE_IN_PROXY = DEVICE_BIT_IN | 0x1000000; 590 public static final int DEVICE_IN_USB_HEADSET = DEVICE_BIT_IN | 0x2000000; 591 public static final int DEVICE_IN_BLUETOOTH_BLE = DEVICE_BIT_IN | 0x4000000; 592 public static final int DEVICE_IN_HDMI_ARC = DEVICE_BIT_IN | 0x8000000; 593 public static final int DEVICE_IN_ECHO_REFERENCE = DEVICE_BIT_IN | 0x10000000;**system/media/audio/include/system/audio-base.h **相對應
輸入設備的進一步分類:
595 public static final int DEVICE_IN_DEFAULT = DEVICE_BIT_IN | DEVICE_BIT_DEFAULT; 596 597 public static final int DEVICE_IN_ALL = (DEVICE_IN_COMMUNICATION | 598 DEVICE_IN_AMBIENT | 599 DEVICE_IN_BUILTIN_MIC | 600 DEVICE_IN_BLUETOOTH_SCO_HEADSET | 601 DEVICE_IN_WIRED_HEADSET | 602 DEVICE_IN_HDMI | 603 DEVICE_IN_TELEPHONY_RX | 604 DEVICE_IN_BACK_MIC | 605 DEVICE_IN_REMOTE_SUBMIX | 606 DEVICE_IN_ANLG_DOCK_HEADSET | 607 DEVICE_IN_DGTL_DOCK_HEADSET | 608 DEVICE_IN_USB_ACCESSORY | 609 DEVICE_IN_USB_DEVICE | 610 DEVICE_IN_FM_TUNER | 611 DEVICE_IN_TV_TUNER | 612 DEVICE_IN_LINE | 613 DEVICE_IN_SPDIF | 614 DEVICE_IN_BLUETOOTH_A2DP | 615 DEVICE_IN_LOOPBACK | 616 DEVICE_IN_IP | 617 DEVICE_IN_BUS | 618 DEVICE_IN_PROXY | 619 DEVICE_IN_USB_HEADSET | 620 DEVICE_IN_BLUETOOTH_BLE | 621 DEVICE_IN_HDMI_ARC | 622 DEVICE_IN_ECHO_REFERENCE | 623 DEVICE_IN_DEFAULT); 624 public static final int DEVICE_IN_ALL_SCO = DEVICE_IN_BLUETOOTH_SCO_HEADSET; 625 public static final int DEVICE_IN_ALL_USB = (DEVICE_IN_USB_ACCESSORY | 626 DEVICE_IN_USB_DEVICE | 627 DEVICE_IN_USB_HEADSET);6、設備的狀態:unavailable與available
629 // device states, must match AudioSystem::device_connection_state 630 @UnsupportedAppUsage 631 public static final int DEVICE_STATE_UNAVAILABLE = 0; 632 @UnsupportedAppUsage 633 public static final int DEVICE_STATE_AVAILABLE = 1; 634 private static final int NUM_DEVICE_STATES = 1;
7、音頻使用場景:usage
private static final int USAGE_INVALID = -1; 105 /** 106 * Usage value to use when the usage is unknown. 107 */ 108 public final static int USAGE_UNKNOWN = 0; 沒有明確使用場景 109 /** 110 * Usage value to use when the usage is media, such as music, or movie 111 * soundtracks. 112 */ 113 public final static int USAGE_MEDIA = 1; 多媒體音頻 114 /** 115 * Usage value to use when the usage is voice communications, such as telephony 116 * or VoIP. 117 */ 118 public final static int USAGE_VOICE_COMMUNICATION = 2; 語音通話 119 /** 120 * Usage value to use when the usage is in-call signalling, such as with 121 * a "busy" beep, or DTMF tones. 122 */ 123 public final static int USAGE_VOICE_COMMUNICATION_SIGNALLING = 3; 正在通話中提示音 124 /** 125 * Usage value to use when the usage is an alarm (e.g. wake-up alarm). 126 */ 127 public final static int USAGE_ALARM = 4; 警示音(起床鬧鈴) 128 /** 129 * Usage value to use when the usage is notification. See other 130 * notification usages for more specialized uses. 131 */ 132 public final static int USAGE_NOTIFICATION = 5; 提示音 133 /** 134 * Usage value to use when the usage is telephony ringtone. 135 */ 136 public final static int USAGE_NOTIFICATION_RINGTONE = 6; 電話鈴聲 137 /** 138 * Usage value to use when the usage is a request to enter/end a 139 * communication, such as a VoIP communication or video-conference. 140 */ 141 public final static int USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7; 當請求加入或結束VOIP、視頻通話這樣的提示音 143 * Usage value to use when the usage is notification for an "instant" 144 * communication such as a chat, or SMS. 145 */ 146 public final static int USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8; 及時通信提示音(比如日程提醒、低電量警告) 147 /** 148 * Usage value to use when the usage is notification for a 149 * non-immediate type of communication such as e-mail. 150 */ 151 public final static int USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9;非及時通訊提示音(收到E-mail時的提示音) 152 /** 153 * Usage value to use when the usage is to attract the user's attention, 154 * such as a reminder or low battery warning. 155 */ 156 public final static int USAGE_NOTIFICATION_EVENT = 10; 希望起因用戶注意時的提示音(日程提醒,低電量告警) 157 /** 158 * Usage value to use when the usage is for accessibility, such as with 159 * a screen reader. 160 */ 161 public final static int USAGE_ASSISTANCE_ACCESSIBILITY = 11; 易用性輔助提示音(比如屏幕文字閱讀器) 162 /** 163 * Usage value to use when the usage is driving or navigation directions. 164 */ 165 public final static int USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12; 166 /** 167 * Usage value to use when the usage is sonification, such as with user 168 * interface sounds. 169 */ 170 public final static int USAGE_ASSISTANCE_SONIFICATION = 13; 171 /** 172 * Usage value to use when the usage is for game audio. 173 */ 174 public final static int USAGE_GAME = 14; 175 /** 176 * @hide 177 * Usage value to use when feeding audio to the platform and replacing "traditional" audio 178 * source, such as audio capture devices. 179 */ 180 public final static int USAGE_VIRTUAL_SOURCE = 15; 181 /** 182 * Usage value to use for audio responses to user queries, audio instructions or help 183 * utterances. 184 */ 185 public final static int USAGE_ASSISTANT = 16; 186 /** 187 * @hide 188 * Usage value to use for assistant voice interaction with remote caller on Cell and VoIP calls. 189 */ 190 @SystemApi 191 @RequiresPermission(allOf = { 192 android.Manifest.permission.MODIFY_PHONE_STATE, 193 android.Manifest.permission.MODIFY_AUDIO_ROUTING 194 }) 195 public static final int USAGE_CALL_ASSISTANT = 17; 196 197 public static final int USAGE_ENFORCED_AUDIBLE = 18; 198 public static final int USAGE_BLUETOOTH_SCO = 19; 199 public static final int USAGE_TTS = 20; 200
與底層代碼相對應system/media/audio/include/system/audio-base.h
444typedef enum { 445 AUDIO_USAGE_UNKNOWN = 0, 446 AUDIO_USAGE_MEDIA = 1, 447 AUDIO_USAGE_VOICE_COMMUNICATION = 2, 448 AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING = 3, 449 AUDIO_USAGE_ALARM = 4, 450 AUDIO_USAGE_NOTIFICATION = 5, 451 AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE = 6, 452#ifndef AUDIO_NO_SYSTEM_DECLARATIONS 453 AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7, 454 AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8, 455 AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9, 456 AUDIO_USAGE_NOTIFICATION_EVENT = 10, 457#endif // AUDIO_NO_SYSTEM_DECLARATIONS 458 AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY = 11, 459 AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12, 460 AUDIO_USAGE_ASSISTANCE_SONIFICATION = 13, 461 AUDIO_USAGE_GAME = 14, 462 AUDIO_USAGE_VIRTUAL_SOURCE = 15, 463 AUDIO_USAGE_ASSISTANT = 16, 464 AUDIO_USAGE_CALL_ASSISTANT = 17, 465 AUDIO_USAGE_ENFORCED_AUDIBLE = 18, 466 AUDIO_USAGE_BLUETOOTH_SCO = 19, 467 AUDIO_USAGE_TTS = 20, 468 AUDIO_USAGE_EMERGENCY = 1000, 469 AUDIO_USAGE_SAFETY = 1001, 470 AUDIO_USAGE_VEHICLE_STATUS = 1002, 471 AUDIO_USAGE_ANNOUNCEMENT = 1003, 472} audio_usage_t;
9、電話狀態PhoneState
1package miui.provider; 2 3public class PhoneConstants { 4 5 // Number presentation type for caller id display (From internal/Conneciton.java) 6 public static int PRESENTATION_ALLOWED = 1; // normal 7 public static int PRESENTATION_RESTRICTED = 2; // block by user 8 public static int PRESENTATION_UNKNOWN = 3; // no specified or unknown by network 9 public static int PRESENTATION_PAYPHONE = 4; // show pay phone info 10} 11
10、音頻的播放狀態PlaybackState
/** 179 * @hide 180 */ 181 @IntDef({STATE_NONE, STATE_STOPPED, STATE_PAUSED, STATE_PLAYING, STATE_FAST_FORWARDING, 182 STATE_REWINDING, STATE_BUFFERING, STATE_ERROR, STATE_CONNECTING, 183 STATE_SKIPPING_TO_PREVIOUS, STATE_SKIPPING_TO_NEXT, STATE_SKIPPING_TO_QUEUE_ITEM}) 184 @Retention(RetentionPolicy.SOURCE) 185 public @interface State {} 186 187 /** 188 * This is the default playback state and indicates that no media has been 189 * added yet, or the performer has been reset and has no content to play. 190 * 191 * @see Builder#setState(int, long, float) 192 * @see Builder#setState(int, long, float, long) 193 */ 194 public static final int STATE_NONE = 0; 195 196 /** 197 * State indicating this item is currently stopped. 198 * 199 * @see Builder#setState 200 */ 201 public static final int STATE_STOPPED = 1; 202 203 /** 204 * State indicating this item is currently paused. 205 * 206 * @see Builder#setState 207 */ 208 public static final int STATE_PAUSED = 2; 209 210 /** 211 * State indicating this item is currently playing. 212 * 213 * @see Builder#setState 214 */ 215 public static final int STATE_PLAYING = 3; 216 217 /** 218 * State indicating this item is currently fast forwarding. 219 * 220 * @see Builder#setState 221 */ 222 public static final int STATE_FAST_FORWARDING = 4; 223 224 /** 225 * State indicating this item is currently rewinding. 226 * 227 * @see Builder#setState 228 */ 229 public static final int STATE_REWINDING = 5; 230 231 /** 232 * State indicating this item is currently buffering and will begin playing 233 * when enough data has buffered. 234 * 235 * @see Builder#setState 236 */ 237 public static final int STATE_BUFFERING = 6; 238 239 /** 240 * State indicating this item is currently in an error state. The error 241 * message should also be set when entering this state. 242 * 243 * @see Builder#setState 244 */ 245 public static final int STATE_ERROR = 7; 246 247 /** 248 * State indicating the class doing playback is currently connecting to a 249 * new destination. Depending on the implementation you may return to the previous 250 * state when the connection finishes or enter {@link #STATE_NONE}. 251 * If the connection failed {@link #STATE_ERROR} should be used. 252 * 253 * @see Builder#setState 254 */ 255 public static final int STATE_CONNECTING = 8; 256 257 /** 258 * State indicating the player is currently skipping to the previous item. 259 * 260 * @see Builder#setState 261 */ 262 public static final int STATE_SKIPPING_TO_PREVIOUS = 9; 263 264 /** 265 * State indicating the player is currently skipping to the next item. 266 * 267 * @see Builder#setState 268 */ 269 public static final int STATE_SKIPPING_TO_NEXT = 10; 270 271 /** 272 * State indicating the player is currently skipping to a specific item in 273 * the queue. 274 * 275 * @see Builder#setState 276 */ 277 public static final int STATE_SKIPPING_TO_QUEUE_ITEM = 11; 278 279 /** 280 * Use this value for the position to indicate the position is not known. 281 */ 282 public static final long PLAYBACK_POSITION_UNKNOWN = -1;
11、鈴聲模式 RingerMode()
624 * @see #setRingerMode(int) 625 * @see #getRingerMode() 626 */ 627 public static final int RINGER_MODE_SILENT = 0; 628 629 /** 630 * Ringer mode that will be silent and will vibrate. (This will cause the 631 * phone ringer to always vibrate, but the notification vibrate to only 632 * vibrate if set.) 633 * 634 * @see #setRingerMode(int) 635 * @see #getRingerMode() 636 */ 637 public static final int RINGER_MODE_VIBRATE = 1; 638 639 /** 640 * Ringer mode that may be audible and may vibrate. It will be audible if 641 * the volume before changing out of this mode was audible. It will vibrate 642 * if the vibrate setting is on. 643 * 644 * @see #setRingerMode(int) 1645 * @see #getRingerMode() 646 */ 647 public static final int RINGER_MODE_NORMAL = 2; 648 649 /** 650 * Maximum valid ringer mode value. Values must start from 0 and be contiguous. 651 * @hide 652 */ 653 public static final int RINGER_MODE_MAX = RINGER_MODE_NORMAL;
12、音量設置到底層的log
//Audiotrack首先會在AudioPolicy中取output 02-05 11:35:11.574 1114 2416 D APM_AudioPolicyManager: getOutputForAttrInt() attributes={ Content type: AUDIO_CONTENT_TYPE_UNKNOWN Usage: AUDIO_USAGE_MEDIA Source: AUDIO_SOURCE_DEFAULT Flags: 0x0 Tags: } stream=AUDIO_STREAM_MUSIC session 193 selectedDeviceId 0 02-05 11:35:11.574 1114 2416 D APM_AudioPolicyManager: getOutputForAttrInt() device {type:0x2,@:}, sampling rate 44100, format 0x1000000, channel mask 0x3, flags 0x11 stream AUDIO_STREAM_MUSIC//下面這段可以直觀看出是在調用applyStreamVolumes() 02-05 11:35:11.577 1114 2416 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 1 volume index 8 for device 02-05 11:35:11.579 1114 2416 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 2 volume index 4 for device 02-05 11:35:11.580 1114 2416 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 3 volume index 4 for device 02-05 11:35:11.581 1114 2416 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 4 volume index 0 for device 02-05 11:35:11.583 1114 2416 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 5 volume index 10 for device 02-05 11:35:11.584 1114 2416 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 6 volume index 4 for device 02-05 11:35:11.584 1114 2416 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 7 volume index 4 for device 02-05 11:35:11.585 1114 2416 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 8 volume index 7 for device 02-05 11:35:11.585 1114 2416 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 9 volume index 7 for device 02-05 11:35:11.586 1114 2416 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 10 volume index 4 for device 02-05 11:35:11.586 1114 2416 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 11 volume index 0 for device 02-05 11:35:11.587 1114 2416 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 12 volume index 1 for device 02-05 11:35:11.588 1114 2416 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 13 volume index 0 for device 02-05 11:35:11.588 1114 2416 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 14 volume index 0 for device//取到了output 605,port ID 244 02-05 11:35:11.590 1114 2416 D APM_AudioPolicyManager: getOutputForAttrInt returns output 605 selectedDeviceId 3 02-05 11:35:11.590 1114 2416 D APM_AudioPolicyManager: getOutputForAttr() returns output 605 requestedPortId 0 selectedDeviceId 3 for port ID 24402-05 11:35:11.603 1114 1422 D APM_AudioPolicyManager: notification filter: startOutput muteMaskInt=0//startoutput()->startsource() 02-05 11:35:11.604 1114 1422 D APM_AudioPolicyManager: startOutput() output 605, stream 3, session 193 appname com.miui.player uid 10081//在startsource調用的setoutputdevices 02-05 11:35:11.607 1114 1422 D APM_AudioPolicyManager: setOutputDevices device {type:0x2,@:} delayMs 0 force 1 02-05 11:35:11.607 1114 1422 D APM_AudioPolicyManager: setOutputDevices() prevDevice {type:0x2,@:} 02-05 11:35:11.607 1114 1422 D APM_AudioPolicyManager: setOutputDevices changing device to {type:0x2,@:}//同樣是調用了applyStreamVolumes() 02-05 11:35:11.635 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 1 volume index 8 for device 0x2 02-05 11:35:11.635 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 2 volume index 4 for device 0x2 02-05 11:35:11.635 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 3 volume index 4 for device 0x2 02-05 11:35:11.635 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 4 volume index 0 for device 0x2 02-05 11:35:11.635 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 5 volume index 10 for device 0x2 02-05 11:35:11.635 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 6 volume index 4 for device 0x2 02-05 11:35:11.635 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 7 volume index 4 for device 0x2 02-05 11:35:11.636 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 8 volume index 7 for device 0x2 02-05 11:35:11.636 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 9 volume index 7 for device 0x2 02-05 11:35:11.636 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 10 volume index 4 for device 0x2 02-05 11:35:11.636 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 11 volume index 0 for device 0x2 02-05 11:35:11.636 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 12 volume index 1 for device 0x2 02-05 11:35:11.636 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 13 volume index 0 for device 0x2 02-05 11:35:11.636 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 14 volume index 0 for device 0x2//checkandsetvolume(),set volumeSource 4 表示:STREAM_MUSIC 02-05 11:35:11.636 1114 1422 D AudioPolicyManagerCustom: checkAndSetVolume() set volumeSource 4 volume index 0 for device 0x2 !!!!!最終音量的生效點(streamtype為music的音頻流)//暫停播放器,stopoutput 02-05 11:35:11.749 1114 1422 D APM_AudioPolicyManager: stopOutput portId 244 02-05 11:35:11.749 1114 1422 D APM_AudioPolicyManager: stopOutput() output 605, stream 3, session 193 02-05 11:35:11.749 1114 1422 D APM_AudioPolicyManager: setOutputDevices device AUDIO_DEVICE_NONE delayMs 100 force 0 02-05 11:35:11.749 1114 1422 D APM_AudioPolicyManager: setOutputDevices() prevDevice {type:0x2,@:} 02-05 11:35:11.760 1114 1422 D APM_AudioPolicyManager: notification filter: startOutput muteMaskInt=0
總結
- 上一篇: 关于RCU-sched的研究
- 下一篇: 西门子1200与1200单边通讯