From 2c6475b2d56ddef07fa268c009f70755a8c267f6 Mon Sep 17 00:00:00 2001 From: owenchen Date: Mon, 22 Jun 2026 17:02:26 +0800 Subject: [PATCH] ow --- CloudBuilder.Topshelf.sln | 6 + Lib/CloudBuilder.AI.Service.dll | Bin 39936 -> 39936 bytes Lib/CloudBuilder.AI.dll | Bin 97792 -> 107520 bytes Properties/launchSettings.json | 2 +- Python/SoVITS.cs | 98 +--------- Task/AI/NameGenderPredictorTask.cs | 38 +++- Task/Python/PythonRunTask.cs | 24 ++- Task/TTS/SoVITSTtsTask.cs | 277 +++++++++++++++++++++++++++++ Task/TTS/TtsTask.cs | 1 + Utility/SaveAudioToFileHelper.cs | 129 +------------- 10 files changed, 341 insertions(+), 234 deletions(-) create mode 100644 Task/TTS/SoVITSTtsTask.cs diff --git a/CloudBuilder.Topshelf.sln b/CloudBuilder.Topshelf.sln index 649aae5..0040087 100644 --- a/CloudBuilder.Topshelf.sln +++ b/CloudBuilder.Topshelf.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 17.8.34316.72 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CloudBuilder.Topshelf", "CloudBuilder.Topshelf.csproj", "{63EB47F6-A616-4C64-B850-85ED294E2524}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CloudBuilder.AI", "..\CloudBuilder\CloudBuilder.AI\CloudBuilder.AI.csproj", "{FD89E87E-BDEB-4040-A380-A5218B2BDAB1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {63EB47F6-A616-4C64-B850-85ED294E2524}.Debug|Any CPU.Build.0 = Debug|Any CPU {63EB47F6-A616-4C64-B850-85ED294E2524}.Release|Any CPU.ActiveCfg = Release|Any CPU {63EB47F6-A616-4C64-B850-85ED294E2524}.Release|Any CPU.Build.0 = Release|Any CPU + {FD89E87E-BDEB-4040-A380-A5218B2BDAB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD89E87E-BDEB-4040-A380-A5218B2BDAB1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD89E87E-BDEB-4040-A380-A5218B2BDAB1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD89E87E-BDEB-4040-A380-A5218B2BDAB1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Lib/CloudBuilder.AI.Service.dll b/Lib/CloudBuilder.AI.Service.dll index 8af1dd1fe4a9d737d4afbe0adebd576da606326e..11627aa4da026ebe05b8df8f15f8a0fa990144d3 100644 GIT binary patch delta 236 zcmZqJ!PKyWX+j6f38i_HHugBQ32e~hDU5n~(Xq`~Nb&KKYtuI0X}iXwVPcY+Vq$D+ zXqIYWY;0m^mS~)kl$e%mVQOJ&Xkw9KW@KcRWRPl*GWpizag9mJnLj5?W|^9%02MT0g$f1(RhLcgFSmQG+F7ews=v8w>LX@<69yB8RE88F zY0O~CV8~zwN}VMqefX$;9g8B;Je1ju^!=w<$>F J=G`-0nE?3dQpo@S diff --git a/Lib/CloudBuilder.AI.dll b/Lib/CloudBuilder.AI.dll index 891f62618bc02a0131dcb6d5120ed776bcbae9be..63b5b5a2aad91d1a20d6754a2398e200e8765965 100644 GIT binary patch literal 107520 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

jV**>j#|9*N;{y`g(*qyEsSQZWCkLe0=LDp` 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 V{JR$;DYCD@?a-Tl|NS)Z{{e5aT$TU; diff --git a/Properties/launchSettings.json b/Properties/launchSettings.json index 08fab86..aeee29a 100644 --- a/Properties/launchSettings.json +++ b/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "CloudBuilder.Topshelf": { "commandName": "Project", - "commandLineArgs": "task:PythonRunTask book_id:B000010 from_chapter_id:181 to_chapter_id:200 speed:1 voice:Sherpa2 actor:韩立 actor_voice:Sherpa1 save_path:D:\\\\Net8\\\\FileServer\\\\Backup\\\\DmsFile\\\\voice" + "commandLineArgs": "task:SoVITSTtsTask book_id:B000011 chapter_id:3 voice:MIDDLE_AGED_FEMALE5 actor:韩立 actor_voice:YOUNG_MALE2 save_path:D:\\\\Net8\\\\FileServer\\\\Backup\\\\DmsFile\\\\voice" } } } \ No newline at end of file diff --git a/Python/SoVITS.cs b/Python/SoVITS.cs index 550edfd..df643e2 100644 --- a/Python/SoVITS.cs +++ b/Python/SoVITS.cs @@ -1,4 +1,5 @@ -using Python.Runtime; +using CloudBuilder.AI.Policy; +using Python.Runtime; using System; using System.Collections.Generic; using System.Linq; @@ -303,101 +304,6 @@ namespace CloudBuilder.Topshelf.Python } - public enum SoVITSTtsVoice - { - [System.ComponentModel.Description("老年人(男性)-1")] - OLD_MAN1, - [System.ComponentModel.Description("老年人(男性)-2")] - OLD_MAN2, - [System.ComponentModel.Description("老年人(男性)-3")] - OLD_MAN3, - [System.ComponentModel.Description("老年人(男性)-4")] - OLD_MAN4, - [System.ComponentModel.Description("老年人(男性)-5")] - OLD_MAN5, - [System.ComponentModel.Description("老年人(男性)-6")] - OLD_MAN6, - [System.ComponentModel.Description("老年人(男性)-7")] - OLD_MAN7, - [System.ComponentModel.Description("男青年(男性)-1")] - MIDDLE_AGED_MAN1, - [System.ComponentModel.Description("男中年(男性)-2")] - MIDDLE_AGED_MAN2, - [System.ComponentModel.Description("男中年(男性)-3")] - MIDDLE_AGED_MAN3, - [System.ComponentModel.Description("男中年(男性)-4")] - MIDDLE_AGED_MAN4, - [System.ComponentModel.Description("男中年(男性)-5")] - MIDDLE_AGED_MAN5, - [System.ComponentModel.Description("男中年(男性)-6")] - MIDDLE_AGED_MAN6, - [System.ComponentModel.Description("男中年(男性)-7")] - MIDDLE_AGED_MAN7, - [System.ComponentModel.Description("男青年(男性)-1")] - YOUNG_MALE1, - [System.ComponentModel.Description("男青年(男性)-2")] - YOUNG_MALE2, - [System.ComponentModel.Description("男青年(男性)-3")] - YOUNG_MALE3, - [System.ComponentModel.Description("男青年(男性)-4")] - YOUNG_MALE4, - [System.ComponentModel.Description("男青年(男性)-5")] - YOUNG_MALE5, - [System.ComponentModel.Description("男青年(男性)-6")] - YOUNG_MALE6, - [System.ComponentModel.Description("男青年(男性)-7")] - YOUNG_MALE7, - [System.ComponentModel.Description("男儿童(男性)-1")] - MALE_CHILD1, - [System.ComponentModel.Description("男儿童(男性)-2")] - MALE_CHILD2, - [System.ComponentModel.Description("男儿童(男性)-3")] - MALE_CHILD3, - [System.ComponentModel.Description("男儿童(男性)-4")] - MALE_CHILD4, - [System.ComponentModel.Description("老年人(女性)-1")] - ELDERLY_FEMALE1, - [System.ComponentModel.Description("老年人(女性)-2")] - ELDERLY_FEMALE2, - [System.ComponentModel.Description("老年人(女性)-3")] - ELDERLY_FEMALE3, - [System.ComponentModel.Description("女中年(女性)-1")] - MIDDLE_AGED_FEMALE1, - [System.ComponentModel.Description("女中年(女性)-2")] - MIDDLE_AGED_FEMALE2, - [System.ComponentModel.Description("女中年(女性)-3")] - MIDDLE_AGED_FEMALE3, - [System.ComponentModel.Description("女中年(女性)-4")] - MIDDLE_AGED_FEMALE4, - [System.ComponentModel.Description("女中年(女性)-5")] - MIDDLE_AGED_FEMALE5, - [System.ComponentModel.Description("女中年(女性)-6")] - MIDDLE_AGED_FEMALE6, - [System.ComponentModel.Description("女中年(女性)-7")] - MIDDLE_AGED_FEMALE7, - [System.ComponentModel.Description("女青年(女性)-1")] - YOUNG_FEMALE1, - [System.ComponentModel.Description("女青年(女性)-2")] - YOUNG_FEMALE2, - [System.ComponentModel.Description("女青年(女性)-3")] - YOUNG_FEMALE3, - [System.ComponentModel.Description("女青年(女性)-4")] - YOUNG_FEMALE4, - [System.ComponentModel.Description("女青年(女性)-5")] - YOUNG_FEMALE5, - [System.ComponentModel.Description("女青年(女性)-6")] - YOUNG_FEMALE6, - [System.ComponentModel.Description("女青年(女性)-7")] - YOUNG_FEMALE7, - [System.ComponentModel.Description("女儿童(女性)-1")] - FEMALE_CHILD1, - [System.ComponentModel.Description("女儿童(女性)-2")] - FEMALE_CHILD2, - [System.ComponentModel.Description("女儿童(女性)-3")] - FEMALE_CHILD3, - [System.ComponentModel.Description("女儿童(女性)-4")] - FEMALE_CHILD4, - } } /* import os diff --git a/Task/AI/NameGenderPredictorTask.cs b/Task/AI/NameGenderPredictorTask.cs index bf4d36d..e2059a0 100644 --- a/Task/AI/NameGenderPredictorTask.cs +++ b/Task/AI/NameGenderPredictorTask.cs @@ -9,10 +9,11 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using static System.Runtime.InteropServices.JavaScript.JSType; namespace CloudBuilder.Topshelf.Task.AI { - //task:NameGenderPredictorTask book_id:B000010 from_chapter_id:177 to_chapter_id:200 + //task:NameGenderPredictorTask book_id:B000011 from_chapter_id:177 to_chapter_id:200 public class NameGenderPredictorTask : IScheduleTask { private readonly IApplicationService service; @@ -59,6 +60,41 @@ namespace CloudBuilder.Topshelf.Task.AI ConsoleOutput.UpdateProgress(processedLines, totalLines); } + string[] personNames = aiSentences.Select(x => x.PersonName).Distinct().ToArray(); + if (personNames != null && personNames.Length > 0) + { + AiBookPersonEntity aiBookPersonEntity; + IRepository repositoryAiBookPersonEntity = service.GetRepository>(); + + AiBookPersonEntity[] bps = repositoryAiBookPersonEntity.DetachedEntities.Where(x => x.BookId == aiSentences[0].BookId).ToArray(); + + if (bps != null && bps.Length > 0) + { + repositoryAiBookPersonEntity.DeleteNow(bps); + } + + List ps = new List(); + //旁白 + aiBookPersonEntity = new AiBookPersonEntity(); + aiBookPersonEntity.BookId = aiSentences[0].BookId; + aiBookPersonEntity.PersonName = null; + aiBookPersonEntity.ActorName = SoVITSTtsVoiceRandom.GetRandomByGender("女性").ToString(); + ps.Add(aiBookPersonEntity); + + foreach (var personName in personNames) + { + if (string.IsNullOrEmpty(personName)) continue; + aiBookPersonEntity = new AiBookPersonEntity(); + aiBookPersonEntity.BookId = aiSentences[0].BookId; + aiBookPersonEntity.PersonName = personName; + aiBookPersonEntity.ActorName = SoVITSTtsVoiceRandom.GetRandomByGender(NameGenderPredictor.IsMale(personName) == true ? "男性" : "女性").ToString(); + + ps.Add(aiBookPersonEntity); + } + + repositoryAiBookPersonEntity.InsertNow(ps); + } + repositoryAiSentenceEntity.UpdateNow(aiSentences); } catch (Exception ex) diff --git a/Task/Python/PythonRunTask.cs b/Task/Python/PythonRunTask.cs index a7d2739..892bc9f 100644 --- a/Task/Python/PythonRunTask.cs +++ b/Task/Python/PythonRunTask.cs @@ -1,4 +1,5 @@ -using CloudBuilder.Core.DatabaseAccessor.Entity; +using CloudBuilder.AI.Policy; +using CloudBuilder.Core.DatabaseAccessor.Entity; using CloudBuilder.Core.DependencyInjection.Task; using CloudBuilder.Topshelf.Python; using CloudBuilder.Topshelf.Utility; @@ -17,18 +18,23 @@ namespace CloudBuilder.Topshelf.Task public void Run(Dictionary bodyDict) { - Python39Command python39Command = new Python39Command(service); + //Python39Command python39Command = new Python39Command(service); try { - SoVITS soVITS = new SoVITS(python39Command); - Array voiceArray = Enum.GetValues(typeof(SoVITSTtsVoice)); + //SoVITS soVITS = new SoVITS(python39Command); + //Array voiceArray = Enum.GetValues(typeof(SoVITSTtsVoice)); - foreach (SoVITSTtsVoice voice in voiceArray) + //foreach (SoVITSTtsVoice voice in voiceArray) + //{ + // soVITS.Generate("三更时分,青龙城毫无征兆地被血色浓雾笼罩,雾气带着诡异的幻术气息,城中低阶修士尽数陷入昏睡.", soVITS.Voices[voice], $"F:\\GPT-SoVITS\\gen\\{(int)voice}.mp3"); + //} + + Array voices = Enum.GetValues(typeof(ChineseTtsVoice)); + + foreach (ChineseTtsVoice voice in voices) { - soVITS.Generate("三更时分,青龙城毫无征兆地被血色浓雾笼罩,雾气带着诡异的幻术气息,城中低阶修士尽数陷入昏睡.", soVITS.Voices[voice], $"F:\\GPT-SoVITS\\gen{(int)voice}.mp3"); + SaveAudioToFileHelper.AudioToFile(voice, 1.0f, "三更时分,青龙城毫无征兆地被血色浓雾笼罩,雾气带着诡异的幻术气息,城中低阶修士尽数陷入昏睡.", $"F:\\GPT-SoVITS\\gen\\{(int)voice}.mp3"); } - - } catch (Exception ex) { @@ -36,7 +42,7 @@ namespace CloudBuilder.Topshelf.Task } finally { - python39Command.Dispose(); + //python39Command.Dispose(); } return; diff --git a/Task/TTS/SoVITSTtsTask.cs b/Task/TTS/SoVITSTtsTask.cs new file mode 100644 index 0000000..1dbc017 --- /dev/null +++ b/Task/TTS/SoVITSTtsTask.cs @@ -0,0 +1,277 @@ +using CloudBuilder.AI.Entity; +using CloudBuilder.AI.Policy; +using CloudBuilder.AI.Utility; +using CloudBuilder.Core.DatabaseAccessor.Entity; +using CloudBuilder.Core.DependencyInjection.Task; +using CloudBuilder.Topshelf.Python; +using CloudBuilder.Topshelf.Utility; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.IdentityModel.Tokens; +using NAudio.Lame; +using NAudio.Wave; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading.Tasks; +using static System.Net.Mime.MediaTypeNames; +using static System.Runtime.InteropServices.JavaScript.JSType; + +namespace CloudBuilder.Topshelf.Task.TTS +{ + //task:SoVITSTtsTask book_id:B000011 chapter_id:3 voice:MIDDLE_AGED_FEMALE5 actor:韩立 actor_voice:YOUNG_MALE2 save_path:D:\\Net8\\FileServer\\Backup\\DmsFile\\voice + public class SoVITSTtsTask : IScheduleTask + { + private readonly IApplicationService service; + + public SoVITSTtsTask(IApplicationService service) + { + this.service = service; + } + + public void Run(Dictionary bodyDict) + { + ConsoleOutput.HideStdError(); + + IRepository repository = service.GetRepository>(); + + string bookId = string.Empty; + if (bodyDict.ContainsKey("book_id")) + bookId = bodyDict["book_id"]; + + string chapterId = string.Empty; + if (bodyDict.ContainsKey("chapter_id")) + chapterId = bodyDict["chapter_id"]; + + string from_chapter_id = string.Empty; + if (bodyDict.ContainsKey("from_chapter_id")) + from_chapter_id = bodyDict["from_chapter_id"]; + + string to_chapter_id = string.Empty; + if (bodyDict.ContainsKey("to_chapter_id")) + to_chapter_id = bodyDict["to_chapter_id"]; + + AiSentenceViewEntity[] ents = repository.DetachedEntities.Where(x => x.BookId == bookId + && (string.IsNullOrEmpty(chapterId) || x.ChapterId == Convert.ToInt32(chapterId)) + && (string.IsNullOrEmpty(from_chapter_id) || x.ChapterId >= Convert.ToInt32(from_chapter_id)) + && (string.IsNullOrEmpty(to_chapter_id) || x.ChapterId <= Convert.ToInt32(to_chapter_id) + )).OrderBy(x => x.ChapterId).ThenBy(x => x.ParagraphId).ThenBy(x => x.SentenceIndex).ToArray(); + + if (ents == null || ents.Length == 0) return; + + string save_path = string.Empty, text = string.Empty, voice = SoVITSTtsVoiceRandom.GetRandomYoungFemale().ToString(), actor = string.Empty, actor_voice = SoVITSTtsVoiceRandom.GetRandomYoungMale().ToString(); + if (bodyDict.ContainsKey("actor")) + actor = bodyDict["actor"]; + + if (bodyDict.ContainsKey("voice")) + voice = bodyDict["voice"]; + + if (bodyDict.ContainsKey("actor_voice")) + actor_voice = bodyDict["actor_voice"]; + + if (bodyDict.ContainsKey("save_path")) + save_path = bodyDict["save_path"]; + + float speed = 1.0f; + + if (bodyDict.ContainsKey("speed")) + speed = Convert.ToSingle(bodyDict["speed"]); + + GenerateAndMergeChapterAudio(ents, speed, actor, actor_voice, voice, save_path); + } + + public void GenerateAndMergeChapterAudio(AiSentenceViewEntity[] ents, float speed, string actor, string actor_voice, string mainVoice, string save_path) + { + IRepository repositoryAiBookPersonEntity = service.GetRepository>(); + AiBookPersonEntity[] bps = repositoryAiBookPersonEntity.DetachedEntities.Where(x => x.BookId == ents[0].BookId).ToArray(); + + + Python39Command python39Command = new Python39Command(service); + SoVITS soVITS = new SoVITS(python39Command); + // 1. 按 BookId + ChapterId 分组(关键!) + var chapterGroups = ents + .Where(ent => ent.Content.Any(c => c >= 0x4E00 && c <= 0x9FFF)) // 只保留含中文的句子 + .GroupBy(ent => new { ent.BookId, ent.ChapterId }) + .ToList(); + + int totalLines = ents.Count(); + int processedLines = 0; // 已处理行数计数器 + UpdateProgress(processedLines, totalLines); + Dictionary personMapping = new Dictionary(); + foreach (var chapter in chapterGroups) + { + string bookId = chapter.Key.BookId; + int chapterId = chapter.Key.ChapterId; + List tempMp3List = new List(); // 本章所有碎片音频 + + // 2. 生成本章所有句子音频 + foreach (AiSentenceViewEntity ent in chapter) + { + try + { + processedLines++; + + string voice = SoVITSTtsVoiceRandom.GetRandomYoungFemale().ToString(); + if (ent.DialogueIndc == YesNoPolicy.YES) + { + string key = string.IsNullOrEmpty(ent.PersonName) ? "NULL" : ent.PersonName; + if (key == actor) + { + if (personMapping.ContainsKey(key)) + voice = personMapping[key]; + else + { + voice = actor_voice; + personMapping.Add(key, voice); + } + + } + else + { + if (!string.IsNullOrEmpty(key) && personMapping.ContainsKey(key)) + { + voice = personMapping[key]; + } + else if (!string.IsNullOrEmpty(key) && bps != null && bps.Length > 0 && bps.Where(x => x.PersonName == key).Any()) + { + voice = bps.Where(x => x.PersonName == key).FirstOrDefault().ActorName; + personMapping.Add(key, voice); + } + else + { + if (ent.Gender == YesNoPolicy.YES) + { + voice = SoVITSTtsVoiceRandom.GetRandomFemaleExclude(EnumHelper.ToEnum(actor_voice)).ToString(); + personMapping.Add(key, voice); + } + else if (ent.Gender == YesNoPolicy.NO) + { + voice = SoVITSTtsVoiceRandom.GetRandomFemale().ToString(); + personMapping.Add(key, voice); + } + else + { + voice = SoVITSTtsVoiceRandom.GetRandom().ToString(); + personMapping.Add(key, voice); + } + } + + } + } + else + { + voice = mainVoice; + if (personMapping.ContainsKey("mainVoice")) + voice = personMapping["mainVoice"]; + else if (bps != null && bps.Length > 0 && bps.Where(x => string.IsNullOrEmpty(x.PersonName)).Any()) + { + voice = bps.Where(x => string.IsNullOrEmpty(x.PersonName)).FirstOrDefault().ActorName; + personMapping.Add("mainVoice", voice); + } + } + + if (string.IsNullOrEmpty(voice) || string.IsNullOrEmpty(ent.Content)) + continue; + + // 碎片文件名:BookId_ChapterId_ParagraphId_SentenceId.mp3 + string fileName = string.Format("{0}_{1}_{2}_{3}.mp3", ent.BookId, ent.ChapterId, ent.ParagraphId, ent.SentenceId); + string filePath = Path.Combine(save_path, fileName); + + // 生成音频 + soVITS.Generate(ent.Content, soVITS.Voices[EnumHelper.ToEnum(voice)], filePath); + + tempMp3List.Add(filePath); // 加入合并列表 + } + catch (Exception ex) + { + Console.WriteLine($"❌ 失败:{ex.Message}"); + } + + UpdateProgress(processedLines, totalLines); + } + + Thread.Sleep(100); + + // 3. 合并为:BookId_ChapterId.mp3 + string outputFileName = string.Format("{0}_{1}.mp3", bookId, chapterId); + string outputFilePath = Path.Combine(save_path, outputFileName); + + MergeChapterMp3Files(tempMp3List, outputFilePath); + + // 4. 可选:合并后删除碎片文件(节省空间) + foreach (var chunk in tempMp3List) + { + try { File.Delete(chunk); } catch { } + } + + UpdateProgress(processedLines, totalLines); + } + } + ///

+ /// 最终修复:完全解决 No fmt chunk / 采样率不兼容 / 只有一截声音 + /// + public void MergeChapterMp3Files(List chunkFiles, string outputFilePath) + { + var validFiles = chunkFiles.Where(File.Exists).ToList(); + if (validFiles.Count == 0) return; + + try + { + // 目标格式:32000Hz 单声道 16bit + WaveFormat targetFormat = new WaveFormat(32000, 16, 1); + + // 直接生成 MP3,不经过 WAV 文件,彻底避免 fmt 错误 + using (var mp3Writer = new LameMP3FileWriter(outputFilePath, targetFormat, 128)) + { + foreach (var file in validFiles) + { + try + { + // 释放文件占用 + GC.Collect(); + GC.WaitForPendingFinalizers(); + + // 用Windows系统解码器读取任何MP3 + using (var reader = new MediaFoundationReader(file)) + using (var resampler = new MediaFoundationResampler(reader, targetFormat)) + { + byte[] buffer = new byte[8192]; + int read; + while ((read = resampler.Read(buffer, 0, buffer.Length)) > 0) + { + mp3Writer.Write(buffer, 0, read); + } + } + } + catch (Exception ex) + { + Console.WriteLine($"跳过文件:{file},错误:{ex.Message}"); + } + } + } + + //Console.WriteLine($"✅ 合并成功:{outputFilePath},大小:{new FileInfo(outputFilePath).Length} 字节"); + } + catch (Exception ex) + { + //Console.WriteLine($"❌ 合并失败:{ex.Message}"); + } + } + + private static void UpdateProgress(int processed, int total) + { + double progressPercent = (double)processed / total * 100; + int progressBarLength = 50; // 进度条总长度 + int filledLength = (int)(progressPercent / 100 * progressBarLength); + + // 构建进度条(如:[██████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░]) + string progressBar = "[" + new string('█', filledLength) + new string('░', progressBarLength - filledLength) + "]"; + + string progressInfo = $"{progressBar} {progressPercent:F2}% | 已处理:{processed}/{total} "; + Console.Write($"\r{progressInfo}"); + Console.Out.Flush(); + } + } +} diff --git a/Task/TTS/TtsTask.cs b/Task/TTS/TtsTask.cs index a8bfea2..10820fa 100644 --- a/Task/TTS/TtsTask.cs +++ b/Task/TTS/TtsTask.cs @@ -1,4 +1,5 @@ using CloudBuilder.AI.Entity; +using CloudBuilder.AI.Policy; using CloudBuilder.Core.DatabaseAccessor.Entity; using CloudBuilder.Core.DependencyInjection.Task; using CloudBuilder.Topshelf.Utility; diff --git a/Utility/SaveAudioToFileHelper.cs b/Utility/SaveAudioToFileHelper.cs index 71af4ec..6137a41 100644 --- a/Utility/SaveAudioToFileHelper.cs +++ b/Utility/SaveAudioToFileHelper.cs @@ -1,4 +1,5 @@ -using SherpaOnnx; +using CloudBuilder.AI.Policy; +using SherpaOnnx; using System; using System.Collections.Generic; using System.ComponentModel; @@ -156,132 +157,6 @@ namespace CloudBuilder.Topshelf.Utility audio.SaveToWaveFile(saveFilePath); } } - /// - /// 微软Edge TTS中文语音音色枚举 - /// 对应官方Neural语音标识,覆盖港澳台及大陆各地区音色 - /// - public enum ChineseTtsVoice - { - /// - /// 普通话(中国大陆) 娇柔(女性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 喜佳(女性)-0")] - Sherpa0, - /// - /// 普通话(中国大陆)- 柔美(女性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 柔美(女性)-2")] - Sherpa2, - /// - /// 普通话(中国大陆)- 知性(男性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 知性(男性)-4")] - Sherpa4, - /// - /// 普通话(中国大陆)- 知青(男性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 知青(男性)-3")] - Sherpa3, - /// - /// 普通话(中国大陆)- 中青(男性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 中青(男性)-1")] - Sherpa1, - - - /// - /// 普通话(中国大陆)- 爱莎(女性)- 文件小速度快 - /// - [System.ComponentModel.Description("普通话(中国大陆) 爱莎(女性)-6")] - Aaishe6, - - /// - /// 普通话(中国大陆)- 爱莎(女性)- 文件小速度快 - /// - [System.ComponentModel.Description("普通话(中国大陆) 爱莎(女性)-14")] - Aaishe14, - - /// - /// 普通话(中国大陆)- 爱莎(女性)- 文件小速度快 - /// - [System.ComponentModel.Description("普通话(中国大陆) 爱莎(女性)-18")] - Aaishe18, - - /// - /// 普通话(中国大陆)- 云健(男性)- 文件小速度快 - /// - [System.ComponentModel.Description("普通话(中国大陆) 云健(男性)-10")] - Aaishe10, - - /// - /// 普通话(中国大陆)- 爱莎(女性)- 文件小速度快 - /// - [System.ComponentModel.Description("普通话(中国大陆) 爱莎(女性)-1")] - Aaishe1, - - /// - /// 普通话(中国大陆)- 云健(男性)- 文件小速度快 - /// - [System.ComponentModel.Description("普通话(中国大陆) 云健(男性)-15")] - Aaishe15, - - /// 普通话(中国大陆) 云阳(男性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 云阳(男性)-10")] - Fanchen10, - /// - /// 普通话(中国大陆) 云阳(男性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 云阳(男性)-110")] - Fanchen110, - /// 普通话(中国大陆) 喜佳(女性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 云夏(女性)-6")] - Fanchen6, - /// - /// 普通话(中国大陆) 云阳(男性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 云阳(男性)-15")] - Fanchen15, - /// - /// 普通话(中国大陆) 喜佳(女性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 喜佳(女性)-2")] - Fanchen2, - /// - /// 普通话(中国大陆) 喜佳(女性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 喜佳(女性)-14")] - Fanchen14, - /// - /// 普通话(中国大陆) 喜佳(女性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 喜佳(女性)-20")] - Fanchen20, - /// - /// 普通话(中国大陆) 喜佳(女性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 喜佳(女性)-36")] - Fanchen36, - - /// - /// 粤语(香港)- 女性(男性)- 文件大 - /// - [System.ComponentModel.Description("粤语(香港) 梅隆 (女性)-0")] - Melo, - - /// - /// 普通话(中国大陆)- 神精女(女性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 神精女(女性)-0")] - Eula, - - /// - /// 普通话(中国大陆)- 小神精女(女性) - /// - [System.ComponentModel.Description("普通话(中国大陆) 小神精女(女性)-27")] - Theresa, - } public static class ChineseTtsVoiceExtensions {