NET3.0+中使软件发出声音[整理篇]<转>

简介:

.NET3.0+中使软件发出声音[整理篇]

2009-08-10 13:14 by kkun, 13 visits, 网摘, 编辑

第一种方法:Speech

Speech控件在.NET中使用非常简单了,都被封装好了

官方连接:system.speech.synthesis.speechsynthesizer.pause.aspx

分三步,第一步添加引用(.NET3.0+ SDK中自带)

using System.Speech.Synthesis

第二步,初始化设置

Talker.Rate = -2;
Talker.Volume = 100;
Talker.SelectVoiceByHints( VoiceGender.Male, VoiceAge.Child, 2, System.Globalization.CultureInfo.CurrentCulture );

第三步,直接朗读文本

Talker.SpeakAsync( "Hello world!" );
 

第二种方法:System.Media.SoundPlayer

这个更简单,一步即可
        private void playSound(string path)
        {
            System.Media.SoundPlayer player =
                new System.Media.SoundPlayer();
            player.SoundLocation = path;
            player.Load();
            player.Play();
        }
这个简单是简单了些,功能也简单了,仅支持标准的wav格式
 

第三种方法:调用平台DLL,winmm.dll

官网连接:http://msdn.microsoft.com/zh-cn/library/ms229685(VS.80).aspx
如何查看系统DLL的方法及如何在C#调用它们点我
这里有一个他人封装好的类,见注释
using System;   
using System.Runtime.InteropServices;    
using System.Text;    
using System.IO ;
namespace Tstring.Util
{

    #region
    /// <SUMMARY>   
    /// clsMci 的摘要说明。   
    /// </SUMMARY>   
    public class Mp3Player
    {
        //http://msdn.microsoft.com/zh-cn/library/ms229685(VS.80).aspx
        public Mp3Player()
        {
            //   
            // TODO: 在此处添加构造函数逻辑   
            //   
        }

        //定义API函数使用的字符串变量    
        [MarshalAs( UnmanagedType.ByValTStr, SizeConst = 260 )]
        private string Name = "";
        [MarshalAs( UnmanagedType.ByValTStr, SizeConst = 128 )]
        private string durLength = "";
        [MarshalAs( UnmanagedType.LPTStr, SizeConst = 128 )]
        private string TemStr = "";
        int ilong;
        //定义播放状态枚举变量   
        public enum State
        {
            mPlaying = 1,
            mPuase = 2,
            mStop = 3
        };
        //结构变量   
        public struct structMCI
        {
            public bool bMut;
            public int iDur;
            public int iPos;
            public int iVol;
            public int iBal;
            public string iName;
            public State state;
        };

        public structMCI mc = new structMCI();

        //取得播放文件属性   
        public string FileName
        {
            get
            {
                return mc.iName;
            }
            set
            {
                //ASCIIEncoding asc = new ASCIIEncoding();    
                try
                {
                    TemStr = "";
                    TemStr = TemStr.PadLeft( 127, Convert.ToChar( " " ) );
                    Name = Name.PadLeft( 260, Convert.ToChar( " " ) );
                    mc.iName = value;
                    ilong = APIClass.GetShortPathName( mc.iName, Name, Name.Length );
                    Name = GetCurrPath( Name );
                    //Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media";   
                    Name = "open " + Convert.ToChar( 34 ) + Name + Convert.ToChar( 34 ) + " alias media";
                    ilong = APIClass.mciSendString( "close all", TemStr, TemStr.Length, 0 );
                    ilong = APIClass.mciSendString( Name, TemStr, TemStr.Length, 0 );
                    ilong = APIClass.mciSendString( "set media time format milliseconds", TemStr, TemStr.Length, 0 );
                    mc.state = State.mStop;
                }
                catch( Exception exp )
                {
                    Log.Error( exp );
                    //MessageBox.Show("出错错误!");
                }
            }
        }
        //播放   
        public void play()
        {
            TemStr = "";
            TemStr = TemStr.PadLeft( 127, Convert.ToChar( " " ) );
            APIClass.mciSendString( "play media", TemStr, TemStr.Length, 0 );
            mc.state = State.mPlaying;
        }
        //停止   
        public void StopT()
        {
            TemStr = "";
            TemStr = TemStr.PadLeft( 128, Convert.ToChar( " " ) );
            ilong = APIClass.mciSendString( "close media", TemStr, 128, 0 );
            ilong = APIClass.mciSendString( "close all", TemStr, 128, 0 );
            mc.state = State.mStop;
        }

