TJC.Cyclops.Speech 2024.10.21.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package TJC.Cyclops.Speech --version 2024.10.21.1
                    
NuGet\Install-Package TJC.Cyclops.Speech -Version 2024.10.21.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TJC.Cyclops.Speech" Version="2024.10.21.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="TJC.Cyclops.Speech" Version="2024.10.21.1" />
                    
Directory.Packages.props
<PackageReference Include="TJC.Cyclops.Speech" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add TJC.Cyclops.Speech --version 2024.10.21.1
                    
#r "nuget: TJC.Cyclops.Speech, 2024.10.21.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package TJC.Cyclops.Speech@2024.10.21.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=TJC.Cyclops.Speech&version=2024.10.21.1
                    
Install as a Cake Addin
#tool nuget:?package=TJC.Cyclops.Speech&version=2024.10.21.1
                    
Install as a Cake Tool

Cyclops.FrameWork

Cyclops.FrameWork 基于aspnetcore封装的api框架,集成了一线开发的常用设置和基础功能;可以用较少的时间代价,让开发人员将精力更多地集中在业务上。

  • [√] 全局api调用和框架级异常日志,支持Swagger接口文档的查看、调试和代码生成
  • [√] 接口入参校验,Cyclops.FrameWork中的接口参数校验完全基于System.ComponentModel.DataAnnotations,且在此基础上提供了验证数据是否存在ExistAttribute等扩展功能
  • [√] 统一返回值,无论是使用Cyclops.FrameWork中的Result及其子类,或者CSharp中的裸类型都自动返回全局统一值,从框架上避免对接混乱
  • [√] 标准化快捷文件上传、下载和excel的导入、导出,支持MS Azure和阿里OSS
  • [√] 在安全方面集成jwt认证和SafeComparisonFilter防重放攻击,并且支持多租户权限
  • [√] 标准化配置,支持Nacos

NuGet version (SAEA) License

一、配置示例

{
  "HostingOptions": {
    
    "ServiceName": "Cyclops.WebApplication1",
    "Domain": "https://cyclops.yswenli.com/",
    "EnableHealthCheck": true,
    "AppOptions": {
      "Urls": [ "https://127.0.0.1:7000" ],
      "DisableSwagger": false,
      "HideConsoleLog": false,
      
      //jwt TokenManagement
      "JWTAuthConfig": {
        "Secret": "base64:HU8MlQQDHfGaQ+k+0q3z4HKJvNQUTjK5uRGodDATyKc=",
        "Issuer": "yswenli.cnblogs.com",
        "Audience": "Cyclops.FrameWork",
        "AccessExpiration": 315576000
      },
      "MaxRequestSize": 134217728, //134217728,文件限制128M
      "EnablePartialRequest": false,
      "UserStaticPath": true,
      "StaticPaths": [ "upload" ],
      "DisableSafeComparisonFilter": false,
      "SafeComparisonExpired": 5,
      //全局验证码
      "GloabVerifyCode": "9365",
      //是否启用SignalR
      "EnableSignalR": true,
      //SignalR配置
      "SignalROptions": {
        //SignalR hub url
        "HubUrl": "/hubs/common",
        //握手超时时间
        "HandshakeTimeout": 30,
        //心跳间隔时间
        "KeepAliveInterval": 15,
        //空连接超时时间
        "FreeTimeout": 60,
        //每连接并行处理数量
        "ParallelCount": "1",
        //消息包大小
        "MaximumReceiveMessageSize": 32768
      }
    },
    "NacosConfig": {
      "Listeners": [
        {
          "Optional": false,
          "DataId": "Common",
          "Group": "DEFAULT_GROUP"
        },
        {
          "Optional": false,
          "DataId": "OperationService",
          "Group": "DEFAULT_GROUP"
        }
      ],
      "Namespace": "dev",
      "ServerAddresses": [ "http://127.0.0.1:8848" ],
      "UserName": "",
      "Password": "",
      "ConfigUseRpc": false,
      "NamingUseRpc": false
    }
  }
}


AppConfig节点以下的可以与nacos集成

二、初始化代码示例

public class Program
{
    public static void Main(string args)
    {
        WebApp.OnStarted += WebApp_OnStarted;
        WebApp.OnStopped += WebApp_OnStopped;
        WebApp.RunWebHost<Startup>(args);
    }


