zoukankan      html  css  js  c++  java
  • 声音播放解决方案(C#)

    1、 问题提出

    某系统的客户要求添加个新功能:在开场结束时间快到的时候加上声音提示。

    2、 寻找解决方案过程

    刚接到要求时,心有点没底,因为完全没头绪!发呆了一阵子之后,开始动用网络资源,百度一搜:“.NET 播放声音”,不少相关资料,之后找到了Beep这个方法,百度上说的含糊,不清晰,只好利用VS里面的帮助,找出相关用法。它基于Microsoft.VisualBasic命名空间下的一个方法,但这个方法只能调用系统声音,就发出dong dong的声音!很鬼单调,像是系统出错弹出的警告窗口的声音!继续看看有没有其他更好的方法,在VS里,与声音播放相关的文章还有挺多的,找了个循环播放声音的文章,找到个比较理想的方法,利用My.Computer.Audio.Play(strFileName, AudioPlayMode.BackgroundLoop)实现声音播放功能!心里总算踏实了!糟糕,我用的语言的c#,而这些都是VB下的方法!在C#里是没有这些方法的!郁闷,忙了半天那不是枉了!?再找,被我找到一个家伙Blog里的另一种在C#里实现声音播放的方法:利用DllImport调用外部DLL,扩张对应的入口点!(想理解的请看其博客:http://holym.cnblogs.com/articles/360626.html

    [DllImport("winmm")]

    public static extern bool PlaySound(string szSound, IntPtr hMod, PlaySoundFlags flags);

    但这个家伙写出了播放的入口点,又没提供Stop的入口点,上网有找不到winmm还有那些入口点!所以这个方法又放弃了!

    后来静下来一想,wa kao.net不是自称无语言障碍的吗?!把VB下实现的声音播放等功能打包成一个DLL文件,在C#里调用不就行了吗!?总算松口气了!

    3、 最终解决方案

    1)建立一个基于VB语言的类库,里面利用My.Computer.Audio.Play(strFileName, AudioPlayMode.BackgroundLoop)My.Computer.Audio.Stop()分别实现声音播放和停止功能!

    2)在项目了添加引用该类库生成的DLL,即可调用这两个方法了!

    4、 应用测试

    完整的代码:

    1) WinmmVB.vb

    Public Class WinmmVB

        
    Public Sub PlayLoopingBackgroundSoundFile(strFileName as String)

            My.Computer.Audio.Play(strFileName, AudioPlayMode.BackgroundLoop)

        
    End Sub


        
    Public Sub StopBackgroundSound()

            My.Computer.Audio.Stop()

        
    End Sub


    End Class


    2) PlaySoundCS.cs

    using System;

    using System.Runtime.InteropServices;

     

    namespace Sound

    {

        
    public class PlaySoundCS

        
    {

            
    public static void Play(string strFileName)

            
    {

                WinmmVB.WinmmVB obj 
    = new WinmmVB.WinmmVB();

                obj.PlayLoopingBackgroundSoundFile(strFileName);

            }


     

            
    public static void Stop()

            
    {

                WinmmVB.WinmmVB obj 
    = new WinmmVB.WinmmVB();

                obj.StopBackgroundSound();

            }


        }


    }


    3) 调用

    Sound.PlaySoundCS.Play("23.wav");//23.wav文件与生成文件在同意目录下
  • 相关阅读:
    Centos 7 zabbix 实战应用
    Centos7 Zabbix添加主机、图形、触发器
    Centos7 Zabbix监控部署
    Centos7 Ntp 时间服务器
    Linux 150命令之查看文件及内容处理命令 cat tac less head tail cut
    Kickstart 安装centos7
    Centos7与Centos6的区别
    Linux 150命令之 文件和目录操作命令 chattr lsattr find
    Linux 发展史与vm安装linux centos 6.9
    Linux介绍
  • 原文地址:https://www.cnblogs.com/yamagl/p/624277.html
Copyright © 2011-2022 走看看