胖在一方

出得厅堂入得厨房的胖子

导航

声音&MS Speech

Posted on 2006-11-21 13:53  胖在一方  阅读(1008)  评论(1)    收藏  举报

一、利用api播放声音文件
vb.net版本

<DllImport("winmm.dll", EntryPoint:="PlaySound")> _
   
Public Shared Function PlaySound(ByVal pszSound As StringByVal hmod As IntPtr, ByVal fdwSound As IntegerAs Boolean


    
End Function

    
Enum PlayingFlags
        SND_SYNC 
= &
H0
        SND_ASYNC 
= &
H1
        SND_NODEFAULT 
= &
H2
        SND_MEMORY 
= &
H4
        SND_LOOP 
= &
H8
        SND_NOSTOP 
= &
H10
        SND_NOWAIT 
= &
H2000
        SND_ALIAS 
= &
H10000
        SND_ALIAS_ID 
= &
H110000
        SND_FILENAME 
= &
H20000
        SND_RESOURCE 
= &
H40004
    
End Enum

  
Protected Sub PlayWAV()
        PlaySound(
"c:\自助选号1.wav"
, IntPtr.Zero, PlayingFlags.SND_NOWAIT)
End Sub

 C#版本

 public enum PlaySoundFlags : int 
        {
            SND_SYNC 
= 0x0,     // play synchronously (default)

            SND_ASYNC = 0x1,    // play asynchronously
            SND_NODEFAULT = 0x2,    // silence (!default) if sound not found
            SND_MEMORY = 0x4,       // pszSound points to a memory file
            SND_LOOP = 0x8,     // loop the sound until next sndPlaySound
            SND_NOSTOP = 0x10,      // don't stop any currently playing sound
            SND_NOWAIT = 0x2000,    // don't wait if the driver is busy
            SND_ALIAS = 0x10000,    // name is a registry alias
            SND_ALIAS_ID = 0x110000,// alias is a predefined ID
            SND_FILENAME = 0x20000// name is file name
            SND_RESOURCE = 0x40004// name is resource name or atom
        };

        [DllImport(
"winmm.dll", SetLastError=true
)]
        
public static extern bool PlaySound(string
 pszSound,System.IntPtr hmod,PlaySoundFlags flags);


        PlaySound(
@"C:\1.wav"
,IntPtr.Zero ,PlaySoundFlags.SND_ASYNC );
    

 

 二、利用Media Player 播放
添加com组件 c:\windows\system32\wmp.dll
系统会在bin文件夹自动生成一个Interop.WMPLib.dll文件,在.net中添加这个dll的引用。
ms有sdk 地址是
http://download.microsoft.com/download/a/8/f/a8f5f4f4-397d-4a26-8abb-2d190998c029/WMPlayerSDK.exe

一开始是要下个什么验证码程序 (http://download.microsoft.com/download/8/3/d/83d1fe15-fe0f-4bdf-b09c-4e3c49808ec7/GenuineCheck.exe
然后才出来这个这个sdk的地址

 If Not mp Is Nothing Then
            mp 
= New WindowsMediaPlayer
            mp.controls.stop()
 
End If

 mp.controls.stop()
 mp.URL 
= wavPath
 mp.controls.play() 
'开始播放语音提示

 

三、利用MS的Speech SDK 5.1
进行TTS
SDK 5.1地址
http://download.microsoft.com/download/speechSDK/SDK/5.1/WXP/EN-US/SpeechSDK51.exe
中文和日文语音包
http://download.microsoft.com/download/speechSDK/SDK/5.1/WXP/EN-US/SpeechSDK51LangPack.exe

添加com引用 C:\Program Files\Common Files\Microsoft Shared\Speech\sapi.dll
.Net会自动在bin文件夹下生成一个 Interop.SpeechLib.dll

部分代码:

Imports SpeechLib

Dim sp As New
 SpeechLib.SpVoice
        
If Me.CheckBox1.Checked Then

            sp.Voice 
= sp.GetVoices("language=409"String.Empty).Item(0'英语
        Else
            sp.Voice 
= sp.GetVoices("language=804"String.Empty).Item(0'中文
        End If
        sp.Speak(
Me.TextBox1.Text, SpeechVoiceSpeakFlags.SVSFDefault)