chromium/chromecast/media/api/sound_player.h

// 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_SOUND_PLAYER_H_
#define CHROMECAST_MEDIA_API_SOUND_PLAYER_H_

#include <cstdint>
#include <memory>
#include <string>

#include "base/memory/ref_counted.h"
#include "chromecast/public/media/media_pipeline_device_params.h"
#include "chromecast/public/volume_control.h"

namespace chromecast {
namespace media {

class SoundPlayer {
 public:
  using AudioData = base::RefCountedData<std::string>;

  // Plays the sound resource with |resource_id|. Any sound that is currently
  // playing is stopped. Once played, audio data is registered with a
  // |sound_key| so the Stop() function can later identify which sound should be
  // stopped. If |repeat| is true, the sound is repeated until Stop() is called
  // with the same |sound_key| or another sound is played.
  virtual void Play(int sound_key,
                    int resource_id,
                    bool repeat,
                    AudioContentType content_type) = 0;

  // Plays the sound using the provided |audio_data|.
  // Once played, audio data is registered with a |sound_key| so the Stop()
  // function can later identify which sound should be stopped. If |repeat| is
  // true, the sound is repeated until Stop() is called with the same
  // |sound_key| or another sound is played.
  virtual void PlayAudioData(int sound_key,
                             scoped_refptr<AudioData> audio_data,
                             bool repeat,
                             AudioContentType content_type) = 0;

  // Plays the sound resource with |resource_id| starting at |timestamp|.
  // Any sound that is currently playing is stopped immediately.
  // If |audio_channel| is kLeft or kRight, only that channel is played.
  virtual void PlayAtTime(int resource_id,
                          int64_t timestamp,
                          media::AudioChannel audio_channel,
                          AudioContentType content_type) = 0;

  // Plays the sound using the provided |audio_data| starting at |timestamp|.
  // Any sound that is currently playing is stopped immediately.
  // If |audio_channel| is kLeft or kRight, only that channel is played.
  virtual void PlayAudioDataAtTime(scoped_refptr<AudioData> audio_data,
                                   int64_t timestamp,
                                   AudioChannel audio_channel,
                                   AudioContentType content_type) = 0;

  // Stops playing the sound resource with |resource_id| if it is currently
  // playing.
  virtual void Stop(int resource_id) = 0;

 protected:
  virtual ~SoundPlayer() = default;
};

}  // namespace media
}  // namespace chromecast

#endif  // CHROMECAST_MEDIA_API_SOUND_PLAYER_H_