带有效果的 Windows 8.1 应用音频(NAudio 或 SharpDX)

Posted

技术标签:

【中文标题】带有效果的 Windows 8.1 应用音频(NAudio 或 SharpDX)【英文标题】:Windows 8.1 App Audio with Effects (NAudio or SharpDX) 【发布时间】:2015-05-01 20:12:46 【问题描述】:

如何使用NAudioSharpDXFileOpenPicker 加载音频文件并添加Audio FX,如镶边、移相器、回声、门、位破碎机。

FileOpenPicker openPicker = new FileOpenPicker();
openPicker.FileTypeFilter.Add(".mp3");
openPicker.FileTypeFilter.Add(".wav");
openPicker.FileTypeFilter.Add(".m4a");
openPicker.FileTypeFilter.Add(".wma");
openPicker.FileTypeFilter.Add(".aac");
StorageFile file = await openPicker.PickSingleFileAsync();

【问题讨论】:

【参考方案1】:

这是我为音频文件添加 FX 音效的解决方案。

播放声音

在我们开始之前,您需要以下包,您可以使用 NuGet-Package 轻松获得:

SharpDX SharpDX.MediaFoundation SharpDX.XAudio2

C#

FileOpenPicker openPicker = new FileOpenPicker();
openPicker.FileTypeFilter.Add(".mp3");
openPicker.FileTypeFilter.Add(".wav");
openPicker.FileTypeFilter.Add(".m4a");
openPicker.FileTypeFilter.Add(".wma");
openPicker.FileTypeFilter.Add(".aac");
StorageFile audioFile = await openPicker.PickSingleFileAsync();

MediaManager.Startup();
XAudio2 xaudio2 = new XAudio2();
xaudio2.StartEngine();
MasteringVoice masteringVoice = new MasteringVoice(xaudio2);
AudioPlayer audioPlayer = new AudioPlayer(xaudio2, await audioFile.OpenReadAsync());

AudioPlayer 类来自 Alexandre Mutel https://github.com/sharpdx/SharpDX-Samples/tree/master/Desktop/XAudio2/AudioPlayerApp . 在 AudioPlayer 类中,您将 Constructor 更改为:

public AudioPlayer(XAudio2 xaudio2, Stream audiostream)

收件人:

public AudioPlayer(XAudio2 xaudio2, IRandomAccessStreamWithContentType audioStream)

现在,您可以使用audioPlayer.Play(); audioPlayer.Stop(); 控制音频文件

添加效果

您可以这样添加效果:

SourceVoice sourceVoice = audioPlayer.SourceVoice;
Reverb reverb = new SharpDX.XAPO.Fx.Reverb();
EffectDescriptor effectDescriptor = new EffectDescriptor(reverb);
sourceVoice.SetEffectChain(effectDescriptor);
sourceVoice.EnableEffect(0);

【讨论】:

您在 Reverb() 构造函数中缺少 xaudio2 引用

以上是关于带有效果的 Windows 8.1 应用音频(NAudio 或 SharpDX)的主要内容,如果未能解决你的问题,请参考以下文章

Windows 8.1 中的系统音频处理对象 (sAPO) 和 Skype

带有 .resx 资源的 Windows Phone 8.1 上的 MissingManifestResourceException

如何使我自己编写的音频播放器可以在后台运行(Windows Phone 8.1- WinRT)?

带有自定义音频会话的 IOS 系统声音

Windows Store的Windows 8.1紧急应用程序是否可行?

带有 AngularJS 的 Windows Phone 8.1 上的 Phonegap 无法从我的 API 中检索 JSONP