语音朗读帮助类

network | | 访问(45)
/// <summary>
/// 语音朗读帮助类
/// </summary>
public class SpeakHelper {
    SpeechSynthesizer speech = null;

    // 朗读
    public void SpeakAsync(string text) {
        speech = new SpeechSynthesizer();
        //en-US zh-CN
        VoiceInformation vi = InstalledVoices.All.Where(v = >v.Language == "zh-CN" && v.Gender == VoiceGender.Male).FirstOrDefault();
        speech.SetVoice(vi);
        speech.SpeakTextAsync(text);
    }

    // 停止
    public void Stop() {
        if (speech != null) {
            speech.Dispose();
        }
    }

}

关闭语音时,需要注意的地方:

using System;
using System.Net;
using System.Windows;

public partial class Details: PhoneApplicationPage {

    SpeakHelper sh = new SpeakHelper();
    bool isSpeak = false; // 标识想着语音朗读的状态,false未朗读,true朗读;
    public Details() {
        InitializeComponent();
        this.BackKeyPress += MainPage_BackKeyPress; // 当按下硬件“返回”按钮时发生。
    }

    // 朗读 点一下朗读,再点一下停止
    void btnReading_Click(object sender, EventArgs e) {
        if (!isSpeak) {
            sh.SpeakAsync("你好,我是Ject。");
            isSpeak = true;
        } else {
            sh.Stop();
            isSpeak = false;
        }
    }

    // 按下返回键,关闭声音
    private void MainPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) {
        if (isSpeak) {
            sh.Stop(); // 关闭当前语音对象
        }
    }

    // 上一篇
    void btnPrevious_Click(object sender, EventArgs e) {
        if (isSpeak) {
            sh.Stop(); // 关闭当前语音对象
        }
        NavigationService.Navigate(new Uri("上一篇的URL", UriKind.Relative));
    }

    // 下一篇
    void btnNext_Click(object sender, EventArgs e) {
        if (isSpeak) {
            sh.Stop(); // 关闭当前语音对象
        }
        NavigationService.Navigate(new Uri("下一篇的URL", UriKind.Relative));
    }

    // 返回到首页
    void btnHome_Click(object sender, EventArgs e) {
        if (isSpeak) {
            sh.Stop(); // 关闭当前语音对象
        }
        NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
    }

}