博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NET3.0+中使软件发出声音[整理篇]<转>
阅读量:6153 次
发布时间:2019-06-21

本文共 6228 字,大约阅读时间需要 20 分钟。

2009-08-10 13:14 by kkun, 13 visits, ,

第一种方法:Speech

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

官方连接:

分三步,第一步添加引用(.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

官网连接:
 
这里有一个他人封装好的类,见注释
using System;   using System.Runtime.InteropServices;    using System.Text;    using System.IO ;namespace Tstring.Util{    #region    ///        /// clsMci 的摘要说明。       ///        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 );        }

 

参考资料及常见问题

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

记录学习中的点点滴滴,记录这一路走来的风景
原文地址:
 
 
本文转自温景良(Jason)博客园博客,原文链接:,如需转载请自行联系原作者
你可能感兴趣的文章
类中如何对list泛型做访问器??
查看>>
C++解析XML--使用CMarkup类解析XML
查看>>
P2P应用层组播
查看>>
Sharepoint学习笔记—修改SharePoint的Timeouts (Execution Timeout)
查看>>
CSS引入的方式有哪些? link和@import的区别?
查看>>
Redis 介绍2——常见基本类型
查看>>
asp.net开发mysql注意事项
查看>>
(转)Cortex-M3 (NXP LPC1788)之EEPROM存储器
查看>>
ubuntu set defult jdk
查看>>
[译]ECMAScript.next:TC39 2012年9月会议总结
查看>>
【Xcode】编辑与调试
查看>>
用tar和split将文件分包压缩
查看>>
[BTS] Could not find stored procedure 'mp_sap_check_tid'
查看>>
PLSQL DBMS_DDL.ALTER_COMPILE
查看>>
Activity生命周期
查看>>
高仿UC浏览器弹出菜单效果
查看>>
Ubuntu忘记密码,进不了系统的解决方法
查看>>
[原创]白盒测试技术思维导图
查看>>
<<Information Store and Management>> 读书笔记 之八
查看>>
Windows 8 开发之设置合约
查看>>