【问题标题】:MonoDevelop + NAudio + Ubuntu Linux tells me Winmm.dll not found?MonoDevelop + NAudio + Ubuntu Linux 告诉我找不到 Winmm.dll?
【发布时间】: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 上工作,否则你可能不走运。谷歌一下。
  • 除非有来自naudio.codeplex.com 的官方声明支持 Mono/Linux,否则您应该默认假设它(以及许多其他 .NET 库)与 Mono/Linux 不兼容。这是您将来应该遵循的经验法则。

标签: c# linux ubuntu monodevelop naudio


【解决方案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 应用商店应用程序中使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    相关资源
    最近更新 更多