c# - 在 OSX 上使用 MONO 播放声音的最简单方法

标签 c# macos audio mono

我正在使用 Mono 为 OSX10.6 编写一个简单的计时器应用程序。如何播放闹钟声音(可能是 wav/mp3 文件或其他文件)?

我尝试了几种方法,不幸的是没有一个有效:

  1. NSSound Mono 似乎还不支持。

    MonoMac.AppKit.NSSound alarm = new MonoMac.AppKit.NSSound("alarm.wav");
    alarm.Play();
    
  2. 使用 SoundPlayer 也不起作用:

    System.Media.SoundPlayer player = new System.Media.SoundPlayer("alarm.wav");
    player.PlaySync();
    
  3. 我可以通过打开 System.Diagnostics.Process 来播放声音,然后使用 OSX 命令行命令 afplay。不幸的是,此命令会在一个新的终端窗口中打开,这在 GUI 应用程序中非常烦人。

我意识到 Mono 中有 CoreAudio 绑定(bind)。但是我还没有弄清楚如何使用它们来播放声音。

最佳答案

你使用了错误的 NSSound 构造函数。

new MonoMac.AppKit.NSSound("alarm.wav")需要一个 NSData(从 string 隐式转换),你想使用 new NSSound(string, bool) .可能想为第二个参数传递 false

我拼凑了一个快速测试项目(基于默认的 MonoMac 项目)来确认它是否有效:

public override void FinishedLaunching (NSObject notification)
{
  mainWindowController = new MainWindowController ();
  mainWindowController.Window.MakeKeyAndOrderFront (this);

  // Only lines added
  var sound = new NSSound("/Users/kevinmontrose/Desktop/bear_growl_y.wav", byRef: false);

  sound.Play();
}

关于c# - 在 OSX 上使用 MONO 播放声音的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11593794/

相关文章:

css - 在 HTML5 中预加载音频需要时间

audio - FFMPEG amix 过滤器导致主音频流被切断

c# - Aspx.net 和 C# masterpage.cs 错误

c# - 日本字符显示?符号

macos - 在 .app 运行时触发脚本(AppleScript 或 JXA)?

java - 如何使用 Java 在 PC 扬声器上发出噪音

c# - BehaviorSubject<T> 作为支持字段?

c# - DateTime空值

c - 无法在 macOS 中链接动态库

php - 虚拟主机显示目录结构