From dcb0bf29b60ee5f035f3af3052e240b75a4538af Mon Sep 17 00:00:00 2001 From: wupingyuan Date: Mon, 29 May 2023 14:30:33 +0800 Subject: [PATCH] add sonic Signed-off-by: wupingyuan --- thirdparty/sonic/HPKBUILD | 59 +++++++++++++ thirdparty/sonic/README.OpenSource | 11 +++ thirdparty/sonic/README_zh.md | 12 +++ thirdparty/sonic/SHA512SUM | 1 + thirdparty/sonic/docs/hap_integrate.md | 81 ++++++++++++++++++ .../sonic/docs/pic/sonic_install_dir.jpg | Bin 0 -> 14340 bytes thirdparty/sonic/docs/pic/sonic_test.jpg | Bin 0 -> 11749 bytes thirdparty/sonic/docs/pic/sonic_usage.jpg | Bin 0 -> 27019 bytes 8 files changed, 164 insertions(+) create mode 100644 thirdparty/sonic/HPKBUILD create mode 100644 thirdparty/sonic/README.OpenSource create mode 100644 thirdparty/sonic/README_zh.md create mode 100644 thirdparty/sonic/SHA512SUM create mode 100644 thirdparty/sonic/docs/hap_integrate.md create mode 100644 thirdparty/sonic/docs/pic/sonic_install_dir.jpg create mode 100644 thirdparty/sonic/docs/pic/sonic_test.jpg create mode 100644 thirdparty/sonic/docs/pic/sonic_usage.jpg diff --git a/thirdparty/sonic/HPKBUILD b/thirdparty/sonic/HPKBUILD new file mode 100644 index 00000000..c3e8e579 --- /dev/null +++ b/thirdparty/sonic/HPKBUILD @@ -0,0 +1,59 @@ +# Contributor: wupingyuan +# Maintainer: wupingyuan +pkgname=sonic +pkgver="release-0.2.0" +pkgrel=0 +pkgdesc="Sonic is a simple algorithm for speeding up or slowing down speech. However, it's optimized for speed ups of over 2X, unlike previous algorithms for changing speech rate. The Sonic library is a very simple ANSI C library that is designed to easily be integrated into streaming voice applications, like TTS back ends." +url="https://github.com/waywardgeek/sonic" +archs=("armeabi-v7a" "arm64-v8a") +license=("Apache License 2.0") +depends=() +makedepends=() + +source="https://github.com/waywardgeek/$pkgname/archive/refs/tags/$pkgver.tar.gz" + +autounpack=true +downloadpackage=true +buildtools="make" +builddir=$pkgname-$pkgver +packagename=$builddir.tar.gz +cc= + +prepare() { + cp -rf $builddir $builddir-$ARCH-build + if [ $ARCH == "armeabi-v7a" ] + then + cc=${OHOS_SDK}/native/llvm/bin/arm-linux-ohos-clang + fi + if [ $ARCH == "arm64-v8a" ] + then + cc=${OHOS_SDK}/native/llvm/bin/aarch64-linux-ohos-clang + fi +} + +build() { + cd $builddir-$ARCH-build + make CC=${cc} -j4 > `pwd`/build.log 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +package() { + cd $builddir-$ARCH-build + make install PREFIX=$LYCIUM_ROOT/usr/$pkgname/$ARCH >> `pwd`/build.log 2>&1 + ret=$? + cd $OLDPWD + unset cc + return $ret +} + +check() { + echo "The test must be on an OpenHarmony device!" + # 在OpenHarmony开发板中执行测试用例 + # ./sonic -s 2.0 sonic.wav out.wav +} + +cleanbuild(){ + rm -rf ${PWD}/$builddir $builddir-armeabi-v7a-build $builddir-arm64-v8a-build #${PWD}/$packagename +} \ No newline at end of file diff --git a/thirdparty/sonic/README.OpenSource b/thirdparty/sonic/README.OpenSource new file mode 100644 index 00000000..c6fa252b --- /dev/null +++ b/thirdparty/sonic/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "sonic", + "License": "Apache License 2.0", + "License File": "LICENSE", + "Version Number": "release-0.2.0", + "Owner": "wupingyuan@huawei.com", + "Upstream URL": "https://github.com/waywardgeek/sonic/archive/refs/tags/release-0.2.0.tar.gz", + "Description": "Sonic is a simple algorithm for speeding up or slowing down speech. However, it's optimized for speed ups of over 2X, unlike previous algorithms for changing speech rate. The Sonic library is a very simple ANSI C library that is designed to easily be integrated into streaming voice applications, like TTS back ends." + } +] diff --git a/thirdparty/sonic/README_zh.md b/thirdparty/sonic/README_zh.md new file mode 100644 index 00000000..bebd90b6 --- /dev/null +++ b/thirdparty/sonic/README_zh.md @@ -0,0 +1,12 @@ +# sonic三方库说明 +## 功能简介 +sonic是一种用于加速或减慢音频算法的库。 +## 使用约束 +- IDE版本:DevEco Studio 3.1 Beta2 +- SDK版本:ohos_sdk_public 3.2.11.9 (API Version 9 Release) +- 三方库版本:release-0.2.0 +- 当前适配的功能:支持音频变速 +- [Apache License 2.0](https://github.com/waywardgeek/sonic) + +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) diff --git a/thirdparty/sonic/SHA512SUM b/thirdparty/sonic/SHA512SUM new file mode 100644 index 00000000..a05b95c3 --- /dev/null +++ b/thirdparty/sonic/SHA512SUM @@ -0,0 +1 @@ +e70510c89c4f29c30f2a3443a1c4fc1aab2c99147e2ebd1dea3cbb2b89b8bdcee14dc504600ac1f04e82d32c19f17b06fbb417311853beb764c24d15687a126f sonic-release-0.2.0.tar.gz \ No newline at end of file diff --git a/thirdparty/sonic/docs/hap_integrate.md b/thirdparty/sonic/docs/hap_integrate.md new file mode 100644 index 00000000..88c3fc5e --- /dev/null +++ b/thirdparty/sonic/docs/hap_integrate.md @@ -0,0 +1,81 @@ +# sonic集成到应用hap +本库是在RK3568开发板上基于OpenHarmony3.2 Release版本的镜像验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 +## 开发环境 +- ubuntu20.04 +- [OpenHarmony3.2Release镜像](https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fopenharmony%2Fos%2F3.2-Release%2Fdayu200_standard_arm32.tar.gz) +- [ohos_sdk_public 3.2.11.9 (API Version 9 Release)](https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fopenharmony%2Fos%2F3.2-Release%2Fohos-sdk-windows_linux-public.tar.gz) +- [DevEco Studio 3.1 Beta2](https://gitee.com/link?target=https%3A%2F%2Fcontentcenter-vali-drcn.dbankcdn.cn%2Fpvt_2%2FDeveloperAlliance_package_901_9%2Ff3%2Fv3%2FuJyuq3syQ2ak4hE1QZmAug%2Fdevecostudio-windows-3.1.0.400.zip%3FHW-CC-KV%3DV1%26HW-CC-Date%3D20230408T013335Z%26HW-CC-Expire%3D315360000%26HW-CC-Sign%3D96262721EDC9B34E6F62E66884AB7AE2A94C2A7B8C28D6F7FC891F46EB211A70) +- [准备三方库构建环境](../../../tools/README.md#编译环境准备) +- [准备三方库测试环境](../../../tools/README.md#ci环境准备) +## 编译三方库 +- 下载本仓库 + ``` + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` +- 三方库目录结构 + ``` + tpc_c_cplusplus/thirdparty/sonic #三方库sonic的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── SHA512SUM #三方库校验文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md + ``` + +- 将sonic拷贝至tools/main目录下 + ``` + cd tpc_c_cplusplus + cp thirdparty/sonic tools/main -rf + ``` +- 在tools目录下编译三方库 + 编译环境的搭建参考[准备三方库构建环境](../../../tools/README.md#编译环境准备) + ``` + cd tools + ./build.sh sonic + ``` +- 三方库头文件及生成的库 + 在tools目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + ``` + sonic/arm64-v8a sonic/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示 + +  ![thirdparty_install_dir](pic/sonic_install_dir.jpg) +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + ``` + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libsonic.so.0) + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/sonic/${OHOS_ARCH}/include) + ``` + ![sonic_usage](pic/sonic_usage.jpg) +## 测试三方库 +三方库的测试使用原库自带的测试用例来做测试,[准备三方库测试环境](../../../tools/README.md#ci环境准备) + +- 将编译生成的sonic可执行文件及音频素材sonic.wav准备好 + +- 将准备好的文件推送到开发板,在windows命令行进行如下操作 + + ``` + hdc_std shell mount -o remount,rw / #修改系统权限为可读写 + hdc_std file send sonic /data #将可执行文件推入开发板data目录 + hdc_std file send sonic.wav /data #将测试文件推入开发板data目录 + hdc_std file send libc++_shared.so /system/lib64 + hdc_std file send libsonic.so.0 /system/lib64 + hdc_std shell #进入开发板 + chmod 777 sonic #添加权限 + ./sonic -s 2.0 sonic.wav sonicoutnew.wav #执行测试用例 + ``` + + ![sonic_test](pic/sonic_test.jpg) + +## 参考资料 +- [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld) +- [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc) +- [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge) +- [通过DevEco Studio开发一个NAPI工程](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/napi_study/docs/hello_napi.md) diff --git a/thirdparty/sonic/docs/pic/sonic_install_dir.jpg b/thirdparty/sonic/docs/pic/sonic_install_dir.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed9c781c76d123861d35d4a188a84666d755f2c0 GIT binary patch literal 14340 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 M$NwWXU_&kZ7Y9e5;s5{u literal 0 HcmV?d00001 diff --git a/thirdparty/sonic/docs/pic/sonic_usage.jpg b/thirdparty/sonic/docs/pic/sonic_usage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfe97ed6863f42ea1acd441a42c065a8da58f41a GIT binary patch literal 27019 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 literal 0 HcmV?d00001 -- Gitee