解决#1208,每次接电话通话音量都不一致bug,优化了音量进度条显示 1486/1
authorluozheng <1732036298@qq.com>
Mon, 2 Dec 2024 09:18:46 +0000 (17:18 +0800)
committerluozheng <1732036298@qq.com>
Mon, 2 Dec 2024 09:18:46 +0000 (17:18 +0800)
code/sdk/application/wearable/fd230app/nativeui/main/src/VolumeSettingPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneService.cpp
code/sdk/middleware/services/media/foundation/audiomanager/frameworks/audiomanager/cpp/audio_manager.cpp

index 5f36427..16776df 100644 (file)
@@ -123,8 +123,8 @@ void VolumeSliderEventListener::ChangeVolume(VolumeChangeStatus status)
         BtAndLocalVolumeSet(volumeSettingView->sounding);  /*蓝牙耳机音乐调节*/
     }
     if (playerCoefficients == VOLUMEPHONE || playerCoefficients == VOLUMEPHONENOTIFY) {
-        unsigned char volumeValue = (unsigned char) ((double) (volumeSettingView->sounding * CALL_VOLUME_MAX) / (VOLUME_MAX - VOLUME_MIN)); // 音量转换
-        SetSpeakerVolume(volumeValue);
+        // unsigned char volumeValue = (unsigned char) ((double) (volumeSettingView->sounding * CALL_VOLUME_MAX) / (VOLUME_MAX - VOLUME_MIN)); // 音量转换
+        SetSpeakerVolume((unsigned char)volumeSettingView->sounding);
     }
 }
 
index a9ca823..8e2f5ad 100644 (file)
@@ -40,6 +40,7 @@
 #include "ConfigModelC.h"
 #include "cat1_ctl.h"
 #include "UiConfig.h"
+#include "cmath"
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -156,7 +157,7 @@ static void AudioDeactInterrupt(AudioStreamType type)
 
     if ((type == AUDIO_STREAM_VOICE_CALL_BT_SCO && g_audioState >= AUDIO_ACT_INTERRUPT_BT_SCO) ||
         (type == AUDIO_STREAM_RING && g_audioState == AUDIO_ACT_INTERRUPT_WATCH_RING)
-        || type ==AUDIO_STREAM_VOICE_CALL_VOLTE &&  g_audioState >= AUDIO_STREAM_VOICE_CALL_VOLTE ) {
+        || (type ==AUDIO_STREAM_VOICE_CALL_VOLTE &&  g_audioState >= AUDIO_STREAM_VOICE_CALL_VOLTE) ) {
         (void)PhoneAudioManagerDeactInterrupt();
     }
 }
@@ -2041,36 +2042,65 @@ void SetSpeakerVolume(unsigned char hfpVolume)
 {
     if(OHOS::CallerLogModel::GetInstance()->GetCallSource() == OHOS::CallerLogModel::CallSourceCat1)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] start, CallSourceCat1:%d", hfpVolume);
-        int32_t minVolume = PhoneAudioGetCAT1MinVolume();
-        int32_t maxVolume = PhoneAudioGetCAT1MAXVolume();
-        int32_t volume = hfpVolume * (maxVolume - minVolume)/ CALL_VOLUME_MAX;// 转换
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] minVolume:%d, maxVolume:%d, volume:%d",
-            minVolume, maxVolume, volume);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] start, CallSourceCat1:4G音量调节传入%d", hfpVolume);
+        // int32_t minVolume = PhoneAudioGetCAT1MinVolume();
+        // int32_t maxVolume = PhoneAudioGetCAT1MAXVolume();
+        // int32_t volume = hfpVolume * (maxVolume - minVolume)/ CALL_VOLUME_MAX;// 转换
+        // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] minVolume:%d, maxVolume:%d, G音量调节映射后volume:%d",
+        //     minVolume, maxVolume, volume);
+
+        // int32_t ret = PhoneCATAudioSetVolume(volume);
+        // if (!ret) {
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] PhoneAudioSetVolume ret:%d", ret);
+        //     return;
+        // }
+        // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] success!");
 
+        //4G 音量调节传入0~100不需要映射
+        int32_t volume = hfpVolume;
         int32_t ret = PhoneCATAudioSetVolume(volume);
         if (!ret) {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] PhoneAudioSetVolume ret:%d", ret);
             return;
         }
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] success!");
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] success!");
     }
     else
     {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] start, hfpVolume:%d", hfpVolume);
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] start, hfpVolume:%d", hfpVolume);
+        // int32_t minVolume = PhoneAudioGetMinVolume();
+        // int32_t maxVolume = PhoneAudioGetMaxVolume();
+        // int32_t volume = hfpVolume * (maxVolume - minVolume) / CALL_VOLUME_MAX; // 转换
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] minVolume:%d, maxVolume:%d, volume:%d",
+        //     minVolume, maxVolume, volume);
+
+        // int32_t ret = PhoneAudioSetVolume(volume);
+        // if (!ret) {
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] PhoneAudioSetVolume ret:%d", ret);
+        //     return;
+        // }
+
+        // ret = hfp_hf_set_volume(&g_bdAddr, HFP_VOLUME_SPEAKER, hfpVolume);
+        // if (ret != ERRCODE_BT_SUCCESS) {
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] set_volume ret:%d, hfpVolume:%d",
+        //         ret, hfpVolume);
+        //     return;
+        // }
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] success!");
+
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] start, hfpVolume:蓝牙音量调节传入%d", hfpVolume);
         int32_t minVolume = PhoneAudioGetMinVolume();
         int32_t maxVolume = PhoneAudioGetMaxVolume();
-        int32_t volume = hfpVolume * (maxVolume - minVolume) / CALL_VOLUME_MAX; // 转换
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] minVolume:%d, maxVolume:%d, volume:%d",
-            minVolume, maxVolume, volume);
+        unsigned char volumeValue = (unsigned char) round(((double) (hfpVolume * CALL_VOLUME_MAX) / (maxVolume - minVolume))); // 音量转换
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] minVolume:%d, maxVolume:%d, 蓝牙音量调节映射后volume:%d",minVolume,maxVolume, volumeValue);
 
-        int32_t ret = PhoneAudioSetVolume(volume);
+        int32_t ret = PhoneAudioSetVolume(hfpVolume);
         if (!ret) {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] PhoneAudioSetVolume ret:%d", ret);
             return;
         }
 
-        ret = hfp_hf_set_volume(&g_bdAddr, HFP_VOLUME_SPEAKER, hfpVolume);
+        ret = hfp_hf_set_volume(&g_bdAddr, HFP_VOLUME_SPEAKER, volumeValue);
         if (ret != ERRCODE_BT_SUCCESS) {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[SetSpeakerVolume] set_volume ret:%d, hfpVolume:%d",
                 ret, hfpVolume);
index 39978a0..cc70e95 100755 (executable)
@@ -63,7 +63,7 @@ bool AudioManager::SetVolume(AudioStreamType streamType, int32_t volume)
         else if(volume > 100) 
             volume = 100;
         else 
-            volume = 30 + (volume - 1) * 70 / 99;
+            volume = 30 + (int)((volume - 1) * 70.0 / 99.0 + 0.5);
     }
     return impl_->SetVolume(streamType, volume);
 }
@@ -90,7 +90,7 @@ int32_t AudioManager::GetVolume(AudioStreamType streamType)
         else if(volume > 100) 
             return 100;
         else 
-            return ((volume - 30) * 99 / 70) + 1;
+            return ((volume - 30) * 99.0 / 70.0) + 1.5;
     }
 
     else