Fangjun Kuang
Committed by GitHub

Fix passing C# string to C++ (#1055)

@@ -71,7 +71,7 @@ jobs: @@ -71,7 +71,7 @@ jobs:
71 mkdir build 71 mkdir build
72 cd build 72 cd build
73 73
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 ..
75 75
76 make -j2 76 make -j2
77 make install 77 make install
@@ -153,7 +153,7 @@ jobs: @@ -153,7 +153,7 @@ jobs:
153 git push https://csukuangfj:$HF_TOKEN@huggingface.co/csukuangfj/sherpa-onnx-libs main 153 git push https://csukuangfj:$HF_TOKEN@huggingface.co/csukuangfj/sherpa-onnx-libs main
154 154
155 - name: Release pre-compiled binaries and libs for linux x64 155 - 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/')
157 uses: svenstaro/upload-release-action@v2 157 uses: svenstaro/upload-release-action@v2
158 with: 158 with:
159 file_glob: true 159 file_glob: true
@@ -8,7 +8,7 @@ project(sherpa-onnx) @@ -8,7 +8,7 @@ project(sherpa-onnx)
8 # ./nodejs-addon-examples 8 # ./nodejs-addon-examples
9 # ./dart-api-examples/ 9 # ./dart-api-examples/
10 # ./sherpa-onnx/flutter/CHANGELOG.md 10 # ./sherpa-onnx/flutter/CHANGELOG.md
11 -set(SHERPA_ONNX_VERSION "1.10.1") 11 +set(SHERPA_ONNX_VERSION "1.10.2")
12 12
13 # Disable warning about 13 # Disable warning about
14 # 14 #
@@ -10,7 +10,7 @@ environment: @@ -10,7 +10,7 @@ environment:
10 10
11 # Add regular dependencies here. 11 # Add regular dependencies here.
12 dependencies: 12 dependencies:
13 - sherpa_onnx: ^1.10.1 13 + sherpa_onnx: ^1.10.2
14 path: ^1.9.0 14 path: ^1.9.0
15 args: ^2.5.0 15 args: ^2.5.0
16 16
@@ -11,7 +11,7 @@ environment: @@ -11,7 +11,7 @@ environment:
11 11
12 # Add regular dependencies here. 12 # Add regular dependencies here.
13 dependencies: 13 dependencies:
14 - sherpa_onnx: ^1.10.1 14 + sherpa_onnx: ^1.10.2
15 path: ^1.9.0 15 path: ^1.9.0
16 args: ^2.5.0 16 args: ^2.5.0
17 17
@@ -8,7 +8,7 @@ environment: @@ -8,7 +8,7 @@ environment:
8 8
9 # Add regular dependencies here. 9 # Add regular dependencies here.
10 dependencies: 10 dependencies:
11 - sherpa_onnx: ^1.10.1 11 + sherpa_onnx: ^1.10.2
12 path: ^1.9.0 12 path: ^1.9.0
13 args: ^2.5.0 13 args: ^2.5.0
14 14
@@ -9,7 +9,7 @@ environment: @@ -9,7 +9,7 @@ environment:
9 sdk: ^3.4.0 9 sdk: ^3.4.0
10 10
11 dependencies: 11 dependencies:
12 - sherpa_onnx: ^1.10.1 12 + sherpa_onnx: ^1.10.2
13 path: ^1.9.0 13 path: ^1.9.0
14 args: ^2.5.0 14 args: ^2.5.0
15 15
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 </PropertyGroup> 6 </PropertyGroup>
7 <ItemGroup> 7 <ItemGroup>
8 <PackageReference Include="CommandLineParser" Version="2.9.1" /> 8 <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="*" />
10 </ItemGroup> 10 </ItemGroup>
11 11
12 </Project> 12 </Project>
1 { 1 {
2 "dependencies": { 2 "dependencies": {
3 - "sherpa-onnx-node": "^1.10.1" 3 + "sherpa-onnx-node": "^1.10.2"
4 } 4 }
5 } 5 }
1 all 1 all
2 -macos 2 +macos-arm64
  3 +macos-x64
