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 的某些部分应该跨平台工作,例如大多数 IWaveProviderISampleProvider 实现。 WaveFileReader 或许应该可以工作,但是由于它使用了mmiostringToFOURCC Windows API 调用而失败了。我将很快删除此依赖项,因为它目前正在阻止 WaveFileReader 在 Windows 应用商店应用程序中使用。

【讨论】:

以上是关于MonoDevelop + NAudio + Ubuntu Linux 告诉我找不到 Winmm.dll?的主要内容,如果未能解决你的问题,请参考以下文章

在Windows上构建MonoDevelop 7.2.x失败

在 C# Monodevelop 中创建 Uri 时出错

使用 monodevelop/mnotouch 构建问题

unity的 monodevelop怎么安装

unity 自带的monodevelop 无法调试

Monodevelop 不会在 Mint 17 中启动