您的位置:首页 > 编程语言 > C#

c#播放wav/mp3格式的声音

2013-11-09 21:52 239 查看
第一种方法:

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格式的文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: