Skip to content

Commit 5cce159

Browse files
authored
Fix passing C# string to C++ (#1055)
1 parent a3bac19 commit 5cce159

File tree

16 files changed

+46
-29
lines changed

16 files changed

+46
-29
lines changed

.github/workflows/linux-jni.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ jobs:
7171
mkdir build
7272
cd build
7373
74-
cmake -DSHERPA_ONNX_ENABLE_TTS=ON -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} -D BUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=./install -DSHERPA_ONNX_ENABLE_JNI=ON ..
74+
cmake -DSHERPA_ONNX_ENABLE_TTS=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=./install -DSHERPA_ONNX_ENABLE_JNI=ON ..
7575
7676
make -j2
7777
make install
@@ -153,7 +153,7 @@ jobs:
153153
git push https://csukuangfj:$HF_TOKEN@huggingface.co/csukuangfj/sherpa-onnx-libs main
154154
155155
- name: Release pre-compiled binaries and libs for linux x64
156-
if: (github.repository_owner == 'csukuangfj' || github.repository_owner == 'k2-fsa') && github.event_name == 'push' && contains(github.ref, 'refs/tags/') && matrix.build_type == 'Release'
156+
if: (github.repository_owner == 'csukuangfj' || github.repository_owner == 'k2-fsa') && github.event_name == 'push' && contains(github.ref, 'refs/tags/')
157157
uses: svenstaro/upload-release-action@v2
158158
with:
159159
file_glob: true

CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ project(sherpa-onnx)
88
# ./nodejs-addon-examples
99
# ./dart-api-examples/
1010
# ./sherpa-onnx/flutter/CHANGELOG.md
11-
set(SHERPA_ONNX_VERSION "1.10.1")
11+
set(SHERPA_ONNX_VERSION "1.10.2")
1212

1313
# Disable warning about
1414
#

dart-api-examples/non-streaming-asr/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ environment:
1010

1111
# Add regular dependencies here.
1212
dependencies:
13-
sherpa_onnx: ^1.10.1
13+
sherpa_onnx: ^1.10.2
1414
path: ^1.9.0
1515
args: ^2.5.0
1616

dart-api-examples/streaming-asr/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ environment:
1111

1212
# Add regular dependencies here.
1313
dependencies:
14-
sherpa_onnx: ^1.10.1
14+
sherpa_onnx: ^1.10.2
1515
path: ^1.9.0
1616
args: ^2.5.0
1717

dart-api-examples/tts/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ environment:
88

99
# Add regular dependencies here.
1010
dependencies:
11-
sherpa_onnx: ^1.10.1
11+
sherpa_onnx: ^1.10.2
1212
path: ^1.9.0
1313
args: ^2.5.0
1414

dart-api-examples/vad/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ environment:
99
sdk: ^3.4.0
1010

1111
dependencies:
12-
sherpa_onnx: ^1.10.1
12+
sherpa_onnx: ^1.10.2
1313
path: ^1.9.0
1414
args: ^2.5.0
1515

dotnet-examples/Common/Common.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</PropertyGroup>
77
<ItemGroup>
88
<PackageReference Include="CommandLineParser" Version="2.9.1" />
9-
<PackageReference Include="org.k2fsa.sherpa.onnx" Version="1.10.1" />
9+
<PackageReference Include="org.k2fsa.sherpa.onnx" Version="*" />
1010
</ItemGroup>
1111

1212
</Project>

dotnet-examples/offline-punctuation/run.sh

100644100755
File mode changed.

nodejs-addon-examples/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"dependencies": {
3-
"sherpa-onnx-node": "^1.10.1"
3+
"sherpa-onnx-node": "^1.10.2"
44
}
55
}

scripts/dotnet/.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
all
2-
macos
2+
macos-arm64
3+
macos-x64
34
linux
45
windows
56
windows-x64

scripts/dotnet/OfflinePunctuation.cs

+4-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ public OfflinePunctuation(OfflinePunctuationConfig config)
1616