    static void WebApp_OnStarted()
    {
        Logger.Info($"{WebApp.ServiceName}应用已启动");
    }


    static void WebApp_OnStopped()
    {
        Logger.Info($"{WebApp.ServiceName}应用已停止");
    }
}
    /// <summary>
    /// Startup
    /// </summary>
    public class Startup : BaseStartup
    {
        /// <summary>
        /// Startup
        /// </summary>
        /// <param name="configuration"></param>
        public Startup(IConfiguration configuration) : base(configuration)
        {

        }
    }

三、控制器示例

继承基类即可

[Route(RouteConst.ROUTE_TEMPLATE_MOBILE)]
public class AuthController : BaseApiController

方法示例

    /// <summary>
    /// Login
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [AllowAnonymous, HttpPost, DisplayName("Login")]
    public async Task<Result> Login([Required(ErrorMessage = "请输入用户名或密码"), FromBody] UserLoginInput input)
    {
        var user = new SysUser();
        return SuccessResult(await CreateToken(user));
    }

    /// <summary>
    /// 获取验证码
    /// </summary>
    /// <returns></returns>
    [AllowAnonymous]
    [SuppressMonitor]
    [DisplayName("获取验证码"), HttpGet]
    public Result GetCaptcha()
    {
        ICaptcha captcha = ServiceProviderUtil.GetRequiredService<ICaptcha>();
        var codeId = YitIdHelper.NextId().ToString();
        var captchas = captcha.Generate(codeId, 180);
        return SuccessResult(new { Id = codeId, Img = captchas.Base64 });
    }

四、集成数据校验

/// <summary>
/// 登录信息
/// </summary>
public class UserLoginInput
{
    /// <summary>
    /// 请输入用户名
    /// </summary>
    [Required(ErrorMessage = "请输入用户名"), Exists("用户名不存在", TableName = "bus_user", ColumnName = "user_name")]
    public string UserName { get; set; }
    /// <summary>
    /// 请输入密码
    /// </summary>
    [Required(ErrorMessage = "请输入密码"), Custom<UserLoginInput>("密码不正确", "Valide")]
    public string Password { get; set; }

    /// <summary>
    /// 验证密码
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public bool Valide(object? input)
    {
        if (input == null) return false;
        if (input is string password && password == "123456")
        {
            return true;
        }
        return false;

    }
}

五、防重放攻击示例

    /// <summary>
    /// 接口安全参数校验测试
    /// </summary>
    [SafeComparisonFilter]
    public class SafeController : BaseApiController
    {
        /// <summary>
        /// Test
        /// </summary>
        /// <param name="testInfo"></param>
        /// <returns></returns>
        [HttpPost]
        public Result Test([FromBody] TestInfo testInfo)
        {
            return SuccessResult(testInfo);
        }

        /// <summary>
        /// test2
        /// </summary>
        /// <returns></returns>
        [HttpGet, AllowAnonymous, NoSafeComparisonFilter]
        public Result Test2()
        {
            return SuccessResult();
        }
    }

