blob: 495c1323b8399ba949cd8b33c98905e02c081e61 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMECAST_MEDIA_API_CAST_SOUNDS_MANAGER_H_
#define CHROMECAST_MEDIA_API_CAST_SOUNDS_MANAGER_H_
#include <string>
#include "base/callback.h"
#include "base/time/time.h"
#include "chromecast/public/volume_control.h"
namespace chromecast {
namespace media {
// Plays a sound stored as a resource. All methods are thread-safe.
class CastSoundsManager {
public:
using DurationCallback = base::OnceCallback<void(base::TimeDelta duration)>;
virtual ~CastSoundsManager() = default;
// Adds a sound where |resource_id| contains the audio data. If |multichannel|
// is true, the sound is played on all devices in a multichannel group, and if
// it is false, the sound is played only on this device. If |repeat| is true,
// the sound is played repeatedly until Stop() is called for the sound or
// another sound is played. Both |multichannel| and |repeat| cannot be true.
virtual void AddSound(int key,
int resource_id,
bool multichannel,
bool repeat) = 0;
// Adds a sound by binding |key| to the provided |audio_data|.
// This is to support playing sounds outside of resource packs on the
// device(s). If |multichannel| is true, the sound is played on all devices in
// a multichannel group, and if it is false, the sound is played only on this
// device. If |repeat| is true, the sound is played repeatedly until Stop() is
// called for the sound or another sound is played. |multichannel| and
// |repeat| cannot both be true.
virtual void AddSoundWithAudioData(int key,
const std::string audio_data,
bool multichannel,
bool repeat) = 0;
// Plays the sound added for |key|.
virtual void Play(int key, AudioContentType content_type) = 0;
// Stops playing the sound added for |key| if it is currently playing.
virtual void Stop(int key) = 0;
// Calls |callback| with the duration of the sound added for |key|, or a
// duration of ::media::kInfiniteDuration if no sound was added for |key|.
// There is no guarantee about whether |callback| is called synchronously or
// asynchronously or on which thread it is called.
virtual void GetDuration(int key, DurationCallback callback) = 0;
};
} // namespace media
} // namespace chromecast
#endif // CHROMECAST_MEDIA_API_CAST_SOUNDS_MANAGER_H_