1717
public String AddPunct(String text)
1818
{
19-
IntPtr p = SherpaOfflinePunctuationAddPunct(_handle.Handle, text);
19+
byte[] utf8Bytes = Encoding.UTF8.GetBytes(text);
20+
21+
IntPtr p = SherpaOfflinePunctuationAddPunct(_handle.Handle, utf8Bytes);
2022

2123
string s = "";
2224
int length = 0;
@@ -77,7 +79,7 @@ private void Cleanup()
7779
private static extern void SherpaOnnxDestroyOfflinePunctuation(IntPtr handle);
7880

7981
[DllImport(Dll.Filename)]
80-
private static extern IntPtr SherpaOfflinePunctuationAddPunct(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string text);
82+
private static extern IntPtr SherpaOfflinePunctuationAddPunct(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Text);
8183

8284
[DllImport(Dll.Filename)]
8385
private static extern void SherpaOfflinePunctuationFreeText(IntPtr p);

scripts/dotnet/OfflineTts.cs

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/// Copyright (c) 2024.5 by 东风破
22
using System;
33
using System.Runtime.InteropServices;
4+
using System.Text;
45

56
namespace SherpaOnnx
67
{
@@ -17,13 +18,15 @@ public OfflineTts(OfflineTtsConfig config)
1718

1819
public OfflineTtsGeneratedAudio Generate(String text, float speed, int speakerId)
1920
{
20-
IntPtr p = SherpaOnnxOfflineTtsGenerate(_handle.Handle, text, speakerId, speed);
21+
byte[] utf8Bytes = Encoding.UTF8.GetBytes(text);
22+
IntPtr p = SherpaOnnxOfflineTtsGenerate(_handle.Handle, utf8Bytes, speakerId, speed);
2123
return new OfflineTtsGeneratedAudio(p);
2224
}
2325

2426
public OfflineTtsGeneratedAudio GenerateWithCallback(String text, float speed, int speakerId, OfflineTtsCallback callback)
2527
{
26-
IntPtr p = SherpaOnnxOfflineTtsGenerateWithCallback(_handle.Handle, text, speakerId, speed, callback);
28+
byte[] utf8Bytes = Encoding.UTF8.GetBytes(text);
29+
IntPtr p = SherpaOnnxOfflineTtsGenerateWithCallback(_handle.Handle, utf8Bytes, speakerId, speed, callback);
2730
return new OfflineTtsGeneratedAudio(p);
2831
}
2932

@@ -79,9 +82,9 @@ public int NumSpeakers
7982
private static extern int SherpaOnnxOfflineTtsNumSpeakers(IntPtr handle);
8083

8184
[DllImport(Dll.Filename)]
82-
private static extern IntPtr SherpaOnnxOfflineTtsGenerate(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string text, int sid, float speed);
85+
private static extern IntPtr SherpaOnnxOfflineTtsGenerate(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Text, int sid, float speed);
8386

8487
[DllImport(Dll.Filename, CallingConvention = CallingConvention.Cdecl)]
85-
private static extern IntPtr SherpaOnnxOfflineTtsGenerateWithCallback(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string text, int sid, float speed, OfflineTtsCallback callback);
88+
private static extern IntPtr SherpaOnnxOfflineTtsGenerateWithCallback(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Text, int sid, float speed, OfflineTtsCallback callback);
8689
}
8790
}

scripts/dotnet/OfflineTtsGeneratedAudio.cs

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/// Copyright (c) 2024.5 by 东风破
22
using System;
33
using System.Runtime.InteropServices;
4+
using System.Text;
45

56
namespace SherpaOnnx
67
{
@@ -14,7 +15,8 @@ public OfflineTtsGeneratedAudio(IntPtr p)
1415
public bool SaveToWaveFile(String filename)
1516
{
1617
Impl impl = (Impl)Marshal.PtrToStructure(Handle, typeof(Impl));
17-
int status = SherpaOnnxWriteWave(impl.Samples, impl.NumSamples, impl.SampleRate, filename);
18+
byte[] utf8Filename = Encoding.UTF8.GetBytes(filename);
19+
int status = SherpaOnnxWriteWave(impl.Samples, impl.NumSamples, impl.SampleRate, utf8Filename);
1820
return status == 1;
1921
}
2022

@@ -84,6 +86,6 @@ public float[] Samples
8486
private static extern void SherpaOnnxDestroyOfflineTtsGeneratedAudio(IntPtr handle);
8587

8688
[DllImport(Dll.Filename)]
87-
private static extern int SherpaOnnxWriteWave(IntPtr samples, int n, int sample_rate, [MarshalAs(UnmanagedType.LPStr)] string filename);
89+
private static extern int SherpaOnnxWriteWave(IntPtr samples, int n, int sample_rate, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Filename);
8890
}
8991
}

scripts/dotnet/SpeakerEmbeddingManager.cs

+15-10
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ public SpeakerEmbeddingManager(int dim)
1717

1818
public bool Add(string name, float[] v)
1919
{
20-
return SherpaOnnxSpeakerEmbeddingManagerAdd(_handle.Handle, name, v) == 1;
20+
byte[] utf8Name = Encoding.UTF8.GetBytes(name);
21+
return SherpaOnnxSpeakerEmbeddingManagerAdd(_handle.Handle, utf8Name, v) == 1;
2122
}
2223

