附图和源代码
使用时,请确认电脑喇叭打开,并且不是静音额。
1.vs2012开发平台
2.微软的语音软件库
下载:http://download.csdn.net/detail/wyx100/8431269 (含实例项目源代码)
制作一个语音软件,可以朗读文字;
多个语音库:男音和女音、支持英文和中文朗读;
支持选择播放设备
支持朗读语速选择
支持音量选择
1.新建WpfSpeechDemo工程
文件(vs开发平台左上角)----新建(快捷方式 Ctrl+Shift+New)
2.导入微软语音库
3.建立软件界面
见开始 效果展示
4.软件功能开发
支持语音库选择
支持选择播放设备
支持朗读语速选择
支持音量选择
1.界面代码
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
{
///
/// MainWindow.xaml 的交互逻辑
///
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 e)
{
speech.Rate = (int)e.NewValue;
}
private void trbVolume_ValueChanged(object sender, RoutedPropertyChangedEventArgs e)
{
speech.Volume = (int)e.NewValue;
}
}
}