3 linux 4 linux
4 windows 5 windows
5 windows-x64 6 windows-x64
@@ -16,7 +16,9 @@ namespace SherpaOnnx @@ -16,7 +16,9 @@ namespace SherpaOnnx
16 16
17 public String AddPunct(String text) 17 public String AddPunct(String text)
18 { 18 {
19 - IntPtr p = SherpaOfflinePunctuationAddPunct(_handle.Handle, text); 19 + byte[] utf8Bytes = Encoding.UTF8.GetBytes(text);
  20 +
  21 + IntPtr p = SherpaOfflinePunctuationAddPunct(_handle.Handle, utf8Bytes);
20 22
21 string s = ""; 23 string s = "";
22 int length = 0; 24 int length = 0;
@@ -77,7 +79,7 @@ namespace SherpaOnnx @@ -77,7 +79,7 @@ namespace SherpaOnnx
77 private static extern void SherpaOnnxDestroyOfflinePunctuation(IntPtr handle); 79 private static extern void SherpaOnnxDestroyOfflinePunctuation(IntPtr handle);
78 80
79 [DllImport(Dll.Filename)] 81 [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);
81 83
82 [DllImport(Dll.Filename)] 84 [DllImport(Dll.Filename)]
83 private static extern void SherpaOfflinePunctuationFreeText(IntPtr p); 85 private static extern void SherpaOfflinePunctuationFreeText(IntPtr p);
1 /// Copyright (c) 2024.5 by 东风破 1 /// Copyright (c) 2024.5 by 东风破
2 using System; 2 using System;
3 using System.Runtime.InteropServices; 3 using System.Runtime.InteropServices;
  4 +using System.Text;
4 5
5 namespace SherpaOnnx 6 namespace SherpaOnnx
6 { 7 {
@@ -17,13 +18,15 @@ namespace SherpaOnnx @@ -17,13 +18,15 @@ namespace SherpaOnnx
17 18
18 public OfflineTtsGeneratedAudio Generate(String text, float speed, int speakerId) 19 public OfflineTtsGeneratedAudio Generate(String text, float speed, int speakerId)
19 { 20 {
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);
21 return new OfflineTtsGeneratedAudio(p); 23 return new OfflineTtsGeneratedAudio(p);
22 } 24 }
23 25
24 public OfflineTtsGeneratedAudio GenerateWithCallback(String text, float speed, int speakerId, OfflineTtsCallback callback) 26 public OfflineTtsGeneratedAudio GenerateWithCallback(String text, float speed, int speakerId, OfflineTtsCallback callback)
25 { 27 {
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);
27 return new OfflineTtsGeneratedAudio(p); 30 return new OfflineTtsGeneratedAudio(p);
28 } 31 }
29 32
@@ -79,9 +82,9 @@ namespace SherpaOnnx @@ -79,9 +82,9 @@ namespace SherpaOnnx
79 private static extern int SherpaOnnxOfflineTtsNumSpeakers(IntPtr handle); 82 private static extern int SherpaOnnxOfflineTtsNumSpeakers(IntPtr handle);
80 83
81 [DllImport(Dll.Filename)] 84 [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);
83 86
84 [DllImport(Dll.Filename, CallingConvention = CallingConvention.Cdecl)] 87 [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);
86 } 89 }
87 } 90 }
1 /// Copyright (c) 2024.5 by 东风破 1 /// Copyright (c) 2024.5 by 东风破
2 using System; 2 using System;
3 using System.Runtime.InteropServices; 3 using System.Runtime.InteropServices;
  4 +using System.Text;
