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

This commit is contained in:
Fangjun Kuang
2024-06-25 10:52:59 +08:00
committed by GitHub
parent a3bac19c54
commit 5cce159cf3
16 changed files with 46 additions and 29 deletions

View File

@@ -71,7 +71,7 @@ jobs:
mkdir build mkdir build
cd build cd build
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 .. 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 ..
make -j2 make -j2
make install make install
@@ -153,7 +153,7 @@ jobs:
git push https://csukuangfj:$HF_TOKEN@huggingface.co/csukuangfj/sherpa-onnx-libs main git push https://csukuangfj:$HF_TOKEN@huggingface.co/csukuangfj/sherpa-onnx-libs main
- name: Release pre-compiled binaries and libs for linux x64 - name: Release pre-compiled binaries and libs for linux x64
if: (github.repository_owner == 'csukuangfj' || github.repository_owner == 'k2-fsa') && github.event_name == 'push' && contains(github.ref, 'refs/tags/') && matrix.build_type == 'Release' if: (github.repository_owner == 'csukuangfj' || github.repository_owner == 'k2-fsa') && github.event_name == 'push' && contains(github.ref, 'refs/tags/')
uses: svenstaro/upload-release-action@v2 uses: svenstaro/upload-release-action@v2
with: with:
file_glob: true file_glob: true

View File

@@ -8,7 +8,7 @@ project(sherpa-onnx)
# ./nodejs-addon-examples # ./nodejs-addon-examples
# ./dart-api-examples/ # ./dart-api-examples/
# ./sherpa-onnx/flutter/CHANGELOG.md # ./sherpa-onnx/flutter/CHANGELOG.md
set(SHERPA_ONNX_VERSION "1.10.1") set(SHERPA_ONNX_VERSION "1.10.2")
# Disable warning about # Disable warning about
# #

View File

@@ -10,7 +10,7 @@ environment:
# Add regular dependencies here. # Add regular dependencies here.
dependencies: dependencies:
sherpa_onnx: ^1.10.1 sherpa_onnx: ^1.10.2
path: ^1.9.0 path: ^1.9.0
args: ^2.5.0 args: ^2.5.0

View File

@@ -11,7 +11,7 @@ environment:
# Add regular dependencies here. # Add regular dependencies here.
dependencies: dependencies:
sherpa_onnx: ^1.10.1 sherpa_onnx: ^1.10.2
path: ^1.9.0 path: ^1.9.0
args: ^2.5.0 args: ^2.5.0

View File

@@ -8,7 +8,7 @@ environment:
# Add regular dependencies here. # Add regular dependencies here.
dependencies: dependencies:
sherpa_onnx: ^1.10.1 sherpa_onnx: ^1.10.2
path: ^1.9.0 path: ^1.9.0
args: ^2.5.0 args: ^2.5.0

View File

@@ -9,7 +9,7 @@ environment:
sdk: ^3.4.0 sdk: ^3.4.0
dependencies: dependencies:
sherpa_onnx: ^1.10.1 sherpa_onnx: ^1.10.2
path: ^1.9.0 path: ^1.9.0
args: ^2.5.0 args: ^2.5.0

View File

@@ -6,7 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="CommandLineParser" Version="2.9.1" /> <PackageReference Include="CommandLineParser" Version="2.9.1" />
<PackageReference Include="org.k2fsa.sherpa.onnx" Version="1.10.1" /> <PackageReference Include="org.k2fsa.sherpa.onnx" Version="*" />
</ItemGroup> </ItemGroup>
</Project> </Project>

0
dotnet-examples/offline-punctuation/run.sh Normal file → Executable file
View File

View File

@@ -1,5 +1,5 @@
{ {
"dependencies": { "dependencies": {
"sherpa-onnx-node": "^1.10.1" "sherpa-onnx-node": "^1.10.2"
} }
} }

View File

@@ -1,5 +1,6 @@
all all
macos macos-arm64
macos-x64
linux linux
windows windows
windows-x64 windows-x64

View File

