MonoDevelop + NAudio + Ubuntu Linux 告诉我找不到 Winmm.dll?
Posted
技术标签:
【中文标题】MonoDevelop + NAudio + Ubuntu Linux 告诉我找不到 Winmm.dll?【英文标题】:MonoDevelop + NAudio + Ubuntu Linux tells me Winmm.dll not found? 【发布时间】:2012-11-27 10:15:29 【问题描述】:所以我正在尝试将 MonoDevelop 与 NAudio 和 Ubuntu Linux 一起使用,由于某种原因,它错误地说找不到 winmm.dll,所以我尝试下载它,并且“添加引用”对话框声称它无效.NET 库。这是我的代码....
using System;
using System.IO;
using Gst;
using GLib;
using Gst.BasePlugins;
using NAudio;
using NAudio.Wave;
namespace record_audio_simple_test
class MainClass
//Define class variables
private NAudio.Wave.WaveFileReader waveFile = null;
private NAudio.Wave.DirectSoundOut output = null;
public static void Main (string[] args)
WaveFileReader waveFile = new WaveFileReader("../../convo47.wav");
它说明了这一行的错误 WaveFileReader waveFile = new WaveFileReader("../../convo47.wav");
【问题讨论】:
这意味着 NAudio 不适用于 Mono。 SLaks,你能告诉我你为什么得出结论,或者给我一个你为什么这么认为的理由,或者也许可以用来解释你为什么这么想的过去经历吗? 这听起来像是通过 P/Invoke 使用的 Windows 原生 DLL。除非你能让那个 DLL 在 Wine 上工作,否则你可能不走运。谷歌一下。 ***.com/a/6191434/34397 除非有来自naudio.codeplex.com 的官方声明支持 Mono/Linux,否则您应该默认假设它(以及许多其他 .NET 库)与 Mono/Linux 不兼容。这是您将来应该遵循的经验法则。 【参考方案1】:NAudio 的很大一部分由互操作包装器组成,用于访问 Windows API 调用,例如 waveIn/waveOut、DirectSound、WASAPI、ACM、MediaFoundation 和 DMO。这些都不能在 Linux 上运行,因为这些 API 方法不存在。我想理论上它们可以在 Windows API 仿真层之上工作,但实际上创建一个调用 Linux 声音 API 的IWavePlayer
实现会更好。
NAudio 的某些部分应该跨平台工作,例如大多数 IWaveProvider
和 ISampleProvider
实现。 WaveFileReader
或许应该可以工作,但是由于它使用了mmiostringToFOURCC
Windows API 调用而失败了。我将很快删除此依赖项,因为它目前正在阻止 WaveFileReader
在 Windows 应用商店应用程序中使用。
【讨论】:
以上是关于MonoDevelop + NAudio + Ubuntu Linux 告诉我找不到 Winmm.dll?的主要内容,如果未能解决你的问题,请参考以下文章