zoukankan      html  css  js  c++  java
  • c#播放wav/mp3格式的声音。

    第一种方法:

    using System.Runtime.InteropServices;

    namespace 使用API播放音乐
    {
    public class MP3Player
    {
    /// <summary>
    /// 文件地址
    /// </summary>
    public string FilePath;

    /// <summary>
    /// 播放
    /// </summary>
    public void Play()
    {
    mciSendString("close all", "", 0, 0);
    mciSendString("open " + FilePath + " alias media", "",0, 0);
    mciSendString("play media", "", 0, 0);
    }

    /// <summary>
    /// 暂停
    /// </summary>
    public void Pause()
    {
    mciSendString("pause media", "", 0, 0);
    }

    /// <summary>
    /// 停止
    /// </summary>
    public void Stop()
    {
    mciSendString("close media", "", 0, 0);
    }

    /// <summary>
    /// API函数
    /// </summary>
    [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
    private static extern int mciSendString(
    string lpstrCommand,
    string lpstrReturnString,
    int uReturnLength,
    int hwndCallback
    );
    }
    }

    调用代码:

    MP3Player mp3 = new MP3Player();
    //设置要播放的文件
    mp3.FilePath = "声音.mp3";
    //播放
    mp3.Play();
    //暂停
    mp3.Pause();
    //停止
    mp3.Stop();

    第二种方法用directx

    DirectSound不能建立设备播放非wav格式的文件,mp3格式的文件可以用Microsoft.DirectX.AudioVideoPlayback;命名空间下的Audio来播放。

    初始化的时候,只需给定文件名和是否自动播放就可以了。

    Audio audio = new Audio(stringFileName, false);

    对于播放或者停止,可以调用audio.Play()和audio.Stop()方法。

    察看是否在播放中,可以用audio.Playing属性察看。

    以上加载在vs2010调试中出现的问题:

    正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起

    查了网上的解决方法:这个问题只需要把vs2005菜单的 调试->异常->Managed Debuggin Assistants->LoaderLock 的选中状态去掉即可!如果异常(exception)这一项没有的话,在工具---自定义---命令选项卡---左边选择调试--右边把异常托到菜单里就可以了~

    异常也有个快捷键Ctrl+Alt+E,修改Managed Debuggin Assistants->LoaderLock 的选中状态去掉即可

     第三种非常简单的随意的

    using System.Media;


    SoundPlayer sound = new SoundPlayer("声音.wav");
    sound.Play();

    这种方式只能播放一个文件。

    第四种

    下载Microsoft.DirectX.DLL和MicroSoft.DirectX.DirectSound.DLL两个文件,

    并在项目上添加这两个DLL引用.

    using Microsoft.DirectX;
    using Microsoft.DirectX.DirectSound;

    //创建设备
    Device dv = new Device();
    //设置优先级别
    dv.SetCooperativeLevel(this, CooperativeLevel.Priority);
    //开辟二级缓冲区
    SecondaryBuffer buf = new SecondaryBuffer("声音.wav", dv);
    //开始播放
    buf.Play(0, BufferPlayFlags.Default);

    这种方式只支持WAV格式的音频,不过可以同时播放多个文件

    注:第一种方法未试用过。第二种方法完全可以播放wav文件和mp3格式的文件。

  • 相关阅读:
    vue与后台交互之post用法
    django框架两个使用模板实例
    917,仅仅反转字母(简单)
    836,矩形重叠 (简单)
    860,柠檬水找零(简单)
    使用类创建对象后找不到的问题
    8_19 数据库
    8_16 MySQL数据库一
    Mysql的安装与配置
    文件操作中,使用递归退出不了。
  • 原文地址:https://www.cnblogs.com/jzzgci/p/3264206.html
Copyright © 2011-2022 走看看