@@ -16,7 +16,9 @@ namespace SherpaOnnx
public String AddPunct(String text) public String AddPunct(String text)
{ {
IntPtr p = SherpaOfflinePunctuationAddPunct(_handle.Handle, text); byte[] utf8Bytes = Encoding.UTF8.GetBytes(text);
IntPtr p = SherpaOfflinePunctuationAddPunct(_handle.Handle, utf8Bytes);
string s = ""; string s = "";
int length = 0; int length = 0;
@@ -77,7 +79,7 @@ namespace SherpaOnnx
private static extern void SherpaOnnxDestroyOfflinePunctuation(IntPtr handle); private static extern void SherpaOnnxDestroyOfflinePunctuation(IntPtr handle);
[DllImport(Dll.Filename)] [DllImport(Dll.Filename)]
private static extern IntPtr SherpaOfflinePunctuationAddPunct(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string text); private static extern IntPtr SherpaOfflinePunctuationAddPunct(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Text);
[DllImport(Dll.Filename)] [DllImport(Dll.Filename)]
private static extern void SherpaOfflinePunctuationFreeText(IntPtr p); private static extern void SherpaOfflinePunctuationFreeText(IntPtr p);

View File

@@ -1,6 +1,7 @@
/// Copyright (c) 2024.5 by 东风破 /// Copyright (c) 2024.5 by 东风破
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text;
namespace SherpaOnnx namespace SherpaOnnx
{ {
@@ -17,13 +18,15 @@ namespace SherpaOnnx
public OfflineTtsGeneratedAudio Generate(String text, float speed, int speakerId) public OfflineTtsGeneratedAudio Generate(String text, float speed, int speakerId)
{ {
IntPtr p = SherpaOnnxOfflineTtsGenerate(_handle.Handle, text, speakerId, speed); byte[] utf8Bytes = Encoding.UTF8.GetBytes(text);
IntPtr p = SherpaOnnxOfflineTtsGenerate(_handle.Handle, utf8Bytes, speakerId, speed);
return new OfflineTtsGeneratedAudio(p); return new OfflineTtsGeneratedAudio(p);
} }
public OfflineTtsGeneratedAudio GenerateWithCallback(String text, float speed, int speakerId, OfflineTtsCallback callback) public OfflineTtsGeneratedAudio GenerateWithCallback(String text, float speed, int speakerId, OfflineTtsCallback callback)
{ {
IntPtr p = SherpaOnnxOfflineTtsGenerateWithCallback(_handle.Handle, text, speakerId, speed, callback); byte[] utf8Bytes = Encoding.UTF8.GetBytes(text);
IntPtr p = SherpaOnnxOfflineTtsGenerateWithCallback(_handle.Handle, utf8Bytes, speakerId, speed, callback);
return new OfflineTtsGeneratedAudio(p); return new OfflineTtsGeneratedAudio(p);
} }
@@ -79,9 +82,9 @@ namespace SherpaOnnx
private static extern int SherpaOnnxOfflineTtsNumSpeakers(IntPtr handle); private static extern int SherpaOnnxOfflineTtsNumSpeakers(IntPtr handle);
[DllImport(Dll.Filename)] [DllImport(Dll.Filename)]
private static extern IntPtr SherpaOnnxOfflineTtsGenerate(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string text, int sid, float speed); private static extern IntPtr SherpaOnnxOfflineTtsGenerate(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Text, int sid, float speed);
[DllImport(Dll.Filename, CallingConvention = CallingConvention.Cdecl)] [DllImport(Dll.Filename, CallingConvention = CallingConvention.Cdecl)]
private static extern IntPtr SherpaOnnxOfflineTtsGenerateWithCallback(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string text, int sid, float speed, OfflineTtsCallback callback); private static extern IntPtr SherpaOnnxOfflineTtsGenerateWithCallback(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Text, int sid, float speed, OfflineTtsCallback callback);
} }
} }

View File

@@ -1,6 +1,7 @@
/// Copyright (c) 2024.5 by 东风破 /// Copyright (c) 2024.5 by 东风破
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text;
namespace SherpaOnnx namespace SherpaOnnx
{ {
@@ -14,7 +15,8 @@ namespace SherpaOnnx
public bool SaveToWaveFile(String filename) public bool SaveToWaveFile(String filename)
{ {
Impl impl = (Impl)Marshal.PtrToStructure(Handle, typeof(Impl)); Impl impl = (Impl)Marshal.PtrToStructure(Handle, typeof(Impl));
int status = SherpaOnnxWriteWave(impl.Samples, impl.NumSamples, impl.SampleRate, filename); byte[] utf8Filename = Encoding.UTF8.GetBytes(filename);
int status = SherpaOnnxWriteWave(impl.Samples, impl.NumSamples, impl.SampleRate, utf8Filename);
return status == 1; return status == 1;
} }
@@ -84,6 +86,6 @@ namespace SherpaOnnx
private static extern void SherpaOnnxDestroyOfflineTtsGeneratedAudio(IntPtr handle); private static extern void SherpaOnnxDestroyOfflineTtsGeneratedAudio(IntPtr handle);
[DllImport(Dll.Filename)] [DllImport(Dll.Filename)]
private static extern int SherpaOnnxWriteWave(IntPtr samples, int n, int sample_rate, [MarshalAs(UnmanagedType.LPStr)] string filename); private static extern int SherpaOnnxWriteWave(IntPtr samples, int n, int sample_rate, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Filename);
} }
} }

View File

