以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  语音朗读问题! sp.speak只能执行一次?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=87686)

--  作者:ycwk
--  发布时间:2016/7/17 10:03:00
--  语音朗读问题! sp.speak只能执行一次?
\'符合条件的有两行,执行循环的时候, audio.play可以听到两遍,但是sp.speak的内容只能听到一遍,不知何故?

Dim drs As List(of DataRow) = DataTables("自助报障记录表").Select("问题描述 is not null and (问题处理状态<>\'已解决\' or 问题处理状态 is null)")
  \'   MessageBox.Show(drs.Count)
     
     For Each dr As DataRow In drs
            

               \'语音播报增加行的内容
                 Dim sp As new DotNetSpeech.SpVoice()
                 For Each v As object In sp.getVoices          \'用for each循环找到名称包含 Lily的语音库 
                    If v.GetDescription Like "*LiLy*" Then                        
                       sp.Voice  = v
                       Exit For
                    End If
                 Next

                 Audio.play("Voice\\新报障信息提示音.wav",AudioPlayMode.WaitToComplete)          \'可听到两次
                 \'sp.Speak("有新的报障消息到达,请注意及时处理.", DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)     \'同步
                 sp.Speak("有新的报障消息到达,请注意及时处理",DotNetSpeech.SpeechVoiceSpeakFlags.SVSFDefault)    \'异步  不能进行其它操作     \'只能听到一次,不知何故

      Next
[此贴子已经被作者于2016/7/17 16:55:09编辑过]

--  作者:狐狸爸爸
--  发布时间:2016/7/18 8:53:00
--  
 我测试没有问题:

Dim sp As New DotNetSpeech.SpVoice()
sp.Speak("I am from china.", DotNetSpeech.SpeechVoiceSpeakFlags.SVSFDefault)
sp.Speak("I am from china.", DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)


--  作者:ycwk
--  发布时间:2016/7/18 11:26:00
--  
我的意思是,wav可以听到两次,但是   “有新的报障消息到达,请注意及时处理”   只能听到一次!  明明有两行符合循环条件的。很奇怪, 

Audio.play("Voice\\新报障信息提示音.wav",AudioPlayMode.WaitToComplete)          \'可听到两次
 sp.Speak("有新的报障消息到达,请注意及时处理",DotNetSpeech.SpeechVoiceSpeakFlags.SVSFDefault)    \'异步  不能进行其它操作     \'只能听到一次,不知何故


1
     新报障信息提示音.wav 
2     
     有新的报障消息到达,请注意及时处理
      新报障信息提示音.wav 
4    
     此处应该播 "有新的报障消息到达,请注意及时处理"  ,但实际没有声音

     我在想是不是sp.speak资源被占用,没有及时释放? 导致两次播放sp.speak的时间太近,被占用,所以第二遍播不出来?
[此贴子已经被作者于2016/7/18 11:30:43编辑过]

--  作者:Hyphen
--  发布时间:2016/7/18 11:47:00
--  
测试没有问题

Dim sp As New DotNetSpeech.SpVoice()
For I As Integer = 1 To 2
    \'sp.Speak("I am from china.I am from china.I am from china.I am from china.I am from china.", DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)
    sp.Speak("我的意思是,wav可以听到两次,",DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)
Next

上传例子看看

--  作者:ycwk
--  发布时间:2016/7/18 13:03:00
--  
ok了,一时手快,把sp定义写在了循环里面,不好意思,麻烦大家半天。
[此贴子已经被作者于2016/7/18 13:30:04编辑过]

--  作者:ycwk
--  发布时间:2016/7/18 13:32:00
--  
顺便问下周,我用计划任务每 120秒检查一下有没有新的消息,发现程序界面在那几秒钟会变的很卡,莫非计划任务比较消耗资源?    


\'注意此代码只能一个人开启
\'Dim drs As List(of DataRow) =DataTables("自助报障记录表").Select("[问题处理状态]<>\'已完成\' and [问题描述] is not null")
\'MessageBox.Show(drs.Count)


\'语音播报增加行的内容
                 Dim sp As new DotNetSpeech.SpVoice()
                 For Each v As object In sp.getVoices          \'用for each循环找到名称包含 Lily的语音库 
                    If v.GetDescription Like "*LiLy*" Then                        
                       sp.Voice  = v
                       Exit For
                    End If
                 Next

Dim drs As List(of DataRow) = DataTables("自助报障记录表").Select("问题描述 is not null and (问题处理状态<>\'已解决\' or 问题处理状态 is null)")
  \'   MessageBox.Show(drs.Count)
     
     For Each dr As DataRow In drs
            
                 Audio.play("Voice\\新报障信息提示音.wav",AudioPlayMode.WaitToComplete)
                 \'sp.Speak("有新的报障消息到达,请注意及时处理.", DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)     \'同步
                 sp.Speak("有新的报障消息到达,请注意及时处理",DotNetSpeech.SpeechVoiceSpeakFlags.SVSFDefault)    \'异步  不能进行其它操作


      Next

--  作者:Hyphen
--  发布时间:2016/7/18 14:18:00
--  
1、可能是调用语音引擎导致停顿

2、如果查询的数据量大,可以考虑分批处理,一次查10条,处理完在继续

--  作者:ycwk
--  发布时间:2016/7/18 16:12:00
--  
是的,在播放的时候啥也不能干,我的目的是让wav 和 sp.speak播放完毕,两段声音不要重叠,所以选择了异步。但是这样导致播放语音期间我的程序卡死,不能动了。

sp.speak 读的时候,如何知道读取结束了?  用延时肯定不行,因为内容可能会变化,播放时长可长可短!
[此贴子已经被作者于2016/7/18 16:18:42编辑过]

--  作者:大红袍
--  发布时间:2016/7/19 1:02:00
--  

 参考

 

下载信息  [文件大小:340.0 KB  下载次数:15]
图片点击可在新窗口打开查看点击浏览该文件:异步语音小例.table