在OSX上以单声道播放声音的最简单方法

4

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

我尝试了几种方法,但很遗憾都没有成功:

  1. NSSound seems to be not supported by Mono yet.

    MonoMac.AppKit.NSSound alarm = new MonoMac.AppKit.NSSound("alarm.wav");
    alarm.Play();
    
  2. Using a SoundPlayer didn't work either:

    System.Media.SoundPlayer player = new System.Media.SoundPlayer("alarm.wav");
    player.PlaySync();
    
  3. I was able to play a sound by opening a System.Diagnostics.Process and then use the OSX command line command afplay. Unfortunately, this command opens in a new terminal window, which is quite annoying in a GUI app.

我意识到 Mono 中有 CoreAudio 绑定。但我还没有找出如何使用它们来播放声音。

从Mono访问通用C库有多容易?使用PortAudio比CoreAudio可能更容易。例如,阻塞的I/O要简单得多。我相信一定有更简单的方法,但如果其他都失败了... - Bjorn Roche
1个回答

2
你使用的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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接