Skip to content

Commit 31d6206

Browse files
authored
HarmonyOS support for VAD. (#1561)
1 parent e424cc9 commit 31d6206

15 files changed

+229
-69
lines changed

build-ohos-arm64-v8a.sh

+25-21
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ cd $dir
1919
# rm commandline-tools-linux-x64-5.0.5.200.zip
2020
if [ -z $OHOS_SDK_NATIVE_DIR ]; then
2121
OHOS_SDK_NATIVE_DIR=/star-fj/fangjun/software/huawei/command-line-tools/sdk/default/openharmony/native/
22-
export PATH=$OHOS_SDK_NATIVE_DIR/build-tools/cmake/bin:$PATH
2322
# You can find the following content inside OHOS_SDK_NATIVE_DIR
2423
# ls -lh /star-fj/fangjun/software/huawei/command-line-tools/sdk/default/openharmony/native/
2524
# total 524K
@@ -35,32 +34,39 @@ if [ -z $OHOS_SDK_NATIVE_DIR ]; then
3534
# drwxr-xr-x 3 kuangfangjun root 0 Nov 6 22:36 sysroot
3635
fi
3736

38-
# If you don't want to install commandline tools, you can install the SDK
39-
# using DevEco Studio. The following uses API version 10 as an example and
40-
# it has installed the SDK to
41-
# /Users/fangjun/software/huawei/OpenHarmony/Sdk/10/native
42-
#
43-
# Remember to select ``native`` when you install the SDK
4437
if [ ! -d $OHOS_SDK_NATIVE_DIR ]; then
45-
OHOS_SDK_NATIVE_DIR=/Users/fangjun/software/huawei/OpenHarmony/Sdk/10/native
46-
# export PATH=$OHOS_SDK_NATIVE_DIR/build-tools/cmake/bin:$PATH
47-
# ls -lh /Users/fangjun/software/huawei/OpenHarmony/Sdk/10/native/
48-
# total 1560
49-
# -rw-r--r-- 1 fangjun staff 764K Jan 1 2001 NOTICE.txt
50-
# drwxr-xr-x 3 fangjun staff 96B Nov 19 22:42 build
51-
# drwxr-xr-x 3 fangjun staff 96B Nov 19 22:42 build-tools
52-
# drwxr-xr-x 10 fangjun staff 320B Nov 19 22:42 llvm
53-
# -rw-r--r-- 1 fangjun staff 4.0K Jan 1 2001 nativeapi_syscap_config.json
54-
# -rw-r--r-- 1 fangjun staff 1.9K Jan 1 2001 ndk_system_capability.json
55-
# -rw-r--r-- 1 fangjun staff 169B Jan 1 2001 oh-uni-package.json
56-
# drwxr-xr-x 3 fangjun staff 96B Nov 19 22:42 sysroot
38+
OHOS_SDK_NATIVE_DIR=/Users/fangjun/software/command-line-tools/sdk/default/openharmony/native
39+
# (py38) fangjuns-MacBook-Pro:software fangjun$ ls -lh command-line-tools/sdk/default/openharmony/native/
40+
# total 752
41+
# -rw-r--r-- 1 fangjun staff 341K Jan 1 2001 NOTICE.txt
42+
# drwxr-xr-x 3 fangjun staff 96B Nov 6 21:17 build
43+
# drwxr-xr-x 3 fangjun staff 96B Nov 6 21:18 build-tools
44+
# -rw-r--r-- 1 fangjun staff 371B Jan 1 2001 compatible_config.json
45+
# drwxr-xr-x 10 fangjun staff 320B Nov 6 21:18 llvm
46+
# -rw-r--r-- 1 fangjun staff 16K Jan 1 2001 nativeapi_syscap_config.json
47+
# -rw-r--r-- 1 fangjun staff 5.9K Jan 1 2001 ndk_system_capability.json
48+
# -rw-r--r-- 1 fangjun staff 167B Jan 1 2001 oh-uni-package.json
49+
# drwxr-xr-x 3 fangjun staff 96B Nov 6 21:17 sysroot
5750
fi
5851

5952
if [ ! -d $OHOS_SDK_NATIVE_DIR ]; then
6053
echo "Please first download Command Line Tools for HarmonyOS"
54+
echo "See https://developer.huawei.com/consumer/cn/download/"
55+
echo "or"
56+
echo "https://hf-mirror.com/csukuangfj/harmonyos-commandline-tools/tree/main"
57+
exit 1
58+
fi
59+
60+
if [ ! -f $OHOS_SDK_NATIVE_DIR/llvm/bin/aarch64-unknown-linux-ohos-clang ]; then
61+
echo "$OHOS_SDK_NATIVE_DIR/llvm/bin/aarch64-unknown-linux-ohos-clang does not exist"
62+
echo "Please first download Command Line Tools for HarmonyOS"
63+
echo "See https://developer.huawei.com/consumer/cn/download/"
64+
echo "or"
65+
echo "https://hf-mirror.com/csukuangfj/harmonyos-commandline-tools/tree/main"
6166
exit 1
6267
fi
6368

69+
export PATH=$OHOS_SDK_NATIVE_DIR/build-tools/cmake/bin:$PATH
6470
export PATH=$OHOS_SDK_NATIVE_DIR/llvm/bin:$PATH
6571

6672
OHOS_TOOLCHAIN_FILE=$OHOS_SDK_NATIVE_DIR/build/cmake/ohos.toolchain.cmake
@@ -71,7 +77,6 @@ if [ ! -f $OHOS_TOOLCHAIN_FILE ]; then
7177
exit 1
7278
fi
7379

74-
7580
sleep 1
7681
onnxruntime_version=1.16.3
7782
onnxruntime_dir=onnxruntime-ohos-arm64-v8a-$onnxruntime_version
@@ -126,7 +131,6 @@ cmake \
126131
make -j2
127132
make install/strip
128133
cp -fv $onnxruntime_dir/lib/libonnxruntime.so install/lib
129-
cp -fv $OHOS_SDK_NATIVE_DIR/llvm/lib/aarch64-linux-ohos/libc++_shared.so install/lib
130134

131135
rm -rf install/share
132136
rm -rf install/lib/pkgconfig

build-ohos-armeabi-v7a.sh

+11-21
Original file line numberDiff line numberDiff line change
@@ -35,32 +35,24 @@ if [ -z $OHOS_SDK_NATIVE_DIR ]; then
3535
# drwxr-xr-x 3 kuangfangjun root 0 Nov 6 22:36 sysroot
3636
fi
3737

38-
# If you don't want to install commandline tools, you can install the SDK
39-
# using DevEco Studio. The following uses API version 10 as an example and
40-
# it has installed the SDK to
41-
# /Users/fangjun/software/huawei/OpenHarmony/Sdk/10/native
42-
#
43-
# Remember to select ``native`` when you install the SDK
4438
if [ ! -d $OHOS_SDK_NATIVE_DIR ]; then
45-
OHOS_SDK_NATIVE_DIR=/Users/fangjun/software/huawei/OpenHarmony/Sdk/10/native
46-
# export PATH=$OHOS_SDK_NATIVE_DIR/build-tools/cmake/bin:$PATH
47-
# ls -lh /Users/fangjun/software/huawei/OpenHarmony/Sdk/10/native/
48-
# total 1560
49-
# -rw-r--r-- 1 fangjun staff 764K Jan 1 2001 NOTICE.txt
50-
# drwxr-xr-x 3 fangjun staff 96B Nov 19 22:42 build
51-
# drwxr-xr-x 3 fangjun staff 96B Nov 19 22:42 build-tools
52-
# drwxr-xr-x 10 fangjun staff 320B Nov 19 22:42 llvm
53-
# -rw-r--r-- 1 fangjun staff 4.0K Jan 1 2001 nativeapi_syscap_config.json
54-
# -rw-r--r-- 1 fangjun staff 1.9K Jan 1 2001 ndk_system_capability.json
55-
# -rw-r--r-- 1 fangjun staff 169B Jan 1 2001 oh-uni-package.json
56-
# drwxr-xr-x 3 fangjun staff 96B Nov 19 22:42 sysroot
39+
echo "Please first download Command Line Tools for HarmonyOS"
40+
echo "See https://developer.huawei.com/consumer/cn/download/"
41+
echo "or"
42+
echo "https://hf-mirror.com/csukuangfj/harmonyos-commandline-tools/tree/main"
43+
exit 1
5744
fi
5845

59-
if [ ! -d $OHOS_SDK_NATIVE_DIR ]; then
46+
if [ ! -f $OHOS_SDK_NATIVE_DIR/llvm/bin/armv7-unknown-linux-ohos-clang ]; then
47+
echo "$OHOS_SDK_NATIVE_DIR/llvm/bin/armv7-unknown-linux-ohos-clang does not exist"
6048
echo "Please first download Command Line Tools for HarmonyOS"
49+
echo "See https://developer.huawei.com/consumer/cn/download/"
50+
echo "or"
51+
echo "https://hf-mirror.com/csukuangfj/harmonyos-commandline-tools/tree/main"
6152
exit 1
6253
fi
6354

55+
export PATH=$OHOS_SDK_NATIVE_DIR/build-tools/cmake/bin:$PATH
6456
export PATH=$OHOS_SDK_NATIVE_DIR/llvm/bin:$PATH
6557

6658
OHOS_TOOLCHAIN_FILE=$OHOS_SDK_NATIVE_DIR/build/cmake/ohos.toolchain.cmake
@@ -71,7 +63,6 @@ if [ ! -f $OHOS_TOOLCHAIN_FILE ]; then
7163
exit 1
7264
fi
7365

74-
7566
sleep 1
7667
onnxruntime_version=1.16.3
7768
onnxruntime_dir=onnxruntime-ohos-armeabi-v7a-$onnxruntime_version
@@ -130,7 +121,6 @@ cmake \
130121
make -j2
131122
make install/strip
132123
cp -fv $onnxruntime_dir/lib/libonnxruntime.so install/lib
133-
cp -fv $OHOS_SDK_NATIVE_DIR/llvm/lib/arm-linux-ohos/libc++_shared.so install/lib
134124

135125
rm -rf install/share
136126
rm -rf install/lib/pkgconfig

build-ohos-x86-64.sh

+25-21
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ cd $dir
1919
# rm commandline-tools-linux-x64-5.0.5.200.zip
2020
if [ -z $OHOS_SDK_NATIVE_DIR ]; then
2121
OHOS_SDK_NATIVE_DIR=/star-fj/fangjun/software/huawei/command-line-tools/sdk/default/openharmony/native/
22-
export PATH=$OHOS_SDK_NATIVE_DIR/build-tools/cmake/bin:$PATH
2322
# You can find the following content inside OHOS_SDK_NATIVE_DIR
2423
# ls -lh /star-fj/fangjun/software/huawei/command-line-tools/sdk/default/openharmony/native/
2524
# total 524K
@@ -35,32 +34,39 @@ if [ -z $OHOS_SDK_NATIVE_DIR ]; then
3534
# drwxr-xr-x 3 kuangfangjun root 0 Nov 6 22:36 sysroot
3635
fi
3736

38-
# If you don't want to install commandline tools, you can install the SDK
39-
# using DevEco Studio. The following uses API version 10 as an example and
40-
# it has installed the SDK to
41-
# /Users/fangjun/software/huawei/OpenHarmony/Sdk/10/native
42-
#
43-
# Remember to select ``native`` when you install the SDK
4437
if [ ! -d $OHOS_SDK_NATIVE_DIR ]; then
45-
OHOS_SDK_NATIVE_DIR=/Users/fangjun/software/huawei/OpenHarmony/Sdk/10/native
46-
# export PATH=$OHOS_SDK_NATIVE_DIR/build-tools/cmake/bin:$PATH
47-
# ls -lh /Users/fangjun/software/huawei/OpenHarmony/Sdk/10/native/
48-
# total 1560
49-
# -rw-r--r-- 1 fangjun staff 764K Jan 1 2001 NOTICE.txt
50-
# drwxr-xr-x 3 fangjun staff 96B Nov 19 22:42 build
51-
# drwxr-xr-x 3 fangjun staff 96B Nov 19 22:42 build-tools
52-
# drwxr-xr-x 10 fangjun staff 320B Nov 19 22:42 llvm
53-
# -rw-r--r-- 1 fangjun staff 4.0K Jan 1 2001 nativeapi_syscap_config.json
54-
# -rw-r--r-- 1 fangjun staff 1.9K Jan 1 2001 ndk_system_capability.json
55-
# -rw-r--r-- 1 fangjun staff 169B Jan 1 2001 oh-uni-package.json
56-
# drwxr-xr-x 3 fangjun staff 96B Nov 19 22:42 sysroot
38+
OHOS_SDK_NATIVE_DIR=/Users/fangjun/software/command-line-tools/sdk/default/openharmony/native
39+
# (py38) fangjuns-MacBook-Pro:software fangjun$ ls -lh command-line-tools/sdk/default/openharmony/native/
40+
# total 752
41+
# -rw-r--r-- 1 fangjun staff 341K Jan 1 2001 NOTICE.txt
42+
# drwxr-xr-x 3 fangjun staff 96B Nov 6 21:17 build
43+
# drwxr-xr-x 3 fangjun staff 96B Nov 6 21:18 build-tools
44+
# -rw-r--r-- 1 fangjun staff 371B Jan 1 2001 compatible_config.json
45+
# drwxr-xr-x 10 fangjun staff 320B Nov 6 21:18 llvm
46+
# -rw-r--r-- 1 fangjun staff 16K Jan 1 2001 nativeapi_syscap_config.json
47+
# -rw-r--r-- 1 fangjun staff 5.9K Jan 1 2001 ndk_system_capability.json
48+
# -rw-r--r-- 1 fangjun staff 167B Jan 1 2001 oh-uni-package.json
49+
# drwxr-xr-x 3 fangjun staff 96B Nov 6 21:17 sysroot
5750
fi
5851

5952
if [ ! -d $OHOS_SDK_NATIVE_DIR ]; then
6053
echo "Please first download Command Line Tools for HarmonyOS"
54+
echo "See https://developer.huawei.com/consumer/cn/download/"
55+
echo "or"
56+
echo "https://hf-mirror.com/csukuangfj/harmonyos-commandline-tools/tree/main"
57+
exit 1
58+
fi
59+
60+
if [ ! -f $OHOS_SDK_NATIVE_DIR/llvm/bin/x86_64-unknown-linux-ohos-clang ]; then
61+
echo "$OHOS_SDK_NATIVE_DIR/llvm/bin/x86_64-unknown-linux-ohos-clang does not exist"
62+
echo "Please first download Command Line Tools for HarmonyOS"
63+
echo "See https://developer.huawei.com/consumer/cn/download/"
64+
echo "or"
65+
echo "https://hf-mirror.com/csukuangfj/harmonyos-commandline-tools/tree/main"
6166
exit 1
6267
fi
6368

69+
export PATH=$OHOS_SDK_NATIVE_DIR/build-tools/cmake/bin:$PATH
6470
export PATH=$OHOS_SDK_NATIVE_DIR/llvm/bin:$PATH
6571

6672
OHOS_TOOLCHAIN_FILE=$OHOS_SDK_NATIVE_DIR/build/cmake/ohos.toolchain.cmake
@@ -71,7 +77,6 @@ if [ ! -f $OHOS_TOOLCHAIN_FILE ]; then
7177
exit 1
7278
fi
7379

74-
7580
sleep 1
7681
onnxruntime_version=1.16.3
7782
onnxruntime_dir=onnxruntime-ohos-x86_64-$onnxruntime_version
@@ -126,7 +131,6 @@ cmake \
126131
make -j2
127132
make install/strip
128133
cp -fv $onnxruntime_dir/lib/libonnxruntime.so install/lib
129-
cp -fv $OHOS_SDK_NATIVE_DIR/llvm/lib/x86_64-linux-ohos/libc++_shared.so install/lib
130134

131135
rm -rf install/share
132136
rm -rf install/lib/pkgconfig

sherpa-onnx/c-api/c-api.cc

+36-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
#include <utility>
1212
#include <vector>
1313

14+
#if __OHOS__
15+
#include "rawfile/raw_file_manager.h"
16+
#endif
17+
1418
#include "sherpa-onnx/csrc/audio-tagging.h"
1519
#include "sherpa-onnx/csrc/circular-buffer.h"
1620
#include "sherpa-onnx/csrc/display.h"
@@ -917,8 +921,8 @@ struct SherpaOnnxVoiceActivityDetector {
917921
std::unique_ptr<sherpa_onnx::VoiceActivityDetector> impl;
918922
};
919923

920-
SherpaOnnxVoiceActivityDetector *SherpaOnnxCreateVoiceActivityDetector(
921-
const SherpaOnnxVadModelConfig *config, float buffer_size_in_seconds) {
924+
sherpa_onnx::VadModelConfig GetVadModelConfig(
925+
const SherpaOnnxVadModelConfig *config) {
922926
sherpa_onnx::VadModelConfig vad_config;
923927

924928
vad_config.silero_vad.model = SHERPA_ONNX_OR(config->silero_vad.model, "");
@@ -947,9 +951,20 @@ SherpaOnnxVoiceActivityDetector *SherpaOnnxCreateVoiceActivityDetector(
947951
vad_config.debug = SHERPA_ONNX_OR(config->debug, false);
948952

949953
if (vad_config.debug) {
954+
#if __OHOS__
955+
SHERPA_ONNX_LOGE("%{public}s", vad_config.ToString().c_str());
956+
#else
950957
SHERPA_ONNX_LOGE("%s", vad_config.ToString().c_str());
958+
#endif
951959
}
952960

961+
return vad_config;
962+
}
963+
964+
SherpaOnnxVoiceActivityDetector *SherpaOnnxCreateVoiceActivityDetector(
965+
const SherpaOnnxVadModelConfig *config, float buffer_size_in_seconds) {
966+
auto vad_config = GetVadModelConfig(config);
967+
953968
if (!vad_config.Validate()) {
954969
SHERPA_ONNX_LOGE("Errors in config");
955970
return nullptr;
@@ -962,6 +977,25 @@ SherpaOnnxVoiceActivityDetector *SherpaOnnxCreateVoiceActivityDetector(
962977
return p;
963978
}
964979

980+
#ifdef __OHOS__
981+
SherpaOnnxVoiceActivityDetector *SherpaOnnxCreateVoiceActivityDetectorOHOS(
982+
const SherpaOnnxVadModelConfig *config, float buffer_size_in_seconds,
983+
NativeResourceManager *mgr) {
984+
if (mgr == nullptr) {
985+
return SherpaOnnxCreateVoiceActivityDetector(config,
986+
buffer_size_in_seconds);
987+
}
988+
989+
auto vad_config = GetVadModelConfig(config);
990+
991+
SherpaOnnxVoiceActivityDetector *p = new SherpaOnnxVoiceActivityDetector;
992+
p->impl = std::make_unique<sherpa_onnx::VoiceActivityDetector>(
993+
mgr, vad_config, buffer_size_in_seconds);
994+
995+
return p;
996+
}
997+
#endif
998+
965999
void SherpaOnnxDestroyVoiceActivityDetector(
9661000
SherpaOnnxVoiceActivityDetector *p) {
9671001
delete p;

sherpa-onnx/c-api/c-api.h

+15
Original file line numberDiff line numberDiff line change
@@ -841,6 +841,21 @@ SHERPA_ONNX_API SherpaOnnxVoiceActivityDetector *
841841
SherpaOnnxCreateVoiceActivityDetector(const SherpaOnnxVadModelConfig *config,
842842
float buffer_size_in_seconds);
843843

844+
#ifdef __OHOS__
845+
846+
// Return an instance of VoiceActivityDetector.
847+
// The user has to use SherpaOnnxDestroyVoiceActivityDetector() to free
848+
// the returned pointer to avoid memory leak.
849+
//
850+
// It is for HarmonyOS
851+
typedef struct NativeResourceManager NativeResourceManager;
852+
853+
SHERPA_ONNX_API SherpaOnnxVoiceActivityDetector *
854+
SherpaOnnxCreateVoiceActivityDetectorOHOS(
855+
const SherpaOnnxVadModelConfig *config, float buffer_size_in_seconds,
856+
NativeResourceManager *mgr);
857+
#endif
858+
844859
SHERPA_ONNX_API void SherpaOnnxDestroyVoiceActivityDetector(
845860
SherpaOnnxVoiceActivityDetector *p);
846861

sherpa-onnx/csrc/CMakeLists.txt

+6
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,12 @@ target_link_libraries(sherpa-onnx-core
207207
kaldi-decoder-core
208208
ssentencepiece_core
209209
)
210+
if(DEFINED OHOS AND x${OHOS} STREQUAL xOHOS)
211+
target_link_libraries(sherpa-onnx-core
212+
hilog_ndk.z
213+
rawfile.z
214+
)
215+
endif()
210216

211217
if(SHERPA_ONNX_ENABLE_GPU)
212218
target_link_libraries(sherpa-onnx-core

sherpa-onnx/csrc/macros.h

+12
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@
88
#include <stdlib.h>
99

1010
#include <utility>
11+
#if __OHOS__
12+
#include "hilog/log.h"
13+
14+
#undef LOG_DOMAIN
15+
#undef LOG_TAG
16+
17+
// https://gitee.com/openharmony/docs/blob/145a084f0b742e4325915e32f8184817927d1251/en/contribute/OpenHarmony-Log-guide.md#hilog-api-usage-specifications
18+
#define LOG_DOMAIN 0x6666
19+
#define LOG_TAG "sherpa_onnx"
20+
#endif
1121

1222
#if __ANDROID_API__ >= 8
1323
#include "android/log.h"
@@ -19,6 +29,8 @@
1929
fprintf(stderr, "\n"); \
2030
__android_log_print(ANDROID_LOG_WARN, "sherpa-onnx", ##__VA_ARGS__); \
2131
} while (0)
32+
#elif defined(__OHOS__)
33+
#define SHERPA_ONNX_LOGE(...) OH_LOG_INFO(LOG_APP, ##__VA_ARGS__)
2234
#elif SHERPA_ONNX_ENABLE_WASM
2335
#define SHERPA_ONNX_LOGE(...) \
2436
do { \

0 commit comments

Comments
 (0)