TTS 语音增强
背景
在Windows上,使用TTS生成语音并播放时,声音比较低,即便声明为最大音量,有时候依然不能满足用户的要求。通常只有增加系统音量使语音的音量达到用户的预期,但如果用户同时播放音乐、看视频等,声音也会随之增大。
需要一种可以将TTS的声音单独增强的方法。
环境
系统: Windows
运行时: .Net Framework 4.5.2+
依赖:NAudio.dll(1.10.0.0+)
生成语音
生成语音需要本机安装中文语音包。将TTS的语音写入内存流中,然后由NAudio播放。
var synthesizer = new SpeechSynthesizer();
synthesizer.SetOutputToDefaultAudioDevice();
synthesizer.Volume = 100; //音量设置最大
InstalledVoice iv=null;
foreach (InstalledVoice item in synthesizer.GetInstalledVoices())
{
//寻找第一个可用的中文语音包
if (item.Enabled && "zh-cn".Equals(item.VoiceInfo.Culture.Name.ToLower()))
{
iv = item;
break;
}
}
//将生成的语音写入内存流
MemoryStream wave = new MemoryStream();
synthesizer.SelectVoice(iv.VoiceInfo.Name);
synthesizer.SetOutputToWaveStream(wave);
synthesizer.Speak("收款,一亿元");
wave.Flush();
wave.Position = 0;
增强语音并播放
使用WaveFileReader加载语音的内存流,然后设置播放时的VolumeSampleProvider来增强音量。
WaveFileReader wav = new WaveFileReader(wave);
WaveOut waveout = new WaveOut();
var volumeSampleProvider = new VolumeSampleProvider(wav.ToSampleProvider());
volumeSampleProvider.Volume = (float)this.numericUpDown1.Value; // double the amplitude of every sample - may go above 0dB
waveout.Init(volumeSampleProvider);
waveout.Play();
注意事项
以上的方法是每次播放都会声明一个新的播放器实例,所以连续播放会有重叠的现象。如果需要新的语音播放时终止上一次的语音播放,需要使用单例WaveOutEvent。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!