// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // The chrome.audio API is provided to allow users to // get information about and control the audio devices attached to the // system. This API is currently only implemented for ChromeOS. namespace audio { // Type of stream an audio device provides. enum StreamType { INPUT, OUTPUT }; // Available audio device types. enum DeviceType { HEADPHONE, MIC, USB, BLUETOOTH, HDMI, INTERNAL_SPEAKER, INTERNAL_MIC, FRONT_MIC, REAR_MIC, KEYBOARD_MIC, HOTWORD, LINEOUT, POST_MIX_LOOPBACK, POST_DSP_LOOPBACK, OTHER }; [nodoc, deprecated = "Used only with the deprecated $(ref:getInfo)."] dictionary OutputDeviceInfo { // The unique identifier of the audio output device. DOMString id; // The user-friendly name (e.g. "Bose Amplifier"). DOMString name; // True if this is the current active device. boolean isActive; // True if this is muted. boolean isMuted; // The output volume ranging from 0.0 to 100.0. double volume; }; [nodoc, deprecated = "Used only with the deprecated $(ref:getInfo)."] dictionary InputDeviceInfo { // The unique identifier of the audio input device. DOMString id; // The user-friendly name (e.g. "USB Microphone"). DOMString name; // True if this is the current active device. boolean isActive; // True if this is muted. boolean isMuted; // The input gain ranging from 0.0 to 100.0. double gain; }; dictionary AudioDeviceInfo { // The unique identifier of the audio device. DOMString id; // Stream type associated with this device. StreamType streamType; // Type of the device. DeviceType deviceType; // The user-friendly name (e.g. "USB Microphone"). DOMString displayName; // Device name. DOMString deviceName; // True if this is the current active device. boolean isActive; // The sound level of the device, volume for output, gain for input. long level; // The stable/persisted device id string when available. DOMString? stableDeviceId; }; dictionary DeviceFilter { // If set, only audio devices whose stream type is included in this list // will satisfy the filter. StreamType[]? streamTypes; // If set, only audio devices whose active state matches this value will // satisfy the filter. boolean? isActive; }; dictionary DeviceProperties { // True if this is muted. [nodoc, deprecated="Use $(ref:setMute) to set mute state."] boolean? isMuted; // If this is an output device then this field indicates the output volume. // If this is an input device then this field is ignored. [nodoc, deprecated="Use |level| to set output volume."] double? volume; // If this is an input device then this field indicates the input gain. // If this is an output device then this field is ignored. [nodoc, deprecated="Use |level| to set input gain."] double? gain; //

// The audio device's desired sound level. Defaults to the device's // current sound level. //

//

If used with audio input device, represents audio device gain.

//

If used with audio output device, represents audio device volume.

long? level; }; dictionary DeviceIdLists { //

List of input devices specified by their ID.

//

To indicate input devices should be unaffected, leave this property // unset.

DOMString[]? input; //

List of output devices specified by their ID.

//

To indicate output devices should be unaffected, leave this property // unset.

DOMString[]? output; }; dictionary MuteChangedEvent { // The type of the stream for which the mute value changed. The updated mute // value applies to all devices with this stream type. StreamType streamType; // Whether or not the stream is now muted. boolean isMuted; }; dictionary LevelChangedEvent { // ID of device whose sound level has changed. DOMString deviceId; // The device's new sound level. long level; }; callback GetInfoCallback = void(OutputDeviceInfo[] outputInfo, InputDeviceInfo[] inputInfo); callback GetDevicesCallback = void(AudioDeviceInfo[] devices); callback GetMuteCallback = void(boolean value); callback EmptyCallback = void(); interface Functions { // Gets a list of audio devices filtered based on |filter|. // |filter|: Device properties by which to filter the list of returned // audio devices. If the filter is not set or set to {}, // returned device list will contain all available audio devices. // |callback|: Reports the requested list of audio devices. static void getDevices(optional DeviceFilter filter, GetDevicesCallback callback); // Sets lists of active input and/or output devices. // |ids|:

Specifies IDs of devices that should be active. If either the // input or output list is not set, devices in that category are // unaffected. //

//

It is an error to pass in a non-existent device ID.

//

NOTE: While the method signature allows device IDs to be // passed as a list of strings, this method of setting active devices // is deprecated and should not be relied upon to work. Please use // $(ref:DeviceIdLists) instead. //

static void setActiveDevices((DeviceIdLists or DOMString[]) ids, EmptyCallback callback); // Sets the properties for the input or output device. static void setProperties(DOMString id, DeviceProperties properties, EmptyCallback callback); // Gets the system-wide mute state for the specified stream type. // |streamType|: Stream type for which mute state should be fetched. // |callback|: Callback reporting whether mute is set or not for specified // stream type. static void getMute(StreamType streamType, GetMuteCallback callback); // Sets mute state for a stream type. The mute state will apply to all audio // devices with the specified audio stream type. // |streamType|: Stream type for which mute state should be set. // |isMuted|: New mute value. static void setMute(StreamType streamType, boolean isMuted, optional EmptyCallback callback); // Gets the information of all audio output and input devices. [nodoc, deprecated="Use $(ref:getDevices) instead."] static void getInfo(GetInfoCallback callback); }; interface Events { // Fired when sound level changes for an active audio device. static void onLevelChanged(LevelChangedEvent event); // Fired when the mute state of the audio input or output changes. // Note that mute state is system-wide and the new value applies to every // audio device with specified stream type. static void onMuteChanged(MuteChangedEvent event); // Fired when audio devices change, either new devices being added, or // existing devices being removed. // |devices|: List of all present audio devices after the change. static void onDeviceListChanged(AudioDeviceInfo[] devices); // Fired when anything changes to the audio device configuration. [nodoc, deprecated="Use more granular $(ref:onLevelChanged), $(ref:onMuteChanged) and $(ref:onDeviceListChanged) instead."] static void onDeviceChanged(); }; };