当前位置: 代码网 > it编程>编程语言>C# > C# WPF实现播放音频文件的示例详解

C# WPF实现播放音频文件的示例详解

2024年05月18日 C# 我要评论
c#播放音频文件的方式:播放系统事件声音使用system.media.soundplayer播放wav使用mci command string多媒体设备程序接口播放mp3,wav,avi等使用wind

c#播放音频文件的方式:

播放系统事件声音

使用system.media.soundplayer播放wav

使用mci command string多媒体设备程序接口播放mp3,wav,avi等

使用windowsmediaplayer的com组件来播放(可视化)

使用directx播放音频文件

使用speech播放(朗读器,可朗读文本)

这里讲不需要引用dll就能播放音频的几种方式:

1、播放系统事件声音

system.media.systemsounds.asterisk.play();      //星号
system.media.systemsounds.beep.play();          //提示音
system.media.systemsounds.exclamation.play();   //感叹
system.media.systemsounds.hand.play();          //协助
system.media.systemsounds.question.play();      //问题

2、使用mci command string播放音频文件,可以支持多种格式(mp3,wav,avi),且不需要额外引用dll,可以循环播放音频

    public class audioplayer
    {
        public audioplayer()
        {
        }
        //定义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
            {
                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";
                    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
                {
                }
            }
        }
        //播放
        public void play()
        {
            temstr = "";
            temstr = temstr.padleft(127, convert.tochar(" "));
            apiclass.mcisendstring("play media", temstr, temstr.length, 0);              //单次播放
            //apiclass.mcisendstring("play media repeat", 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
          );
    }

到此这篇关于c# wpf实现播放音频文件的示例详解的文章就介绍到这了,更多相关c# wpf播放音频内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com