        public void Puase()
        {
            TemStr = "";
            TemStr = TemStr.PadLeft( 128, Convert.ToChar( " " ) );
            ilong = APIClass.mciSendString( "pause media", TemStr, TemStr.Length, 0 );
            mc.state = State.mPuase;
        }
        private string GetCurrPath( string name )
        {
            if( name.Length < 1 )
                return "";
            name = name.Trim();
            name = name.Substring( 0, name.Length - 1 );
            return name;
        }
        //总时间   
        public int Duration
        {
            get
            {
                durLength = "";
                durLength = durLength.PadLeft( 128, Convert.ToChar( " " ) );
                APIClass.mciSendString( "status media length", durLength, durLength.Length, 0 );
                durLength = durLength.Trim();
                if( durLength == "" )
                    return 0;
                return (int)( Convert.ToDouble( durLength ) / 1000f );
            }
        }

        //当前时间   
        public int CurrentPosition
        {
            get
            {
                durLength = "";
                durLength = durLength.PadLeft( 128, Convert.ToChar( " " ) );
                APIClass.mciSendString( "status media position", durLength, durLength.Length, 0 );
                mc.iPos = (int)( Convert.ToDouble( durLength ) / 1000f );
                return mc.iPos;
            }
        }
    }

    public class APIClass
    {
        [DllImport( "kernel32.dll", CharSet = CharSet.Auto )]
        public static extern int GetShortPathName(
         string lpszLongPath,
         string shortFile,
         int cchBuffer
        );

        [DllImport( "winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto )]
        public static extern int mciSendString(
         string lpstrCommand,
         string lpstrReturnString,
         int uReturnLength,
         int hwndCallback
        );
    }
    #endregion
}
 

第四种:由第三种引申,使主板发出声音

        [DllImport( "kernel32.dll" )]
        private static extern int Beep( int dwFreq, int dwDuration );
        void _Beep() {
            System.Random r = new Random();
            for( int i = 0 ; i < 100 ; i++ ) {
                int c = r.Next( 10000 );
                Beep( c, 100 );
            }

            Beep( 2047, 200 );
        }

 

参考资料及常见问题

System.Speech.Synthesis Namespace

语音合成(使用.net3.0中的System.Speech.Synthesis心得)

Speech SDK 5.1 语言包下载- 华军软件园- 系统程序- 系统辅助
Microsoft Speech: Home Page

C#中如何使用Speech发音 高手进

C#如何让软件发声

求一能播放mp3,wav,wma,mid文件的组件

微软Speech SDK开发资料

------------------------------------

记录学习中的点点滴滴,记录这一路走来的风景
原文地址:http://www.cnblogs.com/kkun/archive/2009/08/10/1542797.html
 
 
本文转自温景良(Jason)博客园博客,原文链接:http://www.cnblogs.com/wenjl520/archive/2009/08/10/1543213.html,如需转载请自行联系原作者
相关文章
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
38 0
|
30天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
28 0
|
30天前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
95 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
123 0
|
8月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
114 0
|
9月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
113 0
|
9月前
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
144 0
|
9月前
|
开发框架 缓存 JSON
ASP.NET Core MVC 从入门到精通之Filter
ASP.NET Core MVC 从入门到精通之Filter
120 0