1 /* 2 * Copyright (C) 2021 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 TELEPHONY_AUDIO_TONE_H 17 #define TELEPHONY_AUDIO_TONE_H 18 19 #include <memory> 20 21 #include "audio_renderer.h" 22 23 #include "audio_player.h" 24 #include "audio_proxy.h" 25 #include "tone_player.h" 26 27 namespace OHOS { 28 namespace Telephony { 29 enum ToneDescriptor { 30 TONE_UNKNOWN = 0, 31 TONE_ENGAGED, 32 TONE_FINISHED, 33 TONE_WAITING, 34 TONE_RINGBACK, 35 TONE_NO_SERVICE, 36 TONE_INVALID_NUMBER, 37 TONE_CALL_RECORDING, 38 TONE_DTMF_CHAR_0, 39 TONE_DTMF_CHAR_1, 40 TONE_DTMF_CHAR_2, 41 TONE_DTMF_CHAR_3, 42 TONE_DTMF_CHAR_4, 43 TONE_DTMF_CHAR_5, 44 TONE_DTMF_CHAR_6, 45 TONE_DTMF_CHAR_7, 46 TONE_DTMF_CHAR_8, 47 TONE_DTMF_CHAR_9, 48 TONE_DTMF_CHAR_P, 49 TONE_DTMF_CHAR_W 50 }; 51 struct ToneStream { 52 ToneDescriptor toneDescriptor = ToneDescriptor::TONE_UNKNOWN; 53 int32_t duration = 0; 54 int32_t volume = 0; 55 }; 56 enum class ToneState { 57 TONEING = 0, 58 STOPPED, 59 CALLENDED 60 }; 61 62 static constexpr const char* TONE_PLAY_THREAD = "tonePlayThread"; 63 64 /** 65 * @class Tone 66 * plays the specific tone. 67 */ 68 class Tone { 69 public: 70 Tone(); 71 explicit Tone(ToneDescriptor tone); 72 virtual ~Tone(); 73 void Init(); 74 int32_t Play(); 75 int32_t Stop(); 76 static ToneDescriptor ConvertDigitToTone(char digit); 77 void ReleaseRenderer(); 78 ToneDescriptor getCurrentToneType(); 79 80 private: 81 ToneDescriptor currentToneDescriptor_ = ToneDescriptor::TONE_UNKNOWN; 82 bool InitTonePlayer(); 83 AudioStandard::ToneType ConvertToneDescriptorToToneType(ToneDescriptor tone); 84 std::string GetToneDescriptorPath(ToneDescriptor tone); 85 bool IsUseTonePlayer(ToneDescriptor tone); 86 std::mutex mutex_; 87 AudioPlayer *audioPlayer_ = nullptr; 88 std::shared_ptr<AudioStandard::TonePlayer> tonePlayer_; 89 AudioStandard::StreamUsage GetStreamUsageByToneType(ToneDescriptor tone); 90 AudioStandard::ToneType ConvertCallToneDescriptorToToneType(ToneDescriptor tone); 91 }; 92 } // namespace Telephony 93 } // namespace OHOS 94 #endif // TELEPHONY_AUDIO_TONE_H