From 6f0befc87f0e828cd1ba88be02aceb379d686632 Mon Sep 17 00:00:00 2001 From: wuzhihuitmac Date: Fri, 2 Feb 2024 01:25:03 +0000 Subject: [PATCH] =?UTF-8?q?fixed=206e617d1=20from=20https://gitee.com/wuzh?= =?UTF-8?q?ihuitmac/sensors=5Fsensor/pulls/557=20=E8=B6=85=E5=A4=A7?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wuzhihuitmac Change-Id: I66a72279846d6eaffeaf1ced9df8f5eed74d5550 --- frameworks/js/napi/src/sensor_js.cpp | 6 +- .../native/include/vibration_convert_core.h | 2 + .../native/src/vibration_convert_core.cpp | 99 +++++++++++-------- 3 files changed, 60 insertions(+), 47 deletions(-) diff --git a/frameworks/js/napi/src/sensor_js.cpp b/frameworks/js/napi/src/sensor_js.cpp index e6813aaa..5a7a64ff 100644 --- a/frameworks/js/napi/src/sensor_js.cpp +++ b/frameworks/js/napi/src/sensor_js.cpp @@ -1061,13 +1061,11 @@ napi_value Subscribe(napi_env env, napi_callback_info info, int32_t sensorTypeId CHKPP(asyncCallbackInfo); napi_value napiSuccess = GetNamedProperty(env, args[0], "success"); CHKCP(IsMatchType(env, napiSuccess, napi_function), "get napiSuccess fail"); - CHKCP(RegisterNapiCallback(env, napiSuccess, asyncCallbackInfo->callback[0]), - "register success callback fail"); + CHKCP(RegisterNapiCallback(env, napiSuccess, asyncCallbackInfo->callback[0]), "register success callback fail"); napi_value napiFail = GetNamedProperty(env, args[0], "fail"); if (IsMatchType(env, napiFail, napi_function)) { SEN_HILOGD("Has fail callback"); - CHKCP(RegisterNapiCallback(env, napiFail, asyncCallbackInfo->callback[1]), - "register fail callback fail"); + CHKCP(RegisterNapiCallback(env, napiFail, asyncCallbackInfo->callback[1]), "register fail callback fail"); } if (auto iter = g_samplingPeriod.find(interval); iter == g_samplingPeriod.end()) { CHKCP(IsMatchType(env, napiFail, napi_function), "input error, interval is invalid"); diff --git a/vibration_convert/core/native/include/vibration_convert_core.h b/vibration_convert/core/native/include/vibration_convert_core.h index 159d87a1..2acbd671 100644 --- a/vibration_convert/core/native/include/vibration_convert_core.h +++ b/vibration_convert/core/native/include/vibration_convert_core.h @@ -156,6 +156,7 @@ private: void OutputTransientEventsByInsertTime(const std::vector &onsetTimes, const std::vector &intensityDatas, const std::vector &freqNorms, std::vector &transientIndexs, std::vector &transientEventTimes); + void GetIndex(const UnionTransientEvent &unionTransientEvent, const std::vector &intensityDatas); void OutputTransientEventsAlign(const std::vector &unionTransientEvents, const std::vector &intensityDatas, const std::vector &freqNorms, std::vector &transientIndexs, std::vector &transientEventTimes); @@ -176,6 +177,7 @@ private: std::vector ×, std::vector &durations); void MergeContinuousEvents(const std::vector &interContinuousEvents); void AddContinuousEventData(const ContinuousEvent &continuousEvent); + int32_t GetAudioData(); void StoreHapticEvent(); void StoreEventSequence(); void StoreEventBlock(); diff --git a/vibration_convert/core/native/src/vibration_convert_core.cpp b/vibration_convert/core/native/src/vibration_convert_core.cpp index 5cd5a787..89d3a0e2 100644 --- a/vibration_convert/core/native/src/vibration_convert_core.cpp +++ b/vibration_convert/core/native/src/vibration_convert_core.cpp @@ -66,20 +66,8 @@ constexpr int32_t ADSR_BOUNDARY_STATUS_ONE { 1 }; constexpr int32_t ADSR_BOUNDARY_STATUS_BOTH { 2 }; } // namespace -int32_t VibrationConvertCore::ConvertAudioToHaptic(const AudioSetting &audioSetting, const std::vector &audioDatas, - std::vector &hapticEvents) +int32_t VibrationConvertCore::GetAudioData() { - CALL_LOG_ENTER; - if (audioDatas.empty()) { - SEN_HILOGE("audioDatas is empty"); - return Sensors::ERROR; - } - audioSetting_ = audioSetting; - int32_t ret = ResampleAudioData(audioDatas); - if (ret != Sensors::SUCCESS) { - SEN_HILOGE("ResampleAudioData failed"); - return ret; - } std::vector data = PreprocessAudioData(); int32_t onsetHopLength = WINDOW_LENGTH; double rmsILowerDelta = 0.0; @@ -120,6 +108,26 @@ int32_t VibrationConvertCore::ConvertAudioToHaptic(const AudioSetting &audioSett } OutputAllContinuousEvent(intensityDatas, transientIndexes, freqNorms, transientEventFlags); } + return Sensors::SUCCESS; +} +int32_t VibrationConvertCore::ConvertAudioToHaptic(const AudioSetting &audioSetting, + const std::vector &audioDatas, std::vector &hapticEvents) +{ + CALL_LOG_ENTER; + if (audioDatas.empty()) { + SEN_HILOGE("audioDatas is empty"); + return Sensors::ERROR; + } + audioSetting_ = audioSetting; + int32_t ret = ResampleAudioData(audioDatas); + if (ret != Sensors::SUCCESS) { + SEN_HILOGE("ResampleAudioData failed"); + return ret; + } + if (GetAudioData() != Sensors::SUCCESS) { + SEN_HILOGE("GetAudioData failed"); + return Sensors::ERROR; + } StoreHapticEvent(); hapticEvents = hapticEvents_; GenerateVibrationJsonFile jsonFile; @@ -915,6 +923,40 @@ void VibrationConvertCore::AddTransientEventData(TransientEvent transientEvent) transientEvents_.push_back(transientEvent); } +void VibrationConvertCore::GetIdex(const UnionTransientEvent &unionTransientEvent, + const std::vector &intensityDatas) +{ + // get max index. + size_t beginIndex = unionTransientEvent.onsetIdx; + size_t endIndex = beginIndex + onsetMinSkip_; + size_t maxIndex = beginIndex; + double maxRmseEnvelope = intensityDatas[beginIndex].rmseEnvelope; + for (size_t k = (beginIndex + 1); k < endIndex; k++) { + if (intensityDatas[k].rmseEnvelope > maxRmseEnvelope) { + maxRmseEnvelope = intensityDatas[k].rmseEnvelope; + maxIndex = k; + } + } + int32_t fromIndex = unionTransientEvent.onsetIdx - onsetMinSkip_; + if (fromIndex < 0) { + fromIndex = 0; + } + // get min index. + beginIndex = fromIndex; + endIndex = unionTransientEvent.onsetIdx + 1; + size_t minIndex = beginIndex; + double minRmseEnvelope = intensityDatas[beginIndex].rmseEnvelope; + for (size_t k = (beginIndex + 1); k < endIndex; k++) { + if (intensityDatas[k].rmseEnvelope < minRmseEnvelope) { + minRmseEnvelope = intensityDatas[k].rmseEnvelope; + minIndex = k; + } + } + if (minIndex == (unionTransientEvent.onsetIdx + 1)) { + minIndex = unionTransientEvent.onsetIdx; + } +} + void VibrationConvertCore::OutputTransientEventsAlign(const std::vector &unionTransientEvents, const std::vector &intensityDatas, const std::vector &freqNorms, std::vector &transientIndexs, std::vector &transientEventTimes) @@ -933,36 +975,7 @@ void VibrationConvertCore::OutputTransientEventsAlign(const std::vector maxRmseEnvelope) { - maxRmseEnvelope = intensityDatas[k].rmseEnvelope; - maxIndex = k; - } - } - int32_t fromIndex = unionTransientEvents[i].onsetIdx - onsetMinSkip_; - if (fromIndex < 0) { - fromIndex = 0; - } - // get min index. - beginIndex = fromIndex; - endIndex = unionTransientEvents[i].onsetIdx + 1; - size_t minIndex = beginIndex; - double minRmseEnvelope = intensityDatas[beginIndex].rmseEnvelope; - for (size_t k = (beginIndex + 1); k < endIndex; k++) { - if (intensityDatas[k].rmseEnvelope < minRmseEnvelope) { - minRmseEnvelope = intensityDatas[k].rmseEnvelope; - minIndex = k; - } - } - if (minIndex == (unionTransientEvents[i].onsetIdx + 1)) { - minIndex = unionTransientEvents[i].onsetIdx; - } - + GetIdex(unionTransientEvents[i], intensityDatas); auto it = find(transientIndexs.begin(), transientIndexs.end(), minIndex); if (it == transientIndexs.end()) { transientEventTimes.push_back(intensityDatas[minIndex].rmseTimeNorm); -- Gitee