@@ -17,7 +17,8 @@ namespace SherpaOnnx
public bool Add(string name, float[] v) public bool Add(string name, float[] v)
{ {
return SherpaOnnxSpeakerEmbeddingManagerAdd(_handle.Handle, name, v) == 1; byte[] utf8Name = Encoding.UTF8.GetBytes(name);
return SherpaOnnxSpeakerEmbeddingManagerAdd(_handle.Handle, utf8Name, v) == 1;
} }
public bool Add(string name, ICollection<float[]> v_list) public bool Add(string name, ICollection<float[]> v_list)
@@ -31,12 +32,14 @@ namespace SherpaOnnx
i += _dim; i += _dim;
} }
return SherpaOnnxSpeakerEmbeddingManagerAddListFlattened(_handle.Handle, name, v, n) == 1; byte[] utf8Name = Encoding.UTF8.GetBytes(name);
return SherpaOnnxSpeakerEmbeddingManagerAddListFlattened(_handle.Handle, utf8Name, v, n) == 1;
} }
public bool Remove(string name) public bool Remove(string name)
{ {
return SherpaOnnxSpeakerEmbeddingManagerRemove(_handle.Handle, name) == 1; byte[] utf8Name = Encoding.UTF8.GetBytes(name);
return SherpaOnnxSpeakerEmbeddingManagerRemove(_handle.Handle, utf8Name) == 1;
} }
public string Search(float[] v, float threshold) public string Search(float[] v, float threshold)
@@ -73,12 +76,14 @@ namespace SherpaOnnx
public bool Verify(string name, float[] v, float threshold) public bool Verify(string name, float[] v, float threshold)
{ {
return SherpaOnnxSpeakerEmbeddingManagerVerify(_handle.Handle, name, v, threshold) == 1; byte[] utf8Name = Encoding.UTF8.GetBytes(name);
return SherpaOnnxSpeakerEmbeddingManagerVerify(_handle.Handle, utf8Name, v, threshold) == 1;
} }
public bool Contains(string name) public bool Contains(string name)
{ {
return SherpaOnnxSpeakerEmbeddingManagerContains(_handle.Handle, name) == 1; byte[] utf8Name = Encoding.UTF8.GetBytes(name);
return SherpaOnnxSpeakerEmbeddingManagerContains(_handle.Handle, utf8Name) == 1;
} }
public string[] GetAllSpeakers() public string[] GetAllSpeakers()
@@ -155,13 +160,13 @@ namespace SherpaOnnx
private static extern void SherpaOnnxDestroySpeakerEmbeddingManager(IntPtr handle); private static extern void SherpaOnnxDestroySpeakerEmbeddingManager(IntPtr handle);
[DllImport(Dll.Filename)] [DllImport(Dll.Filename)]
private static extern int SherpaOnnxSpeakerEmbeddingManagerAdd(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string name, float[] v); private static extern int SherpaOnnxSpeakerEmbeddingManagerAdd(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Name, float[] v);
[DllImport(Dll.Filename)] [DllImport(Dll.Filename)]
private static extern int SherpaOnnxSpeakerEmbeddingManagerAddListFlattened(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string name, float[] v, int n); private static extern int SherpaOnnxSpeakerEmbeddingManagerAddListFlattened(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Name, float[] v, int n);
[DllImport(Dll.Filename)] [DllImport(Dll.Filename)]
private static extern int SherpaOnnxSpeakerEmbeddingManagerRemove(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string name); private static extern int SherpaOnnxSpeakerEmbeddingManagerRemove(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Name);
[DllImport(Dll.Filename)] [DllImport(Dll.Filename)]
private static extern IntPtr SherpaOnnxSpeakerEmbeddingManagerSearch(IntPtr handle, float[] v, float threshold); private static extern IntPtr SherpaOnnxSpeakerEmbeddingManagerSearch(IntPtr handle, float[] v, float threshold);
@@ -170,10 +175,10 @@ namespace SherpaOnnx
private static extern void SherpaOnnxSpeakerEmbeddingManagerFreeSearch(IntPtr p); private static extern void SherpaOnnxSpeakerEmbeddingManagerFreeSearch(IntPtr p);
[DllImport(Dll.Filename)] [DllImport(Dll.Filename)]
private static extern int SherpaOnnxSpeakerEmbeddingManagerVerify(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string name, float[] v, float threshold); private static extern int SherpaOnnxSpeakerEmbeddingManagerVerify(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Name, float[] v, float threshold);
[DllImport(Dll.Filename)] [DllImport(Dll.Filename)]
private static extern int SherpaOnnxSpeakerEmbeddingManagerContains(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string name); private static extern int SherpaOnnxSpeakerEmbeddingManagerContains(IntPtr handle, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] byte[] utf8Name);
[DllImport(Dll.Filename)] [DllImport(Dll.Filename)]
private static extern int SherpaOnnxSpeakerEmbeddingManagerNumSpeakers(IntPtr handle); private static extern int SherpaOnnxSpeakerEmbeddingManagerNumSpeakers(IntPtr handle);

View File

@@ -7,7 +7,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="CommandLineParser" Version="2.9.1" /> <PackageReference Include="CommandLineParser" Version="2.9.1" />
<PackageReference Include="org.k2fsa.sherpa.onnx" Version="1.10.1" /> <PackageReference Include="org.k2fsa.sherpa.onnx" Version="*" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -1,3 +1,7 @@
## 1.10.2
* Fix passing C# string to C++
## 1.10.1 ## 1.10.1
* Enable to stop TTS generation * Enable to stop TTS generation