在.NET中播放.WAV文件

时间:2009-08-16 13:43:51

标签: c# .net file wav

我正在尝试编写一个SAMPLER程序,其中每个键都有不同的声音(WAV文件)。

有人可以向我解释或给我一个解释链接,我可以学习如何播放WAV文件吗?

如果重要,我正在使用Microsoft Visual C#并使用WinForms。

4 个答案:

答案 0 :(得分:26)

SoundPlayer simpleSound = new SoundPlayer(strAudioFilePath);
simpleSound.Play();

答案 1 :(得分:5)

使用fmod,这是整个宇宙中最好的声音库

幸运的是,它们似乎为您可以想象的最佳音频API提供了一个C#包装器,并且您不必更改一行代码就可以使您的代码在Playstation或xbox或其他任何地方工作 开发人员几乎都是被动的(你在晚上报告一个错误,上床睡觉,并在你醒来时提供纠正的构建) 文档是可读的,可理解的,并且是巨大的 SDK中有很多例子,因为文档非常完美,所以提供教程是没用的

使用FMOD播放wav只需5行代码,只需4行就可以在将播放的平衡和音量链接到3d引擎时应用效果(处理consc点和音频源之间的交叉点) ,4行......

如果你想(使用C#)做声音, - > FMOD。

答案 2 :(得分:1)

SoundPlayer simpleSound = new SoundPlayer(strAudioFilePath);
simpleSound.PlaySync();

因为声音是异步播放的。

答案 3 :(得分:0)

这个基于控制台的解决方案使用LINQPad(因此.Dump()扩展方法调用)和NAudio(你会注意到我在几个类上使用完整的命名空间只是为了澄清)。要正确设置,您只需从http://share.linqpad.net/d7tli8.linq下载代码段(我在NuGet中添加了NAudio)。

要运行,请在linqpad中打开,将wavFilePath的值设置为本地波形文件路径,然后按F5。 Play是异步的,所以我们会Console.ReadLine等待它完成。

string wavFilePath = @"TODO";
var reader = new NAudio.Wave.AudioFileReader(wavFilePath);
reader.Dump("AudioFileReader");
var sampleProvider = reader.ToSampleProvider().Dump("sample provider");

NAudio.Wave.WaveOut.DeviceCount.Dump("num waveout on comp");
var outputDeviceInfo = WaveOut.GetCapabilities(0).Dump();
var outputter = new WaveOut() {
    DesiredLatency = 5000 //arbitrary but <1k is choppy and >1e5 errors
    , NumberOfBuffers = 1 // 1,2,4 all work...
    , DeviceNumber = 0
}.Dump();
outputter.Init(reader);
outputter.Play(); // async
Console.Read();
outputter.Stop();

这就是所有.Dump调用的输出在我的机器上的样子,以防你想知道:

audiofilereader contents

sampleprovider and waveout info