blob: 338a875dceaf543e71e5932d11b5274e39c62849 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.settings;
using fuchsia.media;
/// Settings related to audio.
///
/// Supported SettingsEpitaph enums:
/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR
@discoverable
closed protocol Audio {
/// Gets the current [AudioSettings]. Returns immediately on first call;
/// subsequent calls return when the value changes.
///
/// If this call fails, it is considered a fatal error and the channel
/// will be closed.
strict Watch() -> (struct {
settings AudioSettings;
});
/// Sets audio settings. Any field not explicitly set in the table performs a
/// no-op, and will not make any changes.
strict Set(struct {
settings AudioSettings;
}) -> () error Error;
};
/// The source of the volume settings. The volume is set according to the source.
type AudioStreamSettingSource = strict enum {
/// The volume is set by the user. When the `source` in AudioStreamSettings is
/// set to this, the audio volume is set to `user_volume`.
USER = 0;
/// The system takes control of the volume. This is used when the system constantly
/// calculates and changes the volume. The volume is not stored for this source.
SYSTEM = 1;
/// The system takes control of the volume. This is used when the system changes
/// the volume, but we still want to play feedback sounds for these changes. The
/// volume is not stored for this source.
SYSTEM_WITH_FEEDBACK = 2;
};
type Volume = table {
/// The volume level ranged [0.0, 1.0]. The level maps to a dbfs value from a volume
/// curve in the setting service. Not a number (NaN), infinity or negative infinity
/// will cause SetVolume to fail with INVALID_VALUE.
1: level float32;
/// True if the volume should be muted. If this is true, then the volume is silent,
/// regardless of `level`.
2: muted bool;
};
type AudioStreamSettings = table {
/// The audio stream which the settings are applying to.
1: stream fuchsia.media.AudioRenderUsage;
/// The volume of `stream` is set according to the volume settings from `source`.
2: source AudioStreamSettingSource;
/// User level volume setting. If the `source` is USER, then the volume is set to
/// `user_volume`.
3: user_volume Volume;
};
type AudioSettings = table {
/// Contains the volume setting for all audio stream settings. There should only be
/// one AudioStreamSettings for each fuchsia.media.AudioRenderUsage.
1: streams vector<AudioStreamSettings>:5;
@available(deprecated=8, removed=9)
2: input AudioInput;
};
@available(deprecated=8, removed=9)
type AudioInput = table {
/// Whether the audio input is muted. Takes into consideration the hardware state.
1: muted bool;
};