blob: 92fc8f77b6f9f5ba2b3efd0aa1e810e9f2e493c2 [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.media.sounds;
using fuchsia.io;
using fuchsia.media;
using fuchsia.mem;
using zx;
/// Allows clients to play fire-and-forget sounds.
[Discoverable]
protocol Player {
/// Adds a sound to the collection maintained for the client, reading the sound from a file.
/// If `id` identifies an existing sound in the collection, the service will close the
/// connection. Returns the duration of the sound or an error status returned from an I/O
/// operation.
///
/// Currently, only PCM WAV files are supported.
AddSoundFromFile(uint32 id, fuchsia.io.File file) -> (zx.duration duration) error zx.status;
/// Adds a sound, in the form of a buffer containing raw PCM samples, to the collection
/// maintained for the client. The service will retain a handle to the buffer's VMO until the
/// sound is removed and is no longer playing or until the connection is closed.
///
/// If `id` identifies an existing sound in the collection, the service will close the
/// connection.
AddSoundBuffer(uint32 id, fuchsia.mem.Buffer buffer, fuchsia.media.AudioStreamType stream_type);
/// Removes a sound from the collection maintained for the client. A sound can be removed even
/// if a `PlaySound` method is pending for that sound.
///
/// If `id` doesn't identify an existing sound in the collection, the service will do nothing.
/// This is tolerated so that clients don't have to wait for the response from
/// `AddSoundFromFile` before playing and removing the sound.
///
/// Removing an unneeded sound frees the resources associated with that sound, principally
/// the VMO required to store the uncompressed sound.
RemoveSound(uint32 id);
/// Plays the existing sound identified by `id` using a renderer with usage `usage`. The
/// sound is played as soon as possible. The reply is sent when the sound is finished playing.
/// If `id` doesn't identify an existing sound in the collection, the method return
/// `PlaySoundError.NO_SUCH_SOUND`.
PlaySound(uint32 id, fuchsia.media.AudioRenderUsage usage) -> () error PlaySoundError;
};
/// Error type for `Player.PlaySound`.
enum PlaySoundError {
/// The `id` passed to `PlaySound` is not recognized.
NO_SUCH_SOUND = 1;
/// Underlying audio renderer failed.
RENDERER_FAILED = 2;
};