This commit is contained in:
owenchen committed 2026-06-23 15:32:12 +08:00
1 parent 996bb243df
commit 5f1062c010
15 files changed
+769 -104

No files matched your search

@@ -28,7 +28,7 @@ namespace CloudBuilder.AI.Entity
[Column("book_id")]
public string BookId { get; set; }
[Column("person_name")]
public string PersonName { get; set; }
public string? PersonName { get; set; }
[Column("actor_name")]
public string? ActorName { get; set; }
+77 -1
View File
@@ -1,4 +1,8 @@
using System;
using CloudBuilder.Core.DependencyInjection.Form;
using CloudBuilder.Core.DependencyInjection.Policy;
using CloudBuilder.Core.DependencyInjection.Request;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -102,4 +106,76 @@ namespace CloudBuilder.AI.Policy
FEMALE_CHILD4,
}
public class SoVITSTtsVoicePolicy : AbstractPolicy, IPolicy
{
public const string OLD_MAN1 = "OLD_MAN1";
public const string OLD_MAN2 = "OLD_MAN2";
public const string OLD_MAN3 = "OLD_MAN3";
public const string OLD_MAN4 = "OLD_MAN4";
public const string OLD_MAN5 = "OLD_MAN5";
public const string OLD_MAN6 = "OLD_MAN6";
public const string OLD_MAN7 = "OLD_MAN7";
public const string MIDDLE_AGED_MAN1 = "MIDDLE_AGED_MAN1";
public const string MIDDLE_AGED_MAN2 = "MIDDLE_AGED_MAN2";
public const string MIDDLE_AGED_MAN3 = "MIDDLE_AGED_MAN3";
public const string MIDDLE_AGED_MAN4 = "MIDDLE_AGED_MAN4";
public const string MIDDLE_AGED_MAN5 = "MIDDLE_AGED_MAN5";
public const string MIDDLE_AGED_MAN6 = "MIDDLE_AGED_MAN6";
public const string MIDDLE_AGED_MAN7 = "MIDDLE_AGED_MAN7";
public const string YOUNG_MALE1 = "YOUNG_MALE1";
public const string YOUNG_MALE2 = "YOUNG_MALE2";
public const string YOUNG_MALE3 = "YOUNG_MALE3";
public const string YOUNG_MALE4 = "YOUNG_MALE4";
public const string YOUNG_MALE5 = "YOUNG_MALE5";
public const string YOUNG_MALE6 = "YOUNG_MALE6";
public const string YOUNG_MALE7 = "YOUNG_MALE7";
public const string MALE_CHILD1 = "MALE_CHILD1";
public const string MALE_CHILD2 = "MALE_CHILD2";
public const string MALE_CHILD3 = "MALE_CHILD3";
public const string MALE_CHILD4 = "MALE_CHILD4";
public const string ELDERLY_FEMALE1 = "ELDERLY_FEMALE1";
public const string ELDERLY_FEMALE2 = "ELDERLY_FEMALE2";
public const string ELDERLY_FEMALE3 = "ELDERLY_FEMALE3";
public const string MIDDLE_AGED_FEMALE1 = "MIDDLE_AGED_FEMALE1";
public const string MIDDLE_AGED_FEMALE2 = "MIDDLE_AGED_FEMALE2";
public const string MIDDLE_AGED_FEMALE3 = "MIDDLE_AGED_FEMALE3";
public const string MIDDLE_AGED_FEMALE4 = "MIDDLE_AGED_FEMALE4";
public const string MIDDLE_AGED_FEMALE5 = "MIDDLE_AGED_FEMALE5";
public const string MIDDLE_AGED_FEMALE6 = "MIDDLE_AGED_FEMALE6";
public const string MIDDLE_AGED_FEMALE7 = "MIDDLE_AGED_FEMALE7";
public const string YOUNG_FEMALE1 = "YOUNG_FEMALE1";
public const string YOUNG_FEMALE2 = "YOUNG_FEMALE2";
public const string YOUNG_FEMALE3 = "YOUNG_FEMALE3";
public const string YOUNG_FEMALE4 = "YOUNG_FEMALE4";
public const string YOUNG_FEMALE5 = "YOUNG_FEMALE5";
public const string YOUNG_FEMALE6 = "YOUNG_FEMALE6";
public const string YOUNG_FEMALE7 = "YOUNG_FEMALE7";
public const string FEMALE_CHILD1 = "FEMALE_CHILD1";
public const string FEMALE_CHILD2 = "FEMALE_CHILD2";
public const string FEMALE_CHILD3 = "FEMALE_CHILD3";
public const string FEMALE_CHILD4 = "FEMALE_CHILD4";
public static SoVITSTtsVoicePolicy instance = null;
public SoVITSTtsVoicePolicy(IContext context) : base(context)
{
this.values = new string[] {
OLD_MAN1, OLD_MAN2, OLD_MAN3, OLD_MAN4, OLD_MAN5, OLD_MAN6, OLD_MAN7,
MIDDLE_AGED_MAN1,MIDDLE_AGED_MAN2,MIDDLE_AGED_MAN3,MIDDLE_AGED_MAN4,MIDDLE_AGED_MAN5,MIDDLE_AGED_MAN6,
YOUNG_MALE1,YOUNG_MALE2,YOUNG_MALE3,YOUNG_MALE4,YOUNG_MALE5,YOUNG_MALE6,YOUNG_MALE7,
MALE_CHILD1,MALE_CHILD2,MALE_CHILD3,MALE_CHILD4,
ELDERLY_FEMALE1,ELDERLY_FEMALE2,ELDERLY_FEMALE3,
MIDDLE_AGED_FEMALE1,MIDDLE_AGED_FEMALE2,MIDDLE_AGED_FEMALE3,MIDDLE_AGED_FEMALE4,MIDDLE_AGED_FEMALE5,MIDDLE_AGED_FEMALE6,MIDDLE_AGED_FEMALE7,
YOUNG_FEMALE1,YOUNG_FEMALE2,YOUNG_FEMALE3,YOUNG_FEMALE4,YOUNG_FEMALE5,YOUNG_FEMALE6,YOUNG_FEMALE7,
FEMALE_CHILD1,FEMALE_CHILD2,FEMALE_CHILD3,FEMALE_CHILD4};
}
public static SoVITSTtsVoicePolicy GetInstance()
{
instance = ApplicationServiceContext.ServiceProvider.GetKeyedService<SoVITSTtsVoicePolicy>(typeof(SoVITSTtsVoicePolicy).Name);
return instance;
}
}
}
@@ -0,0 +1,258 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ELDERLY_FEMALE1" xml:space="preserve">
<value>老年人(女性)1 音质好</value>
</data>
<data name="ELDERLY_FEMALE2" xml:space="preserve">
<value>老年人(女性)2</value>
</data>
<data name="ELDERLY_FEMALE3" xml:space="preserve">
<value>老年人(女性)3 音质好</value>
</data>
<data name="FEMALE_CHILD1" xml:space="preserve">
<value>女儿童(女性)1 音质好</value>
</data>
<data name="FEMALE_CHILD2" xml:space="preserve">
<value>女儿童(女性)2</value>
</data>
<data name="FEMALE_CHILD3" xml:space="preserve">
<value>女儿童(女性)3</value>
</data>
<data name="FEMALE_CHILD4" xml:space="preserve">
<value>女儿童(女性)4 音质好</value>
</data>
<data name="MALE_CHILD1" xml:space="preserve">
<value>男儿童(男性)1 音质好</value>
</data>
<data name="MALE_CHILD2" xml:space="preserve">
<value>男儿童(男性)2</value>
</data>
<data name="MALE_CHILD3" xml:space="preserve">
<value>男儿童(男性)3 音质好</value>
</data>
<data name="MALE_CHILD4" xml:space="preserve">
<value>男儿童(男性)4</value>
</data>
<data name="MIDDLE_AGED_FEMALE1" xml:space="preserve">
<value>女中年(女性)1</value>
</data>
<data name="MIDDLE_AGED_FEMALE2" xml:space="preserve">
<value>女中年(女性)2</value>
</data>
<data name="MIDDLE_AGED_FEMALE3" xml:space="preserve">
<value>女中年(女性)3 音质好</value>
</data>
<data name="MIDDLE_AGED_FEMALE4" xml:space="preserve">
<value>女中年(女性)4</value>
</data>
<data name="MIDDLE_AGED_FEMALE5" xml:space="preserve">
<value>女中年(女性)5 音质好</value>
</data>
<data name="MIDDLE_AGED_FEMALE6" xml:space="preserve">
<value>女中年(女性)6</value>
</data>
<data name="MIDDLE_AGED_FEMALE7" xml:space="preserve">
<value>女中年(女性)7</value>
</data>
<data name="MIDDLE_AGED_MAN1" xml:space="preserve">
<value>男中年(男性)1</value>
</data>
<data name="MIDDLE_AGED_MAN2" xml:space="preserve">
<value>男中年(男性)2</value>
</data>
<data name="MIDDLE_AGED_MAN3" xml:space="preserve">
<value>男中年(男性)3 音质好</value>
</data>
<data name="MIDDLE_AGED_MAN4" xml:space="preserve">
<value>男中年(男性)4</value>
</data>
<data name="MIDDLE_AGED_MAN5" xml:space="preserve">
<value>男中年(男性)5 音质好</value>
</data>
<data name="MIDDLE_AGED_MAN6" xml:space="preserve">
<value>男中年(男性)6</value>
</data>
<data name="MIDDLE_AGED_MAN7" xml:space="preserve">
<value>男中年(男性)7 音质好</value>
</data>
<data name="OLD_MAN1" xml:space="preserve">
<value>老年人(男性)1</value>
</data>
<data name="OLD_MAN2" xml:space="preserve">
<value>老年人(男性)2 音质好</value>
</data>
<data name="OLD_MAN3" xml:space="preserve">
<value>老年人(男性)3</value>
</data>
<data name="OLD_MAN4" xml:space="preserve">
<value>老年人(男性)4</value>
</data>
<data name="OLD_MAN5" xml:space="preserve">
<value>老年人(男性)5 音质好</value>
</data>
<data name="OLD_MAN6" xml:space="preserve">
<value>老年人(男性)6</value>
</data>
<data name="OLD_MAN7" xml:space="preserve">
<value>老年人(男性)7</value>
</data>
<data name="YOUNG_FEMALE1" xml:space="preserve">
<value>女青年(女性)1 音质好</value>
</data>
<data name="YOUNG_FEMALE2" xml:space="preserve">
<value>女青年(女性)2</value>
</data>
<data name="YOUNG_FEMALE3" xml:space="preserve">
<value>女青年(女性)3</value>
</data>
<data name="YOUNG_FEMALE4" xml:space="preserve">
<value>女青年(女性)4</value>
</data>
<data name="YOUNG_FEMALE5" xml:space="preserve">
<value>女青年(女性)5</value>
</data>
<data name="YOUNG_FEMALE6" xml:space="preserve">
<value>女青年(女性)6</value>
</data>
<data name="YOUNG_FEMALE7" xml:space="preserve">
<value>女青年(女性)7 音质好</value>
</data>
<data name="YOUNG_MALE1" xml:space="preserve">
<value>男青年(男性)1</value>
</data>
<data name="YOUNG_MALE2" xml:space="preserve">
<value>男青年(男性)2 音质好</value>
</data>
<data name="YOUNG_MALE3" xml:space="preserve">
<value>男青年(男性)3</value>
</data>
<data name="YOUNG_MALE4" xml:space="preserve">
<value>男青年(男性)4</value>
</data>
<data name="YOUNG_MALE5" xml:space="preserve">
<value>男青年(男性)5</value>
</data>
<data name="YOUNG_MALE6" xml:space="preserve">
<value>男青年(男性)6</value>
</data>
<data name="YOUNG_MALE7" xml:space="preserve">
<value>男青年(男性)7 音质好</value>
</data>
</root>
@@ -0,0 +1,258 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ELDERLY_FEMALE1" xml:space="preserve">
<value>老年人(女性)1 音质好</value>
</data>
<data name="ELDERLY_FEMALE2" xml:space="preserve">
<value>老年人(女性)2</value>
</data>
<data name="ELDERLY_FEMALE3" xml:space="preserve">
<value>老年人(女性)3 音质好</value>
</data>
<data name="FEMALE_CHILD1" xml:space="preserve">
<value>女儿童(女性)1 音质好</value>
</data>
<data name="FEMALE_CHILD2" xml:space="preserve">
<value>女儿童(女性)2</value>
</data>
<data name="FEMALE_CHILD3" xml:space="preserve">
<value>女儿童(女性)3</value>
</data>
<data name="FEMALE_CHILD4" xml:space="preserve">
<value>女儿童(女性)4 音质好</value>
</data>
<data name="MALE_CHILD1" xml:space="preserve">
<value>男儿童(男性)1 音质好</value>
</data>
<data name="MALE_CHILD2" xml:space="preserve">
<value>男儿童(男性)2</value>
</data>
<data name="MALE_CHILD3" xml:space="preserve">
<value>男儿童(男性)3 音质好</value>
</data>
<data name="MALE_CHILD4" xml:space="preserve">
<value>男儿童(男性)4</value>
</data>
<data name="MIDDLE_AGED_FEMALE1" xml:space="preserve">
<value>女中年(女性)1</value>
</data>
<data name="MIDDLE_AGED_FEMALE2" xml:space="preserve">
<value>女中年(女性)2</value>
</data>
<data name="MIDDLE_AGED_FEMALE3" xml:space="preserve">
<value>女中年(女性)3 音质好</value>
</data>
<data name="MIDDLE_AGED_FEMALE4" xml:space="preserve">
<value>女中年(女性)4</value>
</data>
<data name="MIDDLE_AGED_FEMALE5" xml:space="preserve">
<value>女中年(女性)5 音质好</value>
</data>
<data name="MIDDLE_AGED_FEMALE6" xml:space="preserve">
<value>女中年(女性)6</value>
</data>
<data name="MIDDLE_AGED_FEMALE7" xml:space="preserve">
<value>女中年(女性)7</value>
</data>
<data name="MIDDLE_AGED_MAN1" xml:space="preserve">
<value>男中年(男性)1</value>
</data>
<data name="MIDDLE_AGED_MAN2" xml:space="preserve">
<value>男中年(男性)2</value>
</data>
<data name="MIDDLE_AGED_MAN3" xml:space="preserve">
<value>男中年(男性)3 音质好</value>
</data>
<data name="MIDDLE_AGED_MAN4" xml:space="preserve">
<value>男中年(男性)4</value>
</data>
<data name="MIDDLE_AGED_MAN5" xml:space="preserve">
<value>男中年(男性)5 音质好</value>
</data>
<data name="MIDDLE_AGED_MAN6" xml:space="preserve">
<value>男中年(男性)6</value>
</data>
<data name="MIDDLE_AGED_MAN7" xml:space="preserve">
<value>男中年(男性)7 音质好</value>
</data>
<data name="OLD_MAN1" xml:space="preserve">
<value>老年人(男性)1</value>
</data>
<data name="OLD_MAN2" xml:space="preserve">
<value>老年人(男性)2 音质好</value>
</data>
<data name="OLD_MAN3" xml:space="preserve">
<value>老年人(男性)3</value>
</data>
<data name="OLD_MAN4" xml:space="preserve">
<value>老年人(男性)4</value>
</data>
<data name="OLD_MAN5" xml:space="preserve">
<value>老年人(男性)5 音质好</value>
</data>
<data name="OLD_MAN6" xml:space="preserve">
<value>老年人(男性)6</value>
</data>
<data name="OLD_MAN7" xml:space="preserve">
<value>老年人(男性)7</value>
</data>
<data name="YOUNG_FEMALE1" xml:space="preserve">
<value>女青年(女性)1 音质好</value>
</data>
<data name="YOUNG_FEMALE2" xml:space="preserve">
<value>女青年(女性)2</value>
</data>
<data name="YOUNG_FEMALE3" xml:space="preserve">
<value>女青年(女性)3</value>
</data>
<data name="YOUNG_FEMALE4" xml:space="preserve">
<value>女青年(女性)4</value>
</data>
<data name="YOUNG_FEMALE5" xml:space="preserve">
<value>女青年(女性)5</value>
</data>
<data name="YOUNG_FEMALE6" xml:space="preserve">
<value>女青年(女性)6</value>
</data>
<data name="YOUNG_FEMALE7" xml:space="preserve">
<value>女青年(女性)7 音质好</value>
</data>
<data name="YOUNG_MALE1" xml:space="preserve">
<value>男青年(男性)1</value>
</data>
<data name="YOUNG_MALE2" xml:space="preserve">
<value>男青年(男性)2 音质好</value>
</data>
<data name="YOUNG_MALE3" xml:space="preserve">
<value>男青年(男性)3</value>
</data>
<data name="YOUNG_MALE4" xml:space="preserve">
<value>男青年(男性)4</value>
</data>
<data name="YOUNG_MALE5" xml:space="preserve">
<value>男青年(男性)5</value>
</data>
<data name="YOUNG_MALE6" xml:space="preserve">
<value>男青年(男性)6</value>
</data>
<data name="YOUNG_MALE7" xml:space="preserve">
<value>男青年(男性)7 音质好</value>
</data>
</root>
@@ -6,9 +6,9 @@ using CloudBuilder.Core.Service;
namespace CloudBuilder.AI.Service
{
public interface IAiSentenceService :IServiceBase<AiSentenceEntity, long ,AiSentenceSearchCriteria>
public interface IAiSentenceService : IServiceBase<AiSentenceEntity, long, AiSentenceSearchCriteria>
{
AiSentenceViewEntity[] FindByChapterId(long chapterId);
AiSentenceViewEntity[] FindByChapterId(string bookId, long chapterId);
AiSentenceViewResultData FindBySearchCriteria(AiSentenceSearchCriteria criteria);
void Inserts(AiSentenceEntity[] datas);
}