WPF开发txt阅读器9:语音播放及其进度监控

news/2024/11/24 1:10:09/

文章目录

    • 播放进度
    • 光标跟踪
    • 进度条

txt阅读器系列:

  • 需求分析和文件读写
  • 目录提取类💎列表控件与目录
  • 字体控件绑定💎前景/背景颜色
  • 书籍管理系统💎用树形图管理书籍
  • 语音播放

播放进度

SpeechSynthesizer对象可以注册Speech_SpeakProgress事件,当被触发时,可以返回当前的阅读进度,每次新建speech之后,可以绑定。下面稍做测试

private void txtChange(string text)
{txt.Text = text;speech = new SpeechSynthesizer();speech.SpeakProgress += Speech_SpeakProgress;
}
private void Speech_SpeakProgress(object? sender, SpeakProgressEventArgs e)
{Dispatcher.Invoke(() => { txtInfo.Text = $"{e.Text}, {e.CharacterPosition}, {e.AudioPosition}"; });
}

由于需要调用窗口对象,所以用到了Dispatcher.Invoke函数。

其中,e.Text表示当前朗读的单词;e.CharacterPosition表示当前朗读字符所在位置;e.AudioPosition表示当前播放时间,其效果如下

在这里插入图片描述

光标跟踪

既然能够反馈文本位置,就可以设置更多的功能,比如快速定位当前阅读位置,将Speech_SpeakProgress内容改为

private void Speech_SpeakProgress(object? sender, SpeakProgressEventArgs e)
{Dispatcher.Invoke(() => {txt.CaretIndex = e.CharacterPosition;txt.SelectionStart = e.CharacterPosition;txt.SelectionLength = e.Text.Length;});
}

其中,CaretIndex用于控制滚动条随着光标移动;txt.SelectionStart控制被选中文本的起始点;Txt.SelectionLength表示选中文本的长度。

但仅仅是这样还不够,尽管我们选中了文本,但txt控件并不是窗口的焦点,所以窗口会认为我们没在关注txt,所以并不会展示选区的变化。所以,在speechTask运行前后,需要添加一行txt.Focus,从而结果如下

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-17V3tIE9-1685763546165)(csharp/wpf_txt_12.gif)]

进度条

如果觉得文字的表现力不够,还可以再加一个进度条,其xaml代码写在txt前面,内容如下

<ProgressBar DockPanel.Dock="Bottom" x:Name="pgBarText" Height="2"/>

然后在Speech_SpeakProgressDispatcher中添加进度条调控的代码,修改之后内容如下

private void Speech_SpeakProgress(object? sender, SpeakProgressEventArgs e)
{Dispatcher.Invoke(() => {txt.CaretIndex = e.CharacterPosition;txt.SelectionStart = e.CharacterPosition;txt.SelectionLength = e.Text.Length;pgBarText.Value = 100.0 * e.CharacterPosition / txt.Text.Length;});
}

其中新添加的这行就用于调控进度条,进度条最大值为100,所以用100.0乘上当前阅读的进度。


http://www.ppmy.cn/news/377528.html

相关文章

【电脑使用】利用diskpart删除电脑的EFI分区

文章目录 前言问题描述问题解决扩展&#xff1a;测量磁盘读写速度1 win10自带工具2 第三方工具 前言 在Windows的磁盘管理中&#xff0c;往往会发现自己电脑的磁盘中莫名多了一些分区&#xff0c;有一些是系统分区&#xff08;一般不删&#xff09;&#xff0c;还有一些是还原分…

新电脑分盘分区

声明&#xff1a;本文转载自百度经验&#xff0c;原文链接为https://jingyan.baidu.com/album/f3e34a12f8aaf2f5eb653539.html 1.如图在‘我的电脑’右键选取‘管理 2.在弹出窗口选择“磁盘管理”&#xff0c;如图 3.选择D盘&#xff0c;右键选“压缩卷”。图示 4.在第三行“输…

电脑硬盘就一个c盘怎么分区,新电脑买回来只有一个c盘怎么分区

电脑硬盘就一个c盘怎么分区&#xff1f;为了方便存储数据&#xff0c;需要对磁盘分区那么&#xff0c;在本文中&#xff0c;易我小编将讲解电脑磁盘分区的实操方法。 一、Diskpart对C盘分区 在Windows操作系统中&#xff0c;Diskpart是命令提示符&#xff0c;可以实现创建分区…

电脑硬盘如何重新分区 ?教你两招磁盘分区方法

摘要&#xff1a;对于刚刚购买的电脑来说&#xff0c;有些厂商在装机的时候没有根据用户需求&#xff0c;就给硬盘随意分区了&#xff0c;有的分区划分的不是很合理&#xff0c;在使用过程中会遇到一些麻烦&#xff0c;那么电脑硬盘如何重新分区 &#xff1f;本文将给大家详细介…

有趣的图(三)(57)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 咱们之前分别学习了图的基本概念&#xff0c;和图的深度优先遍历算法dfs。 你学会了吗&#xff1f; 咱们今天要学…

恒电位仪设计

电路 学习内容 电路图设计 PCB绘制 硬件制作 Ardinuo代码

恒华科技300365

恒华科技300365 2021.12.02买入1000股 2021.12.06卖出 买入价为13.740 卖出价为12.290&#xff0c;亏损率为10.55% 短期趋势&#xff1a; 极度弱势行情中&#xff0c;投资者可暂时观望。 中期趋势&#xff1a; 有加速下跌的趋势。 长期趋势&#xff1a; 迄今为止&…

伺服电机恒扭矩与恒功率输出

恒扭矩应该是指速度增加时输出的扭矩不变而功率增大&#xff0c;不是指负载增加时输出的扭矩不变。 同样型号的伺服当然参数是一样的&#xff0c;但是你说的300W伺服就可能有多种型号&#xff0c;由功率不能决定最大输出扭矩&#xff0c;由型号来决定。仔细看下伺服的型号是不…