Add API to get version information (#2309)

This commit is contained in:
Fangjun Kuang
2025-06-25 00:22:21 +08:00
committed by GitHub
parent 7f2145539d
commit bda427f4b2
169 changed files with 1480 additions and 12 deletions

View File

@@ -0,0 +1,120 @@
/// Copyright (c) 2025 Xiaomi Corporation (authors: Fangjun Kuang)
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace SherpaOnnx
{
public class VersionInfo
{
public static String Version
{
get
{
IntPtr p = SherpaOnnxGetVersionStr();
string s = "";
int length = 0;
unsafe
{
byte* b = (byte*)p;
if (b != null)
{
while (*b != 0)
{
++b;
length += 1;
}
}
}
if (length > 0)
{
byte[] stringBuffer = new byte[length];
Marshal.Copy(p, stringBuffer, 0, length);
s = Encoding.UTF8.GetString(stringBuffer);
}
return s;
}
}
public static String GitSha1
{
get
{
IntPtr p = SherpaOnnxGetGitSha1();
string s = "";
int length = 0;
unsafe
{
byte* b = (byte*)p;
if (b != null)
{
while (*b != 0)
{
++b;
length += 1;
}
}
}
if (length > 0)
{
byte[] stringBuffer = new byte[length];
Marshal.Copy(p, stringBuffer, 0, length);
s = Encoding.UTF8.GetString(stringBuffer);
}
return s;
}
}
public static String GitDate
{
get
{
IntPtr p = SherpaOnnxGetGitDate();
string s = "";
int length = 0;
unsafe
{
byte* b = (byte*)p;
if (b != null)
{
while (*b != 0)
{
++b;
length += 1;
}
}
}
if (length > 0)
{
byte[] stringBuffer = new byte[length];
Marshal.Copy(p, stringBuffer, 0, length);
s = Encoding.UTF8.GetString(stringBuffer);
}
return s;
}
}
[DllImport(Dll.Filename)]
private static extern IntPtr SherpaOnnxGetVersionStr();
[DllImport(Dll.Filename)]
private static extern IntPtr SherpaOnnxGetGitSha1();
[DllImport(Dll.Filename)]
private static extern IntPtr SherpaOnnxGetGitDate();
}
}

View File

@@ -2027,3 +2027,15 @@ func (audio *DenoisedAudio) Save(filename string) bool {
func (sd *OfflineSpeechDenoiser) SampleRate() int {
return int(C.SherpaOnnxOfflineSpeechDenoiserGetSampleRate(sd.impl))
}
func GetVersion() string {
return C.GoString(C.SherpaOnnxGetVersionStr())
}
func GetGitSha1() string {
return C.GoString(C.SherpaOnnxGetGitSha1())
}
func GetGitDate() string {
return C.GoString(C.SherpaOnnxGetGitDate())
}

View File

@@ -28,6 +28,7 @@ set(srcs
src/spoken-language-identification.cc
src/streaming-asr.cc
src/vad.cc
src/version.cc
src/wave-reader.cc
src/wave-writer.cc
)

View File

@@ -26,12 +26,14 @@ for (const p of possible_paths) {
}
if (!found) {
let addon_path = `${process.env.PWD}/node_modules/sherpa-onnx-${platform_arch}`;
let addon_path =
`${process.env.PWD}/node_modules/sherpa-onnx-${platform_arch}`;
const pnpmIndex = __dirname.indexOf(`node_modules${path.sep}.pnpm`);
if (pnpmIndex !== -1) {
const parts = __dirname.slice(pnpmIndex).split(path.sep);
parts.pop();
addon_path = `${process.env.PWD}/${parts.join('/')}/sherpa-onnx-${platform_arch}`;
addon_path =
`${process.env.PWD}/${parts.join('/')}/sherpa-onnx-${platform_arch}`;
}
let msg = `Could not find sherpa-onnx-node. Tried\n\n ${

View File

@@ -28,4 +28,7 @@ module.exports = {
KeywordSpotter: kws.KeywordSpotter,
OfflineSpeakerDiarization: sd.OfflineSpeakerDiarization,
OfflineSpeechDenoiser: speech_denoiser.OfflineSpeechDenoiser,
version: addon.version,
gitSha1: addon.gitSha1,
gitDate: addon.gitDate,
}

View File

@@ -0,0 +1 @@
../../../harmony-os/SherpaOnnxHar/sherpa_onnx/src/main/cpp/version.cc

View File

@@ -60,6 +60,21 @@ function createOfflineSpeechDenoiser(config) {
wasmModule, config);
}
function getVersion() {
const v = wasmModule._SherpaOnnxGetVersionStr();
return wasmModule.UTF8ToString(v);
}
function getGitSha1() {
const v = wasmModule._SherpaOnnxGetGitSha1();
return wasmModule.UTF8ToString(v);
}
function getGitDate() {
const v = wasmModule._SherpaOnnxGetGitDate();
return wasmModule.UTF8ToString(v);
}
// Note: online means streaming and offline means non-streaming here.
// Both of them don't require internet connection.
module.exports = {
@@ -74,4 +89,7 @@ module.exports = {
createVad,
createOfflineSpeakerDiarization,
createOfflineSpeechDenoiser,
version: getVersion(),
gitSha1: getGitSha1(),
gitDate: getGitDate(),
};