六、文件上传下载Excel导入导出示例

   public class FileAdminController : BaseApiController
   {
       /// <summary>
       /// 导入
       /// </summary>
       /// <returns></returns>
       [HttpPost]
       [NoLoginAuth, AllowAnonymous]
       public Result Import(IFormCollection collection)
       {
           var data = collection.SaveAsDataTable();
           return SuccessResult(data);
       }


       /// <summary>
       /// 导出
       /// </summary>
       /// <returns></returns>
       [HttpPost]
       [NoLoginAuth, AllowAnonymous]
       public IActionResult Export()
       {
           return _env.Download("export.png");
       }

       /// <summary>
       /// 导出数据文件
       /// </summary>
       /// <returns></returns>
       [HttpGet]
       [NoLoginAuth, AllowAnonymous]
       public IActionResult ExportFile([FromQuery] bool isExcel = false)
       {
           var fileName = "export.xlsx";
           if (!isExcel)
           {
               fileName = "export.csv";
           }
           var dt = new DataTable();
           //return _env.ExportFile(dt, fileName);
           return Export(dt, fileName);
       }


       /// <summary>
       /// 导出数据文件
       /// </summary>
       /// <returns></returns>
       [HttpGet]
       [NoLoginAuth, AllowAnonymous]
       public IActionResult ExportDataFile([FromQuery] bool isExcel = false)
       {
           var fileName = "export.xlsx";
           if (!isExcel)
           {
               fileName = "export.csv";
           }
           var list = new List<BusUser>
           {
               new BusUser()
               {
                   Id = 1,
                   UserName = "张三"
               }
           };
           //return _env.ExportFile(list, fileName);
           return Export(list, fileName);
       }



       /// <summary>
       /// 测试上传文件大小
       /// </summary>
       /// <returns></returns>
       [HttpPost]
       public async Task<IActionResult> UploadFile(IFormCollection form)
       {
           var fileStream = await form.SaveAsStreamsAsync();

           return fileStream.First().Value.Download("test.jpg");
       }

       /// <summary>
       /// 测试限制上传文件大小
       /// </summary>
       /// <param name="form"></param>
       /// <returns></returns>

       [HttpPost, RequestSizeLimit(2 * 1024 * 1024)]
       public async Task<IActionResult> UploadFileByLimit(IFormCollection form)
       {
           var fileStream = await form.SaveAsStreamsAsync();

           return fileStream.First().Value.Download("test.jpg");
       }

       /// <summary>
       /// 测试不限制上传文件大小
       /// </summary>
       /// <param name="form"></param>
       /// <returns></returns>

       [HttpPost, DisableRequestSizeLimit]
       public async Task<IActionResult> UploadFileByNonLimit(IFormCollection form)
       {
           var fileStream = await form.SaveAsStreamsAsync();

           return fileStream.First().Value.Download("test.jpg");
       }       

      /// <summary>
      /// 示例获取流
      /// </summary>
      /// <returns></returns>
      [HttpGet]
      public async Task<Stream> GetStream()
      {
          var ms = new MemoryStream(RandomUtil.GetBytes(1024));
          return await Task.FromResult(ms);
      }

      /// <summary>
      /// 示例获取字节数组
      /// </summary>
      /// <returns></returns>
      [HttpGet]
      public async Task<byte> GetBytes()
      {
          return await Task.FromResult(RandomUtil.GetBytes(1024));
      }
   }

七、支持非api接口内容

        /// <summary>
        /// 返回指定内容结果
        /// </summary>
        /// <param name="controller"></param>
        /// <param name="text"></param>
        /// <param name="contentType"></param>
        /// <param name="statusCode"></param>
        /// <returns></returns>
        public async Task<IActionResult> ContentAsync(string text, string contentType = "text/plain", int statusCode = 200)
        {
            var contentResult = new ContentResult()
            {
                Content = text,
                ContentType = contentType,
                StatusCode = statusCode
            };
            return await Task.FromResult(contentResult);
        }

        /// <summary>
        /// 返回空结果
        /// </summary>
        /// <param name="controller"></param>
        /// <returns></returns>
        public async Task<IActionResult> EmptyAsync()
        {
            return await Task.FromResult(new EmptyResult());
        }

        /// <summary>
        /// 返回下载结果
        /// </summary>
        /// <param name="controller"></param>
        /// <param name="fileContent">下载时的文件名称</param>
        /// <param name="fileContent">内容字节数组</param>
        /// <param name="contentType">内容mime类型</param>
        /// <returns></returns>
        public async Task<IActionResult> DownloadAsync(string fileDownloadName,
            byte fileContent,
            string contentType)
        {
            return await Task.FromResult(new FileContentResult(fileContent, contentType) { FileDownloadName = fileDownloadName });
        }

        /// <summary>
        /// 返回下载结果
        /// </summary>
        /// <param name="controller"></param>
        /// <param name="fileName">内容文件地址</param>
        /// <param name="contentType">内容mime类型</param>
        /// <returns></returns>
        public async Task<IActionResult> DownloadAsync(string fileName,
            string contentType)
        {
            return await Task.FromResult(new VirtualFileResult(fileName, contentType)
            {
                EnableRangeProcessing = true,
                FileDownloadName = PathUtil.GetFileName(fileName)
            });
        }
        /// <summary>
        /// 返回流结果
        /// </summary>
        /// <param name="controller"></param>
        /// <param name="fileDownloadName"></param>
        /// <param name="fileStream"></param>
        /// <param name="contentType"></param>
        /// <returns></returns>
        public async Task<IActionResult> DownloadAsync(string fileDownloadName,
            Stream fileStream,
            string contentType
            )
        {
            return await Task.FromResult(new FileStreamResult(fileStream, contentType)
            {
                EnableRangeProcessing = true,
                FileDownloadName = fileDownloadName
            });
        }
        /// <summary>
        /// 返回跳转结果
        /// </summary>
        /// <param name="controller"></param>
        /// <param name="url"></param>
        /// <returns></returns>
        public async Task<IActionResult> RedirectAsync(string url)
        {
            return await Task.FromResult(new RedirectResult(url));
        }
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on TJC.Cyclops.Speech:

Package Downloads
TJC.Cyclops.Web.Core

企服版框架中api核心功能项目,基于aspnetcore集成di、jwt、swagger、codefirtst、支持多种常见数据库、nacos配置中心、统一接口回复参数、全局异常捕获、全局接口日志、防重放攻击、图形验证码、快捷上下文对象、上传下载、数据导入导出等功能

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2025.9.10.2 122 9/10/2025
2025.9.10.1 133 9/10/2025
2025.9.9.1 120 9/9/2025
2025.9.1.1 147 9/1/2025
2025.8.29.1 180 8/29/2025
2025.8.22.1 117 8/22/2025
2025.8.21.2 141 8/21/2025
2025.8.21.1 143 8/21/2025
2025.8.20.1 141 8/20/2025
2025.8.14.1 139 8/14/2025
2025.8.13.1 142 8/13/2025
2025.8.12.1 143 8/12/2025
2025.8.11.3 135 8/11/2025
2025.8.11.2 136 8/11/2025
2025.8.11.1 142 8/11/2025
2025.8.8.2 183 8/8/2025
2025.8.8.1 185 8/8/2025
2025.8.7.1 217 8/7/2025
2025.8.6.2 229 8/6/2025
2025.8.6.1 220 8/6/2025
2025.8.4.1 171 8/4/2025
2025.8.1.1 108 8/1/2025
2025.7.31.1 129 7/31/2025
2025.7.30.2 114 7/30/2025
2025.7.30.1 99 7/30/2025
2025.7.25.3 399 7/25/2025
2025.7.25.2 407 7/25/2025
2025.7.25.1 426 7/25/2025
2025.7.22.2 553 7/22/2025
2025.7.22.1 541 7/22/2025
2025.7.21.2 429 7/21/2025
2025.7.21.1 337 7/21/2025
2025.7.17.1 153 7/17/2025
2025.7.8.1 185 7/8/2025
2025.7.7.3 167 7/7/2025
2025.7.7.2 168 7/7/2025
2025.7.7.1 157 7/7/2025
2025.7.5.1 116 7/4/2025
2025.7.4.3 114 7/4/2025
2025.7.4.2 117 7/4/2025
2025.7.4.1 121 7/4/2025
2025.7.2.3 170 7/2/2025
2025.7.2.2 160 7/2/2025
2025.7.2.1 165 7/2/2025
2025.7.1.2 168 7/1/2025
2025.7.1.1 162 7/1/2025
2025.6.25.2 196 6/25/2025
2025.6.25.1 171 6/25/2025
2025.6.24.4 178 6/24/2025
2025.6.24.3 158 6/24/2025
2025.6.24.2 175 6/24/2025
2025.6.24.1 160 6/24/2025
2025.6.23.2 177 6/23/2025
2025.6.23.1 169 6/23/2025
2025.6.20.1 128 6/20/2025
2025.6.19.1 170 6/19/2025
2025.6.18.1 165 6/18/2025
2025.6.13.1 290 6/13/2025
2025.6.11.1 312 6/11/2025
2025.5.26.1 177 5/26/2025
2025.5.18.1 182 5/18/2025
2025.5.8.1 181 5/8/2025
2025.5.7.4 173 5/7/2025
2025.5.7.3 177 5/7/2025
2025.5.7.2 171 5/7/2025
2025.5.7.1 166 5/7/2025
2025.4.28.1 188 4/28/2025
2025.4.22.2 192 4/22/2025
2025.4.22.1 191 4/22/2025
2025.4.18.1 198 4/18/2025
2025.4.16.1 228 4/16/2025
2025.4.15.1 255 4/15/2025
2025.4.11.2 205 4/11/2025
2025.4.11.1 236 4/11/2025
2025.4.8.1 200 4/8/2025
2025.4.7.2 198 4/7/2025
2025.4.7.1 207 4/7/2025
2025.4.3.2 204 4/3/2025
2025.4.3.1 212 4/3/2025
2025.4.2.1 205 4/2/2025
2025.4.1.1 193 4/1/2025
2025.3.31.4 195 3/31/2025
2025.3.31.3 191 3/31/2025
2025.3.31.2 194 3/31/2025
2025.3.31.1 191 3/31/2025
2025.3.26.2 503 3/26/2025
2025.3.26.1 499 3/26/2025
2025.3.25.1 511 3/25/2025
2025.3.24.1 373 3/24/2025
2025.3.18.2 187 3/18/2025
2025.3.18.1 186 3/18/2025
2025.3.13.1 191 3/13/2025
2025.3.12.1 204 3/12/2025
2025.3.11.1 214 3/11/2025
2025.3.10.1 231 3/10/2025
2025.3.6.2 254 3/6/2025
2025.3.5.1 245 3/5/2025
2025.3.3.1 227 3/3/2025
2025.2.28.1 151 2/28/2025
2025.2.25.1 142 2/25/2025
2025.2.23.1 137 2/24/2025
2025.2.14.1 157 2/14/2025
2025.2.7.2 143 2/7/2025
2025.2.7.1 134 2/7/2025
2025.2.6.1 145 2/6/2025
2025.1.22.1 155 1/22/2025
2025.1.21.1 143 1/21/2025
2025.1.20.1 169 1/20/2025
2025.1.16.1 155 1/16/2025
2025.1.9.1 175 1/9/2025
2025.1.8.3 137 1/8/2025
2025.1.8.2 125 1/8/2025
2025.1.8.1 126 1/8/2025
2025.1.7.1 141 1/7/2025
2025.1.3.1 188 1/3/2025
2025.1.2.1 166 1/2/2025
2024.12.31.2 154 12/31/2024
2024.12.31.1 154 12/31/2024
2024.12.30.3 159 12/30/2024
2024.12.30.2 152 12/30/2024
2024.12.30.1 150 12/30/2024
2024.12.27.1 157 12/27/2024
2024.12.26.1 152 12/26/2024
2024.12.25.2 159 12/25/2024
2024.12.25.1 158 12/25/2024
2024.12.24.1 142 12/24/2024
2024.12.19.2 252 12/19/2024
2024.12.19.1 156 12/19/2024
2024.12.18.1 158 12/18/2024
2024.12.17.2 179 12/17/2024
2024.12.17.1 152 12/17/2024
2024.12.16.1 182 12/16/2024
2024.12.12.1 172 12/13/2024
2024.12.11.2 162 12/11/2024
2024.12.10.3 169 12/10/2024
2024.12.10.2 149 12/10/2024
2024.12.10.1 149 12/10/2024
2024.12.9.1 150 12/9/2024
2024.12.6.1 159 12/6/2024
2024.12.5.1 183 12/5/2024
2024.12.4.1 168 12/4/2024
2024.12.3.2 182 12/3/2024
2024.12.3.1 147 12/3/2024
2024.12.2.2 152 12/2/2024
2024.12.2.1 150 12/2/2024
2024.11.29.2 173 11/29/2024
2024.11.29.1 156 11/29/2024
2024.11.28.1 165 11/28/2024
2024.11.27.4 164 11/27/2024
2024.11.27.3 154 11/27/2024
2024.11.27.2 146 11/27/2024
2024.11.27.1 161 11/27/2024
2024.11.26.3 164 11/26/2024
2024.11.26.2 147 11/26/2024
2024.11.26.1 155 11/26/2024
2024.11.25.5 138 11/25/2024
2024.11.25.4 139 11/25/2024
2024.11.25.3 144 11/25/2024
2024.11.25.2 144 11/25/2024
2024.11.25.1 156 11/25/2024
2024.11.23.2 182 11/23/2024
2024.11.23.1 182 11/23/2024
2024.11.22.1 165 11/22/2024
2024.11.21.1 176 11/21/2024
2024.11.20.3 166 11/20/2024
2024.11.20.2 147 11/20/2024
2024.11.20.1 170 11/20/2024
2024.11.19.1 155 11/19/2024
2024.11.18.4 161 11/18/2024
2024.11.18.3 142 11/18/2024
2024.11.18.2 155 11/18/2024
2024.11.18.1 152 11/18/2024
2024.11.14.2 159 11/14/2024
2024.11.14.1 156 11/14/2024
2024.11.13.2 161 11/13/2024
2024.11.13.1 162 11/13/2024
2024.11.12.2 165 11/12/2024
2024.11.12.1 157 11/12/2024
2024.11.11.1 159 11/11/2024
2024.11.8.1 158 11/8/2024
2024.11.6.1 152 11/6/2024
2024.11.5.1 145 11/5/2024
2024.10.29.2 166 10/29/2024
2024.10.29.1 151 10/29/2024
2024.10.28.1 142 10/28/2024
2024.10.25.1 149 10/25/2024
2024.10.24.1 145 10/24/2024
2024.10.21.1 156 10/21/2024
2024.10.18.2 175 10/18/2024
2024.10.18.1 176 10/18/2024
2024.10.16.1 161 10/16/2024
2024.10.12.1 150 10/12/2024
2024.10.11.1 153 10/11/2024
2024.10.10.1 165 10/10/2024
2024.10.9.1 158 10/9/2024
2024.10.8.1 151 10/8/2024
2024.9.26.1 420 9/26/2024
2024.9.25.1 163 9/25/2024
2024.9.23.4 175 9/23/2024
2024.9.23.3 171 9/23/2024
2024.9.23.2 180 9/23/2024
2024.9.23.1 169 9/23/2024
2024.9.19.1 177 9/19/2024
2024.9.14.1 165 9/14/2024
2024.9.10.3 179 9/10/2024
2024.9.10.2 221 9/10/2024
2024.9.10.1 174 9/10/2024
2024.9.5.1 182 9/5/2024
2024.8.22.1 230 8/22/2024
2024.8.21.1 190 8/21/2024
2024.8.19.1 208 8/19/2024
2024.8.15.1 189 8/15/2024
2024.8.14.1 185 8/14/2024
2024.8.13.2 185 8/13/2024
2024.8.13.1 182 8/13/2024
2024.8.12.2 186 8/12/2024
2024.8.12.1 192 8/12/2024
2024.8.9.2 177 8/9/2024
2024.8.9.1 186 8/9/2024
2024.8.7.1 177 8/7/2024
2024.8.6.2 156 8/6/2024
2024.8.6.1 162 8/6/2024
2024.8.5.5 146 8/5/2024
2024.8.5.4 144 8/5/2024
2024.8.5.3 154 8/5/2024
2024.8.5.2 142 8/5/2024
2024.8.5.1 154 8/5/2024
2024.8.2.4 153 8/2/2024
2024.8.2.3 145 8/2/2024
2024.8.2.2 144 8/2/2024
2024.8.2.1 145 8/2/2024
2024.8.1.1 167 8/1/2024
2024.7.31.2 134 7/31/2024
2024.7.31.1 147 7/31/2024
2024.7.25.1 142 7/25/2024
2024.7.17.1 194 7/17/2024
2024.7.12.2 170 7/12/2024
2024.7.12.1 180 7/12/2024
2024.7.11.2 170 7/11/2024
2024.7.11.1 159 7/11/2024
2024.7.10.4 174 7/10/2024
2024.7.10.3 172 7/10/2024
2024.7.10.2 168 7/10/2024
2024.7.10.1 167 7/10/2024
2024.5.29.1 250 5/29/2024
2024.5.28.1 305 5/28/2024
2024.5.15.1 221 5/15/2024
2024.5.13.1 177 5/13/2024
2024.5.11.1 168 5/11/2024
2024.3.15.1 207 3/15/2024
2024.1.9.1 218 1/9/2024
2024.1.4.1 194 1/4/2024
2024.1.2.3 275 1/2/2024
2024.1.2.2 203 1/2/2024
2024.1.2.1 198 1/2/2024
2023.12.29.3 194 12/29/2023
2023.12.29.2 172 12/29/2023
2023.12.29.1 202 12/29/2023
2023.12.28.4 196 12/28/2023
2023.12.28.3 173 12/28/2023
2023.12.28.2 195 12/28/2023
2023.12.28.1 206 12/28/2023
2023.12.27.2 172 12/27/2023
2023.12.27.1 166 12/27/2023
2023.12.26.1 188 12/26/2023

语音转换工具类