我正在尝试编写一个 SAMPLER 程序,其中每个键都有不同的声音(WAV 文件)。
有人可以向我解释或给我一个解释链接,我可以在其中学习如何播放 WAV 文件吗?
如果重要的话,我正在使用 Microsoft Visual C# 并使用 WinForms。
SoundPlayer simpleSound = new SoundPlayer(strAudioFilePath);
simpleSound.Play();
使用 fmod,这简直是全宇宙最好的声音库
幸运的是,它们似乎为您可以尝试想象的最佳音频 API 提供了 C# 包装器,并且您无需更改一行代码即可使您的代码在 playstation 或 xbox 或任何开发人员非常被动的东西上运行(你晚上报告一个错误,上床睡觉,当你醒来时可以使用更正的构建)文档是可读的,可以理解的,并且 SDK 中有大量的示例,这使得提供教程毫无用处,因为文档是非常完美
使用 FMOD 播放 wav 只需 5 行代码,只需多写 4 行代码,您就可以应用效果,同时将播放的平衡和音量链接到 3d 引擎(处理 consc 点和音频源之间的交叉点,4 行……
如果你想(使用 C# 来)做声音,-> FMOD。
SoundPlayer simpleSound = new SoundPlayer(strAudioFilePath);
simpleSound.PlaySync();
因为声音是异步播放的。
这个基于控制台的解决方案使用 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 调用在我的机器上的输出,以防您想知道: