pb中如何调用微软语音引擎(tts)中的SpeakStream方法去读音乐文件。

时间:2022-01-19 18:39:27
如下是vbl例子,谁能给我翻译一下,尤其是在PB中如何调用SpeakStream去读一个MP3或WAV文件。谢谢
Option Explicit

Private M As SpeechLib.SpVoice      'M is a male voice
Private F As SpeechLib.SpVoice      'F is a female voice
Private S As SpeechLib.SpFileStream

Private Sub Command1_Click()

    'Build a local file path and open it as a stream
    Set S = New SpFileStream
    Call S.Open("C:\SpeakStream.wav", SSFMCreateForWrite, False)
    
    'Female voice speaks into the file stream and creates a WAV file
    Set F.AudioOutputStream = S
    F.Speak "cee : \ speak stream dot wave", SVSFNLPSpeakPunc
    S.Close
    
    'Male voice speaks female voice's stream
    Call S.Open("C:\SpeakStream.wav", , False)
    M.Speak "i will now demonstrate the speak stream method."
    M.SpeakStream S
    M.Speak "that sounded like " & F.Voice.GetDescription & ", but it was me."
    
End Sub

Private Sub Form_Load()

    'Create voices
    Set F = New SpVoice
    Set F.Voice = F.GetVoices("gender=female").Item(0)
    Set M = New SpVoice
    Set M.Voice = M.GetVoices("gender=male").Item(0)
    
End Sub


谢谢。

10 个解决方案

#1


//声明ole对象
oleobject M, F, S
//创建ole对象
M = CREATE OLEObject
IF M.ConnectToNewObject("SAPI.SpVoice") <> 0 THEN
    messagebox('调用错误','您可能还未安装语音库!')
    M.DisconnectObject()
    DESTROY M
end if

F = CREATE OLEObject
IF F.ConnectToNewObject("SAPI.SpVoice") <> 0 THEN
    messagebox('调用错误','您可能还未安装语音库!')
    F.DisconnectObject()
    DESTROY F
end if

S = CREATE OLEObject
IF S.ConnectToNewObject("SAPI.SpFileStream") <> 0 THEN
    messagebox('调用错误','您可能还未安装语音库!')
    S.DisconnectObject()
    DESTROY S
end if


//调用
constant ulong SSFMCreateForWrite = 3
S.Open(("C:\SpeakStream.wav", SSFMCreateForWrite, false)
F.AudioOutputStream = S
F.Speak("cee : \ speak stream dot wave")
S.Close()

#3


谢谢。请问楼上M.SpeakStream是调用电脑上一个音乐文件的吗?

#4


SpVoiceClass详解

属性

描述

AlertBoundary

取得或设置停顿分界线。

AllowAudioOutputFormatChangesOnNextSet

设置是否允许声音自动调整到合适状态以适应其音频输出。

AudioOutput

.取得或设置当前声音使用的的音频输出对象

AudioOutputStream

取得或设置当前声音使用的的音频输出流对象。

EventInterests

取得或设置当前声音返回的事件类型。

Priority

取得或设置声音的优先级。

Rate

取得或设置阅读的速度。

Status

返回一个ISpeechVoiceStatus 对象用于显示当前阅读和事件的状态

SynchronousSpeakTimeout

取得或设置一个时间间隔,用于标识多久未获得一个输出设备后,一个同步的Speak 和SpeakStream将终止,以毫秒计算。

Voice

取得或设置发音对象。

Volume

取得或设置声音的大小 。



方法

描述

DisplayUI

是否在控制面板中展示详细设置。

GetAudioOutputs

返回一个可用的音频输出标记。

GetVoices

返回一个可用的发音对象。

IsUISupported

决定是否能通过控制棉板的音频设置来控制。

Pause

暂停朗读。.

Resume

恢复暂停,继续播放。

Skip

在当前输入的文本流中向前或向后跳一定距离再播放。

Speak

阅读一个字符串。

SpeakCompleteEvent

得到一个朗读完毕的时间句柄

SpeakStream

朗读一个文本流或一个声音文件。

WaitUntilDone

阻塞进程,直到声音播放完毕或者超时。

#5


可连续播放的MP3播放器 http://download.csdn.net//detail/newease/1734161
pb 多媒体 声音 播放 wav http://download.csdn.net/detail/newease/3302554

#6


你贴出来的代码的意思是
先用女声朗读"cee : \ speak stream dot wave",并存储为本地文件"C:\SpeakStream.wav"

然后再用SpeakStream(S)打开文件"C:\SpeakStream.wav"
然后用男声朗读流文件M.SpeakStream(S)

#7


oleobject tts 
oleobject s
long ll_status

 tts = CREATE OLEObject
 ll_status = tts.ConnectToNewObject("SAPI.SpVoice")
  
 IF ll_status <> 0 THEN
  messagebox('调用错误','您可能还未安装语音库!')
  tts.DisconnectObject()
  DESTROY tts
 else
//  wf_ini()
 end if
 
s = CREATE OLEObject
IF S.ConnectToNewObject("SAPI.SpFileStream") <> 0 THEN
  messagebox('调用错误','您可能还未安装语音库!')  //SpFileStream
  S.DisconnectObject()
end if
long li_Ind
tts.speak(" ","2")
li_Index = ddlb_voice.SelectItem("Girl XiaoKun", 1)  //调用系统语音库(普通话)
ddlb_voice.selectitem( li_Index )//调用系统语音库(普通话)
 
tts.voice=tts.GetVoices.item(li_Index -1)
//调用
constant ulong SSFMCreateForWrite = 0
S.Open("F:\bus_try\bus_jp_yy\music\005.mp3",1 , false) //打开MP3文件流
tts.SpeakStream( s ,1)  //读出MP3音乐  ----可就是没有反应
--tts.SpeakStream( s ,1)  //不能读出MP3音乐 WHY ?
  DESTROY S
  DESTROY ttS

#8


原来SpeakStream( s ,1) //只能读.wav文件,不能读.MP3文件。切,不知道是否可以设置背景音乐?
知道的,能告诉一下吗?

#9


Mark and study

#10


学习ing

#1


//声明ole对象
oleobject M, F, S
//创建ole对象
M = CREATE OLEObject
IF M.ConnectToNewObject("SAPI.SpVoice") <> 0 THEN
    messagebox('调用错误','您可能还未安装语音库!')
    M.DisconnectObject()
    DESTROY M
end if

F = CREATE OLEObject
IF F.ConnectToNewObject("SAPI.SpVoice") <> 0 THEN
    messagebox('调用错误','您可能还未安装语音库!')
    F.DisconnectObject()
    DESTROY F
end if

S = CREATE OLEObject
IF S.ConnectToNewObject("SAPI.SpFileStream") <> 0 THEN
    messagebox('调用错误','您可能还未安装语音库!')
    S.DisconnectObject()
    DESTROY S
end if


//调用
constant ulong SSFMCreateForWrite = 3
S.Open(("C:\SpeakStream.wav", SSFMCreateForWrite, false)
F.AudioOutputStream = S
F.Speak("cee : \ speak stream dot wave")
S.Close()

#2


#3


谢谢。请问楼上M.SpeakStream是调用电脑上一个音乐文件的吗?

#4


SpVoiceClass详解

属性

描述

AlertBoundary

取得或设置停顿分界线。

AllowAudioOutputFormatChangesOnNextSet

设置是否允许声音自动调整到合适状态以适应其音频输出。

AudioOutput

.取得或设置当前声音使用的的音频输出对象

AudioOutputStream

取得或设置当前声音使用的的音频输出流对象。

EventInterests

取得或设置当前声音返回的事件类型。

Priority

取得或设置声音的优先级。

Rate

取得或设置阅读的速度。

Status

返回一个ISpeechVoiceStatus 对象用于显示当前阅读和事件的状态

SynchronousSpeakTimeout

取得或设置一个时间间隔,用于标识多久未获得一个输出设备后,一个同步的Speak 和SpeakStream将终止,以毫秒计算。

Voice

取得或设置发音对象。

Volume

取得或设置声音的大小 。



方法

描述

DisplayUI

是否在控制面板中展示详细设置。

GetAudioOutputs

返回一个可用的音频输出标记。

GetVoices

返回一个可用的发音对象。

IsUISupported

决定是否能通过控制棉板的音频设置来控制。

Pause

暂停朗读。.

Resume

恢复暂停,继续播放。

Skip

在当前输入的文本流中向前或向后跳一定距离再播放。

Speak

阅读一个字符串。

SpeakCompleteEvent

得到一个朗读完毕的时间句柄

SpeakStream

朗读一个文本流或一个声音文件。

WaitUntilDone

阻塞进程,直到声音播放完毕或者超时。

#5


可连续播放的MP3播放器 http://download.csdn.net//detail/newease/1734161
pb 多媒体 声音 播放 wav http://download.csdn.net/detail/newease/3302554

#6


你贴出来的代码的意思是
先用女声朗读"cee : \ speak stream dot wave",并存储为本地文件"C:\SpeakStream.wav"

然后再用SpeakStream(S)打开文件"C:\SpeakStream.wav"
然后用男声朗读流文件M.SpeakStream(S)

#7


oleobject tts 
oleobject s
long ll_status

 tts = CREATE OLEObject
 ll_status = tts.ConnectToNewObject("SAPI.SpVoice")
  
 IF ll_status <> 0 THEN
  messagebox('调用错误','您可能还未安装语音库!')
  tts.DisconnectObject()
  DESTROY tts
 else
//  wf_ini()
 end if
 
s = CREATE OLEObject
IF S.ConnectToNewObject("SAPI.SpFileStream") <> 0 THEN
  messagebox('调用错误','您可能还未安装语音库!')  //SpFileStream
  S.DisconnectObject()
end if
long li_Ind
tts.speak(" ","2")
li_Index = ddlb_voice.SelectItem("Girl XiaoKun", 1)  //调用系统语音库(普通话)
ddlb_voice.selectitem( li_Index )//调用系统语音库(普通话)
 
tts.voice=tts.GetVoices.item(li_Index -1)
//调用
constant ulong SSFMCreateForWrite = 0
S.Open("F:\bus_try\bus_jp_yy\music\005.mp3",1 , false) //打开MP3文件流
tts.SpeakStream( s ,1)  //读出MP3音乐  ----可就是没有反应
--tts.SpeakStream( s ,1)  //不能读出MP3音乐 WHY ?
  DESTROY S
  DESTROY ttS

#8


原来SpeakStream( s ,1) //只能读.wav文件,不能读.MP3文件。切,不知道是否可以设置背景音乐?
知道的,能告诉一下吗?

#9


Mark and study

#10


学习ing