10

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

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

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

4

4 回答 4

30
SoundPlayer simpleSound = new SoundPlayer(strAudioFilePath);
simpleSound.Play();
于 2009-08-16T13:45:59.363 回答
5

使用 fmod,这简直是全宇宙最好的声音库

幸运的是,它们似乎为您可以尝试想象的最佳音频 API 提供了 C# 包装器,并且您无需更改一行代码即可使您的代码在 playstation 或 xbox 或任何开发人员非常被动的东西上运行(你晚上报告一个错误,上床睡觉,当你醒来时可以使用更正的构建)文档是可读的,可以理解的,并且 SDK 中有大量的示例,这使得提供教程毫无用处,因为文档是非常完美

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

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

于 2010-03-19T01:36:18.857 回答
4
SoundPlayer simpleSound = new SoundPlayer(strAudioFilePath);
simpleSound.PlaySync();

因为声音是异步播放的。

于 2013-10-24T11:03:43.110 回答
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 调用在我的机器上的输出,以防您想知道:

音频文件阅读器内容

sampleprovider 和 waveout 信息

于 2013-11-15T21:04:56.140 回答