【问题标题】:Swift NSSound plays silently?Swift NSSound 无声播放?
【发布时间】:2016-01-22 02:35:58
【问题描述】:

我在 iOS 上做了一些 Swift 和相当多的 Objective-C,但基本上没有真正的 OS X 编程,所以我没有使用NSSound。我试图在 Swift 论坛上帮助某人,但......它不起作用。我不知道为什么。

在游乐场、Swift REPL 甚至脚本 (#!/usr/bin/env swift) 中,我可以成功实例化 NSSound:

NSSound(named:"Hero")

在 REPL / Playground 或从脚本打印中,我可以看到可选的内部有一个 NSSound。但是当我拨打play() 时,我什么也没听到:

NSSound(named:"Hero")!.play()

为什么?

这是一小段代码,看起来很简单,但显然我遗漏了一些东西。这没什么大不了的,因为它不是我需要的代码,但它让我很烦恼,因为它看起来很简单,但它却不起作用。

【问题讨论】:

  • 为什么不在实际项目中测试您的声音? Playground 并不是为了测试 UI。您的代码应该可以工作,但您应该更喜欢像 NSSound(named:"Hero")?.play() 这样使用它,这样您就不会强行打开声音
  • 是的,我想过——这也是我尝试 REPL 和脚本的原因。 NSSound 不是真正的 UI,但也许它在这些环境中都不起作用?

标签: swift cocoa nssound


【解决方案1】:

NSSound 异步播放它的声音。默认情况下,playground 在执行完代码后立即退出,因此该进程在声音有机会播放之前终止。

这是一种快速而肮脏的方法,可以让操场无限期地保持活力,这样您就可以听到播放的声音。

import Cocoa
import XCPlayground

if let sound = NSSound(named:"Hero") {
    XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
    sound.play()
}

【讨论】:

  • 啊,太好了——这个解释似乎比“不起作用也没有抱怨”更合理,果然,如果我这样做,我可以听到 NSSound。
【解决方案2】:

似乎 NSSound 作为一个可可类,在我测试过的任何环境中都无法正常工作:

  • 游乐场
  • Swift 脚本
  • Swift REPL

如果我将相同的一小段代码放入骨架 OS X 应用程序中,效果很好。

感谢@Leo 推动我实际尝试。我考虑过这种可能性,但直到他提出建议才尝试过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    相关资源
    最近更新 更多