4 5
5 namespace SherpaOnnx 6 namespace SherpaOnnx
6 { 7 {
@@ -14,7 +15,8 @@ namespace SherpaOnnx @@ -14,7 +15,8 @@ namespace SherpaOnnx
14 public bool SaveToWaveFile(String filename) 15 public bool SaveToWaveFile(String filename)
15 { 16 {
16 Impl impl = (Impl)Marshal.PtrToStructure(Handle, typeof(Impl)); 17 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);
18 return status == 1; 20 return status == 1;
19 } 21 }
20 22
@@ -84,6 +86,6 @@ namespace SherpaOnnx @@ -84,6 +86,6 @@ namespace SherpaOnnx
84 private static extern void SherpaOnnxDestroyOfflineTtsGeneratedAudio(IntPtr handle); 86 private static extern void SherpaOnnxDestroyOfflineTtsGeneratedAudio(IntPtr handle);
85 87
86 [DllImport(Dll.Filename)] 88 [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);
88 } 90 }
89 } 91 }
@@ -17,7 +17,8 @@ namespace SherpaOnnx @@ -17,7 +17,8 @@ namespace SherpaOnnx
17 17
18 public bool Add(string name, float[] v) 18 public bool Add(string name, float[] v)
19 { 19 {
20 - return SherpaOnnxSpeakerEmbeddingManagerAdd(_handle.Handle, name, v) == 1; 20 + byte[] utf8Name = Encoding.UTF8.GetBytes(name);
  21 + return SherpaOnnxSpeakerEmbeddingManagerAdd(_handle.Handle, utf8Name, v) == 1;
21 } 22 }
22 23
23 public bool Add(string name, ICollection<float[]> v_list) 24 public bool Add(string name, ICollection<float[]> v_list)
@@ -31,12 +32,14 @@ namespace SherpaOnnx @@ -31,12 +32,14 @@ namespace SherpaOnnx
31 i += _dim; 32 i += _dim;
32 } 33 }
33 34
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;
35 } 37 }
36 38
37 public bool Remove(string name) 39 public bool Remove(string name)
38 { 40 {
39 - return SherpaOnnxSpeakerEmbeddingManagerRemove(_handle.Handle, name) == 1; 41 + byte[] utf8Name = Encoding.UTF8.GetBytes(name);
  42 + return SherpaOnnxSpeakerEmbeddingManagerRemove(_handle.Handle, utf8Name) == 1;
40 } 43 }
41 44
42 public string Search(float[] v, float threshold) 45 public string Search(float[] v, float threshold)
@@ -73,12 +76,14 @@ namespace SherpaOnnx @@ -73,12 +76,14 @@ namespace SherpaOnnx
73 76
74 public bool Verify(string name, float[] v, float threshold) 77 public bool Verify(string name, float[] v, float threshold)
75 { 78 {
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;
77 } 81 }
78 82
79 public bool Contains(string name) 83 public bool Contains(string name)
80 { 84 {
81 - return SherpaOnnxSpeakerEmbeddingManagerContains(_handle.Handle, name) == 1; 85 + byte[] utf8Name = Encoding.UTF8.GetBytes(name);
  86 + return SherpaOnnxSpeakerEmbeddingManagerContains(_handle.Handle, utf8Name) == 1;
82 } 87 }
83 88
84 public string[] GetAllSpeakers() 89 public string[] GetAllSpeakers()
@@ -155,13 +160,13 @@ namespace SherpaOnnx @@ -155,13 +160,13 @@ namespace SherpaOnnx
155 private static extern void SherpaOnnxDestroySpeakerEmbeddingManager(IntPtr handle); 160 private static extern void SherpaOnnxDestroySpeakerEmbeddingManager(IntPtr handle);
156 161
157 [DllImport(Dll.Filename)] 162 [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);
159 164
160 [DllImport(Dll.Filename)] 165 [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);
162 167
163 [DllImport(Dll.Filename)] 168 [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);
165 170
166 [DllImport(Dll.Filename)] 171 [DllImport(Dll.Filename)]
167 private static extern IntPtr SherpaOnnxSpeakerEmbeddingManagerSearch(IntPtr handle, float[] v, float threshold); 172 private static extern IntPtr SherpaOnnxSpeakerEmbeddingManagerSearch(IntPtr handle, float[] v, float threshold);
@@ -170,10 +175,10 @@ namespace SherpaOnnx @@ -170,10 +175,10 @@ namespace SherpaOnnx
170 private static extern void SherpaOnnxSpeakerEmbeddingManagerFreeSearch(IntPtr p); 175 private static extern void SherpaOnnxSpeakerEmbeddingManagerFreeSearch(IntPtr p);
171 176
172 [DllImport(Dll.Filename)] 177 [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);
174 179
175 [DllImport(Dll.Filename)] 180 [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);
177 182
178 [DllImport(Dll.Filename)] 183 [DllImport(Dll.Filename)]
179 private static extern int SherpaOnnxSpeakerEmbeddingManagerNumSpeakers(IntPtr handle); 184 private static extern int SherpaOnnxSpeakerEmbeddingManagerNumSpeakers(IntPtr handle);
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 7
8 <ItemGroup> 8 <ItemGroup>
9 <PackageReference Include="CommandLineParser" Version="2.9.1" /> 9 <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="*" />
11 </ItemGroup> 11 </ItemGroup>
12 12
13 </Project> 13 </Project>
  1 +## 1.10.2
  2 +
  3 +* Fix passing C# string to C++
  4 +
1 ## 1.10.1 5 ## 1.10.1
2 6
3 * Enable to stop TTS generation 7 * Enable to stop TTS generation