/* * Copyright (C) 2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "tone.h" #include #include "telephony_log_wrapper.h" namespace OHOS { namespace Telephony { Tone::Tone() {} Tone::Tone(ToneDescriptor tone) { currentToneDescriptor_ = tone; } Tone::~Tone() {} void Tone::Init() {} int32_t Tone::Play() { if (currentToneDescriptor_ == TONE_UNKNOWN) { TELEPHONY_LOGE("tone descriptor unknown"); return CALL_ERR_AUDIO_UNKNOWN_TONE; } PlayerType playerType = PlayerType::TYPE_TONE; if (IsDtmf(currentToneDescriptor_)) { playerType = PlayerType::TYPE_DTMF; } std::thread play(AudioPlayer::Play, GetToneDescriptorPath(currentToneDescriptor_), AudioStandard::AudioStreamType::STREAM_MUSIC, playerType); play.detach(); return TELEPHONY_SUCCESS; } int32_t Tone::Stop() { std::lock_guard lock(mutex_); if (currentToneDescriptor_ == TONE_UNKNOWN) { TELEPHONY_LOGE("tone descriptor unknown"); return CALL_ERR_AUDIO_UNKNOWN_TONE; } PlayerType playerType = PlayerType::TYPE_TONE; if (IsDtmf(currentToneDescriptor_)) { playerType = PlayerType::TYPE_DTMF; } AudioPlayer::SetStop(playerType, true); return TELEPHONY_SUCCESS; } ToneDescriptor Tone::ConvertDigitToTone(char digit) { ToneDescriptor dtmf = ToneDescriptor::TONE_UNKNOWN; switch (digit) { case '0': dtmf = ToneDescriptor::TONE_DTMF_CHAR_0; break; case '1': dtmf = ToneDescriptor::TONE_DTMF_CHAR_1; break; case '2': dtmf = ToneDescriptor::TONE_DTMF_CHAR_2; break; case '3': dtmf = ToneDescriptor::TONE_DTMF_CHAR_3; break; case '4': dtmf = ToneDescriptor::TONE_DTMF_CHAR_4; break; case '5': dtmf = ToneDescriptor::TONE_DTMF_CHAR_5; break; case '6': dtmf = ToneDescriptor::TONE_DTMF_CHAR_6; break; case '7': dtmf = ToneDescriptor::TONE_DTMF_CHAR_7; break; case '8': dtmf = ToneDescriptor::TONE_DTMF_CHAR_8; break; case '9': dtmf = ToneDescriptor::TONE_DTMF_CHAR_9; break; case 'p': case 'P': dtmf = ToneDescriptor::TONE_DTMF_CHAR_P; break; case 'w': case 'W': dtmf = ToneDescriptor::TONE_DTMF_CHAR_W; break; default: break; } return dtmf; } bool Tone::IsDtmf(ToneDescriptor tone) { bool ret = false; switch (tone) { case ToneDescriptor::TONE_DTMF_CHAR_0: case ToneDescriptor::TONE_DTMF_CHAR_1: case ToneDescriptor::TONE_DTMF_CHAR_2: case ToneDescriptor::TONE_DTMF_CHAR_3: case ToneDescriptor::TONE_DTMF_CHAR_4: case ToneDescriptor::TONE_DTMF_CHAR_5: case ToneDescriptor::TONE_DTMF_CHAR_6: case ToneDescriptor::TONE_DTMF_CHAR_7: case ToneDescriptor::TONE_DTMF_CHAR_8: case ToneDescriptor::TONE_DTMF_CHAR_9: case ToneDescriptor::TONE_DTMF_CHAR_P: case ToneDescriptor::TONE_DTMF_CHAR_W: ret = true; break; default: break; } return ret; } std::string Tone::GetToneDescriptorPath(ToneDescriptor tone) { #ifdef ABILITY_AUDIO_SUPPORT return DelayedSingleton::GetInstance()->GetToneDescriptorPath(tone); #endif return DelayedSingleton::GetInstance()->GetDefaultTonePath(); } } // namespace Telephony } // namespace OHOS