| 
									
										
										
										
											2023-05-25 17:35:31 +08:00
										 |  |  | var Reader = (function() { | 
					
						
							|  |  |  |     let reader = window.speechSynthesis; | 
					
						
							|  |  |  |     let current_position = 0; | 
					
						
							|  |  |  |     let original_position = 0; | 
					
						
							|  |  |  |     let to_speak = ""; | 
					
						
							| 
									
										
										
										
											2024-06-22 09:04:25 +08:00
										 |  |  |     let current_rate = 1; // 添加这一行,设置默认速率为 1
 | 
					
						
							| 
									
										
										
										
											2023-05-25 17:35:31 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     function makeUtterance(str, rate) { | 
					
						
							|  |  |  |         let msg = new SpeechSynthesisUtterance(str); | 
					
						
							|  |  |  |         msg.rate = rate; | 
					
						
							|  |  |  |         msg.lang = "en-US"; | 
					
						
							|  |  |  |         msg.onboundary = ev => { | 
					
						
							| 
									
										
										
										
											2023-06-02 21:33:21 +08:00
										 |  |  |             if (ev.name === "word") { | 
					
						
							| 
									
										
										
										
											2023-05-25 17:35:31 +08:00
										 |  |  |                 current_position = ev.charIndex; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return msg; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function read(s, rate) { | 
					
						
							|  |  |  |         to_speak = s.toString(); | 
					
						
							|  |  |  |         original_position = 0; | 
					
						
							|  |  |  |         current_position = 0; | 
					
						
							|  |  |  |         let msg = makeUtterance(to_speak, rate); | 
					
						
							|  |  |  |         reader.speak(msg); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-22 09:04:25 +08:00
										 |  |  |     function updateRate(rate) { | 
					
						
							|  |  |  |         // 停止当前的朗读
 | 
					
						
							|  |  |  |         stopRead(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 更新当前速率
 | 
					
						
							|  |  |  |         current_rate = rate; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 重新开始朗读
 | 
					
						
							|  |  |  |         read(to_speak, current_rate); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-25 17:35:31 +08:00
										 |  |  |     function stopRead() { | 
					
						
							|  |  |  |         reader.cancel(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |         read: read, | 
					
						
							| 
									
										
										
										
											2024-06-22 09:04:25 +08:00
										 |  |  |         stopRead: stopRead, | 
					
						
							|  |  |  |         updateRate: updateRate // 添加这一行,将 updateRate 方法暴露出去
 | 
					
						
							| 
									
										
										
										
											2023-05-25 17:35:31 +08:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2023-06-02 21:33:21 +08:00
										 |  |  | }) (); |