2324
public bool Add(string name, ICollection<float[]> v_list)
@@ -31,12 +32,14 @@ public bool Add(string name, ICollection<float[]> v_list)
3132
i += _dim;
3233
}
3334

34-
return SherpaOnnxSpeakerEmbeddingManagerAddListFlattened(_handle.Handle, name, v, n) == 1;
35+
byte[] utf8Name = Encoding.UTF8.GetBytes(name);
36+
return SherpaOnnxSpeakerEmbeddingManagerAddListFlattened(_handle.Handle, utf8Name, v, n) == 1;
3537
}
3638

3739
public bool Remove(string name)
3840
{
39-
return SherpaOnnxSpeakerEmbeddingManagerRemove(_handle.Handle, name) == 1;
41+
byte[] utf8Name = Encoding.UTF8.GetBytes(name);
42+
return SherpaOnnxSpeakerEmbeddingManagerRemove(_handle.Handle, utf8Name) == 1;
4043
}
4144

4245
public string Search(float[] v, float threshold)
@@ -73,12 +76,14 @@ public string Search(float[] v, float threshold)
7376

7477
public bool Verify(string name, float[] v, float threshold)
7578
{
76-
return SherpaOnnxSpeakerEmbeddingManagerVerify(_handle.Handle, name, v, threshold) == 1;
79+
byte[] utf8Name = Encoding.UTF8.GetBytes(name);
80+
return SherpaOnnxSpeakerEmbeddingManagerVerify(_handle.Handle, utf8Name, v, threshold) == 1;
7781
}
7882

7983
public bool Contains(string name)
8084
{
81-
return SherpaOnnxSpeakerEmbeddingManagerContains(_handle.Handle, name) == 1;
85+
byte[] utf8Name = Encoding.UTF8.GetBytes(name);
86+
return SherpaOnnxSpeakerEmbeddingManagerContains(_handle.Handle, utf8Name) == 1;
8287
}
8388

8489
public string[] GetAllSpeakers()
@@ -155,13 +160,13 @@ public int NumSpeakers
155160
private static extern void SherpaOnnxDestroySpeakerEmbeddingManager(IntPtr handle);
156161

157162
[DllImport(Dll.Filename)]
158-
private static extern int SherpaOnnxSpeakerEmbeddingManagerAdd(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string name, float[] v);
163+
private static extern int SherpaOnnxSpeakerEmbeddingManagerAdd(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Name, float[] v);
159164

160165
[DllImport(Dll.Filename)]
161-
private static extern int SherpaOnnxSpeakerEmbeddingManagerAddListFlattened(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string name, float[] v, int n);
166+
private static extern int SherpaOnnxSpeakerEmbeddingManagerAddListFlattened(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Name, float[] v, int n);
162167

163168
[DllImport(Dll.Filename)]
164-
private static extern int SherpaOnnxSpeakerEmbeddingManagerRemove(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string name);
169+
private static extern int SherpaOnnxSpeakerEmbeddingManagerRemove(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Name);
165170

166171
[DllImport(Dll.Filename)]
167172
private static extern IntPtr SherpaOnnxSpeakerEmbeddingManagerSearch(IntPtr handle, float[] v, float threshold);
@@ -170,10 +175,10 @@ public int NumSpeakers
170175
private static extern void SherpaOnnxSpeakerEmbeddingManagerFreeSearch(IntPtr p);
171176

172177
[DllImport(Dll.Filename)]
173-
private static extern int SherpaOnnxSpeakerEmbeddingManagerVerify(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string name, float[] v, float threshold);
178+
private static extern int SherpaOnnxSpeakerEmbeddingManagerVerify(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Name, float[] v, float threshold);
174179

175180
[DllImport(Dll.Filename)]
176-
private static extern int SherpaOnnxSpeakerEmbeddingManagerContains(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string name);
181+
private static extern int SherpaOnnxSpeakerEmbeddingManagerContains(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Name);
177182

178183
[DllImport(Dll.Filename)]
179184
private static extern int SherpaOnnxSpeakerEmbeddingManagerNumSpeakers(IntPtr handle);

scripts/dotnet/examples/Common.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
<ItemGroup>
99
<PackageReference Include="CommandLineParser" Version="2.9.1" />
10-
<PackageReference Include="org.k2fsa.sherpa.onnx" Version="1.10.1" />
10+
<PackageReference Include="org.k2fsa.sherpa.onnx" Version="*" />
1111
</ItemGroup>
1212

1313
</Project>

sherpa-onnx/flutter/CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.10.2
2+
3+
* Fix passing C# string to C++
4+
15
## 1.10.1
26

37
* Enable to stop TTS generation

0 commit comments

Comments
 (0)