1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef RINGTONE_PLAYER_H 17 #define RINGTONE_PLAYER_H 18 19 #include <string> 20 21 #include "audio_info.h" 22 23 namespace OHOS { 24 namespace Media { 25 enum RingtoneState { 26 /** INVALID state */ 27 STATE_INVALID = -1, 28 /** Create New instance */ 29 STATE_NEW, 30 /** Prepared state */ 31 STATE_PREPARED, 32 /** Running state */ 33 STATE_RUNNING, 34 /** Stopped state */ 35 STATE_STOPPED, 36 /** Released state */ 37 STATE_RELEASED, 38 /** Paused state */ 39 STATE_PAUSED 40 }; 41 42 class RingtonePlayerInterruptCallback; 43 44 class RingtonePlayer { 45 public: 46 virtual ~RingtonePlayer() = default; 47 48 /** 49 * @brief Returns the current ringtone state 50 * 51 * @return Returns the current state of ringtone player. 52 * @since 1.0 53 * @version 1.0 54 */ 55 virtual RingtoneState GetRingtoneState() = 0; 56 57 /** 58 * @brief Configure the ringtone player before playing any audio 59 * 60 * @param volume Configures the volume at which the ringtone has to be played 61 * @param loop Boolean parameter indicating whether to enable or disable looping 62 * @return Returns {@link MSERR_OK} if the looping parameter is set successfully to player; 63 * returns an error code defined in {@link media_errors.h} otherwise. 64 * @since 1.0 65 * @version 1.0 66 */ 67 virtual int32_t Configure(const float &volume, const bool &loop) = 0; 68 69 /** 70 * @brief Start playing ringtone 71 * 72 * @return Returns {@link MSERR_OK} if the looping parameter is set successfully to player; 73 * returns an error code defined in {@link media_errors.h} otherwise. 74 * @since 1.0 75 * @version 1.0 76 */ 77 virtual int32_t Start() = 0; 78 79 /** 80 * @brief Stop playing ringtone 81 * 82 * @return Returns {@link MSERR_OK} if the looping parameter is set successfully to player; 83 * returns an error code defined in {@link media_errors.h} otherwise. 84 * @since 1.0 85 * @version 1.0 86 */ 87 virtual int32_t Stop() = 0; 88 89 /** 90 * @brief Returns the audio contetnt type and stream uage details to the clients 91 * 92 * @return Returns {@link MSERR_OK} if the looping parameter is set successfully to player; 93 * returns an error code defined in {@link media_errors.h} otherwise. 94 * @since 1.0 95 * @version 1.0 96 */ 97 virtual int32_t GetAudioRendererInfo(AudioStandard::AudioRendererInfo &rendererInfo) const = 0; 98 99 /** 100 * @brief Returns the title of the uri set. 101 * 102 * @return Returns title as string if the title is obtained successfully from media library. 103 * returns an empty string otherwise. 104 * @since 1.0 105 * @version 1.0 106 */ 107 virtual std::string GetTitle() = 0; 108 109 /** 110 * @brief Releases the ringtone client resources 111 * 112 * @return Returns {@link MSERR_OK} if the looping parameter is set successfully to player; 113 * returns an error code defined in {@link media_errors.h} otherwise. 114 * @since 1.0 115 * @version 1.0 116 */ 117 virtual int32_t Release() = 0; 118 119 /** 120 * @brief Registers the ringtone player callback listener. 121 * 122 * @return Returns {@link MSERR_OK} if callback registration is successful; 123 * returns an error code defined in {@link media_errors.h} otherwise. 124 * @since 1.0 125 * @version 1.0 126 */ 127 virtual int32_t SetRingtonePlayerInterruptCallback 128 (const std::shared_ptr<RingtonePlayerInterruptCallback> &interruptCallback) = 0; 129 }; 130 131 132 class RingtonePlayerInterruptCallback { 133 public: 134 virtual ~RingtonePlayerInterruptCallback() = default; 135 /** 136 * Called when an interrupt is received. 137 * 138 * @param interruptEvent Indicates the InterruptEvent information needed by client. 139 * For details, refer InterruptEventInternal struct in audio_info.h 140 */ 141 virtual void OnInterrupt(const AudioStandard::InterruptEvent &interruptEvent) = 0; 142 }; 143 } // namespace Media 144 } // namespace OHOS 145 #endif // RINGTONE_PLAYER_H 146