{"id":145,"date":"2011-01-08T14:59:55","date_gmt":"2011-01-08T14:59:55","guid":{"rendered":"2b24d495052a8ce66358eb576b8912c8"},"modified":"2011-01-08T14:59:55","modified_gmt":"2011-01-08T14:59:55","slug":"","status":"publish","type":"post","link":"https:\/\/www.xiaobo.li\/notes\/archives\/145","title":{"rendered":"C#3.0\u57fa\u4e8eSpeech.Synthesis\u8c03\u6574\u8bed\u97f3\u6717\u8bfb\u8bed\u8c03\u8303\u4f8b"},"content":{"rendered":"<p>using System;<br \/>using System.Speech.Synthesis;<br \/>namespace Speech_Synthesis<br \/>{<br \/>&nbsp;&nbsp;&nbsp; public partial class Window1 : System.Windows.Window<br \/>&nbsp;&nbsp;&nbsp; {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Window1()<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitializeComponent();<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SpeechSynthesizer synthesizer = new SpeechSynthesizer();<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PromptBuilder promptBuilder = new PromptBuilder();<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.AppendTextWithHint(&quot;\u5c39\u6210&quot;, SayAs.SpellOut);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.AppendText(&quot;\u5c39\u6210\u5927\u54e5\u6bd5\u4e1a\u4e8e\u5c71\u4e1c\u5927\u5b66.&quot;);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.AppendBreak(new TimeSpan(0, 0, 2));<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.AppendText(&quot;\u5c39\u6210\u5927\u54e5\u662f\u8c01&quot;);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.AppendTextWithHint(DateTime.Now.ToString(&quot;hh:mm&quot;), SayAs.Time);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Pause for 2 seconds<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.AppendBreak(new TimeSpan(0, 0, 2));<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.AppendText(&quot;\u5c39\u6210\u5927\u54e5\u7855\u58eb\u6bd5\u4e1a\u4e8e\u4e2d\u79d1\u9662?&quot;);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.StartVoice(&quot;Microsoft Sam&quot;);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.AppendTextWithHint(&quot;queue&quot;, SayAs.SpellOut);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.EndVoice();<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.AppendText(&quot;Do it faster!&quot;);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.StartVoice(&quot;Microsoft Sam&quot;);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.StartStyle(new PromptStyle(PromptRate.ExtraFast));<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.AppendTextWithHint(&quot;queue&quot;, SayAs.SpellOut);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.EndStyle();<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptBuilder.EndVoice();<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Speak all the content in the PromptBuilder<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synthesizer.SpeakAsync(promptBuilder);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp; }<br \/>}<\/p>\n<p>--------------------------------------------------------------<\/p>\n<p><span style=\"font-family: \u5b8b\u4f53\">\u8bed\u97f3\u5408\u6210<\/span>\n<\/p>\n<p>1<span style=\"font-family: \u5b8b\u4f53\">\u3001\u4f7f\u7528\u8bed\u97f3\u5408\u6210<\/span>\n<\/p>\n<p align=\"left\" style=\"text-indent: 21pt; text-align: left\"><span style=\"color: #2b91af; font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; speechsynthesizer<\/span><br \/>\n<span style=\"font-family: \u65b0\u5b8b\u4f53\"> synth = <span style=\"color: blue\">new<\/span><br \/>\n <span style=\"color: #2b91af\">speechsynthesizer<\/span><br \/>\n();<\/span>\n<\/p>\n<p align=\"left\">&nbsp;<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: green\">\/\/<\/span><br \/>\n<\/span><br \/>\n<span style=\"color: green; font-family: \u65b0\u5b8b\u4f53\">\u83b7\u53d6\u672c\u673a\u4e0a\u6240\u5b89\u88c5\u7684\u6240\u6709\u7684voice\u7684\u540d\u79f0<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: blue\">string<\/span><br \/>\n voicestring = <span style=\"color: #a31515\">&quot;&quot;<\/span><br \/>\n;<\/span>\n<\/p>\n<p align=\"left\">&nbsp;<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: blue\">foreach<\/span><br \/>\n (<span style=\"color: #2b91af\">installedvoice<\/span><br \/>\n iv <span style=\"color: blue\">in<\/span><br \/>\n synth.getinstalledvoices())<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; voicestring += iv.voiceinfo.name + <span style=\"color: #a31515\">&quot;,&quot;<\/span><br \/>\n;<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/span>\n<\/p>\n<p align=\"left\">&nbsp;<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: green\">\/\/<\/span><br \/>\n<\/span><br \/>\n<span style=\"color: green; font-family: \u65b0\u5b8b\u4f53\">\u6839\u636evoice\u7684name\u5c5e\u6027\u786e\u5b9a\u8981\u4f7f\u7528\u7684voice<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synth.selectvoice(<span style=\"color: #a31515\">&quot;vw lily&quot;<\/span><br \/>\n);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: green\">\/\/<\/span><br \/>\n<\/span><br \/>\n<span style=\"color: green; font-family: \u65b0\u5b8b\u4f53\">\u6839\u636e\u6587\u5b57\u5185\u5bb9\u5408\u6210\u8bed\u97f3<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synth.speak(<span style=\"color: blue\">this<\/span><br \/>\n.textbox1.text);<\/span>\n<\/p>\n<p><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synth.speak(<span style=\"color: #a31515\">&quot;<\/span><br \/>\n<\/span><br \/>\n<span style=\"color: #a31515; font-family: \u65b0\u5b8b\u4f53\">\u4e2d\u534e\u4eba\u6c11\u5171\u548c\u56fd\u6e56\u5317\u7701&quot;<\/span><br \/>\n<span style=\"font-family: \u65b0\u5b8b\u4f53\">); <\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">2<\/span><br \/>\n<span style=\"font-family: \u65b0\u5b8b\u4f53\">\u3001<span style=\"color: green\">\u6784\u5efassml<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: #2b91af\">promptbuilder<\/span><br \/>\n myprompt = <span style=\"color: blue\">new<\/span><br \/>\n <span style=\"color: #2b91af\">promptbuilder<\/span><br \/>\n();<\/span>\n<\/p>\n<p align=\"left\">&nbsp;<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: green\">\/\/start the main speaking style<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: #2b91af\">promptstyle<\/span><br \/>\n mainstyle = <span style=\"color: blue\">new<\/span><br \/>\n <span style=\"color: #2b91af\">promptstyle<\/span><br \/>\n();<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mainstyle.rate = <span style=\"color: #2b91af\">promptrate<\/span><br \/>\n.medium;<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mainstyle.volume = <span style=\"color: #2b91af\">promptvolume<\/span><br \/>\n.loud;<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myprompt.startstyle(mainstyle);<\/span>\n<\/p>\n<p align=\"left\">&nbsp;<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: green\">\/\/alert the listener<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myprompt.appendaudio(<span style=\"color: blue\">new<\/span><br \/>\n <span style=\"color: #2b91af\">uri<\/span><br \/>\n(<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: #a31515\">&quot;file:\/\/c:&quot;&quot;windows&quot;&quot;media&quot;&quot;notify.wav&quot;<\/span><br \/>\n), <span style=\"color: #a31515\">&quot;attention!&quot;<\/span><br \/>\n);&nbsp;&nbsp; <span style=\"color: green\">\/\/appendaudio <\/span><br \/>\n<\/span><br \/>\n<span style=\"color: green; font-family: \u65b0\u5b8b\u4f53\">\u529f\u80fd\u4f7f wav \u6587\u4ef6\u4e0e\u8f93\u51fa\u7ed3\u5408\uff0c<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: green\">\/\/<\/span><br \/>\n<\/span><br \/>\n<span style=\"color: green; font-family: \u65b0\u5b8b\u4f53\">\u5047\u5982\u672a\u627e\u5230 wav \u6587\u4ef6\uff0c\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e2a\u7b49\u6548\u6587\u672c\u6587\u4ef6\uff0c\u5373\u7b2c\u4e8c\u4e2a\u53c2\u6570<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myprompt.appendtext(<span style=\"color: #a31515\">&quot;here are some important messages.&quot;<\/span><br \/>\n);<\/span>\n<\/p>\n<p align=\"left\">&nbsp;<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: green\">\/\/here&#39;s the first important message<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myprompt.appendtextwithpronunciation(<span style=\"color: #a31515\">&quot;winfx&quot;<\/span><br \/>\n, <span style=\"color: #a31515\">&quot;w<\/span><br \/>\n<\/span><br \/>\n<span style=\"color: #a31515; font-family: 'ms mincho'\">?<\/span><br \/>\n<span style=\"color: #a31515; font-family: \u65b0\u5b8b\u4f53\">n<\/span><br \/>\n<span style=\"color: #a31515; font-family: 'ms mincho'\">?<\/span><br \/>\n<span style=\"color: #a31515; font-family: \u65b0\u5b8b\u4f53\">f<\/span><br \/>\n<span style=\"color: #a31515; font-family: 'ms mincho'\">?<\/span><br \/>\n<span style=\"color: #a31515; font-family: \u65b0\u5b8b\u4f53\">ks&quot;<\/span><br \/>\n<span style=\"font-family: \u65b0\u5b8b\u4f53\">); <span style=\"color: green\">\/\/appendtextwithpronunciation <\/span><br \/>\n<\/span><br \/>\n<span style=\"color: green; font-family: \u65b0\u5b8b\u4f53\">\u529f\u80fd\u7b54\u5e94\u60a8\u6307\u5b9a\u5355\u8bcd\u7684\u6b63\u786e\u53d1\u97f3<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myprompt.appendtext(<span style=\"color: #a31515\">&quot;is a great platform.&quot;<\/span><br \/>\n);<\/span>\n<\/p>\n<p align=\"left\">&nbsp;<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: green\">\/\/and the second one<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myprompt.appendtextwithhint(<span style=\"color: #a31515\">&quot;asp&quot;<\/span><br \/>\n, <span style=\"color: #2b91af\">sayas<\/span><br \/>\n.spellout); <span style=\"color: green\">\/\/ appendtextwithhint <\/span><br \/>\n<\/span><br \/>\n<span style=\"color: green; font-family: \u65b0\u5b8b\u4f53\">\u529f\u80fd\u4e3a\u7f29\u5199\u8bcd\u4f5c\u6807\u8bb0<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: green\">\/\/sayas<\/span><br \/>\n<\/span><br \/>\n<span style=\"color: green; font-family: \u65b0\u5b8b\u4f53\">\u679a\u4e3e\u503c\u4e3e\u4f8b\uff1a sayas.numberordinal sayas.daymonth sayas.spellout sayas.telephone sayas.text sayas.time24\u7b49<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myprompt.appendtext(<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: #a31515\">&quot;is an acronym for active server pages. whereas an asp is a snake.&quot;<\/span><br \/>\n);<\/span>\n<\/p>\n<p align=\"left\">&nbsp;<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myprompt.appendbreak();<\/span>\n<\/p>\n<p align=\"left\">&nbsp;<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: green\">\/\/let&#39;s emphasise how important these messages are<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: #2b91af\">promptstyle<\/span><br \/>\n interimstyle = <span style=\"color: blue\">new<\/span><br \/>\n <span style=\"color: #2b91af\">promptstyle<\/span><br \/>\n();<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; interimstyle.emphasis = <span style=\"color: #2b91af\">promptemphasis<\/span><br \/>\n.strong;<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myprompt.startstyle(interimstyle);<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myprompt.appendtext(<span style=\"color: #a31515\">&quot;please remember these two things.&quot;<\/span><br \/>\n);<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myprompt.endstyle();<\/span>\n<\/p>\n<p align=\"left\">&nbsp;<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: green\">\/\/then we can revert to the main speaking style<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myprompt.appendbreak();<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myprompt.appendtext(<span style=\"color: #a31515\">&quot;thank you&quot;<\/span><br \/>\n);<\/span>\n<\/p>\n<p align=\"left\">&nbsp;<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myprompt.endstyle();<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: green\">\/\/now let&#39;s get the synthesizer to render this message<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: #2b91af\">speechsynthesizer<\/span><br \/>\n synth = <span style=\"color: blue\">new<\/span><br \/>\n <span style=\"color: #2b91af\">speechsynthesizer<\/span><br \/>\n();<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synth.selectvoice(<span style=\"color: #a31515\">&quot;vw lily&quot;<\/span><br \/>\n);<\/span>\n<\/p>\n<p><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synth.speakasync(myprompt);&nbsp;<span style=\"color: green\">\/\/<\/span><br \/>\n<\/span><br \/>\n<span style=\"color: green; font-family: \u65b0\u5b8b\u4f53\">\u4e0espeak\u4e0d\u540c\u7684\u5f02\u6b65\u65b9\u6cd5<\/span><br \/>\n<span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;<\/span>\n<\/p>\n<p>&nbsp;<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">3<\/span><br \/>\n<span style=\"font-family: \u65b0\u5b8b\u4f53\">\u3001<span style=\"color: green\">\u5c06\u6784\u5efa\u7684ssml\u4fdd\u5b58\u5728ssml\u6587\u4ef6\u4e2d<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"color: blue\">using<\/span><br \/>\n (<span style=\"color: #2b91af\">streamwriter<\/span><br \/>\n promptwriter = <span style=\"color: blue\">new<\/span><br \/>\n <span style=\"color: #2b91af\">streamwriter<\/span><br \/>\n(<span style=\"color: #a31515\">&quot;c:&quot;&quot;prompt.ssml&quot;<\/span><br \/>\n))<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; promptwriter.write(myprompt.toxml());<\/span>\n<\/p>\n<p><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">4<\/span><br \/>\n<span style=\"font-family: \u65b0\u5b8b\u4f53\">\u3001<span style=\"color: green\">\u5c06\u6784\u5efa\u7684\u8bed\u97f3\u4fdd\u5b58\u4e3a\u4e00\u4e2awav\u6587\u4ef6\u4e2d<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\"><span style=\"color: green; font-family: \u65b0\u5b8b\u4f53\">\/\/<\/span><br \/>\n<span style=\"color: green; font-family: \u65b0\u5b8b\u4f53\">\u82e5\u524d\u9762\u4f7f\u7528\u4e86speakasync\u65b9\u6cd5\uff0c\u5219\u4e0d\u80fd\u8f93\u51fa\u4e3awav\u6587\u4ef6\u3002<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: green\">\/\/<\/span><br \/>\n<\/span><br \/>\n<span style=\"color: green; font-family: \u65b0\u5b8b\u4f53\">\u5fc5\u987b\u7b49\u5230\u8bed\u97f3\u64ad\u5b8c\u540e\u624d\u80fd\u8f93\u51fa<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synth.setoutputtowavefile(<span style=\"color: #a31515\">&quot;c:&quot;&quot;message.wav&quot;<\/span><br \/>\n);<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synth.speak(myprompt);<\/span>\n<\/p>\n<p><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synth.setoutputtonull();<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">5<\/span><br \/>\n<span style=\"font-family: \u65b0\u5b8b\u4f53\">\u3001<span style=\"color: green\">\u6839\u636essml\u6587\u4ef6\u4e2d\u4fdd\u5b58\u7684\u4fe1\u606f\u8fd8\u539f\u4e3a\u8bed\u97f3<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: #2b91af\">speechsynthesizer<\/span><br \/>\n synth = <span style=\"color: blue\">new<\/span><br \/>\n <span style=\"color: #2b91af\">speechsynthesizer<\/span><br \/>\n();<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: #2b91af\">promptbuilder<\/span><br \/>\n savedprompt = <span style=\"color: blue\">new<\/span><br \/>\n <span style=\"color: #2b91af\">promptbuilder<\/span><br \/>\n();<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; savedprompt.appendssml(<span style=\"color: #a31515\">&quot;c:&quot;&quot;prompt.ssml&quot;<\/span><br \/>\n);<\/span>\n<\/p>\n<p align=\"left\"><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synth.selectvoice(<span style=\"color: #a31515\">&quot;vw lily&quot;<\/span><br \/>\n);<\/span>\n<\/p>\n<p><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synth.speak(savedprompt);<\/span>\n<\/p>\n<p><span style=\"font-family: \u65b0\u5b8b\u4f53\">&nbsp;<\/span>\n<\/p>\n<p align=\"left\" class=\"msonormal\" style=\"margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none\"><span style=\"font-family: \u65b0\u5b8b\u4f53\"><span lang=\"en-us\" style=\"font-family: \u65b0\u5b8b\u4f53; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt; mso-no-proof: yes\">6<\/span><br \/>\n<span style=\"font-family: \u65b0\u5b8b\u4f53; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt; mso-no-proof: yes\">\u3001<\/span><br \/>\n<span style=\"font-size: 9pt; color: green; font-family: \u65b0\u5b8b\u4f53; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt; mso-no-proof: yes\">\u901a\u8fc7\u8bed\u97f3\u8fdb\u5ea6\u4e8b\u4ef6\u9ad8\u5149\u663e\u793a\u6b63\u5728\u9605\u8bfb\u7684\u6587\u672c\u4f4d\u7f6e<span lang=\"en-us\"><o:p><\/o:p><br \/>\n<\/span><br \/>\n<\/span><br \/>\n<\/span>\n<\/p>\n<p class=\"msonormal\" style=\"margin: 0cm 0cm 0pt\"><span style=\"font-family: \u65b0\u5b8b\u4f53\"><span lang=\"en-us\" style=\"font-size: 9pt; font-family: \u65b0\u5b8b\u4f53; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt; mso-no-proof: yes\"><span style=\"mso-spacerun: yes\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br \/>\n<span style=\"color: #2b91af\">speechsynthesizer<\/span><br \/>\n synth = <span style=\"color: blue\">new<\/span><br \/>\n <span style=\"color: #2b91af\">speechsynthesizer<\/span><br \/>\n();<o:p><\/o:p><br \/>\n<\/span><br \/>\n<\/span>\n<\/p>\n<p class=\"msonormal\" style=\"margin: 0cm 0cm 0pt\"><span style=\"font-family: \u65b0\u5b8b\u4f53\"><span lang=\"en-us\" style=\"font-size: 9pt; font-family: \u65b0\u5b8b\u4f53; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt; mso-no-proof: yes\"><span style=\"mso-spacerun: yes\">&nbsp;<\/span><br \/>\nsynth.speakprogress += <span style=\"color: blue\">new<\/span><br \/>\n <span style=\"color: #2b91af\">eventhandler<\/span><br \/>\n&lt;<span style=\"color: #2b91af\">speakprogresseventargs<\/span><br \/>\n&gt;(synth_speakprogress);<o:p><\/o:p><br \/>\n<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\" class=\"msonormal\" style=\"margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none\"><span style=\"font-family: \u65b0\u5b8b\u4f53\"><span lang=\"en-us\" style=\"font-size: 9pt; color: blue; font-family: \u65b0\u5b8b\u4f53; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt; mso-no-proof: yes\">void<\/span><br \/>\n<span lang=\"en-us\" style=\"font-size: 9pt; font-family: \u65b0\u5b8b\u4f53; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt; mso-no-proof: yes\"> synth_speakprogress(<span style=\"color: blue\">object<\/span><br \/>\n sender, <span style=\"color: #2b91af\">speakprogresseventargs<\/span><br \/>\n e)<o:p><\/o:p><br \/>\n<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\" class=\"msonormal\" style=\"margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none\"><span style=\"font-family: \u65b0\u5b8b\u4f53\"><span lang=\"en-us\" style=\"font-size: 9pt; font-family: \u65b0\u5b8b\u4f53; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt; mso-no-proof: yes\"><span style=\"mso-spacerun: yes\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br \/>\n{<o:p><\/o:p><br \/>\n<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\" class=\"msonormal\" style=\"margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none\"><span style=\"font-family: \u65b0\u5b8b\u4f53\"><span lang=\"en-us\" style=\"font-size: 9pt; font-family: \u65b0\u5b8b\u4f53; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt; mso-no-proof: yes\"><span style=\"mso-spacerun: yes\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br \/>\n<span style=\"color: blue\">this<\/span><br \/>\n.textbox1.hideselection = <span style=\"color: blue\">false<\/span><br \/>\n;<span style=\"mso-spacerun: yes\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br \/>\n<o:p><\/o:p><br \/>\n<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\" class=\"msonormal\" style=\"margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none\"><span style=\"font-family: \u65b0\u5b8b\u4f53\"><span lang=\"en-us\" style=\"font-size: 9pt; font-family: \u65b0\u5b8b\u4f53; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt; mso-no-proof: yes\"><span style=\"mso-spacerun: yes\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br \/>\n<span style=\"color: blue\">this<\/span><br \/>\n.textbox1.select(e.characterposition,e.charactercount );<o:p><\/o:p><br \/>\n<\/span><br \/>\n<\/span>\n<\/p>\n<p align=\"left\" class=\"msonormal\" style=\"margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none\"><span style=\"font-family: \u65b0\u5b8b\u4f53\"><span lang=\"en-us\" style=\"font-size: 9pt; font-family: \u65b0\u5b8b\u4f53; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt; mso-no-proof: yes\"><span style=\"mso-spacerun: yes\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br \/>\n}<\/span><br \/>\n<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>using System;<br \/>using System.Speech.Synthesis;<br \/>namespace Speech_Synthesis<br \/>{<br \/>&nbsp;&nbsp;&nbsp; public partial class Window1 : System.Windows.Window<br \/>&nbsp;&nbsp;&nbsp; {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Window1()<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitializeComponent();<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SpeechSynthesizer synthesizer = new SpeechSynthesizer();<br \/>&nbsp;&nbsp;&nbsp;&nbsp;...<\/p>\n<p> <a href=\"https:\/\/www.xiaobo.li\/notes\/archives\/145\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[273],"tags":[16,49,54,53],"class_list":["post-145","post","type-post","status-publish","format-standard","hentry","category-article","tag-C","tag-DotNet","tag-Speech","tag-TTS"],"_links":{"self":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts\/145","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/comments?post=145"}],"version-history":[{"count":0,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts\/145\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/media?parent=145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/categories?post=145"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/tags?post=145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}