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 #include "tone.h" 17 18 #include <thread> 19 20 #include "telephony_log_wrapper.h" 21 22 namespace OHOS { 23 namespace Telephony { Tone()24Tone::Tone() {} 25 Tone(ToneDescriptor tone)26Tone::Tone(ToneDescriptor tone) 27 { 28 currentToneDescriptor_ = tone; 29 } 30 ~Tone()31Tone::~Tone() {} 32 Init()33void Tone::Init() {} 34 Play()35int32_t Tone::Play() 36 { 37 if (currentToneDescriptor_ == TONE_UNKNOWN) { 38 TELEPHONY_LOGE("tone descriptor unknown"); 39 return CALL_ERR_AUDIO_UNKNOWN_TONE; 40 } 41 PlayerType playerType = PlayerType::TYPE_TONE; 42 if (IsDtmf(currentToneDescriptor_)) { 43 playerType = PlayerType::TYPE_DTMF; 44 } 45 std::thread play(AudioPlayer::Play, GetToneDescriptorPath(currentToneDescriptor_), 46 AudioStandard::AudioStreamType::STREAM_MUSIC, playerType); 47 play.detach(); 48 return TELEPHONY_SUCCESS; 49 } 50 Stop()51int32_t Tone::Stop() 52 { 53 std::lock_guard<std::mutex> lock(mutex_); 54 if (currentToneDescriptor_ == TONE_UNKNOWN) { 55 TELEPHONY_LOGE("tone descriptor unknown"); 56 return CALL_ERR_AUDIO_UNKNOWN_TONE; 57 } 58 PlayerType playerType = PlayerType::TYPE_TONE; 59 if (IsDtmf(currentToneDescriptor_)) { 60 playerType = PlayerType::TYPE_DTMF; 61 } 62 AudioPlayer::SetStop(playerType, true); 63 return TELEPHONY_SUCCESS; 64 } 65 ConvertDigitToTone(char digit)66ToneDescriptor Tone::ConvertDigitToTone(char digit) 67 { 68 ToneDescriptor dtmf = ToneDescriptor::TONE_UNKNOWN; 69 switch (digit) { 70 case '0': 71 dtmf = ToneDescriptor::TONE_DTMF_CHAR_0; 72 break; 73 case '1': 74 dtmf = ToneDescriptor::TONE_DTMF_CHAR_1; 75 break; 76 case '2': 77 dtmf = ToneDescriptor::TONE_DTMF_CHAR_2; 78 break; 79 case '3': 80 dtmf = ToneDescriptor::TONE_DTMF_CHAR_3; 81 break; 82 case '4': 83 dtmf = ToneDescriptor::TONE_DTMF_CHAR_4; 84 break; 85 case '5': 86 dtmf = ToneDescriptor::TONE_DTMF_CHAR_5; 87 break; 88 case '6': 89 dtmf = ToneDescriptor::TONE_DTMF_CHAR_6; 90 break; 91 case '7': 92 dtmf = ToneDescriptor::TONE_DTMF_CHAR_7; 93 break; 94 case '8': 95 dtmf = ToneDescriptor::TONE_DTMF_CHAR_8; 96 break; 97 case '9': 98 dtmf = ToneDescriptor::TONE_DTMF_CHAR_9; 99 break; 100 case 'p': 101 case 'P': 102 dtmf = ToneDescriptor::TONE_DTMF_CHAR_P; 103 break; 104 case 'w': 105 case 'W': 106 dtmf = ToneDescriptor::TONE_DTMF_CHAR_W; 107 break; 108 default: 109 break; 110 } 111 return dtmf; 112 } 113 IsDtmf(ToneDescriptor tone)114bool Tone::IsDtmf(ToneDescriptor tone) 115 { 116 bool ret = false; 117 switch (tone) { 118 case ToneDescriptor::TONE_DTMF_CHAR_0: 119 case ToneDescriptor::TONE_DTMF_CHAR_1: 120 case ToneDescriptor::TONE_DTMF_CHAR_2: 121 case ToneDescriptor::TONE_DTMF_CHAR_3: 122 case ToneDescriptor::TONE_DTMF_CHAR_4: 123 case ToneDescriptor::TONE_DTMF_CHAR_5: 124 case ToneDescriptor::TONE_DTMF_CHAR_6: 125 case ToneDescriptor::TONE_DTMF_CHAR_7: 126 case ToneDescriptor::TONE_DTMF_CHAR_8: 127 case ToneDescriptor::TONE_DTMF_CHAR_9: 128 case ToneDescriptor::TONE_DTMF_CHAR_P: 129 case ToneDescriptor::TONE_DTMF_CHAR_W: 130 ret = true; 131 break; 132 default: 133 break; 134 } 135 return ret; 136 } 137 GetToneDescriptorPath(ToneDescriptor tone)138std::string Tone::GetToneDescriptorPath(ToneDescriptor tone) 139 { 140 #ifdef ABILITY_AUDIO_SUPPORT 141 return DelayedSingleton<AudioProxy>::GetInstance()->GetToneDescriptorPath(tone); 142 #endif 143 return DelayedSingleton<AudioProxy>::GetInstance()->GetDefaultTonePath(); 144 } 145 } // namespace Telephony 146 } // namespace OHOS