C#WPF 语音开发教程 TTS中英文语音(男女声音)朗读 源代码下载 csdn tts(text to sound) 一步一步 教你制作语音软件 附图和源代码

C#WPF  语音开发教程  TTS中文语音朗读 一步一步 教你制作语音软件  

 附图和源代码

使用时,请确认电脑喇叭打开,并且不是静音额。

效果展示

 

一 项目准备

1.vs2012开发平台

2.微软的语音软件库

下载:http://download.csdn.net/detail/wyx100/8431269 (含实例项目源代码)

二.开发目标

制作一个语音软件,可以朗读文字;

多个语音库:男音和女音、支持英文和中文朗读;

支持选择播放设备

支持朗读语速选择

支持音量选择

三 开发过程

1.新建WpfSpeechDemo工程

文件(vs开发平台左上角)----新建(快捷方式 Ctrl+Shift+New)

2.导入微软语音库

 

3.建立软件界面

见开始  效果展示

4.软件功能开发

支持语音库选择

支持选择播放设备

支持朗读语速选择

支持音量选择

 

四 软件代码

1.界面代码

<Window x:Class="WpfSpeechDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="WpfSpeechDemo" Height="350" Width="525">
    <Grid>
        <ComboBox x:Name="cmbVoices"  HorizontalAlignment="Left" Margin="86,23,0,0" VerticalAlignment="Top" Width="222" SelectionChanged="cmbVoices_SelectionChanged"/>
        <ComboBox x:Name="cmbAudioOut"  HorizontalAlignment="Left" Margin="86,69,0,0" VerticalAlignment="Top" Width="222" SelectionChanged="cmbAudioOut_SelectionChanged"/>
        <Label Content="语音库(引擎): " HorizontalAlignment="Left" Margin="0,23,0,0" VerticalAlignment="Top" Width="81"/>
        <Label Content="语音输出方式: " HorizontalAlignment="Left" Margin="0,65,0,0" VerticalAlignment="Top" Width="81"/>
        <Button Content="朗读|Speek" HorizontalAlignment="Left" Margin="33,119,0,0" VerticalAlignment="Top" Width="104" Click="bt_speek_Click"/>
        <Button Content="停止|Stop" HorizontalAlignment="Left" Margin="170,119,0,0" VerticalAlignment="Top" Width="93" RenderTransformOrigin="2.042,0.064" Click="bt_stop_Click"/>
        <TextBox Name="tbspeech"  HorizontalAlignment="Left" Height="125" Margin="20,172,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="484" BorderThickness="3" Text="Wpf语音,hello world!">
            <TextBox.BorderBrush>
                <LinearGradientBrush EndPoint="0,20" MappingMode="Absolute" StartPoint="0,0">
                    <GradientStop Color="#FFABADB3" Offset="0.05"/>
                    <GradientStop Color="#FFE2E3EA" Offset="0.07"/>
                    <GradientStop Color="#FF1A72C9" Offset="1"/>
                </LinearGradientBrush>
            </TextBox.BorderBrush>
        </TextBox>
        <Slider x:Name="tbarRate" Orientation="Vertical" 
                Minimum="0" 
                Maximum="10"
                IsMoveToPointEnabled="True"
                AutoToolTipPrecision="2" AutoToolTipPlacement="BottomRight"
                TickPlacement="BottomRight"
                Ticks="1, 2, 3, 4, 5, 6, 7, 8, 9,10" 
                IsSelectionRangeEnabled="true"
                SelectionStart="1" SelectionEnd="9" 
                HorizontalAlignment="Left" Margin="357,51,0,0" VerticalAlignment="Top" Height="103" ValueChanged="tbarRate_ValueChanged" Background="#FFEFEBF0"/>
        <Slider x:Name="trbVolume" Orientation="Vertical"                 
                Minimum="0" 
                Maximum="10"
                IsMoveToPointEnabled="True"
                AutoToolTipPrecision="2" AutoToolTipPlacement="BottomRight"
                TickPlacement="BottomRight"
                Ticks="1, 2, 3, 4, 5, 6, 7, 8, 9,10" 
                IsSelectionRangeEnabled="true"
                SelectionStart="1" SelectionEnd="9" 
                HorizontalAlignment="Left" Margin="426,51,0,0" VerticalAlignment="Top" Height="103" ValueChanged="trbVolume_ValueChanged" Background="#FFF2EFF3"/>
        <Label Content="语速" HorizontalAlignment="Left" Margin="350,19,0,0" VerticalAlignment="Top" Width="35" />
        <Label Content="音量" HorizontalAlignment="Left" Margin="418,19,0,0" VerticalAlignment="Top" Width="35"/>

    </Grid>
</Window>

2.功能代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

using DotNetSpeech;//cs文件中引入库

namespace WpfSpeechDemo
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        SpVoice speech = new SpVoice();
        int speechRate = 0;
        int volume = 70;
        public MainWindow()
        {
            InitializeComponent();
            init();
        }

        private void init()
        {
            //初始化语音引擎列表
            foreach (ISpeechObjectToken Token in speech.GetVoices(string.Empty, string.Empty))
            {
                cmbVoices.Items.Add(Token.GetDescription(49));
            }
            //取得音频输出列表
            foreach (ISpeechObjectToken AudioOut in speech.GetAudioOutputs(string.Empty, string.Empty))
            {
                cmbAudioOut.Items.Add(AudioOut.GetDescription(49));
            }

            cmbVoices.SelectedIndex = 0;
            cmbAudioOut.SelectedIndex = 0;
            tbarRate.Value = speechRate;
            trbVolume.Value = volume;

        }

        private void tbarRate_Scroll(object sender, EventArgs e)
        {
            speech.Rate = (int)tbarRate.Value;
        }

        private void trbVolume_Scroll(object sender, EventArgs e)
        {
            speech.Volume = (int)trbVolume.Value;
        }

        private void cmbVoices_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            speech.Voice = speech.GetVoices(string.Empty, string.Empty).Item(cmbVoices.SelectedIndex);
        }

        private void cmbAudioOut_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            speech.AudioOutput = speech.GetAudioOutputs(string.Empty, string.Empty).Item(cmbAudioOut.SelectedIndex);
        }

        private void bt_speek_Click(object sender, EventArgs e)
        {
            //终止先前朗读,如果有
            speech.Speak(" ", SpeechVoiceSpeakFlags.SVSFlagsAsync);
            speech.Speak(tbspeech.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync);
        }

        private void bt_stop_Click(object sender, EventArgs e)
        {
            speech.Speak("", SpeechVoiceSpeakFlags.SVSFlagsAsync);
        }

        private void tbarRate_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            speech.Rate = (int)e.NewValue;
        }

        private void trbVolume_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            speech.Volume = (int)e.NewValue;
        }

    }
}

五 编译和运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值