ChromeOS Compatible - USB Microphone Specification v1.2
Stay organized with collections
Save and categorize content based on your preferences.
Version: 1.2.1
Last updated: 2024-06-21
Legend
Product Verb |
Development Action |
"MUST" |
Mandatory product requirement |
"SHOULD" |
Optional recommendation |
"MAY" |
Nice to have |
Overview
This document describes the requirements a ChromeOS Compatible USB microphone
meets. This specification is not for WWCB products, nor for a product designed
and certified together with a Chromebook.
USB
Security
2.4 GHz Wireless Dongle
- The 2.4 GHz wireless device only auto-pairs with the receiver (dongle) that
comes with the box.
- User action (either on the device or via an app) is required to pair headset
with another receiver or pair new headset with existing receiver.
- If an app is required to alter headset/receiver pairing, the app must run on
ChromeOS, such as via an extension. The app can also be a web app using
WebUSB/WebHID.
- If the pairing is implemented via an extension, the extension must only
have access to USB ports. Content scripts are explicitly disallowed.
Firmware and Connector
- Headset must be declared as an audio device with a correct audio interface
(0x01) descriptor.
- There must be one corresponding descriptor for both input and output
terminal.
- It is recommended to report the USB Audio Class (UAC) terminal type
- If it has any button, it has to be declared as an HID.
- The headset must meet the WWCB Firmware and Connector
requirements.
Software
Please refer to Audio Format.
For device have both input and output Audio Interface Descriptor.
If the sample rates of the input and output are different, the device must be
able to support playback and capture at different sample rates at the same time.
Otherwise, the device must reflect the same value in the AudioStreaming
Interface Descriptor -> tSamFreq
.
HID Codes
- For each HID event, it can only transmit one event once a time.
- The correct event code and corresponding event code should be received when
the button is pressed.
- For example, increase the volume.
evtest
can only observe one volume up event and the code must be
KEY_VOLUME_UP
.
- If there is any interface designed to provide following functionalities, the
USB peripheral must support emitting or receiving the corresponding HID
events according to USB.org HID
specification.
Consumer Page (0x0c)
Key Name |
HID usage ID |
Usage Type |
KEY_PLAY |
0x0b0 |
OOC |
KEY_PAUSE |
0x0b1 |
OOC |
KEY_NEXTSONG |
0x0b5 |
OSC |
KEY_PREVIOUSSONG |
0x0b6 |
OSC |
KEY_STOPCD |
0x0b7 |
OSC |
KEY_PLAYPAUSE |
0x0cd |
OSC |
KEY_PREVIOUSSONG |
0x0b6 |
OSC |
KEY_MUTE |
0x0e2 |
OOC |
KEY_VOLUMEUP |
0x0e9 |
RTC |
KEY_VOLUMEDOWN |
0x0ea |
RTC |
Telephony Page (0x0b)
Key Name |
HID usage ID |
Usage Type |
Hook Switch |
0x20 |
OOC |
Ringer |
0x9e |
OOC |
LED Page (0x08)
Key Name |
HID usage ID |
Usage Type |
Mute |
0x09 |
OOC |
Off-Hook |
0x17 |
OOC |
Ring |
0x18 |
OOC |
Jack Detection
If a USB device does not support USB Audio Class (UAC), it will always show an
output node in the ChromeOS system tray. However, if the USB device supports
UAC, the system will be able to correctly detect a 3.5mm audio jack when the
device is inserted.
- CrOS Must use presence detection for 3.5mm jacks
- Must perform insert detect via one of:
| Playback
| Recording
|
Sample rate
| ≥ 16 kHz
| ≥ 16 kHz
|
Format
| S16_LE
| S16_LE
|
- The channel number and configuration must be correct.
- All sampling rates the headset declares supported must work correctly.
- The deviation between measured rate and sampling rate must be ≤ 0.1% .
- The standard error for linear regression of measured rate must be <
30.
The headset must support playback or capture under different sample rates it
asserts to support.
For example, play audio under 44.1 kHz but capture voice under 48 kHz
simultaneously.
- Otherwise, it requires ChromeOS to add a specific configuration file to
prevent it on the system side.
Audio Quality
Capture Path - Mute
- If there is any interface for users to mute the audio device, it must
- Maintain the mute state in a way that is not affected by:
- Opening and closing the device.
- Switching to another input device.
- If the user presses the mute button on the headset or ChromeOS, the
mute state must change.
- If the mute state changes, the mute state indicator (eg:LED) on the
headset must change.
Audio Latency
Latency
- Output Latency
- Audio playback must begin ≤500 ms after a user action that
initiates playback.
- May request a waiver if the device OEM can prove that no echo is
introduced when it fails this requirement.
A/V Sync
- Audio playback should be synchronized with video playback. Audio playback
may lead the video by ≤25 ms or trail the video by ≤95 ms.
Revision History
Date |
Version |
Notes |
2024-06-21 |
1.2.1 |
ChromeOS Compatible spec derived. Initial Partner Site Publication. |
2022-09-01 |
1.2 |
Related WWCB specification v1.2 |
2022-02-05 |
1.1 |
Related WWCB specification v1.1 |
2021-01-12 |
1.0 |
Related WWCB specification created. |
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2024-12-18 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-12-18 UTC."],[[["\u003cp\u003eThis specification outlines the requirements for ChromeOS Compatible USB microphones, focusing on security, firmware, software, and audio quality.\u003c/p\u003e\n"],["\u003cp\u003eUSB microphones must support specific HID events for functionalities like play/pause, volume control, and mute, ensuring compatibility with ChromeOS.\u003c/p\u003e\n"],["\u003cp\u003eAudio format requirements include a minimum sample rate of 16 kHz for both playback and recording, using S16_LE format, and supporting simultaneous playback and capture at different sample rates if declared.\u003c/p\u003e\n"],["\u003cp\u003eChromeOS utilizes presence detection for 3.5mm audio jacks through UAC standards to accurately detect their insertion and manage audio output.\u003c/p\u003e\n"],["\u003cp\u003eAudio latency requirements stipulate playback within 500ms of user initiation, with potential waivers for devices demonstrating echo-free performance despite exceeding this limit, while A/V sync aims for audio leading video by a maximum of 25ms or trailing by a maximum of 95ms.\u003c/p\u003e\n"]]],[],null,["# ChromeOS Compatible - USB Microphone Specification v1.2\n\nVersion: 1.2.1 \n\nLast updated: 2024-06-21\n\nLegend\n------\n\n| Product Verb | Development Action |\n|--------------|-------------------------------|\n| \"MUST\" | Mandatory product requirement |\n| \"SHOULD\" | Optional recommendation |\n| \"MAY\" | Nice to have |\n\n### Overview\n\nThis document describes the requirements a ChromeOS Compatible USB microphone\nmeets. This specification is not for WWCB products, nor for a product designed\nand certified together with a Chromebook.\n\nUSB\n---\n\n### Security\n\n#### 2.4 GHz Wireless Dongle\n\n- The 2.4 GHz wireless device only auto-pairs with the receiver (dongle) that comes with the box.\n- User action (either on the device or via an app) is required to pair headset with another receiver or pair new headset with existing receiver.\n- If an app is required to alter headset/receiver pairing, the app must run on ChromeOS, such as via an extension. The app can also be a web app using WebUSB/WebHID.\n- If the pairing is implemented via an extension, the extension must *only* have access to USB ports. Content scripts are explicitly disallowed.\n\n#### Firmware and Connector\n\n- Headset must be declared as an audio device with a correct audio interface (0x01) descriptor.\n - There must be one corresponding descriptor for both input and output terminal.\n - It is recommended to report the USB Audio Class (UAC) terminal type\n - Headset [(0x0402)](https://www.usb.org/sites/default/files/termt10.pdf)\n - SpeakerPhone [(0x0403-0x0405)](https://www.usb.org/sites/default/files/termt10.pdf) .\n- If it has any button, it has to be declared as an HID.\n- The headset must meet the [WWCB Firmware and Connector\n requirements](https://drive.google.com/file/d/1vBuBlQCnYwEGMn36qVtz1TW05QTdSMUm/view?usp=sharing).\n\n### Software\n\n#### Format\n\nPlease refer to [Audio Format](#audio_format).\n\nFor device have both input and output Audio Interface Descriptor.\n\n- Example of Audio Interface Descriptor\n\n Interface Descriptor:\n bLength 9\n bDescriptorType 4\n bInterfaceNumber 2\n bAlternateSetting 0\n bNumEndpoints 0\n bInterfaceClass 1 Audio\n bInterfaceSubClass 2 Streaming\n bInterfaceProtocol 0\n iInterface 0\n\nIf the sample rates of the input and output are different, the device must be\nable to support playback and capture at different sample rates at the same time.\nOtherwise, the device must reflect the same value in the AudioStreaming\nInterface Descriptor -\\\u003e `tSamFreq`.\n\n- Example of 48k USB audio output sample rate\n\n AudioStreaming Interface Descriptor:\n bLength 11\n bDescriptorType 36\n bDescriptorSubtype 2 (FORMAT_TYPE)\n bFormatType 1 (FORMAT_TYPE_I)\n bNrChannels 2\n bSubframeSize 2\n bBitResolution 16\n bSamFreqType 1 Discrete\n tSamFreq[ 0] 48000\n Endpoint Descriptor:\n bLength 9\n bDescriptorType 5\n bEndpointAddress 0x02 EP 2 OUT(Output)\n bmAttributes 9\n Transfer Type Isochronous\n Synch Type Adaptive\n Usage Type Data\n\n- Example of 44.1k USB audio input sample rate\n\n AudioStreaming Interface Descriptor:\n bLength 11\n bDescriptorType 36\n bDescriptorSubtype 2 (FORMAT_TYPE)\n bFormatType 1 (FORMAT_TYPE_I)\n bNrChannels 2\n bSubframeSize 2\n bBitResolution 16\n bSamFreqType 1 Discrete\n tSamFreq[ 0] 44100\n Endpoint Descriptor:\n bLength 9\n bDescriptorType 5\n bEndpointAddress 0x81 EP 1 In(Input)\n bmAttributes 9\n Transfer Type Isochronous\n Synch Type Adaptive\n Usage Type Data\n\n#### HID Codes\n\n- For each HID event, it can only transmit one event once a time.\n- The correct event code and corresponding event code should be received when the button is pressed.\n - For example, increase the volume. [evtest](https://manpages.ubuntu.com/manpages/trusty/man1/evtest.1.html) can only observe one volume up event and the code must be `KEY_VOLUME_UP`.\n- If there is any interface designed to provide following functionalities, the USB peripheral must support emitting or receiving the corresponding HID events according to [USB.org HID\n specification](https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf).\n\n##### Consumer Page (0x0c)\n\n| Key Name | HID usage ID | Usage Type |\n|--------------------|--------------|------------|\n| `KEY_PLAY` | `0x0b0` | OOC |\n| `KEY_PAUSE` | `0x0b1` | OOC |\n| `KEY_NEXTSONG` | `0x0b5` | OSC |\n| `KEY_PREVIOUSSONG` | `0x0b6` | OSC |\n| `KEY_STOPCD` | `0x0b7` | OSC |\n| `KEY_PLAYPAUSE` | `0x0cd` | OSC |\n| `KEY_PREVIOUSSONG` | `0x0b6` | OSC |\n| `KEY_MUTE` | `0x0e2` | OOC |\n| `KEY_VOLUMEUP` | `0x0e9` | RTC |\n| `KEY_VOLUMEDOWN` | `0x0ea` | RTC |\n\n##### Telephony Page (0x0b)\n\n| Key Name | HID usage ID | Usage Type |\n|-------------|--------------|------------|\n| Hook Switch | `0x20` | OOC |\n| Ringer | `0x9e` | OOC |\n\n##### LED Page (0x08)\n\n| Key Name | HID usage ID | Usage Type |\n|----------|--------------|------------|\n| Mute | `0x09` | OOC |\n| Off-Hook | `0x17` | OOC |\n| Ring | `0x18` | OOC |\n\n#### Jack Detection\n\nIf a USB device does not support USB Audio Class (UAC), it will always show an\noutput node in the ChromeOS system tray. However, if the USB device supports\nUAC, the system will be able to correctly detect a 3.5mm audio jack when the\ndevice is inserted.\n\n- CrOS Must use presence detection for 3.5mm jacks\n - Must perform insert detect via one of:\n - [UAC1](https://www.usb.org/document-library/audio-device-class-spec-basic-audio-devices-v10-and-adopters-agreement)\n - [UAC2](https://www.usb.org/document-library/audio-devices-rev-20-and-adopters-agreement)\n - [UAC3](https://www.usb.org/document-library/usb-audio-devices-rev-30-and-adopters-agreement)\n\nAudio Format\n------------\n\n| | Playback | Recording |\n| Sample rate | ≥ 16 kHz | ≥ 16 kHz |\n| Format | S16_LE | S16_LE |\n|-------------|----------|-----------|\n\n- The channel number and configuration must be correct.\n- All sampling rates the headset declares supported must work correctly.\n - The deviation between measured rate and sampling rate must be ≤ 0.1% .\n - The standard error for linear regression of measured rate must be \\\u003c 30.\n- The headset must support playback or capture under different sample rates it\n asserts to support.\n\n For example, play audio under 44.1 kHz but capture voice under 48 kHz\n simultaneously.\n - Otherwise, it requires ChromeOS to add a specific configuration file to prevent it on the system side.\n\nAudio Quality\n-------------\n\n### Capture Path - Mute\n\n- If there is any interface for users to mute the audio device, it must\n - Maintain the mute state in a way that is not affected by:\n - Opening and closing the device.\n - Switching to another input device.\n- If the user presses the mute button on the headset or ChromeOS, the mute state must change.\n- If the mute state changes, the mute state indicator (eg:LED) on the headset must change.\n\nAudio Latency\n-------------\n\n### Latency\n\n- Output Latency\n - Audio playback must begin ≤500 ms after a user action that initiates playback.\n - May request a waiver if the device OEM can prove that no echo is introduced when it fails this requirement.\n\n### A/V Sync\n\n- Audio playback should be synchronized with video playback. Audio playback may lead the video by ≤25 ms or trail the video by ≤95 ms.\n\nRevision History\n----------------\n\n| Date | Version | Notes |\n|------------|---------|---------------------------------------------------------------------|\n| 2024-06-21 | 1.2.1 | ChromeOS Compatible spec derived. Initial Partner Site Publication. |\n| 2022-09-01 | 1.2 | Related WWCB specification v1.2 |\n| 2022-02-05 | 1.1 | Related WWCB specification v1.1 |\n| 2021-01-12 | 1.0 | Related WWCB specification created. |"]]